Repository: litedb-org/LiteDB Branch: master Commit: c9d78eb90085 Files: 418 Total size: 4.8 MB Directory structure: gitextract_mf5hhct9/ ├── .github/ │ └── ISSUE_TEMPLATE/ │ ├── bug_report.md │ ├── feature_request.md │ └── question.md ├── .gitignore ├── CODE_OF_CONDUCT.md ├── ConsoleApp1/ │ ├── ConsoleApp1.csproj │ ├── Program.cs │ └── Tools/ │ ├── Faker.Names.cs │ └── Faker.cs ├── LICENSE ├── LiteDB/ │ ├── Client/ │ │ ├── Database/ │ │ │ ├── Collections/ │ │ │ │ ├── Aggregate.cs │ │ │ │ ├── Delete.cs │ │ │ │ ├── Find.cs │ │ │ │ ├── Include.cs │ │ │ │ ├── Index.cs │ │ │ │ ├── Insert.cs │ │ │ │ ├── Update.cs │ │ │ │ └── Upsert.cs │ │ │ ├── ILiteCollection.cs │ │ │ ├── ILiteDatabase.cs │ │ │ ├── ILiteQueryable.cs │ │ │ ├── ILiteRepository.cs │ │ │ ├── LiteCollection.cs │ │ │ ├── LiteDatabase.cs │ │ │ ├── LiteQueryable.cs │ │ │ └── LiteRepository.cs │ │ ├── Mapper/ │ │ │ ├── Attributes/ │ │ │ │ ├── BsonCtorAttribute.cs │ │ │ │ ├── BsonFieldAttribute.cs │ │ │ │ ├── BsonIdAttribute.cs │ │ │ │ ├── BsonIgnoreAttribute.cs │ │ │ │ └── BsonRefAttribute.cs │ │ │ ├── BsonMapper.Deserialize.cs │ │ │ ├── BsonMapper.GetEntityMapper.cs │ │ │ ├── BsonMapper.Serialize.cs │ │ │ ├── BsonMapper.cs │ │ │ ├── EntityBuilder.cs │ │ │ ├── EntityMapper.cs │ │ │ ├── Linq/ │ │ │ │ ├── LinqExpressionVisitor.cs │ │ │ │ ├── ParameterExpressionVisitor.cs │ │ │ │ └── TypeResolver/ │ │ │ │ ├── BsonValueResolver.cs │ │ │ │ ├── ConvertResolver.cs │ │ │ │ ├── DateTimeResolver.cs │ │ │ │ ├── EnumerableResolver.cs │ │ │ │ ├── GuidResolver.cs │ │ │ │ ├── ICollectionResolver.cs │ │ │ │ ├── ITypeResolver.cs │ │ │ │ ├── MathResolver.cs │ │ │ │ ├── NullableResolver.cs │ │ │ │ ├── NumberResolver.cs │ │ │ │ ├── ObjectIdResolver.cs │ │ │ │ ├── RegexResolver.cs │ │ │ │ └── StringResolver.cs │ │ │ ├── MemberMapper.cs │ │ │ ├── Reflection/ │ │ │ │ ├── Reflection.Expression.cs │ │ │ │ └── Reflection.cs │ │ │ └── TypeNameBinder/ │ │ │ ├── DefaultTypeNameBinder.cs │ │ │ └── ITypeNameBinder.cs │ │ ├── Shared/ │ │ │ ├── SharedDataReader.cs │ │ │ └── SharedEngine.cs │ │ ├── SqlParser/ │ │ │ ├── Commands/ │ │ │ │ ├── Begin.cs │ │ │ │ ├── Checkpoint.cs │ │ │ │ ├── Commit.cs │ │ │ │ ├── Create.cs │ │ │ │ ├── Delete.cs │ │ │ │ ├── Drop.cs │ │ │ │ ├── Insert.cs │ │ │ │ ├── ParseLists.cs │ │ │ │ ├── Pragma.cs │ │ │ │ ├── Rebuild.cs │ │ │ │ ├── Rename.cs │ │ │ │ ├── Rollback.cs │ │ │ │ ├── Select.cs │ │ │ │ └── Update.cs │ │ │ └── SqlParser.cs │ │ ├── Storage/ │ │ │ ├── ILiteStorage.cs │ │ │ ├── LiteFileInfo.cs │ │ │ ├── LiteFileStream.Read.cs │ │ │ ├── LiteFileStream.Write.cs │ │ │ ├── LiteFileStream.cs │ │ │ └── LiteStorage.cs │ │ └── Structures/ │ │ ├── ConnectionString.cs │ │ ├── ConnectionType.cs │ │ ├── Query.cs │ │ └── QueryAny.cs │ ├── Document/ │ │ ├── Bson/ │ │ │ └── BsonSerializer.cs │ │ ├── BsonArray.cs │ │ ├── BsonAutoId.cs │ │ ├── BsonDocument.cs │ │ ├── BsonType.cs │ │ ├── BsonValue.cs │ │ ├── DataReader/ │ │ │ ├── BsonDataReader.cs │ │ │ ├── BsonDataReaderExtensions.cs │ │ │ └── IBsonDataReader.cs │ │ ├── Expression/ │ │ │ ├── BsonExpression.cs │ │ │ ├── Methods/ │ │ │ │ ├── Aggregate.cs │ │ │ │ ├── DataTypes.cs │ │ │ │ ├── Date.cs │ │ │ │ ├── Math.cs │ │ │ │ ├── Misc.cs │ │ │ │ └── String.cs │ │ │ └── Parser/ │ │ │ ├── BsonExpressionAttributes.cs │ │ │ ├── BsonExpressionFunctions.cs │ │ │ ├── BsonExpressionOperators.cs │ │ │ ├── BsonExpressionParser.cs │ │ │ ├── BsonExpressionType.cs │ │ │ ├── DocumentScope.cs │ │ │ └── ExpressionContext.cs │ │ ├── Json/ │ │ │ ├── JsonReader.cs │ │ │ ├── JsonSerializer.cs │ │ │ └── JsonWriter.cs │ │ └── ObjectId.cs │ ├── Engine/ │ │ ├── Disk/ │ │ │ ├── DiskReader.cs │ │ │ ├── DiskService.cs │ │ │ ├── MemoryCache.cs │ │ │ ├── Serializer/ │ │ │ │ ├── BufferReader.cs │ │ │ │ └── BufferWriter.cs │ │ │ ├── StreamFactory/ │ │ │ │ ├── FileStreamFactory.cs │ │ │ │ ├── IStreamFactory.cs │ │ │ │ ├── StreamFactory.cs │ │ │ │ └── StreamPool.cs │ │ │ └── Streams/ │ │ │ ├── AesStream.cs │ │ │ ├── ConcurrentStream.cs │ │ │ └── TempStream.cs │ │ ├── Engine/ │ │ │ ├── Collection.cs │ │ │ ├── Delete.cs │ │ │ ├── Index.cs │ │ │ ├── Insert.cs │ │ │ ├── Pragma.cs │ │ │ ├── Query.cs │ │ │ ├── Rebuild.cs │ │ │ ├── Recovery.cs │ │ │ ├── Sequence.cs │ │ │ ├── SystemCollections.cs │ │ │ ├── Transaction.cs │ │ │ ├── Update.cs │ │ │ ├── Upgrade.cs │ │ │ └── Upsert.cs │ │ ├── EnginePragmas.cs │ │ ├── EngineSettings.cs │ │ ├── EngineState.cs │ │ ├── FileReader/ │ │ │ ├── FileReaderError.cs │ │ │ ├── FileReaderV7.cs │ │ │ ├── FileReaderV8.cs │ │ │ ├── IFileReader.cs │ │ │ ├── IndexInfo.cs │ │ │ └── Legacy/ │ │ │ ├── AesEncryption.cs │ │ │ ├── BsonReader.cs │ │ │ └── ByteReader.cs │ │ ├── ILiteEngine.cs │ │ ├── LiteEngine.cs │ │ ├── Pages/ │ │ │ ├── BasePage.cs │ │ │ ├── CollectionPage.cs │ │ │ ├── DataPage.cs │ │ │ ├── HeaderPage.cs │ │ │ └── IndexPage.cs │ │ ├── Pragmas.cs │ │ ├── Query/ │ │ │ ├── IndexQuery/ │ │ │ │ ├── Index.cs │ │ │ │ ├── IndexAll.cs │ │ │ │ ├── IndexEquals.cs │ │ │ │ ├── IndexIn.cs │ │ │ │ ├── IndexLike.cs │ │ │ │ ├── IndexRange.cs │ │ │ │ ├── IndexScan.cs │ │ │ │ └── IndexVirtual.cs │ │ │ ├── Lookup/ │ │ │ │ ├── DatafileLookup.cs │ │ │ │ ├── IDocumentLookup.cs │ │ │ │ └── IndexKeyLoader.cs │ │ │ ├── Pipeline/ │ │ │ │ ├── BasePipe.cs │ │ │ │ ├── DocumentCacheEnumerable.cs │ │ │ │ ├── GroupByPipe.cs │ │ │ │ └── QueryPipe.cs │ │ │ ├── Query.cs │ │ │ ├── QueryExecutor.cs │ │ │ ├── QueryOptimization.cs │ │ │ └── Structures/ │ │ │ ├── GroupBy.cs │ │ │ ├── IndexCost.cs │ │ │ ├── OrderBy.cs │ │ │ ├── QueryPlan.cs │ │ │ └── Select.cs │ │ ├── Services/ │ │ │ ├── CollectionService.cs │ │ │ ├── DataService.cs │ │ │ ├── IndexService.cs │ │ │ ├── LockService.cs │ │ │ ├── RebuildService.cs │ │ │ ├── SnapShot.cs │ │ │ ├── TransactionMonitor.cs │ │ │ ├── TransactionService.cs │ │ │ └── WalIndexService.cs │ │ ├── Sort/ │ │ │ ├── SortContainer.cs │ │ │ ├── SortDisk.cs │ │ │ └── SortService.cs │ │ ├── Structures/ │ │ │ ├── CollectionIndex.cs │ │ │ ├── CursorInfo.cs │ │ │ ├── DataBlock.cs │ │ │ ├── Done.cs │ │ │ ├── FileOrigin.cs │ │ │ ├── IndexNode.cs │ │ │ ├── LockMode.cs │ │ │ ├── PageAddress.cs │ │ │ ├── PageBuffer.cs │ │ │ ├── PagePosition.cs │ │ │ ├── Pragma.cs │ │ │ ├── RebuildOptions.cs │ │ │ ├── TransactionPages.cs │ │ │ └── TransactionState.cs │ │ └── SystemCollections/ │ │ ├── Register.cs │ │ ├── SysCols.cs │ │ ├── SysDatabase.cs │ │ ├── SysDump.cs │ │ ├── SysFile.cs │ │ ├── SysFileCsv.cs │ │ ├── SysFileJson.cs │ │ ├── SysIndexes.cs │ │ ├── SysOpenCursors.cs │ │ ├── SysPageList.cs │ │ ├── SysQuery.cs │ │ ├── SysSequences.cs │ │ ├── SysSnapshots.cs │ │ ├── SysTransactions.cs │ │ └── SystemCollection.cs │ ├── LiteDB.csproj │ ├── LiteDB.snk │ └── Utils/ │ ├── AsyncManualResetEvent.cs │ ├── BufferSlice.cs │ ├── Collation.cs │ ├── Constants.cs │ ├── Encoding.cs │ ├── ExtendedLengthHelper.cs │ ├── Extensions/ │ │ ├── BufferExtensions.cs │ │ ├── BufferSliceExtensions.cs │ │ ├── DateExtensions.cs │ │ ├── DictionaryExtensions.cs │ │ ├── EnumerableExtensions.cs │ │ ├── ExpressionExtensions.cs │ │ ├── HashSetExtensions.cs │ │ ├── IOExceptionExtensions.cs │ │ ├── LinqExtensions.cs │ │ ├── StopWatchExtensions.cs │ │ ├── StreamExtensions.cs │ │ ├── StringExtensions.cs │ │ └── TypeInfoExtensions.cs │ ├── FileHelper.cs │ ├── LCID.cs │ ├── LiteException.cs │ ├── MimeTypeConverter.cs │ ├── Pool/ │ │ └── BucketHelper.cs │ ├── Randomizer.cs │ ├── Result.cs │ ├── Tokenizer.cs │ └── TryCatch.cs ├── LiteDB.Benchmarks/ │ ├── Benchmarks/ │ │ ├── BenchmarkBase.cs │ │ ├── Constants.cs │ │ ├── Deletion/ │ │ │ └── DeletionBenchmark.cs │ │ ├── Generator/ │ │ │ └── FileMetaDataGenerationDatabaseBenchmark.cs │ │ ├── Insertion/ │ │ │ ├── InsertionBasicBenchmark.cs │ │ │ ├── InsertionIgnoreExpressionPropertyBenchmark.cs │ │ │ └── InsertionInMemoryBenchmark.cs │ │ └── Queries/ │ │ ├── QueryAllBenchmark.cs │ │ ├── QueryCompoundIndexBenchmark.cs │ │ ├── QueryCountBenchmark.cs │ │ ├── QueryIgnoreExpressionPropertiesBenchmark.cs │ │ ├── QueryMultipleParametersBenchmark.cs │ │ ├── QuerySimpleIndexBenchmarks.cs │ │ └── QueryWithDateTimeOffsetBenchmark.cs │ ├── LiteDB.Benchmarks.csproj │ ├── Models/ │ │ ├── FileMetaBase.cs │ │ ├── FileMetaWithExclusion.cs │ │ └── Generators/ │ │ └── FileMetaGenerator.cs │ └── Program.cs ├── LiteDB.Shell/ │ ├── Commands/ │ │ ├── Close.cs │ │ ├── Ed.cs │ │ ├── Help.cs │ │ ├── IShellCommand.cs │ │ ├── Open.cs │ │ ├── Pretty.cs │ │ ├── Quit.cs │ │ ├── Run.cs │ │ ├── ShowCollections.cs │ │ └── Version.cs │ ├── LiteDB.Shell.csproj │ ├── Program.cs │ ├── Properties/ │ │ └── launchSettings.json │ ├── Shell/ │ │ ├── Display.cs │ │ ├── Env.cs │ │ ├── InputCommand.cs │ │ └── ShellProgram.cs │ └── Utils/ │ ├── OptionSet.cs │ ├── StringExtensions.cs │ └── StringScanner.cs ├── LiteDB.Stress/ │ ├── Examples/ │ │ ├── test-01.xml │ │ └── test-02.xml │ ├── LiteDB.Stress.csproj │ ├── Program.cs │ ├── Properties/ │ │ └── launchSettings.json │ └── Test/ │ ├── ITaskItem.cs │ ├── InsertField.cs │ ├── InsertTaskItem.cs │ ├── SqlTaskItem.cs │ ├── TestExecution.cs │ ├── TestFile.cs │ ├── ThreadInfo.cs │ └── TimeSpanEx.cs ├── LiteDB.Tests/ │ ├── Database/ │ │ ├── AutoId_Tests.cs │ │ ├── ConnectionString_Tests.cs │ │ ├── Contains_Tests.cs │ │ ├── Create_Database_Tests.cs │ │ ├── Crud_Tests.cs │ │ ├── Database_Pragmas_Tests.cs │ │ ├── DbRef_Include_Tests.cs │ │ ├── DbRef_Index_Tests.cs │ │ ├── DbRef_Interface_Tests.cs │ │ ├── DeleteMany_Tests.cs │ │ ├── Delete_By_Name_Tests.cs │ │ ├── DocumentUpgrade_Tests.cs │ │ ├── Document_Size_Tests.cs │ │ ├── FindAll_Tests.cs │ │ ├── IndexMultiKeyLinq_Tests.cs │ │ ├── IndexSortAndFilter_Tests.cs │ │ ├── MultiKey_Mapper_Tests.cs │ │ ├── NonIdPoco_Tests.cs │ │ ├── PredicateBuilder_Tests.cs │ │ ├── Query_Min_Max_Tests.cs │ │ ├── Site_Tests.cs │ │ ├── Snapshot_Upgrade_Tests.cs │ │ ├── Storage_Tests.cs │ │ ├── Upgrade_Tests.cs │ │ └── Writing_While_Reading_Test.cs │ ├── Document/ │ │ ├── Bson_Tests.cs │ │ ├── Case_Insensitive_Tests.cs │ │ ├── Decimal_Tests.cs │ │ ├── Implicit_Tests.cs │ │ ├── Json_Tests.cs │ │ └── ObjectId_Tests.cs │ ├── Engine/ │ │ ├── Collation_Tests.cs │ │ ├── Create_Database_Tests.cs │ │ ├── Crypto_Tests.cs │ │ ├── DropCollection_Tests.cs │ │ ├── Index_Tests.cs │ │ ├── ParallelQuery_Tests.cs │ │ ├── Rebuild_Crash_Tests.cs │ │ ├── Rebuild_Tests.cs │ │ ├── Recursion_Tests.cs │ │ ├── Transactions_Tests.cs │ │ ├── Update_Tests.cs │ │ └── UserVersion_Tests.cs │ ├── Expressions/ │ │ ├── Expressions_Exec_Tests.cs │ │ └── Expressions_Tests.cs │ ├── Internals/ │ │ ├── Aes_Tests.cs │ │ ├── BasePage_Tests.cs │ │ ├── BufferWriter_Tests.cs │ │ ├── CacheAsync_Tests.cs │ │ ├── Cache_Tests.cs │ │ ├── Disk_Tests.cs │ │ ├── Document_Tests.cs │ │ ├── ExtendedLength_Tests.cs │ │ ├── Extensions_Test.cs │ │ ├── FreePage_Tests.cs │ │ ├── FreeSlot_Tests.cs │ │ ├── HeaderPage_Tests.cs │ │ ├── Pragma_Tests.cs │ │ └── Sort_Tests.cs │ ├── Issues/ │ │ ├── Issue1585_Tests.cs │ │ ├── Issue1651_Tests.cs │ │ ├── Issue1695_Tests.cs │ │ ├── Issue1701_Tests.cs │ │ ├── Issue1838_Tests.cs │ │ ├── Issue1860_Tests.cs │ │ ├── Issue1865_Tests.cs │ │ ├── Issue2112_Tests.cs │ │ ├── Issue2127_Tests.cs │ │ ├── Issue2129_Tests.cs │ │ ├── Issue2265_Tests.cs │ │ ├── Issue2298_Tests.cs │ │ ├── Issue2417_Tests.cs │ │ ├── Issue2458_Tests.cs │ │ ├── Issue2471_Test.cs │ │ ├── Issue2487_Tests.cs │ │ ├── Issue2494_Tests.cs │ │ ├── Issue2506_Tests.cs │ │ ├── Issue2534_Tests.cs │ │ ├── Issue2570_Tests.cs │ │ └── Pull2468_Tests.cs │ ├── LiteDB.Tests.csproj │ ├── Mapper/ │ │ ├── CustomInterface_Tests.cs │ │ ├── CustomMappingCtor_Tests.cs │ │ ├── CustomMapping_Tests.cs │ │ ├── DbRefAbstract_Tests.cs │ │ ├── Dictionary_Tests.cs │ │ ├── Enum_Tests.cs │ │ ├── GenericMap_Tests.cs │ │ ├── LinqBsonExpression_Tests.cs │ │ ├── LinqEval_Tests.cs │ │ ├── Mapper_Tests.cs │ │ ├── Records_Tests.cs │ │ └── StructField_Tests.cs │ ├── Query/ │ │ ├── Aggregate_Tests.cs │ │ ├── Data/ │ │ │ ├── PersonGroupByData.cs │ │ │ └── PersonQueryData.cs │ │ ├── GroupBy_Tests.cs │ │ ├── Include_Tests.cs │ │ ├── OrderBy_Tests.cs │ │ ├── QueryApi_Tests.cs │ │ ├── Select_Tests.cs │ │ └── Where_Tests.cs │ ├── Resources/ │ │ ├── person.json │ │ └── zip.json │ ├── Utils/ │ │ ├── AssertEx.cs │ │ ├── DataGen.cs │ │ ├── Faker.Names.cs │ │ ├── Faker.cs │ │ ├── LiteEngineExtensions.cs │ │ ├── Models/ │ │ │ ├── Person.cs │ │ │ └── Zip.cs │ │ └── TempFile.cs │ └── xunit.runner.json ├── LiteDB.sln ├── README.md └── appveyor.yml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/ISSUE_TEMPLATE/bug_report.md ================================================ --- name: Bug report about: Create a report to help us improve title: "[BUG]" labels: bug assignees: '' --- **Version** Which LiteDB version/OS/.NET framework version are you using. **(REQUIRED)** **Describe the bug** A clear and concise description of what the bug is. **Code to Reproduce** Write a small snippet to isolate your bug and could be possible to our team test. **(REQUIRED)** **Expected behavior** A clear and concise description of what you expected to happen. **Screenshots/Stacktrace** If applicable, add screenshots/stacktrace **Additional context** Add any other context about the problem here. ================================================ FILE: .github/ISSUE_TEMPLATE/feature_request.md ================================================ --- name: Feature request about: Suggest an idea for this project title: "[SUGGESTION]" labels: suggestion assignees: '' --- **Is your feature request related to a problem? Please describe.** A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] **Describe the solution you'd like** A clear and concise description of what you want to happen. **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered. **Additional context** Add any other context or screenshots about the feature request here. ================================================ FILE: .github/ISSUE_TEMPLATE/question.md ================================================ --- name: Question about: Write your question about LiteDB title: "[QUESTION]" labels: question assignees: '' --- ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. # MacOS files .DS_Store # User-specific files *.suo *.user *.sln.docstates # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ x64/ build/ bld/ [Bb]in/ [Oo]bj/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* #NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.pch *.pdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc .vs # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opensdf *.sdf *.cachefile # Visual Studio profiler *.psess *.vsp *.vspx # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding addin-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # NCrunch *.ncrunch* _NCrunch_* .*crunch*.local.xml # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # NuGet Packages Directory packages/ ## TODO: If the tool you use requires repositories.config uncomment the next line #!packages/repositories.config # Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets # This line needs to be after the ignore of the build folder (and the packages folder if the line above has been uncommented) !packages/build/ # Windows Azure Build Output csx/ *.build.csdef # Windows Store app package directory AppPackages/ # Others sql/ *.Cache ClientBin/ [Ss]tyle[Cc]op.* ~$* *~ *.dbmdl *.dbproj.schemaview *.pfx *.publishsettings node_modules/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file to a newer # Visual Studio version. Backup files are not needed, because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm # SQL Server files *.mdf *.ldf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings # Microsoft Fakes FakesAssemblies/ /WebShell/Properties/PublishProfiles/*.pubxml /WebShell/App_Data # Nuget 3.0 Files *.lock.json *.nuget.props *.nuget.targets # Intellij *.iml .idea/workspace.xml .idea/tasks.xml .idea/gradle.xml .idea/dictionaries .idea/libraries # User-specific configurations .idea/libraries/ .idea/.name .idea/compiler.xml .idea/copyright/profiles_settings.xml .idea/encodings.xml .idea/misc.xml .idea/modules.xml .idea/scopes/scope_settings.xml .idea/vcs.xml .idea/jsLibraryMappings.xml .idea/datasources.xml .idea/dataSources.ids .idea/sqlDataSources.xml .idea/dynamic.xml .idea/uiDesigner.xml ### JetBrains+all Patch ### # Ignores the whole idea folder # See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 .idea/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/packages/* # except build/, which is used as an MSBuild target. !**/packages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/packages/repositories.config /LiteDB.BadJsonTest ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [Discord](https://discord.gg/u8seFBH9Zu). All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). [homepage]: https://www.contributor-covenant.org For answers to common questions about this code of conduct, see the FAQ at https://www.contributor-covenant.org/faq. Translations are available at https://www.contributor-covenant.org/translations. ================================================ FILE: ConsoleApp1/ConsoleApp1.csproj ================================================  Exe net8.0 enable enable ================================================ FILE: ConsoleApp1/Program.cs ================================================ using LiteDB; using LiteDB.Engine; using System.Reflection.Emit; using System.Reflection.PortableExecutable; var password = "46jLz5QWd5fI3m4LiL2r"; var path = $"C:\\LiteDB\\Examples\\CrashDB_{DateTime.Now.Ticks}.db"; var settings = new EngineSettings { AutoRebuild = true, Filename = path, Password = password }; var data = Enumerable.Range(1, 10_000).Select(i => new BsonDocument { ["_id"] = i, ["name"] = Faker.Fullname(), ["age"] = Faker.Age(), ["created"] = Faker.Birthday(), ["lorem"] = Faker.Lorem(5, 25) }).ToArray(); try { using (var db = new LiteEngine(settings)) { #if DEBUG db.SimulateDiskWriteFail = (page) => { var p = new BasePage(page); if (p.PageID == 248) { page.Write((uint)123123123, 8192-4); } }; #endif db.Pragma("USER_VERSION", 123); db.EnsureIndex("col1", "idx_age", "$.age", false); db.Insert("col1", data, BsonAutoId.Int32); db.Insert("col2", data, BsonAutoId.Int32); var col1 = db.Query("col1", Query.All()).ToList().Count; var col2 = db.Query("col2", Query.All()).ToList().Count; Console.WriteLine("Inserted Col1: " + col1); Console.WriteLine("Inserted Col2: " + col2); } } catch (Exception ex) { Console.WriteLine("ERROR: " + ex.Message); } Console.WriteLine("Recovering database..."); using (var db = new LiteEngine(settings)) { var col1 = db.Query("col1", Query.All()).ToList().Count; var col2 = db.Query("col2", Query.All()).ToList().Count; Console.WriteLine($"Col1: {col1}"); Console.WriteLine($"Col2: {col2}"); var errors = new BsonArray(db.Query("_rebuild_errors", Query.All()).ToList()).ToString(); Console.WriteLine("Errors: " + errors); } /* var errors = new List(); var fr = new FileReaderV8(settings, errors); fr.Open(); var pragmas = fr.GetPragmas(); var cols = fr.GetCollections().ToArray(); var indexes = fr.GetIndexes(cols[0]); var docs1 = fr.GetDocuments("col1").ToArray(); var docs2 = fr.GetDocuments("col2").ToArray(); Console.WriteLine("Recovered Col1: " + docs1.Length); Console.WriteLine("Recovered Col2: " + docs2.Length); Console.WriteLine("# Errors: "); errors.ForEach(x => Console.WriteLine($"PageID: {x.PageID}/{x.Origin}/#{x.Position}[{x.Collection}]: " + x.Message)); */ Console.WriteLine("\n\nEnd."); Console.ReadKey(); ================================================ FILE: ConsoleApp1/Tools/Faker.Names.cs ================================================ internal static partial class Faker { private static string[] _maleNames = { "Adeildo", "Adailton", "Abel", "Adelar", "Adelino", "Abilio", "Adilson", "Adenildo", "Adenir", "Adenilson", "Adenilton", "Adevaldo", "Abner", "Adir", "Adair", "Abimael", "Abraao", "Adrian", "Adson", "Acacio", "Adelso", "Adalto", "Adalberto", "Adolfo", "Adelmo", "Adao", "Adauto", "Ademar", "Ademilson", "Ademilton", "Ademir", "Admilson", "Adonias", "Adriano", "Adriel", "Aecio", "Eder", "Edio", "Edson", "Elcio", "Aldo", "Euler", "Eli", "Helio", "Luiz", "Alison", "Alisson", "Eliton", "Elmo", "Elso", "Elson", "Ailton", "Eron", "Ezio", "Everton", "Afonso", "Afranio", "Agenor", "Aguinaldo", "Agnaldo", "Agostinho", "Iago", "Alan", "Elder", "Airton", "Laecio", "Eliel", "Elielson", "Laercio", "Laerte", "Elielton", "Elian", "Elias", "Alaor", "Aldair", "Aldeci", "Aldir", "Aldemar", "Aldemir", "Aldenir", "Alberi", "Alberico", "Albert", "Albertino", "Alberto", "Albino", "Alcir", "Alceu", "Alcides", "Alcimar", "Alcindo", "Alcino", "Leandro", "Alexandre", "Alessandro", "Alecsandro", "Alef", "Elimar", "Elenildo", "Alencar", "Lenilson", "Elenilton", "Heleno", "Leomar", "Leonidas", "Leoni", "Alesandro", "Alexander", "Alexsandro", "Levi", "Alex", "Alexsander", "Alfredo", "Algusto", "Eliandro", "Lidio", "Alicio", "Eliezer", "Alife", "Olimpio", "Elinaldo", "Lindomar", "Lino", "Eliomar", "Alipio", "Alirio", "Elisandro", "Aluisio", "Elismar", "Elivaldo", "Elivan", "Elivelton", "Eliseu", "Allan", "Allison", "Almir", "Almiro", "Eloi", "Aloisio", "Alonso", "Altair", "Altamir", "Altamiro", "Altino", "Luan", "Luciano", "Lucio", "Alvaro", "Elves", "Alvino", "Elvio", "Elvis", "Amadeu", "Amado", "Amilton", "Amarildo", "Amaro", "Amauri", "Americo", "Anilson", "Anilton", "Anildo", "Ananias", "Anastacio", "Ancelmo", "Anderson", "Andeson", "Andre", "Andrei", "Andrew", "Anesio", "Angelo", "Anibal", "Anisio", "Antoni", "Anselmo", "Antenor", "Antonio", "Antoniel", "Antonino", "Aparecido", "Aquiles", "Ariel", "Aroldo", "Arilson", "Arlei", "Argemiro", "Ari", "Ariovaldo", "Aristeu", "Aristides", "Arivaldo", "Arlindo", "Armando", "Armindo", "Arnaldo", "Arno", "Artur", "Assis", "Ataide", "Atila", "Augusto", "Augustinho", "Aurelio", "Avelino", "Baltazar", "Bartolomeu", "Dejair", "Dalton", "Dalmir", "Belmiro", "Dilson", "Denilson", "Dener", "Benedito", "Denir", "Benicio", "Denis", "Denison", "Denivaldo", "Benjamin", "Bento", "Derli", "Bernado", "Bernardo", "Braian", "Breno", "Diomar", "Dione", "Bryan", "Braulio", "Braz", "Brendo", "Bruno", "Cesar", "Caetano", "Kaue", "Kaik", "Kaike", "Kayky", "Celson", "Caio", "Caique", "Cairo", "Cleber", "Celio", "Cleison", "Cleiton", "Kelvin", "Camilo", "Candido", "Carlito", "Carlo", "Carlos", "Cassiano", "Cassio", "Caua", "Kauan", "Clesio", "Cleito", "Celso", "Charles", "Christian", "Cicero", "Ciro", "Clebson", "Cleilton", "Cleilson", "Clayton", "Claudir", "Claudio", "Claudecir", "Claudemir", "Claudenir", "Claudinei", "Claudino", "Claudiomar", "Claudiomiro", "Claudionor", "Cleberson", "Clecio", "Cleidson", "Clemente", "Cleomar", "Cleverson", "Cleverton", "Clodoaldo", "Cloves", "Clovis", "Cosme", "Cosmo", "Cristian", "Cristiano", "Crispim", "Cristofer", "Cristovao", "Custodio", "Decio", "Delcio", "Delio", "Dalmo", "Damiao", "Daniel", "Danilo", "Darci", "Darlei", "Dario", "Darlan", "Davi", "David", "Davison", "Dijalma", "Deivid", "Deivide", "Deivison", "Demetrio", "Deusdete", "Deusimar", "Devair", "Devanir", "Devid", "Diego", "Diogo", "Dionata", "Dionatan", "Diones", "Dionei", "Douglas", "Dimas", "Diogenes", "Dionisio", "Dirceu", "Dirlei", "Divino", "Djalma", "Doglas", "Domingo", "Domingos", "Donato", "Donizete", "Dorival", "Durval", "Edenilson", "Ederson", "Hebert", "Edison", "Hector", "Edilson", "Edilton", "Edcarlos", "Edemar", "Edesio", "Edevaldo", "Edgar", "Edicarlos", "Edigar", "Edimar", "Edimilson", "Edinilson", "Edinaldo", "Edinei", "Edivaldo", "Edivan", "Edmar", "Edmilson", "Edmundo", "Ednilson", "Ednaldo", "Ednei", "Edno", "Eduardo", "Edvaldo", "Edvan", "Egidio", "Igor", "Inaldo", "Heitor", "Hilario", "Leo", "Leonildo", "Leonardo", "Leonel", "Olivio", "Emanuel", "Emerson", "Emidio", "Emilio", "Enilson", "Enio", "Enivaldo", "Enzo", "Enoque", "Henry", "Henrique", "Eraldo", "Erasmo", "Herbert", "Ercilio", "Hercules", "Eric", "Erike", "Erick", "Erico", "Ericson", "Erli", "Erinaldo", "Erique", "Erison", "Erisvaldo", "Erivaldo", "Erivelton", "Erivan", "Hermes", "Herminio", "Ernandes", "Ernando", "Ernane", "Ernani", "Ernesto", "Eronildo", "Esdras", "Ezequias", "Ezequiel", "Esmael", "Esmeraldo", "Espedito", "Estevan", "Estevao", "Eudes", "Euclides", "Eugenio", "Ulisses", "Eurico", "Euripedes", "Euzebio", "Evaldo", "Evanildo", "Evandro", "Evangelista", "Evaristo", "Evilasio", "Everaldo", "Everson", "Ewerton", "Expedito", "Fabiano", "Fabio", "Fabricio", "Fagner", "Fausto", "Fco", "Feliciano", "Felipe", "Filipi", "Felix", "Fellipe", "Fernando", "Francisco", "Firmino", "Flaviano", "Flavio", "Floriano", "Florisvaldo", "Fracisco", "Frank", "Franciel", "Franklin", "Francico", "Francimar", "Francinaldo", "Francinei", "Francis", "Franciso", "Francivaldo", "Franisco", "Franscisco", "Fransisco", "Fred", "Frederico", "Fredson", "Jadir", "Gabriel", "Jader", "Jadiel", "Joel", "Jair", "Jairo", "Jaison", "Gilberto", "Gileno", "Juliano", "Julho", "Gilvan", "Jamil", "Jandir", "Jarbas", "Jardel", "Gaspar", "Gleison", "Gleisson", "Jean", "Jeanderson", "Jedson", "Jeferson", "Jefersson", "Jefeson", "Gildo", "Gilmar", "Gilso", "Gilson", "Jailton", "Geison", "Julio", "Genildo", "Genilson", "Genesio", "Genival", "Genivaldo", "Gentil", "George", "Jeova", "Geovan", "Geovane", "Geovani", "Geraldo", "Jeremias", "Jerferson", "Jerfeson", "Jerry", "Germano", "Geronimo", "Gerson", "Gervasio", "Jesiel", "Jesse", "Jesuino", "Jesus", "Getulio", "Guilherme", "Gustavo", "Gian", "Guido", "Gildasio", "Julian", "Giovane", "Giovani", "Givaldo", "Givanildo", "Gledson", "Glauber", "Glaucio", "Glauco", "Gleidson", "Julimar", "Jobson", "Goncalo", "Jorge", "Gregori", "Gregorio", "Gutemberg", "Ian", "Icaro", "Iran", "Iranildo", "Ismael", "Israel", "Italo", "Itamar", "Iure", "Yuri", "Ivaldo", "Ivan", "Ivair", "Ivo", "Odilon", "Omar", "Homero", "Onofre", "Horacio", "Orivaldo", "Orlando", "Orlei", "Oseias", "Osmar", "Otavio", "Oziel", "Osorio", "Uanderson", "Ubirajara", "Ubiratan", "Hudson", "Ueslei", "Hugo", "Humberto", "Lauro", "Inacio", "Irineu", "Isac", "Isael", "Isaias", "Isaque", "Izaquiel", "Ismar", "Ivanildo", "Ivanilson", "Ivonaldo", "Jadson", "Jaci", "Jacinto", "Jackson", "Jaco", "Jacson", "Jadilson", "Jaime", "Jamerson", "James", "Janiel", "Janilson", "Janderson", "Janio", "Januario", "Jason", "Joao", "John", "Jonas", "Jonata", "Jonatan", "Jonatas", "Jhone", "Jones", "Jhony", "Jonilson", "Jordan", "Jose", "Juan", "Junior", "Joab", "Joabe", "Joacir", "Joaquim", "Joares", "Jocelio", "Jocimar", "Josiel", "Josafa", "Joseildo", "Joseilton", "Josimar", "Joselio", "Joselito", "Josemar", "Josemir", "Josenildo", "Josenilson", "Josenilton", "Josevaldo", "Josias", "Josinaldo", "Josival", "Josivaldo", "Josivan", "Josue", "Juarez", "Jucelino", "Jucelio", "Jucimar", "Jurandir", "Juscelino", "Justino", "Juvenal", "Kennedy", "Kevin", "Keven", "Lazaro", "Laudelino", "Lauri", "Laurindo", "Leonan", "Leopoldo", "Lincon", "Lorran", "Lorenco", "Lorenzo", "Lorival", "Lorivaldo", "Lourenco", "Lourival", "Luca", "Lucas", "Lucca", "Lucinei", "Lucivaldo", "Madson", "Maciel", "Macelo", "Maxuel", "Macio", "Mailson", "Milton", "Magno", "Maik", "Maike", "Maico", "Maicon", "Manoel", "Marciel", "Marcelino", "Marcelo", "Marcilio", "Marciano", "Marcio", "Marco", "Marcondes", "Marcone", "Marconi", "Marcos", "Marcus", "Mariano", "Marlon", "Marinaldo", "Marino", "Mario", "Marivaldo", "Martin", "Martinho", "Martins", "Mateus", "Matias", "Maurilio", "Mauri", "Mauricio", "Mauro", "Max", "Maxsuel", "Maxwell", "Messias", "Micael", "Michel", "Miguel", "Miqueias", "Misael", "Moacir", "Moiseis", "Moises", "Murilo", "Nadson", "Noel", "Nildo", "Nelio", "Nelson", "Nilton", "Nilo", "Nelso", "Narciso", "Nazareno", "Natal", "Natalicio", "Natalino", "Natan", "Natanael", "Nei", "Nivaldo", "Neri", "Nestor", "Newton", "Nicolas", "Nicolau", "Noe", "Nonato", "Norberto", "Odair", "Olavo", "Oliveira", "Oscar", "Oseas", "Osias", "Osni", "Osvaldo", "Oswaldo", "Otacilio", "Otaviano", "Otoniel", "Pablo", "Paulino", "Paulo", "Patrik", "Patricio", "Patrick", "Pedro", "Peterson", "Pierre", "Pietro", "Plinio", "Raul", "Railson", "Railton", "Rene", "Rafael", "Rai", "Raian", "Railan", "Rildo", "Rian", "Raimundo", "Ralf", "Ramiro", "Ramon", "Rangel", "Reginaldo", "Regis", "Rui", "Reinaldo", "Reinan", "Rivaldo", "Renildo", "Renilson", "Renan", "Renato", "Robson", "Rodnei", "Rodolfo", "Rodrigo", "Roger", "Romulo", "Ronan", "Roni", "Ruan", "Ribamar", "Ricardo", "Richard", "Riquelme", "Roberio", "Robert", "Roberto", "Roberval", "Robison", "Rodinei", "Rogerio", "Romildo", "Romilson", "Romario", "Romero", "Romeu", "Roniel", "Ronaldo", "Ronilson", "Ronald", "Rone", "Ronivon", "Ronivaldo", "Roque", "Rosalino", "Rosalvo", "Rosenildo", "Rosinaldo", "Rosivaldo", "Rubem", "Rubens", "Rudimar", "Rudinei", "Sabino", "Sadi", "Saul", "Saulo", "Saimon", "Salatiel", "Selio", "Salomao", "Salvador", "Silvino", "Silvio", "Samuel", "Samir", "Sandoval", "Sandro", "Santiago", "Santo", "Santos", "Savio", "Sebastiao", "Zenildo", "Sergio", "Severino", "Sidinei", "Sidnei", "Silas", "Silvano", "Silverio", "Silvestre", "Simao", "Sinesio", "Sinval", "Sivaldo", "Tadeu", "Tiago", "Tales", "Talis", "Talisson", "Taylor", "Tainan", "Tulio", "Talison", "Talles", "Telmo", "Tarcisio", "Tauan", "Theo", "Teodoro", "Tomas", "Toni", "Vilson", "Vagner", "Valber", "Valdo", "Valdemir", "Valdenir", "Valderi", "Valdir", "Valcir", "Valdeci", "Valdeli", "Valdemar", "Valdemiro", "Valdenor", "Valdevino", "Valdinei", "Valdivino", "Valdomiro", "Valentim", "Valerio", "Valmir", "Valmor", "Volnei", "Valter", "Vanilson", "Vanildo", "Vander", "Vandir", "Vanderlan", "Vanderlei", "Vanderson", "Vando", "Venancio", "Vicente", "Victor", "Vinicio", "Vinicios", "Vinicius", "Virgilio", "Vital", "Vitor", "Vitorio", "Vivaldo", "Vladimir", "Washington", "Wagner", "Wilson", "Wilton", "Walace", "Wilhan", "Welder", "Waldir", "Waldemar", "Welington", "Welinton", "Walison", "Walisson", "Weliton", "Wilker", "Wallace", "Willan", "Willy", "Wellington", "Wallison", "Welliton", "Walmir", "Walter", "Wander", "Wanderlei", "Wanderson", "Warley", "Weber", "Wederson", "Wedson", "Weligton", "Willian", "Welligton", "Wellinton", "Wemerson", "Wendel", "Wender", "Wendell", "Wenderson", "Wesley", "Weslen", "Weslley", "Weverton", "Wilian", "Willians", "Zacarias", "Zaqueu" }; private static string[] _femaleNames = { "Aline", "Adelia", "Adelina", "Adelma", "Abigail", "Adalgisa", "Adelaide", "Adria", "Adriana", "Adriane", "Adriele", "Adrieli", "Edi", "Edna", "Eliane", "Elen", "Lia", "Eliana", "Elida", "Elita", "Ilma", "Erica", "Agata", "Agda", "Agnes", "Aida", "Aide", "Aila", "Alana", "Iolanda", "Elane", "Alani", "Ilka", "Ilda", "Ildete", "Leda", "Lene", "Leila", "Lili", "Elza", "Iana", "Iane", "Iara", "Laci", "Ladir", "Laiane", "Alaide", "Eliani", "Laisa", "Laise", "Lara", "Lauane", "Albertina", "Albina", "Alcilene", "Alcione", "Aldenora", "Lea", "Leandra", "Alessandra", "Leci", "Leia", "Leide", "Lidiana", "Lidiane", "Lina", "Luiza", "Luize", "Lilia", "Liliane", "Helena", "Leni", "Elenice", "Lenilda", "Lenira", "Lenise", "Elenita", "Alesandra", "Alexandrina", "Alexia", "Leticia", "Alexsandra", "Olga", "Liandra", "Laira", "Lidia", "Alice", "Alicia", "Eliene", "Eliete", "Ligia", "Lilian", "Olinda", "Alini", "Elisandra", "Elizane", "Elisangela", "Elizete", "Elisia", "Elissandra", "Elizabete", "Lisiane", "Leilane", "Ellen", "Almira", "Almerinda", "Eloa", "Heloisa", "Eloise", "Lorrane", "Alzenir", "Alzira", "Luana", "Luane", "Lucelia", "Luci", "Lucilene", "Lucimar", "Luma", "Luzia", "Luzinete", "Alvina", "Elvira", "Amelia", "Amanda", "Amara", "Ana", "Ane", "Anieli", "Analia", "Anelise", "Anair", "Analice", "Ananda", "Andrelina", "Andrea", "Andrieli", "Andreia", "Andriele", "Andreza", "Andressa", "Anny", "Anesia", "Angela", "Angelica", "Angelina", "Angelita", "Anisia", "Anita", "Antonia", "Antonieta", "Aparecida", "Araci", "Ariana", "Ariane", "Ariele", "Arlene", "Arlete", "Arlinda", "Arminda", "Augusta", "Aurea", "Aurilene", "Aurelina", "Aurora", "Avani", "Barbara", "Beatriz", "Delia", "Deli", "Deliane", "Deolinda", "Dalila", "Dilma", "Delmira", "Dilza", "Benedita", "Denise", "Berenice", "Bernadete", "Betania", "Bianca", "Brenda", "Diana", "Diane", "Dina", "Diva", "Brena", "Bruna", "Cacilda", "Keila", "Kelen", "Kaline", "Kailane", "Kele", "Cilene", "Kiara", "Cleide", "Keli", "Keliane", "Kelly", "Celina", "Celita", "Celma", "Camila", "Camile", "Camili", "Camilla", "Camille", "Camilly", "Candida", "Karen", "Carol", "Carla", "Karina", "Karine", "Carolaine", "Carolina", "Caroline", "Carmelita", "Carmem", "Cassia", "Cassiana", "Cassiane", "Catarina", "Katia", "Katiane", "Katiana", "Kauana", "Kauane", "Kauany", "Cecilia", "Celia", "Cleane", "Cleci", "Cleia", "Celeste", "Cleusa", "Clelia", "Kenia", "Kesia", "Kessia", "Chaiane", "Sheila", "Charlene", "Shirley", "Shirlene", "Cibele", "Cicera", "Clea", "Cintia", "Cirlei", "Cirlene", "Clara", "Clarice", "Clarissa", "Clarisse", "Claudete", "Claudia", "Claudenice", "Claudiana", "Claudiane", "Claudineia", "Cleidiane", "Clemilda", "Cleonice", "Cleunice", "Clotilde", "Conceicao", "Corina", "Cosma", "Cremilda", "Creuza", "Cristiane", "Crislaine", "Crislane", "Cristiana", "Cristina", "Cristine", "Dagmar", "Daiana", "Daiane", "Dara", "Daiani", "Dulce", "Dalva", "Dayse", "Delci", "Dulcineia", "Dalvina", "Damaris", "Damiana", "Daniela", "Dandara", "Danielle", "Danielly", "Daniele", "Danieli", "Daniella", "Danubia", "Darlene", "Debora", "Deise", "Deisiane", "Dejanira", "Deusa", "Dienifer", "Dinalva", "Dirce", "Divina", "Dolores", "Domingas", "Dora", "Doraci", "Doralice", "Durvalina", "Ediane", "Edilma", "Edilza", "Edila", "Edilaine", "Edilane", "Edilene", "Edileuza", "Edite", "Edina", "Edinalva", "Edineia", "Edineide", "Edith", "Edivania", "Edjane", "Ednalva", "Edneia", "Eduarda", "Edvania", "Efigenia", "Ida", "Ide", "Isa", "Iva", "Leonice", "Leonilda", "Leonor", "Leonora", "Eleuza", "Liduina", "Liliana", "Lindalva", "Lindinalva", "Elizabeth", "Elizabeti", "Elisama", "Elivania", "Livia", "Lorraine", "Luara", "Lucia", "Luciana", "Luciane", "Luciene", "Luziane", "Luzimar", "Emanuela", "Emanuele", "Emanuelle", "Emanuelly", "Emanueli", "Emile", "Emily", "Emilly", "Emilia", "Enilda", "Enedina", "Eni", "Ercilia", "Erminia", "Ernestina", "Erondina", "Esmeralda", "Estefane", "Estefani", "Estefania", "Estela", "Estelita", "Ester", "Etelvina", "Eugenia", "Eunice", "Eurides", "Eva", "Eveline", "Evanir", "Evanilda", "Evely", "Evelin", "Evellyn", "Expedita", "Fabia", "Fabiana", "Fabiane", "Fabiola", "Fabricia", "Fatima", "Filomena", "Fernanda", "Flavia", "Flaviana", "Flaviane", "Flora", "Florinda", "Franciele", "Francilene", "Francieli", "Franciane", "Francine", "Francineide", "Francinete", "Francisca", "Gabriela", "Gabriele", "Gabrieli", "Gabriella", "Gabrielle", "Gabrielly", "Jaiane", "Gilda", "Juliana", "Gilvania", "Janete", "Gardenia", "Jeane", "Juli", "Julha", "Juliane", "Gilza", "Geisa", "Geise", "Gisela", "Gislaine", "Gislane", "Gisele", "Gislene", "Giseli", "Geisiane", "Giselle", "Julia", "Gleice", "Juliene", "Genilda", "Geneci", "Jenefer", "Geni", "Jenifer", "Georgia", "Georgina", "Geovana", "Geralda", "Geraldina", "Gerlane", "Gerusa", "Jesica", "Jesuina", "Gessi", "Jessica", "Giovana", "Jaine", "Gildete", "Gleide", "Guilhermina", "Gilmara", "Gilvanete", "Guiomar", "Girlene", "Giselda", "Giselia", "Glaucia", "Gleiciane", "Glenda", "Gloria", "Jordana", "Gorete", "Graca", "Graciele", "Gracilene", "Graciela", "Graziela", "Graziele", "Grazieli", "Greice", "Ianca", "Yasmin", "Ieda", "Ingred", "Ingrid", "Ingride", "Ingridi", "Ione", "Irene", "Iris", "Irma", "Isabela", "Isadora", "Isis", "Ivana", "Ivone", "Odete", "Ondina", "Hortencia", "Hosana", "Osmarina", "Otilia", "Idalina", "Laura", "Inacia", "Ines", "Iracema", "Iraci", "Iracilda", "Iria", "Irani", "Iraneide", "Ireni", "Isabel", "Isabele", "Isabeli", "Isabella", "Isabelle", "Isabelly", "Izilda", "Isolina", "Isamara", "Isaura", "Ivete", "Ivanilda", "Ivani", "Ivanice", "Ivaneide", "Ivanilde", "Ivanete", "Ivania", "Ivoni", "Ivoneide", "Ivonete", "Jakeline", "Jaciane", "Jaciara", "Jacilene", "Jacinta", "Jacira", "Jackeline", "Jacqueline", "Jamile", "Jamili", "Jane", "Janiele", "Janaina", "Jandira", "Jani", "Janine", "Janice", "Jaqueline", "Joana", "Joice", "Josi", "Joaquina", "Joceli", "Jocilene", "Jocelia", "Joise", "Juliete", "Jordania", "Jorgina", "Josilda", "Josiane", "Joselia", "Joseane", "Joselma", "Josefa", "Josefina", "Josina", "Joselaine", "Josiele", "Joseli", "Josilene", "Joselina", "Joselita", "Josenilda", "Josenir", "Josiene", "Josimara", "Josineide", "Josinete", "Jovelina", "Juceli", "Jucileide", "Jucilene", "Jucelia", "Juciara", "Jucimara", "Judite", "Julieta", "Junia", "Juraci", "Jurema", "Jussara", "Justina", "Kellen", "Kemili", "Ketlen", "Ketley", "Ketlin", "Larisa", "Larissa", "Lazara", "Laudiceia", "Laurinda", "Laurita", "Lavinia", "Leontina", "Lorrana", "Lindaura", "Lorrany", "Lorena", "Lurdes", "Luciele", "Lucileide", "Lucila", "Lucicleide", "Lucidalva", "Lucileia", "Lucimara", "Lucimeire", "Lucinda", "Lucineia", "Lucineide", "Lucinete", "Lucivania", "Ludimila", "Ludmila", "Luna", "Luzineide", "Maria", "Madalena", "Maila", "Milene", "Mercia", "Magali", "Magda", "Magna", "Magnolia", "Mara", "Maiara", "Maira", "Maiana", "Maiane", "Milena", "Maisa", "Malvina", "Manuela", "Manuele", "Marilda", "Marilza", "Mariana", "Mariane", "Marli", "Marlise", "Marluce", "Marlucia", "Marcelina", "Marcela", "Marcele", "Marceli", "Marcilene", "Marcilia", "Marcia", "Marciana", "Marlene", "Marluci", "Mari", "Margareth", "Margarete", "Margarida", "Mariangela", "Maricelia", "Marla", "Mariele", "Marilena", "Marilia", "Marieta", "Marina", "Marileia", "Marileide", "Marlete", "Marinalva", "Marineide", "Marines", "Marinete", "Marisa", "Marise", "Marizete", "Maristela", "Marivalda", "Marta", "Martinha", "Matilde", "Maura", "Maurina", "Meire", "Mirele", "Miria", "Mirian", "Mireli", "Melissa", "Mercedes", "Micaela", "Micaele", "Micaeli", "Michele", "Michelle", "Michelli", "Micheli", "Mirela", "Mirella", "Mirtes", "Monalisa", "Monica", "Monique", "Morgana", "Nara", "Nadir", "Nadia", "Nadja", "Neila", "Neli", "Noelia", "Nelma", "Nilza", "Nagila", "Naiara", "Nair", "Naiana", "Naiane", "Nilce", "Nilda", "Nilde", "Nilva", "Naira", "Nelci", "Nelsi", "Nanci", "Nazare", "Natasha", "Natiele", "Natali", "Natalia", "Natalie", "Natalina", "Neide", "Nina", "Neiva", "Nivia", "Nilzete", "Neusa", "Nicole", "Nicoli", "Nicolly", "Nilceia", "Nivea", "Noemi", "Noemia", "Norma", "Nubia", "Odilia", "Odila", "Osvaldina", "Paula", "Poliane", "Palmira", "Paloma", "Pamela", "Patricia", "Poliana", "Paulina", "Pedrina", "Perla", "Pietra", "Pricila", "Priscila", "Priscilla", "Queila", "Quesia", "Quiteria", "Rachel", "Rafaela", "Rafaele", "Rafaella", "Raiane", "Raissa", "Raiana", "Raiani", "Raila", "Railane", "Railda", "Raimunda", "Riana", "Rainara", "Raine", "Raisa", "Raniele", "Raquel", "Rebeca", "Rejane", "Regiane", "Regina", "Renilda", "Renata", "Reni", "Rubia", "Rute", "Rita", "Roberta", "Rogeria", "Romilda", "Rosa", "Roseli", "Rosilda", "Rosiane", "Rosilane", "Rosileide", "Rosilene", "Rosalia", "Rosalina", "Rosana", "Rosane", "Rosani", "Rosangela", "Rosania", "Rosaria", "Rose", "Roseane", "Rosimeire", "Roselaine", "Rosemar", "Rosemary", "Rosemeire", "Rosemere", "Rosemeri", "Rosenilda", "Roseni", "Rosi", "Rosicleia", "Rosicleide", "Rosimar", "Rosimari", "Rosimere", "Rosimeri", "Rosinei", "Rosineia", "Rosineide", "Rosinete", "Ruth", "Ruti", "Sara", "Sabrina", "Suelen", "Sueli", "Zila", "Suiane", "Zaira", "Zuleide", "Silene", "Salete", "Zelia", "Suelaine", "Zelina", "Zelita", "Selma", "Zulmira", "Silva", "Silvana", "Silvani", "Silvania", "Silvia", "Silvina", "Samia", "Samila", "Samanta", "Samara", "Samira", "Sandy", "Sandra", "Santa", "Santina", "Sebastiana", "Zilda", "Suellen", "Silmara", "Zenaide", "Zeneide", "Zeni", "Zenilda", "Severina", "Sibele", "Sidneia", "Sulamita", "Solange", "Silvane", "Simone", "Simoni", "Sinara", "Sintia", "Sirlei", "Sirlene", "Socorro", "Sofia", "Sonia", "Soraia", "Zoraide", "Stefane", "Stefani", "Stephanie", "Stela", "Zuleica", "Suzana", "Suzane", "Suzete", "Suzi", "Tabata", "Taciana", "Taciane", "Taiana", "Taiane", "Taila", "Taina", "Tainara", "Tais", "Taisa", "Taise", "Tailane", "Talia", "Taline", "Telma", "Taine", "Taissa", "Talita", "Tamara", "Tamires", "Tamiris", "Tania", "Tassia", "Tatiana", "Tatiane", "Tatiele", "Tauane", "Tauani", "Tereza", "Terezinha", "Tifani", "Tuane", "Tuani", "Vilma", "Valda", "Valdenice", "Valdilene", "Valdina", "Valdira", "Valdelice", "Valdete", "Valdineia", "Valdirene", "Valentina", "Valeria", "Valesca", "Valmira", "Valquiria", "Vanilda", "Vania", "Vanda", "Vanderleia", "Vani", "Vaneide", "Vanesa", "Vanessa", "Vanusa", "Vanuzia", "Vera", "Veridiana", "Veronica", "Vicentina", "Victoria", "Virginia", "Vitalina", "Vitoria", "Vivian", "Viviane", "Wilma", "Wanda", "Wanessa", "Zumira" }; private static string[] _surNames = { "Smith", "Johnson", "Jones", "Williams", "Brown", "Lee", "Khan", "Singh", "Kumar", "Miller", "Davis", "Wilson", "Taylor", "Thomas", "Garcia", "Anderson", "Sharma", "Martin", "Rodriguez", "Ali", "White", "Jackson", "Thompson", "Moore", "Ahmed", "Martinez", "Lopez", "Harris", "Patel", "King", "Walker", "Hernandez", "Clark", "Lewis", "Robinson", "Young", "Gonzalez", "Hall", "Wright", "Scott", "Perez", "Green", "Allen", "Tan", "Shah", "Roberts", "Adams", "Nguyen", "James", "Hill", "Baker", "Campbell", "Wong", "Sanchez", "Evans", "Cruz", "Gupta", "Chan", "Mitchell", "Carter", "Reyes", "Nelson", "Edwards", "Rivera", "Parker", "Turner", "Phillips", "Lim", "Murphy", "Stewart", "Collins", "Jain", "Torres", "Morris", "Santos", "Kelly", "Morgan", "Cooper", "Ramirez", "Flores", "Bell", "Cook", "Wood", "Rogers", "Ramos", "Watson", "Ward", "Diaz", "Bailey", "Rose", "Ahmad", "Hughes", "Bennett", "Love", "Kim", "Mohamed", "Gomez", "Mendoza", "Gray", "Richardson", "Ross", "Cox", "Chen", "Reed", "Brooks", "Peterson", "Howard", "Price", "Gonzales", "Ng", "Fernandez", "Russell", "Foster", "Murray", "Long", "Black", "Graham", "Jenkins", "Harrison", "Alexander", "Fisher", "Morales", "Ryan", "Henderson", "Stevens", "Powell", "Butler", "Hamilton", "Marshall", "Perry", "Jordan", "George", "Barnes", "Cole", "Kennedy", "West", "Simpson", "Mcdonald", "Sullivan", "Reynolds", "Ortiz", "Shaw", "Hassan", "Castillo", "Ellis", "Myers", "Wallace", "Sanders", "Gibson", "Rahman", "Marie", "Hunter", "Fox", "Joseph", "Wang", "Gutierrez", "Li", "Hayes", "Clarke", "Tran", "Patterson", "Henry", "Ford", "Coleman", "Mason", "Richards", "Simmons", "Castro", "Robertson", "Gordon", "Woods", "Grant", "Griffin", "Paul", "Silva", "Roy", "Stone", "John", "Hunt", "Webb", "Wells", "Knight", "Johnston", "Palmer", "Mills", "Alvarez", "Burns", "Holmes", "Davies", "Andrews", "Reid", "Hussain", "Matthews", "Peters", "David", "Porter", "Bryant", "Dixon", "Santiago", "Ferguson", "Freeman", "Lawrence", "Ruiz", "Reddy", "Agarwal", "Crawford", "Jimenez", "Ray", "Malik", "Obrien", "Armstrong", "Verma", "Spencer", "Raj", "Walsh", "Elliott", "Hart", "Kaur", "Tucker", "Ho", "Daniels", "Ibrahim", "Owens", "Meyer", "Morrison", "Warren", "Dunn", "Payne", "Hansen", "Lane", "Chapman", "Romero", "Jacobs", "May", "Chavez", "Francis", "Bradley", "Liu", "Boyd", "Man", "Berry", "Duncan", "Stephens", "Gill", "Mohammed", "Medina", "Harvey", "Daniel", "Lam", "Burke", "Arora", "Cunningham", "Das", "Hicks", "Schmidt", "Gardner", "Hudson", "Yang", "Riley", "Yadav", "Olson", "Davidson", "Dean", "Day", "Hawkins", "Bautista", "Cohen", "Park", "Wagner", "Arnold", "Rice", "Lin", "Mishra", "Carroll", "Lynch", "Mehta", "Joshi", "Vargas", "Lynn", "Washington", "Moreno", "Harper", "Oliver", "Carr", "Shrestha", "Aguilar", "Zhang", "Nichols", "Williamson", "Austin", "Ong", "Snyder", "Villanueva", "Vasquez", "Willis", "Wheeler", "Jensen", "Islam", "Herrera", "Lucas", "Bishop", "Douglas", "Lawson", "Macdonald", "Hasan", "Newman", "Le", "Gilbert", "Greene", "Pierce", "Yu", "Salazar", "Chang", "Pearson", "Burton", "Kelley", "Mendez", "Watkins", "Lau", "Mann", "Barrett", "Wu", "Perkins", "Walters", "Carpenter", "Dawson", "Banks", "Franklin", "Barker", "Little", "Curtis", "Hanson", "Weaver", "Hoffman", "Miranda", "Ismail", "Holland", "Angel", "Fuller", "Montgomery", "Page", "Valdez", "Hossain", "Mccarthy", "Fletcher", "Guzman", "Doyle", "Lambert", "Saunders", "Oconnor", "Larson", "Nair", "Carlson", "Lowe", "Stanley", "Shaikh", "Simon", "Howell", "Fowler", "Chambers", "Watts", "Huang", "Quinn", "Patil", "Chua", "Craig", "Munoz", "Anthony", "Rana", "Weber", "Charles", "Cheng", "Michael", "Bates", "Sims", "Rao", "Hopkins", "Marquez", "Gregory", "Cross", "Pandey", "Tang", "Ball", "Stevenson", "Blake", "Rai", "Fleming", "Sutton", "Mercado", "Navarro", "Cameron", "Wade", "Schneider", "Pena", "Soto", "Welch", "Mccoy", "Hardy", "Jennings", "Alam", "Steele", "Delgado", "Benson", "Leung", "Abdullah", "Lloyd", "Mckenzie", "Chong", "Miles", "Beck", "Bowman", "Vega", "Webster", "Parsons", "Ortega", "Schultz", "Leonard", "Higgins", "Owen", "Garrett", "Brewer", "Newton", "Kapoor", "Fitzgerald", "Cortez", "Ann", "Norris", "Wilkinson", "Barnett", "Chauhan", "Nunez", "Potter", "Padilla", "Agrawal", "Aquino", "Gallagher", "Pham", "Burgess", "Lyons", "Moss", "Sharp", "Warner", "Cheung", "Srivastava", "Iqbal", "Prasad", "Fernandes", "Fields", "Garza", "Dennis", "Holt", "Oneill", "Luna", "Rhodes", "Keller", "Vazquez", "Moon", "Estrada", "Reeves", "Acosta", "Prince", "Lai", "Rowe", "Farmer", "Guerrero", "Blair", "Wolf", "Garg", "Moran", "Becker", "Brady", "Caldwell", "Law", "Terry", "Barber", "Rios", "Powers", "Marsh", "Hale", "Baldwin", "Molina", "Todd", "Manning", "Neal", "Patrick", "Logan", "Maxwell", "Klein", "Yap", "Hammond", "Haynes", "Francisco", "Walton", "Vincent", "Mclaughlin", "Bowen", "Richard", "Thornton", "Waters", "Bush", "Aziz", "Goodwin", "Mclean", "Cabrera", "Parks", "Nicole", "Atkinson", "Chin", "Chung", "Sandoval", "Frank", "Barton", "Omar", "Osborne", "Bond", "Shepherd", "Chandler", "Lang", "Figueroa", "Kay", "Rodgers", "Alvarado", "Norman", "Fernando", "Flynn", "Desai", "Thomson", "Horton", "Nicholson", "Fraser", "Casey", "Maldonado", "Cummings", "Nash", "Wolfe", "Serrano", "Kerr", "Thakur", "French", "Amin", "Rojas", "Christensen", "Shop", "Tyler", "Mack", "Malone", "Ang", "Townsend", "Abbas", "Pereira", "Samuel", "Sweet", "Farrell", "Tiwari", "Robbins", "Dominguez", "Gibbs", "Contreras", "Hogan", "Graves", "Solomon", "Shelton", "Sam", "Buchanan", "Brennan", "Bruce", "Chowdhury", "Fischer", "Ma", "Griffith", "Mcgee", "Suarez", "Lo", "Erickson", "Cool", "Goodman", "Yates", "Christian", "Choi", "Butt", "Byrne", "Swanson", "Schwartz", "Bird", "Byrd", "Frazier", "Morton", "Vaughn", "Low", "Olsen", "Summers", "Goh", "Petersen", "Soni", "Sinha", "Perera", "Booth", "Anand", "Garner", "Pineda", "Campos", "Baxter", "Bryan", "Mckay", "Harrington", "Jay", "Mcdaniel", "Wall", "Ramsey", "Chow", "Barry", "Lamb", "Robles", "Fuentes", "Valencia", "Lu", "Leblanc", "Stokes", "Drake", "Mckinney", "Kamal", "Briggs", "Curry", "Muhammad", "Glover", "Cannon", "Mejia", "Carey", "Grace", "Duran", "Ghosh", "Colon", "Roman", "Ingram", "Guy", "Avila", "Mahmoud", "Thapa", "Kane", "Hodges", "Leon", "Adam", "Pratt", "Raza", "Pearce", "Khalid", "Gabriel", "Saad", "Chu", "Rosales", "Kent", "Mcguire", "Nolan", "Clayton", "Wise", "Costa", "Savage", "Tate", "Manuel", "Chandra", "Jacob", "Abraham", "Mcbride", "Adel", "Mccormick", "Chaudhary", "Frost", "Sherman", "Harding", "Sparks", "Abbott", "Mullins", "Larsen", "Zimmerman", "Dee", "Norton", "Franco", "Skinner", "Hanna", "Carson", "Rodrigues", "Gurung", "Stephenson", "Griffiths", "Wilkins", "Bauer", "Shetty", "Goyal", "Dsouza", "Malhotra", "Bansal", "Hubbard", "Kemp", "Pope", "Saini", "Jose", "Reese", "Kirk", "Hampton", "Hines", "Soriano", "Preston", "Ferreira", "Aggarwal", "Poole", "Hutchinson", "Johns", "Burnett", "Bowers", "Short", "Snow", "Moody", "Randall", "Power", "Choudhary", "Joy", "Noble", "Foley", "Sinclair", "Harmon", "Mathews", "Solis", "House", "Rock", "Aja", "Rich", "Babu", "Mueller", "Jack", "Buckley", "Gross", "Tolentino", "Benjamin", "Rosario", "Small", "Ayala", "Pacheco", "Monroe", "Best", "Shukla", "Houston", "Espinoza", "Maria", "Bhatia", "Enriquez", "Schroeder", "Mcintyre", "Heath", "Kramer", "Kirby", "Levy", "Mohan", "Lara", "Saeed", "Dalton", "Han", "Chase", "Mathew", "Ling", "Cain", "Gates", "Holloway", "Gee", "Muller", "Adkins", "Calderon", "Sheikh", "Bartlett", "Joe", "Patton", "Hood", "Strickland", "Collier", "Santana", "Odonnell", "Atkins", "Marks", "Duffy", "Allison", "Velez", "Mcintosh", "Hancock", "Krishna", "Ocampo", "Sun", "Dillon", "Saleh", "Cooke", "Fitzpatrick", "Saxena", "Conway", "Hong", "Maher", "Khanna", "Wijaya", "Mcleod", "Sweeney", "Conner", "Valentine", "Andrade", "Floyd", "Moses", "Kulkarni", "Wilcox", "Camacho", "Krishnan", "Underwood", "Berg", "Dyer", "Prakash", "Elizabeth", "Mcmahon", "Velasquez", "Blue", "Cullen", "Bass", "Velasco", "Roth", "Koh", "Sutherland", "Flowers", "Morrow", "Hartman", "Tanner", "Boyle", "Brock", "Aguirre", "Ballard", "Dizon", "Cobb", "Domingo", "Siddiqui", "Shields", "Nielsen", "Stuart", "Peter", "Bear", "Massey", "Bernard", "Raymond", "Sawyer", "Samson", "Howe", "Dickson", "Cat", "Wyatt", "Leong", "Salinas", "Ashraf", "Antonio", "Zamora", "Bradford", "English", "Forbes", "York", "Middleton", "Meyers", "Joyce", "Reilly", "Davenport", "B", "Mohammad", "Bradshaw", "Walter", "Gomes", "Bee", "Hodge", "Smart", "Ashley", "Jean", "Valenzuela", "Mcmillan", "Javier", "Xu", "Greer", "Said", "Uddin", "Anwar", "Spence", "Donovan", "Horn", "Hobbs", "Barr", "Lindsey", "Whitehead", "Montoya", "Russo", "Jefferson", "Guerra", "Alex", "Villa", "Weiss", "Ansari", "Rivas", "Raja", "Andersen", "Mohd", "Copeland", "M", "Rehman", "Bridges", "Go", "Teo", "Mittal", "Vaughan", "Ram", "Kang", "Browne", "Shannon", "Carrillo", "Hess", "Jane", "Huynh", "Rashid", "Sheppard", "Saha", "Sampson", "S", "Mark", "Decker", "Goel", "Osman", "Haddad", "Slater", "Anne", "Gould", "Mcgrath", "Bentley", "Giles", "Keith", "Ferrer", "Donnelly", "Salas", "Knox", "Mostafa", "Whitaker", "Strong", "Pascual", "Peralta", "Eaton", "Starr", "Jarvis", "Singleton", "Daly", "Khoury", "Lindsay", "Mac", "Doherty", "Cervantes", "Gandhi", "Koch", "Mackenzie", "Yee", "Stark", "Archer", "Winter", "Dale", "Stafford", "Hurst", "Phelps", "Leach", "Winters", "Bhardwaj", "Humphrey", "Felix", "Gillespie", "Jha", "Hewitt", "Salah", "Khalil", "Salvador", "Connolly", "Cochran", "Qureshi", "Oconnell", "Woodward", "Shaffer", "Bhatt", "Church", "Donaldson", "Tam", "Albert", "Espinosa", "Oliveira", "Castaneda", "Nixon", "Jo", "Lozano", "Sim", "Grimes", "Clements", "Mccann", "Cardenas", "Landry", "Mustafa", "Delacruz", "Juarez", "Roach", "Mcdowell", "Hurley" }; private static string[] _lorem = { "Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "Suspendisse", "tempus", "sapien", "maximus", "dictum", "pretium", "tellus", "dui", "tincidunt", "massa", "lobortis", "pellentesque", "dolor", "ligula", "et", "nulla" }; private static string[] _departments = { "Legal", "Marketing", "Business Development", "Services", "Support", "Human Resources", "Sales", "Product Management", "Engineering", "Training", "Accounting", "Research and Development" }; private static string[] _jobTitles = { "Sales Representative", "Structural Engineer", "Payment Adjustment Coordinator", "Senior Editor", "Nurse Practicioner", "Occupational Therapist", "Director of Sales", "Safety Technician", "Account Executive", "Marketing Manager", "Food Chemist", "Civil Engineer", "Associate Professor", "Statistician", "Research Nurse", "Data Coordinator", "Chief Design Engineer", "Computer Systems Analyst", "Environmental Tech", "Administrative Officer", "Social Worker", "Executive Secretary", "Help Desk", "Analyst Programmer", "Developer", "Programmer Analyst", "Software Test Engineer", "Biostatistician", "Office Assistant", "Systems Administrator", "Automation Specialist", "Analog Circuit Design manager", "Structural Analysis Engineer", "Technical Writer", "Software Engineer", "Budget/Accounting Analyst IV", "GIS Technical Architect", "Speech Pathologist", "Research Assistant", "Nuclear Power Engineer", "Quality Control Specialist", "General Manager", "Accountant", "Account Coordinator", "Operator", "Junior Executive", "Geological Engineer", "Recruiting Manager", "Financial Analyst", "Marketing Assistant", "Electrical Engineer", "Internal Auditor", "Paralegal", "Senior Developer", "VP Quality Control", "Media Manager", "Senior Sales Associate", "Product Engineer", "Quality Engineer", "VP Marketing", "Health Coach", "Legal Assistant", "Dental Hygienist", "Information Systems Manager", "Pharmacist", "Desktop Support Technician", "Staff Scientist", "Project Manager", "Technician", "Mechanical Systems Engineer", "Assistant Manager", "Assistant Media Planner", "Teacher", "Registered Nurse", "Sales Associate", "Geologist", "Physical Therapy Assistant" }; private static string[] _countries = { "Afghanistan", "land Islands", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahrain", "Bahamas", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia, Plurinational State of", "Bonaire, Sint Eustatius and Saba", "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo", "Congo, the Democratic Republic of the", "Cook Islands", "Costa Rica", "Cte d'Ivoire", "Croatia", "Cuba", "Curaao", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Falkland Islands (Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern Territories", "Gabon", "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guernsey", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island and McDonald Islands", "Holy See (Vatican City State)", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran, Islamic Republic of", "Iraq", "Ireland", "Isle of Man", "Israel", "Italy", "Jamaica", "Japan", "Jersey", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea", "Kuwait", "Kyrgyzstan", "Lao People's Democratic Republic", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao", "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova, Republic of", "Monaco", "Mongolia", "Montenegro", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Palestine, State of", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", "Runion", "Romania", "Russian Federation", "Rwanda", "Saint Barthlemy", "Saint Helena", "Saint Kitts and Nevis", "Saint Lucia", "Saint Martin (French part)", "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Sint Maarten (Dutch part)", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Sudan", "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Timor-Leste", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela, Bolivarian Republic of", "Viet Nam", "Virgin Islands, British", "Virgin Islands, U.S.", "Wallis and Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe" }; private static string[] _languages = { "English", "Mandarin Chinese", "Hindi", "Spanish", "French", "Standard Arabic", "Bengali", "Russian", "Portuguese", "Indonesian", "Urdu", "Standard German", "Japanese", "Swahili", "Marathi", "Telugu", "Western Punjabi", "Wu Chinese", "Tamil", "Turkish", "Korean", "Vietnamese", "Yue Chinese", "Javanese", "Italian", "Egyptian Spoken Arabic", "Hausa", "Thai", "Gujarati", "Kannada", "Iranian Persian", "Bhojpuri", "Southern Min Chinese", "Hakka Chinese", "Jinyu Chinese", "Filipino", "Burmese", "Polish", "Yoruba", "Odia", "Malayalam ", "Xiang Chinese", "Maithili", "Ukrainian", "Moroccan Spoken Arabic", "Eastern Punjabi", "Sunda", "Algerian Spoken Arabic", "Sundanese Spoken Arabic", "Nigerian Pidgin", "Zulu", "Igbo", "Amharic", "Northern Uzbek", "Sindhi", "North Levantine Spoken Arabic", "Nepali", "Romanian", "Tagalog", "Dutch", "Sa'idi Spoken Arabic", "Gan Chinese", "Northern Pashto", "Magahi", "Saraiki", "Xhosa", "Malay", "Khmer", "Afrikaans", "Sinhala", "Somali", "Chhattisgarhi", "Cebuano", "Mesopotamian Spoken Arabic", "Assamese", "Northeastern Thai", "Northern Kurdish", "Hijazi Spoken Arabic", "Nigerian Fulfulde", "Bavarian", "Bamanankan", "South Azerbaijani", "Northern Sotho", "Setswana", "Souther Sotho", "Czech", "Greek", "Chittagonian", "Kazakh", "Swedish", "Deccan", "Hungarian", "Jula", "Sadri", "Kinyarwanda", "Cameroonian Pidgin", "Sylheti", "South Levantine Spoken Arabic", "Tunisian Spoken Arabic", "Sanaani Spoken Arabic" }; private static string[] _skuDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "W", "X", "Y", "Z" }; } ================================================ FILE: ConsoleApp1/Tools/Faker.cs ================================================ using LiteDB; internal static partial class Faker { private static Random _random = new Random(420); public static string Fullname() { var names = _random.NextBool() ? _maleNames : _femaleNames; return names[_random.Next(names.Length - 1)] + " " + _surNames[_random.Next(_surNames.Length - 1)]; } public static int Age() { return _random.Next(18, 96); } public static DateTime Birthday() { var oldest = DateTime.Today.AddYears(-110).Ticks; var now = DateTime.Now.Ticks; var range = now - oldest; var date = new DateTime(oldest + _random.NextLong(0, range)); return date; } public static string Lorem(int size, int end = -1) { return string.Join(" ", Enumerable.Range(1, end == -1 ? size : _random.Next(size, end)) .Select(x => _lorem[_random.Next(_lorem.Length - 1)])); } public static int Next(int start, int end) { return _random.Next(start, end); } public static double NextDouble(double start, double end) { return start + (_random.NextDouble() * (end - start)); } // https://stackoverflow.com/a/13095144/3286260 public static long NextLong(this Random random, long min, long max) { if (max <= min) throw new ArgumentOutOfRangeException("max", "max must be > min!"); //Working with ulong so that modulo works correctly with values > long.MaxValue ulong uRange = (ulong)(max - min); //Prevent a modolo bias; see https://stackoverflow.com/a/10984975/238419 //for more information. //In the worst case, the expected number of calls is 2 (though usually it's //much closer to 1) so this loop doesn't really hurt performance at all. ulong ulongRand; do { byte[] buf = new byte[8]; random.NextBytes(buf); ulongRand = (ulong)BitConverter.ToInt64(buf, 0); } while (ulongRand > ulong.MaxValue - ((ulong.MaxValue % uRange) + 1) % uRange); return (long)(ulongRand % uRange) + min; } public static bool NextBool(this Random random) { return random.NextSingle() >= 0.5; } public static string Departments() => _departments[_random.Next(0, _departments.Length - 1)]; internal static BsonValue Created() { var oldest = DateTime.Today.AddYears(-5).Ticks; var now = DateTime.Now.Ticks; var range = now - oldest; var date = new DateTime(oldest + _random.NextLong(0, range)); return date; } public static string Language() => _departments[_random.Next(0, _departments.Length - 1)]; public static string Department() => _departments[_random.Next(0, _departments.Length - 1)]; public static string Country() => _countries[_random.Next(0, _countries.Length - 1)]; public static string Job() => _jobTitles[_random.Next(0, _jobTitles.Length - 1)]; internal static string SkuNumber() => string.Join("", Enumerable.Range(1, 8).Select(x => _skuDigits[_random.Next(0, _skuDigits.Length - 1)])); } ================================================ FILE: LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014-2022 Mauricio David Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: LiteDB/Client/Database/Collections/Aggregate.cs ================================================ using System; using System.Linq; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { #region Count /// /// Get document count in collection /// public int Count() { // do not use indexes - collections has DocumentCount property return this.Query().Count(); } /// /// Get document count in collection using predicate filter expression /// public int Count(BsonExpression predicate) { if (predicate == null) throw new ArgumentNullException(nameof(predicate)); return this.Query().Where(predicate).Count(); } /// /// Get document count in collection using predicate filter expression /// public int Count(string predicate, BsonDocument parameters) => this.Count(BsonExpression.Create(predicate, parameters)); /// /// Get document count in collection using predicate filter expression /// public int Count(string predicate, params BsonValue[] args) => this.Count(BsonExpression.Create(predicate, args)); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// public int Count(Expression> predicate) => this.Count(_mapper.GetExpression(predicate)); /// /// Get document count in collection using predicate filter expression /// public int Count(Query query) => new LiteQueryable(_engine, _mapper, _collection, query).Count(); #endregion #region LongCount /// /// Get document count in collection /// public long LongCount() { return this.Query().LongCount(); } /// /// Get document count in collection using predicate filter expression /// public long LongCount(BsonExpression predicate) { if (predicate == null) throw new ArgumentNullException(nameof(predicate)); return this.Query().Where(predicate).LongCount(); } /// /// Get document count in collection using predicate filter expression /// public long LongCount(string predicate, BsonDocument parameters) => this.LongCount(BsonExpression.Create(predicate, parameters)); /// /// Get document count in collection using predicate filter expression /// public long LongCount(string predicate, params BsonValue[] args) => this.LongCount(BsonExpression.Create(predicate, args)); /// /// Get document count in collection using predicate filter expression /// public long LongCount(Expression> predicate) => this.LongCount(_mapper.GetExpression(predicate)); /// /// Get document count in collection using predicate filter expression /// public long LongCount(Query query) => new LiteQueryable(_engine, _mapper, _collection, query).Count(); #endregion #region Exists /// /// Get true if collection contains at least 1 document that satisfies the predicate expression /// public bool Exists(BsonExpression predicate) { if (predicate == null) throw new ArgumentNullException(nameof(predicate)); return this.Query().Where(predicate).Exists(); } /// /// Get true if collection contains at least 1 document that satisfies the predicate expression /// public bool Exists(string predicate, BsonDocument parameters) => this.Exists(BsonExpression.Create(predicate, parameters)); /// /// Get true if collection contains at least 1 document that satisfies the predicate expression /// public bool Exists(string predicate, params BsonValue[] args) => this.Exists(BsonExpression.Create(predicate, args)); /// /// Get true if collection contains at least 1 document that satisfies the predicate expression /// public bool Exists(Expression> predicate) => this.Exists(_mapper.GetExpression(predicate)); /// /// Get true if collection contains at least 1 document that satisfies the predicate expression /// public bool Exists(Query query) => new LiteQueryable(_engine, _mapper, _collection, query).Exists(); #endregion #region Min/Max /// /// Returns the min value from specified key value in collection /// public BsonValue Min(BsonExpression keySelector) { if (string.IsNullOrEmpty(keySelector)) throw new ArgumentNullException(nameof(keySelector)); var doc = this.Query() .OrderBy(keySelector) .Select(keySelector) .ToDocuments() .First(); // return first field of first document return doc[doc.Keys.First()]; } /// /// Returns the min value of _id index /// public BsonValue Min() => this.Min("_id"); /// /// Returns the min value from specified key value in collection /// public K Min(Expression> keySelector) { if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); var expr = _mapper.GetExpression(keySelector); var value = this.Min(expr); return (K)_mapper.Deserialize(typeof(K), value); } /// /// Returns the max value from specified key value in collection /// public BsonValue Max(BsonExpression keySelector) { if (string.IsNullOrEmpty(keySelector)) throw new ArgumentNullException(nameof(keySelector)); var doc = this.Query() .OrderByDescending(keySelector) .Select(keySelector) .ToDocuments() .First(); // return first field of first document return doc[doc.Keys.First()]; } /// /// Returns the max _id index key value /// public BsonValue Max() => this.Max("_id"); /// /// Returns the last/max field using a linq expression /// public K Max(Expression> keySelector) { if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); var expr = _mapper.GetExpression(keySelector); var value = this.Max(expr); return (K)_mapper.Deserialize(typeof(K), value); } #endregion } } ================================================ FILE: LiteDB/Client/Database/Collections/Delete.cs ================================================ using System; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { /// /// Delete a single document on collection based on _id index. Returns true if document was deleted /// public bool Delete(BsonValue id) { if (id == null || id.IsNull) throw new ArgumentNullException(nameof(id)); return _engine.Delete(_collection, new [] { id }) == 1; } /// /// Delete all documents inside collection. Returns how many documents was deleted. Run inside current transaction /// public int DeleteAll() { return _engine.DeleteMany(_collection, null); } /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// public int DeleteMany(BsonExpression predicate) { if (predicate == null) throw new ArgumentNullException(nameof(predicate)); return _engine.DeleteMany(_collection, predicate); } /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// public int DeleteMany(string predicate, BsonDocument parameters) => this.DeleteMany(BsonExpression.Create(predicate, parameters)); /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// public int DeleteMany(string predicate, params BsonValue[] args) => this.DeleteMany(BsonExpression.Create(predicate, args)); /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// public int DeleteMany(Expression> predicate) => this.DeleteMany(_mapper.GetExpression(predicate)); } } ================================================ FILE: LiteDB/Client/Database/Collections/Find.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { /// /// Return a new LiteQueryable to build more complex queries /// public ILiteQueryable Query() { return new LiteQueryable(_engine, _mapper, _collection, new Query()).Include(_includes); } #region Find /// /// Find documents inside a collection using predicate expression. /// public IEnumerable Find(BsonExpression predicate, int skip = 0, int limit = int.MaxValue) { if (predicate == null) throw new ArgumentNullException(nameof(predicate)); return this.Query() .Include(_includes) .Where(predicate) .Skip(skip) .Limit(limit) .ToEnumerable(); } /// /// Find documents inside a collection using query definition. /// public IEnumerable Find(Query query, int skip = 0, int limit = int.MaxValue) { if (query == null) throw new ArgumentNullException(nameof(query)); if (skip != 0) query.Offset = skip; if (limit != int.MaxValue) query.Limit = limit; return new LiteQueryable(_engine, _mapper, _collection, query) .ToEnumerable(); } /// /// Find documents inside a collection using predicate expression. /// public IEnumerable Find(Expression> predicate, int skip = 0, int limit = int.MaxValue) => this.Find(_mapper.GetExpression(predicate), skip, limit); #endregion #region FindById + One + All /// /// Find a document using Document Id. Returns null if not found. /// public T FindById(BsonValue id) { if (id == null || id.IsNull) throw new ArgumentNullException(nameof(id)); return this.Find(BsonExpression.Create("_id = @0", id)).FirstOrDefault(); } /// /// Find the first document using predicate expression. Returns null if not found /// public T FindOne(BsonExpression predicate) => this.Find(predicate).FirstOrDefault(); /// /// Find the first document using predicate expression. Returns null if not found /// public T FindOne(string predicate, BsonDocument parameters) => this.FindOne(BsonExpression.Create(predicate, parameters)); /// /// Find the first document using predicate expression. Returns null if not found /// public T FindOne(BsonExpression predicate, params BsonValue[] args) => this.FindOne(BsonExpression.Create(predicate, args)); /// /// Find the first document using predicate expression. Returns null if not found /// public T FindOne(Expression> predicate) => this.FindOne(_mapper.GetExpression(predicate)); /// /// Find the first document using defined query structure. Returns null if not found /// public T FindOne(Query query) => this.Find(query).FirstOrDefault(); /// /// Returns all documents inside collection order by _id index. /// public IEnumerable FindAll() => this.Query().Include(_includes).ToEnumerable(); #endregion } } ================================================ FILE: LiteDB/Client/Database/Collections/Include.cs ================================================ using System; using System.Linq; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { /// /// Run an include action in each document returned by Find(), FindById(), FindOne() and All() methods to load DbRef documents /// Returns a new Collection with this action included /// public ILiteCollection Include(Expression> keySelector) { if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); var path = _mapper.GetExpression(keySelector); return this.Include(path); } /// /// Run an include action in each document returned by Find(), FindById(), FindOne() and All() methods to load DbRef documents /// Returns a new Collection with this action included /// public ILiteCollection Include(BsonExpression keySelector) { if (string.IsNullOrEmpty(keySelector)) throw new ArgumentNullException(nameof(keySelector)); // cloning this collection and adding this include var newcol = new LiteCollection(_collection, _autoId, _engine, _mapper); newcol._includes.AddRange(_includes); newcol._includes.Add(keySelector); return newcol; } } } ================================================ FILE: LiteDB/Client/Database/Collections/Index.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Index name - unique name for this collection /// Create a custom expression function to be indexed /// If is a unique index public bool EnsureIndex(string name, BsonExpression expression, bool unique = false) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(nameof(name)); if (expression == null) throw new ArgumentNullException(nameof(expression)); return _engine.EnsureIndex(_collection, name, expression, unique); } /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Document field/expression /// If is a unique index public bool EnsureIndex(BsonExpression expression, bool unique = false) { if (expression == null) throw new ArgumentNullException(nameof(expression)); var name = Regex.Replace(expression.Source, @"[^a-z0-9]", "", RegexOptions.IgnoreCase | RegexOptions.Compiled); return this.EnsureIndex(name, expression, unique); } /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? public bool EnsureIndex(Expression> keySelector, bool unique = false) { var expression = this.GetIndexExpression(keySelector); return this.EnsureIndex(expression, unique); } /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// Index name - unique name for this collection /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? public bool EnsureIndex(string name, Expression> keySelector, bool unique = false) { var expression = this.GetIndexExpression(keySelector); return this.EnsureIndex(name, expression, unique); } /// /// Get index expression based on LINQ expression. Convert IEnumerable in MultiKey indexes /// private BsonExpression GetIndexExpression(Expression> keySelector) { var expression = _mapper.GetIndexExpression(keySelector); if (typeof(K).IsEnumerable() && expression.IsScalar == true) { if (expression.Type == BsonExpressionType.Path) { // convert LINQ expression that returns an IEnumerable but expression returns a single value // `x => x.Phones` --> `$.Phones[*]` // works only if exression is a simple path expression = expression.Source + "[*]"; } else { throw new LiteException(0, $"Expression `{expression.Source}` must return a enumerable expression"); } } return expression; } /// /// Drop index and release slot for another index /// public bool DropIndex(string name) { return _engine.DropIndex(_collection, name); } } } ================================================ FILE: LiteDB/Client/Database/Collections/Insert.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { /// /// Insert a new entity to this collection. Document Id must be a new value in collection - Returns document Id /// public BsonValue Insert(T entity) { if (entity == null) throw new ArgumentNullException(nameof(entity)); var doc = _mapper.ToDocument(entity); var removed = this.RemoveDocId(doc); _engine.Insert(_collection, new[] { doc }, _autoId); var id = doc["_id"]; // checks if must update _id value in entity if (removed) { _id.Setter(entity, id.RawValue); } return id; } /// /// Insert a new document to this collection using passed id value. /// public void Insert(BsonValue id, T entity) { if (entity == null) throw new ArgumentNullException(nameof(entity)); if (id == null || id.IsNull) throw new ArgumentNullException(nameof(id)); var doc = _mapper.ToDocument(entity); doc["_id"] = id; _engine.Insert(_collection, new [] { doc }, _autoId); } /// /// Insert an array of new documents to this collection. Document Id must be a new value in collection. Can be set buffer size to commit at each N documents /// public int Insert(IEnumerable entities) { if (entities == null) throw new ArgumentNullException(nameof(entities)); return _engine.Insert(_collection, this.GetBsonDocs(entities), _autoId); } /// /// Implements bulk insert documents in a collection. Usefull when need lots of documents. /// [Obsolete("Use normal Insert()")] public int InsertBulk(IEnumerable entities, int batchSize = 5000) { if (entities == null) throw new ArgumentNullException(nameof(entities)); return _engine.Insert(_collection, this.GetBsonDocs(entities), _autoId); } /// /// Convert each T document in a BsonDocument, setting autoId for each one /// private IEnumerable GetBsonDocs(IEnumerable documents) { foreach (var document in documents) { var doc = _mapper.ToDocument(document); var removed = this.RemoveDocId(doc); yield return doc; if (removed && _id != null) { _id.Setter(document, doc["_id"].RawValue); } } } /// /// Remove document _id if contains a "empty" value (checks for autoId bson type) /// private bool RemoveDocId(BsonDocument doc) { if (_id != null && doc.TryGetValue("_id", out var id)) { // check if exists _autoId and current id is "empty" if ((_autoId == BsonAutoId.Int32 && (id.IsInt32 && id.AsInt32 == 0)) || (_autoId == BsonAutoId.ObjectId && (id.IsNull || (id.IsObjectId && id.AsObjectId == ObjectId.Empty))) || (_autoId == BsonAutoId.Guid && id.IsGuid && id.AsGuid == Guid.Empty) || (_autoId == BsonAutoId.Int64 && id.IsInt64 && id.AsInt64 == 0)) { // in this cases, remove _id and set new value after doc.Remove("_id"); return true; } } return false; } } } ================================================ FILE: LiteDB/Client/Database/Collections/Update.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { /// /// Update a document in this collection. Returns false if not found document in collection /// public bool Update(T entity) { if (entity == null) throw new ArgumentNullException(nameof(entity)); // get BsonDocument from object var doc = _mapper.ToDocument(entity); return _engine.Update(_collection, new BsonDocument[] { doc }) > 0; } /// /// Update a document in this collection. Returns false if not found document in collection /// public bool Update(BsonValue id, T entity) { if (entity == null) throw new ArgumentNullException(nameof(entity)); if (id == null || id.IsNull) throw new ArgumentNullException(nameof(id)); // get BsonDocument from object var doc = _mapper.ToDocument(entity); // set document _id using id parameter doc["_id"] = id; return _engine.Update(_collection, new BsonDocument[] { doc }) > 0; } /// /// Update all documents /// public int Update(IEnumerable entities) { if (entities == null) throw new ArgumentNullException(nameof(entities)); return _engine.Update(_collection, entities.Select(x => _mapper.ToDocument(x))); } /// /// Update many documents based on transform expression. This expression must return a new document that will be replaced over current document (according with predicate). /// Eg: col.UpdateMany("{ Name: UPPER($.Name), Age }", "_id > 0") /// public int UpdateMany(BsonExpression transform, BsonExpression predicate) { if (transform == null) throw new ArgumentNullException(nameof(transform)); if (predicate == null) throw new ArgumentNullException(nameof(predicate)); if (transform.Type != BsonExpressionType.Document) { throw new ArgumentException("Extend expression must return a document. Eg: `col.UpdateMany('{ Name: UPPER(Name) }', 'Age > 10')`"); } return _engine.UpdateMany(_collection, transform, predicate); } /// /// Update many document based on merge current document with extend expression. Use your class with initializers. /// Eg: col.UpdateMany(x => new Customer { Name = x.Name.ToUpper(), Salary: 100 }, x => x.Name == "John") /// public int UpdateMany(Expression> extend, Expression> predicate) { if (extend == null) throw new ArgumentNullException(nameof(extend)); if (predicate == null) throw new ArgumentNullException(nameof(predicate)); var ext = _mapper.GetExpression(extend); var pred = _mapper.GetExpression(predicate); if (ext.Type != BsonExpressionType.Document) { throw new ArgumentException("Extend expression must return an anonymous class to be merge with entities. Eg: `col.UpdateMany(x => new { Name = x.Name.ToUpper() }, x => x.Age > 10)`"); } return _engine.UpdateMany(_collection, ext, pred); } } } ================================================ FILE: LiteDB/Client/Database/Collections/Upsert.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public partial class LiteCollection { /// /// Insert or Update a document in this collection. /// public bool Upsert(T entity) { if (entity == null) throw new ArgumentNullException(nameof(entity)); return this.Upsert(new T[] { entity }) == 1; } /// /// Insert or Update all documents /// public int Upsert(IEnumerable entities) { if (entities == null) throw new ArgumentNullException(nameof(entities)); return _engine.Upsert(_collection, this.GetBsonDocs(entities), _autoId); } /// /// Insert or Update a document in this collection. /// public bool Upsert(BsonValue id, T entity) { if (entity == null) throw new ArgumentNullException(nameof(entity)); if (id == null || id.IsNull) throw new ArgumentNullException(nameof(id)); // get BsonDocument from object var doc = _mapper.ToDocument(entity); // set document _id using id parameter doc["_id"] = id; return _engine.Upsert(_collection, new[] { doc }, _autoId) > 0; } } } ================================================ FILE: LiteDB/Client/Database/ILiteCollection.cs ================================================ using System; using System.Collections.Generic; using System.Linq.Expressions; namespace LiteDB { public interface ILiteCollection { /// /// Get collection name /// string Name { get; } /// /// Get collection auto id type /// BsonAutoId AutoId { get; } /// /// Getting entity mapper from current collection. Returns null if collection are BsonDocument type /// EntityMapper EntityMapper { get; } /// /// Run an include action in each document returned by Find(), FindById(), FindOne() and All() methods to load DbRef documents /// Returns a new Collection with this action included /// ILiteCollection Include(Expression> keySelector); /// /// Run an include action in each document returned by Find(), FindById(), FindOne() and All() methods to load DbRef documents /// Returns a new Collection with this action included /// ILiteCollection Include(BsonExpression keySelector); /// /// Insert or Update a document in this collection. /// bool Upsert(T entity); /// /// Insert or Update all documents /// int Upsert(IEnumerable entities); /// /// Insert or Update a document in this collection. /// bool Upsert(BsonValue id, T entity); /// /// Update a document in this collection. Returns false if not found document in collection /// bool Update(T entity); /// /// Update a document in this collection. Returns false if not found document in collection /// bool Update(BsonValue id, T entity); /// /// Update all documents /// int Update(IEnumerable entities); /// /// Update many documents based on transform expression. This expression must return a new document that will be replaced over current document (according with predicate). /// Eg: col.UpdateMany("{ Name: UPPER($.Name), Age }", "_id > 0") /// int UpdateMany(BsonExpression transform, BsonExpression predicate); /// /// Update many document based on merge current document with extend expression. Use your class with initializers. /// Eg: col.UpdateMany(x => new Customer { Name = x.Name.ToUpper(), Salary: 100 }, x => x.Name == "John") /// int UpdateMany(Expression> extend, Expression> predicate); /// /// Insert a new entity to this collection. Document Id must be a new value in collection - Returns document Id /// BsonValue Insert(T entity); /// /// Insert a new document to this collection using passed id value. /// void Insert(BsonValue id, T entity); /// /// Insert an array of new documents to this collection. Document Id must be a new value in collection. Can be set buffer size to commit at each N documents /// int Insert(IEnumerable entities); /// /// Implements bulk insert documents in a collection. Usefull when need lots of documents. /// int InsertBulk(IEnumerable entities, int batchSize = 5000); /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Index name - unique name for this collection /// Create a custom expression function to be indexed /// If is a unique index bool EnsureIndex(string name, BsonExpression expression, bool unique = false); /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Document field/expression /// If is a unique index bool EnsureIndex(BsonExpression expression, bool unique = false); /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? bool EnsureIndex(Expression> keySelector, bool unique = false); /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// Index name - unique name for this collection /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? bool EnsureIndex(string name, Expression> keySelector, bool unique = false); /// /// Drop index and release slot for another index /// bool DropIndex(string name); /// /// Return a new LiteQueryable to build more complex queries /// ILiteQueryable Query(); /// /// Find documents inside a collection using predicate expression. /// IEnumerable Find(BsonExpression predicate, int skip = 0, int limit = int.MaxValue); /// /// Find documents inside a collection using query definition. /// IEnumerable Find(Query query, int skip = 0, int limit = int.MaxValue); /// /// Find documents inside a collection using predicate expression. /// IEnumerable Find(Expression> predicate, int skip = 0, int limit = int.MaxValue); /// /// Find a document using Document Id. Returns null if not found. /// T FindById(BsonValue id); /// /// Find the first document using predicate expression. Returns null if not found /// T FindOne(BsonExpression predicate); /// /// Find the first document using predicate expression. Returns null if not found /// T FindOne(string predicate, BsonDocument parameters); /// /// Find the first document using predicate expression. Returns null if not found /// T FindOne(BsonExpression predicate, params BsonValue[] args); /// /// Find the first document using predicate expression. Returns null if not found /// T FindOne(Expression> predicate); /// /// Find the first document using defined query structure. Returns null if not found /// T FindOne(Query query); /// /// Returns all documents inside collection order by _id index. /// IEnumerable FindAll(); /// /// Delete a single document on collection based on _id index. Returns true if document was deleted /// bool Delete(BsonValue id); /// /// Delete all documents inside collection. Returns how many documents was deleted. Run inside current transaction /// int DeleteAll(); /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// int DeleteMany(BsonExpression predicate); /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// int DeleteMany(string predicate, BsonDocument parameters); /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// int DeleteMany(string predicate, params BsonValue[] args); /// /// Delete all documents based on predicate expression. Returns how many documents was deleted /// int DeleteMany(Expression> predicate); /// /// Get document count using property on collection. /// int Count(); /// /// Count documents matching a query. This method does not deserialize any document. Needs indexes on query expression /// int Count(BsonExpression predicate); /// /// Count documents matching a query. This method does not deserialize any document. Needs indexes on query expression /// int Count(string predicate, BsonDocument parameters); /// /// Count documents matching a query. This method does not deserialize any document. Needs indexes on query expression /// int Count(string predicate, params BsonValue[] args); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// int Count(Expression> predicate); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// int Count(Query query); /// /// Get document count using property on collection. /// long LongCount(); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// long LongCount(BsonExpression predicate); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// long LongCount(string predicate, BsonDocument parameters); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// long LongCount(string predicate, params BsonValue[] args); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// long LongCount(Expression> predicate); /// /// Count documents matching a query. This method does not deserialize any documents. Needs indexes on query expression /// long LongCount(Query query); /// /// Returns true if query returns any document. This method does not deserialize any document. Needs indexes on query expression /// bool Exists(BsonExpression predicate); /// /// Returns true if query returns any document. This method does not deserialize any document. Needs indexes on query expression /// bool Exists(string predicate, BsonDocument parameters); /// /// Returns true if query returns any document. This method does not deserialize any document. Needs indexes on query expression /// bool Exists(string predicate, params BsonValue[] args); /// /// Returns true if query returns any document. This method does not deserialize any document. Needs indexes on query expression /// bool Exists(Expression> predicate); /// /// Returns true if query returns any document. This method does not deserialize any document. Needs indexes on query expression /// bool Exists(Query query); /// /// Returns the min value from specified key value in collection /// BsonValue Min(BsonExpression keySelector); /// /// Returns the min value of _id index /// BsonValue Min(); /// /// Returns the min value from specified key value in collection /// K Min(Expression> keySelector); /// /// Returns the max value from specified key value in collection /// BsonValue Max(BsonExpression keySelector); /// /// Returns the max _id index key value /// BsonValue Max(); /// /// Returns the last/max field using a linq expression /// K Max(Expression> keySelector); } } ================================================ FILE: LiteDB/Client/Database/ILiteDatabase.cs ================================================ using System; using System.Collections.Generic; using System.IO; using LiteDB.Engine; namespace LiteDB { public interface ILiteDatabase : IDisposable { /// /// Get current instance of BsonMapper used in this database instance (can be BsonMapper.Global) /// BsonMapper Mapper { get; } /// /// Returns a special collection for storage files/stream inside datafile. Use _files and _chunks collection names. FileId is implemented as string. Use "GetStorage" for custom options /// ILiteStorage FileStorage { get; } /// /// Get a collection using a entity class as strong typed document. If collection does not exits, create a new one. /// /// Collection name (case insensitive) /// Define autoId data type (when object contains no id field) ILiteCollection GetCollection(string name, BsonAutoId autoId = BsonAutoId.ObjectId); /// /// Get a collection using a name based on typeof(T).Name (BsonMapper.ResolveCollectionName function) /// ILiteCollection GetCollection(); /// /// Get a collection using a name based on typeof(T).Name (BsonMapper.ResolveCollectionName function) /// ILiteCollection GetCollection(BsonAutoId autoId); /// /// Get a collection using a generic BsonDocument. If collection does not exits, create a new one. /// /// Collection name (case insensitive) /// Define autoId data type (when document contains no _id field) ILiteCollection GetCollection(string name, BsonAutoId autoId = BsonAutoId.ObjectId); /// /// Initialize a new transaction. Transaction are created "per-thread". There is only one single transaction per thread. /// Return true if transaction was created or false if current thread already in a transaction. /// bool BeginTrans(); /// /// Commit current transaction /// bool Commit(); /// /// Rollback current transaction /// bool Rollback(); /// /// Get new instance of Storage using custom FileId type, custom "_files" collection name and custom "_chunks" collection. LiteDB support multiples file storages (using different files/chunks collection names) /// ILiteStorage GetStorage(string filesCollection = "_files", string chunksCollection = "_chunks"); /// /// Get all collections name inside this database. /// IEnumerable GetCollectionNames(); /// /// Checks if a collection exists on database. Collection name is case insensitive /// bool CollectionExists(string name); /// /// Drop a collection and all data + indexes /// bool DropCollection(string name); /// /// Rename a collection. Returns false if oldName does not exists or newName already exists /// bool RenameCollection(string oldName, string newName); /// /// Execute SQL commands and return as data reader. /// IBsonDataReader Execute(TextReader commandReader, BsonDocument parameters = null); /// /// Execute SQL commands and return as data reader /// IBsonDataReader Execute(string command, BsonDocument parameters = null); /// /// Execute SQL commands and return as data reader /// IBsonDataReader Execute(string command, params BsonValue[] args); /// /// Do database checkpoint. Copy all commited transaction from log file into datafile. /// void Checkpoint(); /// /// Rebuild all database to remove unused pages - reduce data file /// long Rebuild(RebuildOptions options = null); /// /// Get value from internal engine variables /// BsonValue Pragma(string name); /// /// Set new value to internal engine variables /// BsonValue Pragma(string name, BsonValue value); /// /// Get/Set database user version - use this version number to control database change model /// int UserVersion { get; set; } /// /// Get/Set database timeout - this timeout is used to wait for unlock using transactions /// TimeSpan Timeout { get; set; } /// /// Get/Set if database will deserialize dates in UTC timezone or Local timezone (default: Local) /// bool UtcDate { get; set; } /// /// Get/Set database limit size (in bytes). New value must be equals or larger than current database size /// long LimitSize { get; set; } /// /// Get/Set in how many pages (8 Kb each page) log file will auto checkpoint (copy from log file to data file). Use 0 to manual-only checkpoint (and no checkpoint on dispose) /// Default: 1000 pages /// int CheckpointSize { get; set; } /// /// Get database collection (this options can be changed only in rebuild proces) /// Collation Collation { get; } } } ================================================ FILE: LiteDB/Client/Database/ILiteQueryable.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace LiteDB { public interface ILiteQueryable : ILiteQueryableResult { ILiteQueryable Include(BsonExpression path); ILiteQueryable Include(List paths); ILiteQueryable Include(Expression> path); ILiteQueryable Where(BsonExpression predicate); ILiteQueryable Where(string predicate, BsonDocument parameters); ILiteQueryable Where(string predicate, params BsonValue[] args); ILiteQueryable Where(Expression> predicate); ILiteQueryable OrderBy(BsonExpression keySelector, int order = 1); ILiteQueryable OrderBy(Expression> keySelector, int order = 1); ILiteQueryable OrderByDescending(BsonExpression keySelector); ILiteQueryable OrderByDescending(Expression> keySelector); ILiteQueryable GroupBy(BsonExpression keySelector); ILiteQueryable Having(BsonExpression predicate); ILiteQueryableResult Select(BsonExpression selector); ILiteQueryableResult Select(Expression> selector); } public interface ILiteQueryableResult { ILiteQueryableResult Limit(int limit); ILiteQueryableResult Skip(int offset); ILiteQueryableResult Offset(int offset); ILiteQueryableResult ForUpdate(); BsonDocument GetPlan(); IBsonDataReader ExecuteReader(); IEnumerable ToDocuments(); IEnumerable ToEnumerable(); List ToList(); T[] ToArray(); int Into(string newCollection, BsonAutoId autoId = BsonAutoId.ObjectId); T First(); T FirstOrDefault(); T Single(); T SingleOrDefault(); int Count(); long LongCount(); bool Exists(); } } ================================================ FILE: LiteDB/Client/Database/ILiteRepository.cs ================================================ using System; using System.Collections.Generic; using System.Linq.Expressions; namespace LiteDB { public interface ILiteRepository : IDisposable { /// /// Get database instance /// ILiteDatabase Database { get; } /// /// Insert a new document into collection. Document Id must be a new value in collection - Returns document Id /// BsonValue Insert(T entity, string collectionName = null); /// /// Insert an array of new documents into collection. Document Id must be a new value in collection. Can be set buffer size to commit at each N documents /// int Insert(IEnumerable entities, string collectionName = null); /// /// Update a document into collection. Returns false if not found document in collection /// bool Update(T entity, string collectionName = null); /// /// Update all documents /// int Update(IEnumerable entities, string collectionName = null); /// /// Insert or Update a document based on _id key. Returns true if insert entity or false if update entity /// bool Upsert(T entity, string collectionName = null); /// /// Insert or Update all documents based on _id key. Returns entity count that was inserted /// int Upsert(IEnumerable entities, string collectionName = null); /// /// Delete entity based on _id key /// bool Delete(BsonValue id, string collectionName = null); /// /// Delete entity based on Query /// int DeleteMany(BsonExpression predicate, string collectionName = null); /// /// Delete entity based on predicate filter expression /// int DeleteMany(Expression> predicate, string collectionName = null); /// /// Returns new instance of LiteQueryable that provides all method to query any entity inside collection. Use fluent API to apply filter/includes an than run any execute command, like ToList() or First() /// ILiteQueryable Query(string collectionName = null); /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Index name - unique name for this collection /// Create a custom expression function to be indexed /// If is a unique index /// Collection Name bool EnsureIndex(string name, BsonExpression expression, bool unique = false, string collectionName = null); /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Create a custom expression function to be indexed /// If is a unique index /// Collection Name bool EnsureIndex(BsonExpression expression, bool unique = false, string collectionName = null); /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? /// Collection Name bool EnsureIndex(Expression> keySelector, bool unique = false, string collectionName = null); /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// Index name - unique name for this collection /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? /// Collection Name bool EnsureIndex(string name, Expression> keySelector, bool unique = false, string collectionName = null); /// /// Search for a single instance of T by Id. Shortcut from Query.SingleById /// T SingleById(BsonValue id, string collectionName = null); /// /// Execute Query[T].Where(predicate).ToList(); /// List Fetch(BsonExpression predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).ToList(); /// List Fetch(Expression> predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).First(); /// T First(BsonExpression predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).First(); /// T First(Expression> predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).FirstOrDefault(); /// T FirstOrDefault(BsonExpression predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).FirstOrDefault(); /// T FirstOrDefault(Expression> predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).Single(); /// T Single(BsonExpression predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).Single(); /// T Single(Expression> predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).SingleOrDefault(); /// T SingleOrDefault(BsonExpression predicate, string collectionName = null); /// /// Execute Query[T].Where(predicate).SingleOrDefault(); /// T SingleOrDefault(Expression> predicate, string collectionName = null); } } ================================================ FILE: LiteDB/Client/Database/LiteCollection.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB { public sealed partial class LiteCollection : ILiteCollection { private readonly string _collection; private readonly ILiteEngine _engine; private readonly List _includes; private readonly BsonMapper _mapper; private readonly EntityMapper _entity; private readonly MemberMapper _id; private readonly BsonAutoId _autoId; /// /// Get collection name /// public string Name => _collection; /// /// Get collection auto id type /// public BsonAutoId AutoId => _autoId; /// /// Getting entity mapper from current collection. Returns null if collection are BsonDocument type /// public EntityMapper EntityMapper => _entity; internal LiteCollection(string name, BsonAutoId autoId, ILiteEngine engine, BsonMapper mapper) { _collection = name ?? mapper.ResolveCollectionName(typeof(T)); _engine = engine; _mapper = mapper; _includes = new List(); // if strong typed collection, get _id member mapped (if exists) if (typeof(T) == typeof(BsonDocument)) { _entity = null; _id = null; _autoId = autoId; } else { _entity = mapper.GetEntityMapper(typeof(T)); _entity.WaitForInitialization(); _id = _entity.Id; if (_id != null && _id.AutoId) { _autoId = _id.DataType == typeof(Int32) || _id.DataType == typeof(Int32?) ? BsonAutoId.Int32 : _id.DataType == typeof(Int64) || _id.DataType == typeof(Int64?) ? BsonAutoId.Int64 : _id.DataType == typeof(Guid) || _id.DataType == typeof(Guid?) ? BsonAutoId.Guid : BsonAutoId.ObjectId; } else { _autoId = autoId; } } } } } ================================================ FILE: LiteDB/Client/Database/LiteDatabase.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Threading; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { /// /// The LiteDB database. Used for create a LiteDB instance and use all storage resources. It's the database connection /// public partial class LiteDatabase : ILiteDatabase { #region Properties private readonly ILiteEngine _engine; private readonly BsonMapper _mapper; private readonly bool _disposeOnClose; /// /// Get current instance of BsonMapper used in this database instance (can be BsonMapper.Global) /// public BsonMapper Mapper => _mapper; #endregion #region Ctor /// /// Starts LiteDB database using a connection string for file system database /// public LiteDatabase(string connectionString, BsonMapper mapper = null) : this(new ConnectionString(connectionString), mapper) { } /// /// Starts LiteDB database using a connection string for file system database /// public LiteDatabase(ConnectionString connectionString, BsonMapper mapper = null) { if (connectionString == null) throw new ArgumentNullException(nameof(connectionString)); _engine = connectionString.CreateEngine(); _mapper = mapper ?? BsonMapper.Global; _disposeOnClose = true; } /// /// Starts LiteDB database using a generic Stream implementation (mostly MemoryStream). /// /// DataStream reference /// BsonMapper mapper reference /// LogStream reference public LiteDatabase(Stream stream, BsonMapper mapper = null, Stream logStream = null) { var settings = new EngineSettings { DataStream = stream ?? throw new ArgumentNullException(nameof(stream)), LogStream = logStream }; _engine = new LiteEngine(settings); _mapper = mapper ?? BsonMapper.Global; _disposeOnClose = true; } /// /// Start LiteDB database using a pre-exiting engine. When LiteDatabase instance dispose engine instance will be disposed too /// public LiteDatabase(ILiteEngine engine, BsonMapper mapper = null, bool disposeOnClose = true) { _engine = engine ?? throw new ArgumentNullException(nameof(engine)); _mapper = mapper ?? BsonMapper.Global; _disposeOnClose = disposeOnClose; } #endregion #region Collections /// /// Get a collection using an entity class as strong typed document. If collection does not exist, create a new one. /// /// Collection name (case insensitive) /// Define autoId data type (when object contains no id field) public ILiteCollection GetCollection(string name, BsonAutoId autoId = BsonAutoId.ObjectId) { return new LiteCollection(name, autoId, _engine, _mapper); } /// /// Get a collection using a name based on typeof(T).Name (BsonMapper.ResolveCollectionName function) /// public ILiteCollection GetCollection() { return this.GetCollection(null); } /// /// Get a collection using a name based on typeof(T).Name (BsonMapper.ResolveCollectionName function) /// public ILiteCollection GetCollection(BsonAutoId autoId) { return this.GetCollection(null, autoId); } /// /// Get a collection using a generic BsonDocument. If collection does not exist, create a new one. /// /// Collection name (case insensitive) /// Define autoId data type (when document contains no _id field) public ILiteCollection GetCollection(string name, BsonAutoId autoId = BsonAutoId.ObjectId) { if (name.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name)); return new LiteCollection(name, autoId, _engine, _mapper); } #endregion #region Transaction /// /// Initialize a new transaction. Transaction are created "per-thread". There is only one single transaction per thread. /// Return true if transaction was created or false if current thread already in a transaction. /// public bool BeginTrans() => _engine.BeginTrans(); /// /// Commit current transaction /// public bool Commit() => _engine.Commit(); /// /// Rollback current transaction /// public bool Rollback() => _engine.Rollback(); #endregion #region FileStorage private ILiteStorage _fs = null; /// /// Returns a special collection for storage files/stream inside datafile. Use _files and _chunks collection names. FileId is implemented as string. Use "GetStorage" for custom options /// public ILiteStorage FileStorage { get { return _fs ?? (_fs = this.GetStorage()); } } /// /// Get new instance of Storage using custom FileId type, custom "_files" collection name and custom "_chunks" collection. LiteDB support multiples file storages (using different files/chunks collection names) /// public ILiteStorage GetStorage(string filesCollection = "_files", string chunksCollection = "_chunks") { return new LiteStorage(this, filesCollection, chunksCollection); } #endregion #region Shortcut /// /// Get all collections name inside this database. /// public IEnumerable GetCollectionNames() { // use $cols system collection with type = user only var cols = this.GetCollection("$cols") .Query() .Where("type = 'user'") .ToDocuments() .Select(x => x["name"].AsString) .ToArray(); return cols; } /// /// Checks if a collection exists on database. Collection name is case insensitive /// public bool CollectionExists(string name) { if (name.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name)); return this.GetCollectionNames().Contains(name, StringComparer.OrdinalIgnoreCase); } /// /// Drop a collection and all data + indexes /// public bool DropCollection(string name) { if (name.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name)); return _engine.DropCollection(name); } /// /// Rename a collection. Returns false if oldName does not exists or newName already exists /// public bool RenameCollection(string oldName, string newName) { if (oldName.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(oldName)); if (newName.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(newName)); return _engine.RenameCollection(oldName, newName); } #endregion #region Execute SQL /// /// Execute SQL commands and return as data reader. /// public IBsonDataReader Execute(TextReader commandReader, BsonDocument parameters = null) { if (commandReader == null) throw new ArgumentNullException(nameof(commandReader)); var tokenizer = new Tokenizer(commandReader); var sql = new SqlParser(_engine, tokenizer, parameters); var reader = sql.Execute(); return reader; } /// /// Execute SQL commands and return as data reader /// public IBsonDataReader Execute(string command, BsonDocument parameters = null) { if (command == null) throw new ArgumentNullException(nameof(command)); var tokenizer = new Tokenizer(command); var sql = new SqlParser(_engine, tokenizer, parameters); var reader = sql.Execute(); return reader; } /// /// Execute SQL commands and return as data reader /// public IBsonDataReader Execute(string command, params BsonValue[] args) { var p = new BsonDocument(); var index = 0; foreach (var arg in args) { p[index.ToString()] = arg; index++; } return this.Execute(command, p); } #endregion #region Checkpoint/Rebuild /// /// Do database checkpoint. Copy all commited transaction from log file into datafile. /// public void Checkpoint() { _engine.Checkpoint(); } /// /// Rebuild all database to remove unused pages - reduce data file /// public long Rebuild(RebuildOptions options = null) { return _engine.Rebuild(options ?? new RebuildOptions()); } #endregion #region Pragmas /// /// Get value from internal engine variables /// public BsonValue Pragma(string name) { return _engine.Pragma(name); } /// /// Set new value to internal engine variables /// public BsonValue Pragma(string name, BsonValue value) { return _engine.Pragma(name, value); } /// /// Get/Set database user version - use this version number to control database change model /// public int UserVersion { get => _engine.Pragma(Pragmas.USER_VERSION); set => _engine.Pragma(Pragmas.USER_VERSION, value); } /// /// Get/Set database timeout - this timeout is used to wait for unlock using transactions /// public TimeSpan Timeout { get => TimeSpan.FromSeconds(_engine.Pragma(Pragmas.TIMEOUT).AsInt32); set => _engine.Pragma(Pragmas.TIMEOUT, (int)value.TotalSeconds); } /// /// Get/Set if database will deserialize dates in UTC timezone or Local timezone (default: Local) /// public bool UtcDate { get => _engine.Pragma(Pragmas.UTC_DATE); set => _engine.Pragma(Pragmas.UTC_DATE, value); } /// /// Get/Set database limit size (in bytes). New value must be equals or larger than current database size /// public long LimitSize { get => _engine.Pragma(Pragmas.LIMIT_SIZE); set => _engine.Pragma(Pragmas.LIMIT_SIZE, value); } /// /// Get/Set in how many pages (8 Kb each page) log file will auto checkpoint (copy from log file to data file). Use 0 to manual-only checkpoint (and no checkpoint on dispose) /// Default: 1000 pages /// public int CheckpointSize { get => _engine.Pragma(Pragmas.CHECKPOINT); set => _engine.Pragma(Pragmas.CHECKPOINT, value); } /// /// Get database collection (this options can be changed only in rebuild proces) /// public Collation Collation { get => new Collation(_engine.Pragma(Pragmas.COLLATION).AsString); } #endregion public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } ~LiteDatabase() { this.Dispose(false); } protected virtual void Dispose(bool disposing) { if (disposing && _disposeOnClose) { _engine.Dispose(); } } } } ================================================ FILE: LiteDB/Client/Database/LiteQueryable.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; using static LiteDB.Constants; namespace LiteDB { /// /// An IQueryable-like class to write fluent query in documents in collection. /// public class LiteQueryable : ILiteQueryable { protected readonly ILiteEngine _engine; protected readonly BsonMapper _mapper; protected readonly string _collection; protected readonly Query _query; // indicate that T type are simple and result are inside first document fields (query always return a BsonDocument) private readonly bool _isSimpleType = Reflection.IsSimpleType(typeof(T)); internal LiteQueryable(ILiteEngine engine, BsonMapper mapper, string collection, Query query) { _engine = engine; _mapper = mapper; _collection = collection; _query = query; } #region Includes /// /// Load cross reference documents from path expression (DbRef reference) /// public ILiteQueryable Include(Expression> path) { _query.Includes.Add(_mapper.GetExpression(path)); return this; } /// /// Load cross reference documents from path expression (DbRef reference) /// public ILiteQueryable Include(BsonExpression path) { _query.Includes.Add(path); return this; } /// /// Load cross reference documents from path expression (DbRef reference) /// public ILiteQueryable Include(List paths) { _query.Includes.AddRange(paths); return this; } #endregion #region Where /// /// Filters a sequence of documents based on a predicate expression /// public ILiteQueryable Where(BsonExpression predicate) { _query.Where.Add(predicate); return this; } /// /// Filters a sequence of documents based on a predicate expression /// public ILiteQueryable Where(string predicate, BsonDocument parameters) { _query.Where.Add(BsonExpression.Create(predicate, parameters)); return this; } /// /// Filters a sequence of documents based on a predicate expression /// public ILiteQueryable Where(string predicate, params BsonValue[] args) { _query.Where.Add(BsonExpression.Create(predicate, args)); return this; } /// /// Filters a sequence of documents based on a predicate expression /// public ILiteQueryable Where(Expression> predicate) { return this.Where(_mapper.GetExpression(predicate)); } #endregion #region OrderBy /// /// Sort the documents of resultset in ascending (or descending) order according to a key (support only one OrderBy) /// public ILiteQueryable OrderBy(BsonExpression keySelector, int order = Query.Ascending) { if (_query.OrderBy != null) throw new ArgumentException("ORDER BY already defined in this query builder"); _query.OrderBy = keySelector; _query.Order = order; return this; } /// /// Sort the documents of resultset in ascending (or descending) order according to a key (support only one OrderBy) /// public ILiteQueryable OrderBy(Expression> keySelector, int order = Query.Ascending) { return this.OrderBy(_mapper.GetExpression(keySelector), order); } /// /// Sort the documents of resultset in descending order according to a key (support only one OrderBy) /// public ILiteQueryable OrderByDescending(BsonExpression keySelector) => this.OrderBy(keySelector, Query.Descending); /// /// Sort the documents of resultset in descending order according to a key (support only one OrderBy) /// public ILiteQueryable OrderByDescending(Expression> keySelector) => this.OrderBy(keySelector, Query.Descending); #endregion #region GroupBy /// /// Groups the documents of resultset according to a specified key selector expression (support only one GroupBy) /// public ILiteQueryable GroupBy(BsonExpression keySelector) { if (_query.GroupBy != null) throw new ArgumentException("GROUP BY already defined in this query"); _query.GroupBy = keySelector; return this; } #endregion #region Having /// /// Filter documents after group by pipe according to predicate expression (requires GroupBy and support only one Having) /// public ILiteQueryable Having(BsonExpression predicate) { if (_query.Having != null) throw new ArgumentException("HAVING already defined in this query"); _query.Having = predicate; return this; } #endregion #region Select /// /// Transform input document into a new output document. Can be used with each document, group by or all source /// public ILiteQueryableResult Select(BsonExpression selector) { _query.Select = selector; return new LiteQueryable(_engine, _mapper, _collection, _query); } /// /// Project each document of resultset into a new document/value based on selector expression /// public ILiteQueryableResult Select(Expression> selector) { if (_query.GroupBy != null) throw new ArgumentException("Use Select(BsonExpression selector) when using GroupBy query"); _query.Select = _mapper.GetExpression(selector); return new LiteQueryable(_engine, _mapper, _collection, _query); } #endregion #region Offset/Limit/ForUpdate /// /// Execute query locking collection in write mode. This is avoid any other thread change results after read document and before transaction ends /// public ILiteQueryableResult ForUpdate() { _query.ForUpdate = true; return this; } /// /// Bypasses a specified number of documents in resultset and retun the remaining documents (same as Skip) /// public ILiteQueryableResult Offset(int offset) { _query.Offset = offset; return this; } /// /// Bypasses a specified number of documents in resultset and retun the remaining documents (same as Offset) /// public ILiteQueryableResult Skip(int offset) => this.Offset(offset); /// /// Return a specified number of contiguous documents from start of resultset /// public ILiteQueryableResult Limit(int limit) { _query.Limit = limit; return this; } #endregion #region Execute Result /// /// Execute query and returns resultset as generic BsonDataReader /// public IBsonDataReader ExecuteReader() { _query.ExplainPlan = false; return _engine.Query(_collection, _query); } /// /// Execute query and return resultset as IEnumerable of documents /// public IEnumerable ToDocuments() { using (var reader = this.ExecuteReader()) { while (reader.Read()) { yield return reader.Current as BsonDocument; } } } /// /// Execute query and return resultset as IEnumerable of T. If T is a ValueType or String, return values only (not documents) /// public IEnumerable ToEnumerable() { if (_isSimpleType) { return this.ToDocuments() .Select(x => x[x.Keys.First()]) .Select(x => (T)_mapper.Deserialize(typeof(T), x)); } else { return this.ToDocuments() .Select(x => (T)_mapper.Deserialize(typeof(T), x)); } } /// /// Execute query and return results as a List /// public List ToList() { return this.ToEnumerable().ToList(); } /// /// Execute query and return results as an Array /// public T[] ToArray() { return this.ToEnumerable().ToArray(); } /// /// Get execution plan over current query definition to see how engine will execute query /// public BsonDocument GetPlan() { _query.ExplainPlan = true; var reader = _engine.Query(_collection, _query); return reader.ToEnumerable().FirstOrDefault()?.AsDocument; } #endregion #region Execute Single/First /// /// Returns the only document of resultset, and throw an exception if there not exactly one document in the sequence /// public T Single() { return this.ToEnumerable().Single(); } /// /// Returns the only document of resultset, or null if resultset are empty; this method throw an exception if there not exactly one document in the sequence /// public T SingleOrDefault() { return this.ToEnumerable().SingleOrDefault(); } /// /// Returns first document of resultset /// public T First() { return this.ToEnumerable().First(); } /// /// Returns first document of resultset or null if resultset are empty /// public T FirstOrDefault() { return this.ToEnumerable().FirstOrDefault(); } #endregion #region Execute Count /// /// Execute Count methos in filter query /// public int Count() { var oldSelect = _query.Select; try { this.Select($"{{ count: COUNT(*._id) }}"); var ret = this.ToDocuments().Single()["count"].AsInt32; return ret; } finally { _query.Select = oldSelect; } } /// /// Execute Count methos in filter query /// public long LongCount() { var oldSelect = _query.Select; try { this.Select($"{{ count: COUNT(*._id) }}"); var ret = this.ToDocuments().Single()["count"].AsInt64; return ret; } finally { _query.Select = oldSelect; } } /// /// Returns true/false if query returns any result /// public bool Exists() { var oldSelect = _query.Select; try { this.Select($"{{ exists: ANY(*._id) }}"); var ret = this.ToDocuments().Single()["exists"].AsBoolean; return ret; } finally { _query.Select = oldSelect; } } #endregion #region Execute Into public int Into(string newCollection, BsonAutoId autoId = BsonAutoId.ObjectId) { _query.Into = newCollection; _query.IntoAutoId = autoId; using (var reader = this.ExecuteReader()) { return reader.Current.AsInt32; } } #endregion } } ================================================ FILE: LiteDB/Client/Database/LiteRepository.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { /// /// The LiteDB repository pattern. A simple way to access your documents in a single class with fluent query api /// public class LiteRepository : ILiteRepository { #region Properties private readonly ILiteDatabase _db = null; /// /// Get database instance /// public ILiteDatabase Database => _db; #endregion #region Ctor /// /// Starts LiteDB database an existing Database instance /// public LiteRepository(ILiteDatabase database) { _db = database; } /// /// Starts LiteDB database using a connection string for file system database /// public LiteRepository(string connectionString, BsonMapper mapper = null) { _db = new LiteDatabase(connectionString, mapper); } /// /// Starts LiteDB database using a connection string for file system database /// public LiteRepository(ConnectionString connectionString, BsonMapper mapper = null) { _db = new LiteDatabase(connectionString, mapper); } /// /// Starts LiteDB database using a Stream disk /// public LiteRepository(Stream stream, BsonMapper mapper = null, Stream logStream = null) { _db = new LiteDatabase(stream, mapper, logStream); } #endregion #region Insert /// /// Insert a new document into collection. Document Id must be a new value in collection - Returns document Id /// public BsonValue Insert(T entity, string collectionName = null) { return _db.GetCollection(collectionName).Insert(entity); } /// /// Insert an array of new documents into collection. Document Id must be a new value in collection. Can be set buffer size to commit at each N documents /// public int Insert(IEnumerable entities, string collectionName = null) { return _db.GetCollection(collectionName).Insert(entities); } #endregion #region Update /// /// Update a document into collection. Returns false if not found document in collection /// public bool Update(T entity, string collectionName = null) { return _db.GetCollection(collectionName).Update(entity); } /// /// Update all documents /// public int Update(IEnumerable entities, string collectionName = null) { return _db.GetCollection(collectionName).Update(entities); } #endregion #region Upsert /// /// Insert or Update a document based on _id key. Returns true if insert entity or false if update entity /// public bool Upsert(T entity, string collectionName = null) { return _db.GetCollection(collectionName).Upsert(entity); } /// /// Insert or Update all documents based on _id key. Returns entity count that was inserted /// public int Upsert(IEnumerable entities, string collectionName = null) { return _db.GetCollection(collectionName).Upsert(entities); } #endregion #region Delete /// /// Delete entity based on _id key /// public bool Delete(BsonValue id, string collectionName = null) { return _db.GetCollection(collectionName).Delete(id); } /// /// Delete entity based on Query /// public int DeleteMany(BsonExpression predicate, string collectionName = null) { return _db.GetCollection(collectionName).DeleteMany(predicate); } /// /// Delete entity based on predicate filter expression /// public int DeleteMany(Expression> predicate, string collectionName = null) { return _db.GetCollection(collectionName).DeleteMany(predicate); } #endregion #region Query /// /// Returns new instance of LiteQueryable that provides all method to query any entity inside collection. Use fluent API to apply filter/includes an than run any execute command, like ToList() or First() /// public ILiteQueryable Query(string collectionName = null) { return _db.GetCollection(collectionName).Query(); } #endregion #region EnsureIndex /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Index name - unique name for this collection /// Create a custom expression function to be indexed /// If is a unique index /// Collection Name public bool EnsureIndex(string name, BsonExpression expression, bool unique = false, string collectionName = null) { return _db.GetCollection(collectionName).EnsureIndex(name, expression, unique); } /// /// Create a new permanent index in all documents inside this collections if index not exists already. Returns true if index was created or false if already exits /// /// Create a custom expression function to be indexed /// If is a unique index /// Collection Name public bool EnsureIndex(BsonExpression expression, bool unique = false, string collectionName = null) { return _db.GetCollection(collectionName).EnsureIndex(expression, unique); } /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? /// Collection Name public bool EnsureIndex(Expression> keySelector, bool unique = false, string collectionName = null) { return _db.GetCollection(collectionName).EnsureIndex(keySelector, unique); } /// /// Create a new permanent index in all documents inside this collections if index not exists already. /// /// Index name - unique name for this collection /// LinqExpression to be converted into BsonExpression to be indexed /// Create a unique keys index? /// Collection Name public bool EnsureIndex(string name, Expression> keySelector, bool unique = false, string collectionName = null) { return _db.GetCollection(collectionName).EnsureIndex(name, keySelector, unique); } #endregion #region Shortcuts /// /// Search for a single instance of T by Id. Shortcut from Query.SingleById /// public T SingleById(BsonValue id, string collectionName = null) { return _db.GetCollection(collectionName).Query() .Where("_id = @0", id) .Single(); } /// /// Execute Query[T].Where(predicate).ToList(); /// public List Fetch(BsonExpression predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .ToList(); } /// /// Execute Query[T].Where(predicate).ToList(); /// public List Fetch(Expression> predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .ToList(); } /// /// Execute Query[T].Where(predicate).First(); /// public T First(BsonExpression predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .First(); } /// /// Execute Query[T].Where(predicate).First(); /// public T First(Expression> predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .First(); } /// /// Execute Query[T].Where(predicate).FirstOrDefault(); /// public T FirstOrDefault(BsonExpression predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .FirstOrDefault(); } /// /// Execute Query[T].Where(predicate).FirstOrDefault(); /// public T FirstOrDefault(Expression> predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .FirstOrDefault(); } /// /// Execute Query[T].Where(predicate).Single(); /// public T Single(BsonExpression predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .Single(); } /// /// Execute Query[T].Where(predicate).Single(); /// public T Single(Expression> predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .Single(); } /// /// Execute Query[T].Where(predicate).SingleOrDefault(); /// public T SingleOrDefault(BsonExpression predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .SingleOrDefault(); } /// /// Execute Query[T].Where(predicate).SingleOrDefault(); /// public T SingleOrDefault(Expression> predicate, string collectionName = null) { return this.Query(collectionName) .Where(predicate) .SingleOrDefault(); } #endregion public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } ~LiteRepository() { this.Dispose(false); } protected virtual void Dispose(bool disposing) { if (disposing) { _db.Dispose(); } } } } ================================================ FILE: LiteDB/Client/Mapper/Attributes/BsonCtorAttribute.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB { /// /// Indicate which constructor method will be used in this entity /// public class BsonCtorAttribute : Attribute { } } ================================================ FILE: LiteDB/Client/Mapper/Attributes/BsonFieldAttribute.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB { /// /// Set a name to this property in BsonDocument /// public class BsonFieldAttribute : Attribute { public string Name { get; set; } public BsonFieldAttribute(string name) { this.Name = name; } public BsonFieldAttribute() { } } } ================================================ FILE: LiteDB/Client/Mapper/Attributes/BsonIdAttribute.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB { /// /// Indicate that property will be used as BsonDocument Id /// public class BsonIdAttribute : Attribute { public bool AutoId { get; private set; } public BsonIdAttribute() { this.AutoId = true; } public BsonIdAttribute(bool autoId) { this.AutoId = autoId; } } } ================================================ FILE: LiteDB/Client/Mapper/Attributes/BsonIgnoreAttribute.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB { /// /// Indicate that property will not be persist in Bson serialization /// public class BsonIgnoreAttribute : Attribute { } } ================================================ FILE: LiteDB/Client/Mapper/Attributes/BsonRefAttribute.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB { /// /// Indicate that field are not persisted inside this document but it's a reference for another document (DbRef) /// public class BsonRefAttribute : Attribute { public string Collection { get; set; } public BsonRefAttribute(string collection) { this.Collection = collection; } public BsonRefAttribute() { this.Collection = null; } } } ================================================ FILE: LiteDB/Client/Mapper/BsonMapper.Deserialize.cs ================================================ using System; using System.Linq; using System.Collections; using System.Collections.Generic; using System.Reflection; using static LiteDB.Constants; namespace LiteDB { public partial class BsonMapper { #region Deserialization Hooks /// /// Delegate for deserialization callback. /// /// The BsonMapper instance that triggered the deserialization. /// The target type for deserialization. /// The BsonValue to be deserialized. /// The deserialized BsonValue. public delegate BsonValue DeserializationCallback(BsonMapper sender, Type target, BsonValue value); /// /// Gets called before deserialization of a value /// public DeserializationCallback? OnDeserialization { get; set; } #endregion Deserialization Hooks #region Basic direct .NET convert types // direct bson types private readonly HashSet _bsonTypes = new HashSet { typeof(String), typeof(Int32), typeof(Int64), typeof(Boolean), typeof(Guid), typeof(DateTime), typeof(Byte[]), typeof(ObjectId), typeof(Double), typeof(Decimal) }; // simple convert types private readonly HashSet _basicTypes = new HashSet { typeof(Int16), typeof(UInt16), typeof(UInt32), typeof(Single), typeof(Char), typeof(Byte), typeof(SByte) }; #endregion /// /// Deserialize a BsonDocument to entity class /// public virtual object ToObject(Type type, BsonDocument doc) { if (doc == null) throw new ArgumentNullException(nameof(doc)); // if T is BsonDocument, just return them if (type == typeof(BsonDocument)) return doc; return this.Deserialize(type, doc); } /// /// Deserialize a BsonDocument to entity class /// public virtual T ToObject(BsonDocument doc) { return (T)this.ToObject(typeof(T), doc); } /// /// Deserialize a BsonValue to .NET object typed in T /// public T Deserialize(BsonValue value) { if (value == null) return default(T); var result = this.Deserialize(typeof(T), value); return (T)result; } /// /// Deserilize a BsonValue to .NET object based on type parameter /// public object Deserialize(Type type, BsonValue value) { if (OnDeserialization is not null) { var result = OnDeserialization(this, type, value); if (result is not null) { value = result; } } // null value - null returns if (value.IsNull) return null; // if is nullable, get underlying type if (Reflection.IsNullable(type)) { type = Reflection.UnderlyingTypeOf(type); } // test if has a custom type implementation if (_customDeserializer.TryGetValue(type, out Func custom)) { return custom(value); } var typeInfo = type.GetTypeInfo(); // check if your type is already a BsonValue/BsonDocument/BsonArray if (type == typeof(BsonValue)) { return value; } else if (type == typeof(BsonDocument)) { return value.AsDocument; } else if (type == typeof(BsonArray)) { return value.AsArray; } // raw values to native bson values else if (_bsonTypes.Contains(type)) { return value.RawValue; } // simple ConvertTo to basic .NET types else if (_basicTypes.Contains(type)) { return Convert.ChangeType(value.RawValue, type); } // special cast to UInt64 to Int64 else if (type == typeof(UInt64)) { return unchecked((UInt64)value.AsInt64); } // enum value is an int else if (typeInfo.IsEnum) { if (value.IsString) return Enum.Parse(type, value.AsString); if (value.IsNumber) return Enum.ToObject(type, value.AsInt32); } // if value is array, deserialize as array else if (value.IsArray) { // when array are from an object (like in Dictionary { ["array"] = new string[] { "a", "b" } if (type == typeof(object)) { return this.DeserializeArray(typeof(object), value.AsArray); } if (type.IsArray) { return this.DeserializeArray(type.GetElementType(), value.AsArray); } else { return this.DeserializeList(type, value.AsArray); } } // if value is document, deserialize as document else if (value.IsDocument) { // if type is anonymous use special handler if (type.IsAnonymousType()) { return this.DeserializeAnonymousType(type, value.AsDocument); } var doc = value.AsDocument; // test if value is object and has _type if (doc.TryGetValue("_type", out var typeField) && typeField.IsString) { var actualType = _typeNameBinder.GetType(typeField.AsString); if (actualType == null) throw LiteException.InvalidTypedName(typeField.AsString); // avoid initialize class that are not assignable if (!type.IsAssignableFrom(actualType)) { throw LiteException.DataTypeNotAssignable(type.FullName, actualType.FullName); } type = actualType; } // when complex type has no definition (== typeof(object)) use Dictionary to better set values else if (type == typeof(object)) { type = typeof(Dictionary); } var entity = this.GetEntityMapper(type); entity.WaitForInitialization(); // initialize CreateInstance if (entity.CreateInstance == null) { entity.CreateInstance = this.GetTypeCtor(entity) ?? ((BsonDocument v) => Reflection.CreateInstance(entity.ForType)); } var o = _typeInstantiator(type) ?? entity.CreateInstance(doc); if (o is IDictionary dict) { if (o.GetType().GetTypeInfo().IsGenericType) { var k = type.GetGenericArguments()[0]; var t = type.GetGenericArguments()[1]; this.DeserializeDictionary(k, t, dict, value.AsDocument); } else { this.DeserializeDictionary(typeof(object), typeof(object), dict, value.AsDocument); } } else { this.DeserializeObject(entity, o, doc); } return o; } // in last case, return value as-is - can cause "cast error" // it's used for "public object MyInt { get; set; }" return value.RawValue; } private object DeserializeArray(Type type, BsonArray array) { var arr = Array.CreateInstance(type, array.Count); var idx = 0; foreach (var item in array) { arr.SetValue(this.Deserialize(type, item), idx++); } return arr; } private object DeserializeList(Type type, BsonArray value) { var itemType = Reflection.GetListItemType(type); var enumerable = (IEnumerable)Reflection.CreateInstance(type); if (enumerable is IList list) { foreach (BsonValue item in value) { list.Add(this.Deserialize(itemType, item)); } } else { var addMethod = type.GetMethod("Add", new Type[] { itemType }); foreach (BsonValue item in value) { addMethod.Invoke(enumerable, new[] { this.Deserialize(itemType, item) }); } } return enumerable; } private void DeserializeDictionary(Type K, Type T, IDictionary dict, BsonDocument value) { var isKEnum = K.GetTypeInfo().IsEnum; foreach (var el in value.GetElements()) { var k = isKEnum ? Enum.Parse(K, el.Key) : K == typeof(Uri) ? new Uri(el.Key) : Convert.ChangeType(el.Key, K); var v = this.Deserialize(T, el.Value); dict.Add(k, v); } } private void DeserializeObject(EntityMapper entity, object obj, BsonDocument value) { foreach (var member in entity.Members.Where(x => x.Setter != null)) { if (value.TryGetValue(member.FieldName, out var val)) { // check if has a custom deserialize function if (member.Deserialize != null) { member.Setter(obj, member.Deserialize(val, this)); } else { member.Setter(obj, this.Deserialize(member.DataType, val)); } } } } private object DeserializeAnonymousType(Type type, BsonDocument value) { var args = new List(); var ctor = type.GetConstructors()[0]; foreach (var par in ctor.GetParameters()) { var arg = this.Deserialize(par.ParameterType, value[par.Name]); // if name is Id and arg is null, look for _id if (arg == null && StringComparer.OrdinalIgnoreCase.Equals(par.Name, "Id") && value.TryGetValue("_id", out var id)) { arg = this.Deserialize(par.ParameterType, id); } args.Add(arg); } var obj = Activator.CreateInstance(type, args.ToArray()); return obj; } } } ================================================ FILE: LiteDB/Client/Mapper/BsonMapper.GetEntityMapper.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading; namespace LiteDB; public partial class BsonMapper { /// /// Mapping cache between Class/BsonDocument /// private readonly ConcurrentDictionary _entities = new(); /// /// Get property mapper between typed .NET class and BsonDocument - Cache results /// internal EntityMapper GetEntityMapper(Type type) { if (_entities.TryGetValue(type, out EntityMapper mapper)) { return mapper; } using var cts = new CancellationTokenSource(); try { // We need to add the empty shell, because ``BuildEntityMapper`` may use this method recursively var newMapper = new EntityMapper(type, cts.Token); mapper = _entities.GetOrAdd(type, newMapper); if (ReferenceEquals(mapper, newMapper)) { try { this.BuildEntityMapper(mapper); } catch (Exception ex) { _entities.TryRemove(type, out _); throw new LiteException(LiteException.MAPPING_ERROR, $"Error in '{type.Name}' mapping: {ex.Message}", ex); } } } finally { // Allow the Mapper to be used for de-/serialization cts.Cancel(); } return mapper; } /// /// Use this method to override how your class can be, by default, mapped from entity to Bson document. /// Returns an EntityMapper from each requested Type /// protected void BuildEntityMapper(EntityMapper mapper) { var idAttr = typeof(BsonIdAttribute); var ignoreAttr = typeof(BsonIgnoreAttribute); var fieldAttr = typeof(BsonFieldAttribute); var dbrefAttr = typeof(BsonRefAttribute); var members = this.GetTypeMembers(mapper.ForType); var id = this.GetIdMember(members); foreach (var memberInfo in members) { // checks [BsonIgnore] if (CustomAttributeExtensions.IsDefined(memberInfo, ignoreAttr, true)) continue; // checks field name conversion var name = this.ResolveFieldName(memberInfo.Name); // check if property has [BsonField] var field = (BsonFieldAttribute)CustomAttributeExtensions.GetCustomAttributes(memberInfo, fieldAttr, true) .FirstOrDefault(); // check if property has [BsonField] with a custom field name if (field != null && field.Name != null) { name = field.Name; } // checks if memberInfo is id field if (memberInfo == id) { name = "_id"; } // create getter/setter function var getter = Reflection.CreateGenericGetter(mapper.ForType, memberInfo); var setter = Reflection.CreateGenericSetter(mapper.ForType, memberInfo); // check if property has [BsonId] to get with was setted AutoId = true var autoId = (BsonIdAttribute)CustomAttributeExtensions.GetCustomAttributes(memberInfo, idAttr, true) .FirstOrDefault(); // get data type var dataType = memberInfo is PropertyInfo ? (memberInfo as PropertyInfo).PropertyType : (memberInfo as FieldInfo).FieldType; // check if datatype is list/array var isEnumerable = Reflection.IsEnumerable(dataType); // create a property mapper var member = new MemberMapper { AutoId = autoId == null ? true : autoId.AutoId, FieldName = name, MemberName = memberInfo.Name, DataType = dataType, IsEnumerable = isEnumerable, UnderlyingType = isEnumerable ? Reflection.GetListItemType(dataType) : dataType, Getter = getter, Setter = setter }; // check if property has [BsonRef] var dbRef = (BsonRefAttribute)CustomAttributeExtensions.GetCustomAttributes(memberInfo, dbrefAttr, false) .FirstOrDefault(); if (dbRef != null && memberInfo is PropertyInfo) { BsonMapper.RegisterDbRef(this, member, _typeNameBinder, dbRef.Collection ?? this.ResolveCollectionName((memberInfo as PropertyInfo).PropertyType)); } // support callback to user modify member mapper this.ResolveMember?.Invoke(mapper.ForType, memberInfo, member); // test if has name and there is no duplicate field // when member is not ignore if (member.FieldName != null && mapper.Members.Any(x => x.FieldName.Equals(name, StringComparison.OrdinalIgnoreCase)) == false && !member.IsIgnore) { mapper.Members.Add(member); } } } /// /// Gets MemberInfo that refers to Id from a document object. /// protected virtual MemberInfo GetIdMember(IEnumerable members) { return Reflection.SelectMember(members, x => CustomAttributeExtensions.IsDefined(x, typeof(BsonIdAttribute), true), x => x.Name.Equals("Id", StringComparison.OrdinalIgnoreCase), x => x.Name.Equals(x.DeclaringType.Name + "Id", StringComparison.OrdinalIgnoreCase)); } /// /// Returns all member that will be have mapper between POCO class to document /// protected virtual IEnumerable GetTypeMembers(Type type) { var members = new List(); var flags = this.IncludeNonPublic ? (BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) : (BindingFlags.Public | BindingFlags.Instance); members.AddRange(type.GetProperties(flags) .Where(x => x.CanRead && x.GetIndexParameters().Length == 0) .Select(x => x as MemberInfo)); var shouldIncludeFields = members.Count == 0 && type.GetTypeInfo().IsValueType; if (shouldIncludeFields || this.IncludeFields) { members.AddRange(type.GetFields(flags).Where(x => !x.Name.EndsWith("k__BackingField") && x.IsStatic == false) .Select(x => x as MemberInfo)); } return members; } /// /// Get best construtor to use to initialize this entity. /// - Look if contains [BsonCtor] attribute /// - Look for parameterless ctor /// - Look for first contructor with parameter and use BsonDocument to send RawValue /// protected virtual CreateObject GetTypeCtor(EntityMapper mapper) { Type type = mapper.ForType; List Mappings = new List(); bool returnZeroParamNull = false; foreach (ConstructorInfo ctor in type.GetConstructors()) { ParameterInfo[] pars = ctor.GetParameters(); // For 0 parameters, we can let the Reflection.CreateInstance handle it, unless they've specified a [BsonCtor] attribute on a different constructor. if (pars.Length == 0) { returnZeroParamNull = true; continue; } KeyValuePair[] paramMap = new KeyValuePair[pars.Length]; int i; for (i = 0; i < pars.Length; i++) { ParameterInfo par = pars[i]; MemberMapper mi = null; foreach (MemberMapper member in mapper.Members) { if (member.MemberName.ToLower() == par.Name.ToLower() && member.DataType == par.ParameterType) { mi = member; break; } } if (mi == null) { break; } paramMap[i] = new KeyValuePair(mi.FieldName, mi.DataType); } if (i < pars.Length) { continue; } CreateObject toAdd = (BsonDocument value) => Activator.CreateInstance(type, paramMap.Select(x => this.Deserialize(x.Value, value[x.Key])).ToArray()); if (ctor.GetCustomAttribute() != null) { return toAdd; } else { Mappings.Add(toAdd); } } if (returnZeroParamNull) { return null; } return Mappings.FirstOrDefault(); } } ================================================ FILE: LiteDB/Client/Mapper/BsonMapper.Serialize.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; using static LiteDB.Constants; namespace LiteDB { public partial class BsonMapper { /// /// Serialize a entity class to BsonDocument /// public virtual BsonDocument ToDocument(Type type, object entity) { if (entity == null) throw new ArgumentNullException(nameof(entity)); // if object is BsonDocument, just return them if (entity is BsonDocument) return (BsonDocument)(object)entity; return this.Serialize(type, entity, 0).AsDocument; } /// /// Serialize a entity class to BsonDocument /// public virtual BsonDocument ToDocument(T entity) { return this.ToDocument(typeof(T), entity)?.AsDocument; } /// /// Serialize to BsonValue any .NET object based on T type (using mapping rules) /// public BsonValue Serialize(T obj) { return this.Serialize(typeof(T), obj, 0); } /// /// Serialize to BsonValue any .NET object based on type parameter (using mapping rules) /// public BsonValue Serialize(Type type, object obj) { return this.Serialize(type, obj, 0); } internal BsonValue Serialize(Type type, object obj, int depth) { if (++depth > MaxDepth) throw LiteException.DocumentMaxDepth(MaxDepth, type); if (obj == null) return BsonValue.Null; // if is already a bson value if (obj is BsonValue bsonValue) return bsonValue; // check if is a custom type else if (_customSerializer.TryGetValue(type, out var custom) || _customSerializer.TryGetValue(obj.GetType(), out custom)) { return custom(obj); } // test string - mapper has some special options else if (obj is String) { var str = this.TrimWhitespace ? (obj as String).Trim() : (String)obj; if (this.EmptyStringToNull && str.Length == 0) { return BsonValue.Null; } else { return new BsonValue(str); } } // basic Bson data types (cast datatype for better performance optimization) else if (obj is Int32) return new BsonValue((Int32)obj); else if (obj is Int64) return new BsonValue((Int64)obj); else if (obj is Double) return new BsonValue((Double)obj); else if (obj is Decimal) return new BsonValue((Decimal)obj); else if (obj is Byte[]) return new BsonValue((Byte[])obj); else if (obj is ObjectId) return new BsonValue((ObjectId)obj); else if (obj is Guid) return new BsonValue((Guid)obj); else if (obj is Boolean) return new BsonValue((Boolean)obj); else if (obj is DateTime) return new BsonValue((DateTime)obj); // basic .net type to convert to bson else if (obj is Int16 || obj is UInt16 || obj is Byte || obj is SByte) { return new BsonValue(Convert.ToInt32(obj)); } else if (obj is UInt32) { return new BsonValue(Convert.ToInt64(obj)); } else if (obj is UInt64) { var ulng = ((UInt64)obj); var lng = unchecked((Int64)ulng); return new BsonValue(lng); } else if (obj is Single) { return new BsonValue(Convert.ToDouble(obj)); } else if (obj is Char) { return new BsonValue(obj.ToString()); } else if (obj is Enum) { if (this.EnumAsInteger) { return new BsonValue((int)obj); } else { return new BsonValue(obj.ToString()); } } // for dictionary else if (obj is IDictionary dict) { // when you are converting Dictionary if (type == typeof(object)) { type = obj.GetType(); } var itemType = type.GetTypeInfo().IsGenericType ? type.GetGenericArguments()[1] : typeof(object); return this.SerializeDictionary(itemType, dict, depth); } // check if is a list or array else if (obj is IEnumerable) { return this.SerializeArray(Reflection.GetListItemType(type), obj as IEnumerable, depth); } // otherwise serialize as a plain object else { return this.SerializeObject(type, obj, depth); } } private BsonArray SerializeArray(Type type, IEnumerable array, int depth) { var arr = new BsonArray(); foreach (var item in array) { arr.Add(this.Serialize(type, item, depth)); } return arr; } private BsonDocument SerializeDictionary(Type type, IDictionary dict, int depth) { var o = new BsonDocument(); foreach (var key in dict.Keys) { var value = dict[key]; var skey = key.ToString(); if (key is DateTime dateKey) { skey = dateKey.ToString("o"); } o[skey] = this.Serialize(type, value, depth); } return o; } private BsonDocument SerializeObject(Type type, object obj, int depth) { var t = obj.GetType(); var doc = new BsonDocument(); var entity = this.GetEntityMapper(t); entity.WaitForInitialization(); // adding _type only where property Type is not same as object instance type if (type != t) { doc["_type"] = new BsonValue(_typeNameBinder.GetName(t)); } foreach (var member in entity.Members.Where(x => x.Getter != null)) { // get member value var value = member.Getter(obj); if (value == null && this.SerializeNullValues == false && member.FieldName != "_id") continue; // if member has a custom serialization, use it if (member.Serialize != null) { doc[member.FieldName] = member.Serialize(value, this); } else { doc[member.FieldName] = this.Serialize(member.DataType, value, depth); } } return doc; } } } ================================================ FILE: LiteDB/Client/Mapper/BsonMapper.cs ================================================ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { /// /// Class that converts your entity class to/from BsonDocument /// If you prefer use a new instance of BsonMapper (not Global), be sure cache this instance for better performance /// Serialization rules: /// - Classes must be "public" with a public constructor (without parameters) /// - Properties must have public getter (can be read-only) /// - Entity class must have Id property, [ClassName]Id property or [BsonId] attribute /// - No circular references /// - Fields are not valid /// - IList, Array supports /// - IDictionary supports (Key must be a simple datatype - converted by ChangeType) /// public partial class BsonMapper { #region Properties /// /// Map serializer/deserialize for custom types /// private readonly ConcurrentDictionary> _customSerializer = new ConcurrentDictionary>(); private readonly ConcurrentDictionary> _customDeserializer = new ConcurrentDictionary>(); /// /// Type instantiator function to support IoC /// private readonly Func _typeInstantiator; /// /// Type name binder to control how type names are serialized to BSON documents /// private readonly ITypeNameBinder _typeNameBinder; /// /// Global instance used when no BsonMapper are passed in LiteDatabase ctor /// public static BsonMapper Global = new BsonMapper(); /// /// A resolver name for field /// public Func ResolveFieldName; /// /// Indicate that mapper do not serialize null values (default false) /// public bool SerializeNullValues { get; set; } /// /// Apply .Trim() in strings when serialize (default true) /// public bool TrimWhitespace { get; set; } /// /// Convert EmptyString to Null (default true) /// public bool EmptyStringToNull { get; set; } /// /// Get/Set if enum must be converted into Integer value. If false, enum will be converted into String value. /// MUST BE "true" to support LINQ expressions (default false) /// public bool EnumAsInteger { get; set; } /// /// Get/Set that mapper must include fields (default: false) /// public bool IncludeFields { get; set; } /// /// Get/Set that mapper must include non public (private, protected and internal) (default: false) /// public bool IncludeNonPublic { get; set; } /// /// Get/Set maximum depth for nested object (default 20) /// public int MaxDepth { get; set; } /// /// A custom callback to change MemberInfo behavior when converting to MemberMapper. /// Use mapper.ResolveMember(Type entity, MemberInfo property, MemberMapper documentMappedField) /// Set FieldName to null if you want remove from mapped document /// public Action ResolveMember; /// /// Custom resolve name collection based on Type /// public Func ResolveCollectionName; #endregion public BsonMapper(Func customTypeInstantiator = null, ITypeNameBinder typeNameBinder = null) { this.SerializeNullValues = false; this.TrimWhitespace = true; this.EmptyStringToNull = true; this.EnumAsInteger = false; this.ResolveFieldName = (s) => s; this.ResolveMember = (t, mi, mm) => { }; this.ResolveCollectionName = (t) => Reflection.IsEnumerable(t) ? Reflection.GetListItemType(t).Name : t.Name; this.IncludeFields = false; this.MaxDepth = 20; _typeInstantiator = customTypeInstantiator ?? ((Type t) => null); _typeNameBinder = typeNameBinder ?? DefaultTypeNameBinder.Instance; #region Register CustomTypes RegisterType(uri => uri.IsAbsoluteUri ? uri.AbsoluteUri : uri.ToString(), bson => new Uri(bson.AsString)); RegisterType(value => new BsonValue(value.UtcDateTime), bson => bson.AsDateTime.ToUniversalTime()); RegisterType(value => new BsonValue(value.Ticks), bson => new TimeSpan(bson.AsInt64)); RegisterType( r => r.Options == RegexOptions.None ? new BsonValue(r.ToString()) : new BsonDocument { { "p", r.ToString() }, { "o", (int)r.Options } }, value => value.IsString ? new Regex(value) : new Regex(value.AsDocument["p"].AsString, (RegexOptions)value.AsDocument["o"].AsInt32) ); #endregion } #region Register CustomType /// /// Register a custom type serializer/deserialize function /// public void RegisterType(Func serialize, Func deserialize) { _customSerializer[typeof(T)] = (o) => serialize((T)o); _customDeserializer[typeof(T)] = (b) => (T)deserialize(b); } /// /// Register a custom type serializer/deserialize function /// public void RegisterType(Type type, Func serialize, Func deserialize) { _customSerializer[type] = (o) => serialize(o); _customDeserializer[type] = (b) => deserialize(b); } #endregion /// /// Map your entity class to BsonDocument using fluent API /// public EntityBuilder Entity() { return new EntityBuilder(this, _typeNameBinder); } #region Get LinqVisitor processor /// /// Resolve LINQ expression into BsonExpression /// public BsonExpression GetExpression(Expression> predicate) { var visitor = new LinqExpressionVisitor(this, predicate); var expr = visitor.Resolve(typeof(K) == typeof(bool)); LOG($"`{predicate.ToString()}` -> `{expr.Source}`", "LINQ"); return expr; } /// /// Resolve LINQ expression into BsonExpression (for index only) /// public BsonExpression GetIndexExpression(Expression> predicate) { var visitor = new LinqExpressionVisitor(this, predicate); var expr = visitor.Resolve(false); LOG($"`{predicate.ToString()}` -> `{expr.Source}`", "LINQ"); return expr; } #endregion #region Predefinded Property Resolvers /// /// Use lower camel case resolution for convert property names to field names /// public BsonMapper UseCamelCase() { this.ResolveFieldName = (s) => char.ToLower(s[0]) + s.Substring(1); return this; } private readonly Regex _lowerCaseDelimiter = new Regex("(?!(^[A-Z]))([A-Z])", RegexOptions.Compiled); /// /// Uses lower camel case with delimiter to convert property names to field names /// public BsonMapper UseLowerCaseDelimiter(char delimiter = '_') { this.ResolveFieldName = (s) => _lowerCaseDelimiter.Replace(s, delimiter + "$2").ToLower(); return this; } #endregion #region Register DbRef /// /// Register a property mapper as DbRef to serialize/deserialize only document reference _id /// internal static void RegisterDbRef(BsonMapper mapper, MemberMapper member, ITypeNameBinder typeNameBinder, string collection) { member.IsDbRef = true; if (member.IsEnumerable) { RegisterDbRefList(mapper, member, typeNameBinder, collection); } else { RegisterDbRefItem(mapper, member, typeNameBinder, collection); } } /// /// Register a property as a DbRef - implement a custom Serialize/Deserialize actions to convert entity to $id, $ref only /// private static void RegisterDbRefItem(BsonMapper mapper, MemberMapper member, ITypeNameBinder typeNameBinder, string collection) { // get entity var entity = mapper.GetEntityMapper(member.DataType); member.Serialize = (obj, m) => { // supports null values when "SerializeNullValues = true" if (obj == null) return BsonValue.Null; entity.WaitForInitialization(); var idField = entity.Id; // #768 if using DbRef with interface with no ID mapped if (idField == null) throw new LiteException(0, "There is no _id field mapped in your type: " + member.DataType.FullName); var id = idField.Getter(obj); var bsonDocument = new BsonDocument { ["$id"] = m.Serialize(id.GetType(), id, 0), ["$ref"] = collection }; if (member.DataType != obj.GetType()) { bsonDocument["$type"] = typeNameBinder.GetName(obj.GetType()); } return bsonDocument; }; member.Deserialize = (bson, m) => { // if not a document (maybe BsonValue.null) returns null if (bson == null || bson.IsDocument == false) return null; var doc = bson.AsDocument; var idRef = doc["$id"]; var missing = doc["$missing"] == true; var included = doc.ContainsKey("$ref") == false; if (missing) return null; if (included) { doc["_id"] = idRef; if (doc.ContainsKey("$type")) { doc["_type"] = bson["$type"]; } return m.Deserialize(entity.ForType, doc); } else { return m.Deserialize(entity.ForType, doc.ContainsKey("$type") ? new BsonDocument { ["_id"] = idRef, ["_type"] = bson["$type"] } : new BsonDocument { ["_id"] = idRef }); // if has $id, deserialize object using only _id object } }; } /// /// Register a property as a DbRefList - implement a custom Serialize/Deserialize actions to convert entity to $id, $ref only /// private static void RegisterDbRefList(BsonMapper mapper, MemberMapper member, ITypeNameBinder typeNameBinder, string collection) { // get entity from list item type var entity = mapper.GetEntityMapper(member.UnderlyingType); member.Serialize = (list, m) => { // supports null values when "SerializeNullValues = true" if (list == null) return BsonValue.Null; entity.WaitForInitialization(); var result = new BsonArray(); var idField = entity.Id; foreach (var item in (IEnumerable)list) { if (item == null) continue; var id = idField.Getter(item); var bsonDocument = new BsonDocument { ["$id"] = m.Serialize(id.GetType(), id, 0), ["$ref"] = collection }; if (member.UnderlyingType != item.GetType()) { bsonDocument["$type"] = typeNameBinder.GetName(item.GetType()); } result.Add(bsonDocument); } return result; }; member.Deserialize = (bson, m) => { if (bson.IsArray == false) return null; var array = bson.AsArray; if (array.Count == 0) return m.Deserialize(member.DataType, array); // copy array changing $id to _id var result = new BsonArray(); foreach (var item in array) { if (item.IsDocument == false) continue; var doc = item.AsDocument; var idRef = doc["$id"]; var missing = doc["$missing"] == true; var included = doc.ContainsKey("$ref") == false; // if referece document are missing, do not inlcude on output list if (missing) continue; // if refId is null was included by "include" query, so "item" is full filled document if (included) { item["_id"] = idRef; if (item.AsDocument.ContainsKey("$type")) { item["_type"] = item["$type"]; } result.Add(item); } else { var bsonDocument = new BsonDocument { ["_id"] = idRef }; if (item.AsDocument.ContainsKey("$type")) { bsonDocument["_type"] = item["$type"]; } result.Add(bsonDocument); } } return m.Deserialize(member.DataType, result); }; } #endregion } } ================================================ FILE: LiteDB/Client/Mapper/EntityBuilder.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { /// /// Helper class to modify your entity mapping to document. Can be used instead attribute decorates /// public class EntityBuilder { private readonly BsonMapper _mapper; private readonly EntityMapper _entity; private readonly ITypeNameBinder _typeNameBinder; internal EntityBuilder(BsonMapper mapper, ITypeNameBinder typeNameBinder) { _mapper = mapper; _typeNameBinder = typeNameBinder; _entity = mapper.GetEntityMapper(typeof(T)); } /// /// Define which property will not be mapped to document /// public EntityBuilder Ignore(Expression> member) { return this.GetMember(member, (p) => { _entity.WaitForInitialization(); _entity.Members.Remove(p); }); } /// /// Define a custom name for a property when mapping to document /// public EntityBuilder Field(Expression> member, string field) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return this.GetMember(member, (p) => { p.FieldName = field; }); } /// /// Define which property is your document id (primary key). Define if this property supports auto-id /// public EntityBuilder Id(Expression> member, bool autoId = true) { return this.GetMember(member, (p) => { _entity.WaitForInitialization(); // if contains another _id, remove-it var oldId = _entity.Members.FirstOrDefault(x => x.FieldName == "_id"); if (oldId != null) { oldId.FieldName = _mapper.ResolveFieldName(oldId.MemberName); oldId.AutoId = false; } p.FieldName = "_id"; p.AutoId = autoId; }); } /// /// Define which property is your document id (primary key). Define if this property supports auto-id /// public EntityBuilder Ctor(Func createInstance) { _entity.WaitForInitialization(); _entity.CreateInstance = v => createInstance(v); return this; } /// /// Define a subdocument (or a list of) as a reference /// public EntityBuilder DbRef(Expression> member, string collection = null) { return this.GetMember(member, (p) => { BsonMapper.RegisterDbRef(_mapper, p, _typeNameBinder, collection ?? _mapper.ResolveCollectionName(typeof(K))); }); } /// /// Get a property based on a expression. Eg.: 'x => x.UserId' return string "UserId" /// private EntityBuilder GetMember(Expression> member, Action action) { if (member == null) throw new ArgumentNullException(nameof(member)); _entity.WaitForInitialization(); var memb = _entity.GetMember(member); if (memb == null) { throw new ArgumentNullException($"Member '{member.GetPath()}' not found in type '{_entity.ForType.Name}' (use IncludeFields in BsonMapper)"); } action(memb); return this; } } } ================================================ FILE: LiteDB/Client/Mapper/EntityMapper.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Threading; using static LiteDB.Constants; namespace LiteDB { /// /// Class to map entity class to BsonDocument /// public class EntityMapper { private readonly CancellationToken _initializationToken; /// /// Indicate which Type this entity mapper is /// public Type ForType { get; } /// /// List all type members that will be mapped to/from BsonDocument /// public List Members { get; } = new List(); /// /// Indicate which member is _id /// public MemberMapper Id => this.Members.SingleOrDefault(x => x.FieldName == "_id"); /// /// Get/Set a custom ctor function to create new entity instance /// public CreateObject CreateInstance { get; set; } public EntityMapper(Type forType, CancellationToken initializationToken = default) { _initializationToken = initializationToken; this.ForType = forType; } /// /// Resolve expression to get member mapped /// public MemberMapper GetMember(Expression expr) { return this.Members.FirstOrDefault(x => x.MemberName == expr.GetPath()); } public void WaitForInitialization() { if ( _initializationToken == default || _initializationToken == CancellationToken.None || _initializationToken.IsCancellationRequested ) { return; } if (!_initializationToken.WaitHandle.WaitOne(TimeSpan.FromSeconds(5))) { throw new LiteException(LiteException.ENTITY_INITIALIZATION_FAILED, "Initialization timeout"); } } } } ================================================ FILE: LiteDB/Client/Mapper/Linq/LinqExpressionVisitor.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal class LinqExpressionVisitor : ExpressionVisitor { private static readonly Dictionary _resolver = new Dictionary { [typeof(BsonValue)] = new BsonValueResolver(), [typeof(BsonArray)] = new BsonValueResolver(), [typeof(BsonDocument)] = new BsonValueResolver(), [typeof(Convert)] = new ConvertResolver(), [typeof(DateTime)] = new DateTimeResolver(), [typeof(Int32)] = new NumberResolver("INT32"), [typeof(Int64)] = new NumberResolver("INT64"), [typeof(Decimal)] = new NumberResolver("DECIMAL"), [typeof(Double)] = new NumberResolver("DOUBLE"), [typeof(ICollection)] = new ICollectionResolver(), [typeof(Enumerable)] = new EnumerableResolver(), [typeof(Guid)] = new GuidResolver(), [typeof(Math)] = new MathResolver(), [typeof(Regex)] = new RegexResolver(), [typeof(ObjectId)] = new ObjectIdResolver(), [typeof(String)] = new StringResolver(), [typeof(Nullable)] = new NullableResolver() }; private readonly BsonMapper _mapper; private readonly Expression _expr; private readonly ParameterExpression _rootParameter = null; private readonly BsonDocument _parameters = new BsonDocument(); private int _paramIndex = 0; private Type _dbRefType = null; private readonly StringBuilder _builder = new StringBuilder(); private readonly Stack _nodes = new Stack(); public LinqExpressionVisitor(BsonMapper mapper, Expression expr) { _mapper = mapper; _expr = expr; if (expr is LambdaExpression lambda) { _rootParameter = lambda.Parameters.First(); } else { throw new NotSupportedException($"Expression {expr.ToString()} must be a lambda expression"); } } public BsonExpression Resolve(bool predicate) { this.Visit(_expr); ENSURE(_nodes.Count == 0, "node stack must be empty when finish expression resolve"); var expression = _builder.ToString(); try { var e = BsonExpression.Create(expression, _parameters); // if expression must return an predicate but expression result is Path/Parameter/Call add `= true` if (predicate && (e.Type == BsonExpressionType.Path || e.Type == BsonExpressionType.Call || e.Type == BsonExpressionType.Parameter)) { expression = "(" + expression + " = true)"; e = BsonExpression.Create(expression, _parameters); } return e; } catch (Exception ex) { throw new NotSupportedException($"Invalid BsonExpression when converted from Linq expression: {_expr.ToString()} - `{expression}`", ex); } } /// /// Visit :: `x => x.Customer.Name` /// protected override Expression VisitLambda(Expression node) { var l = base.VisitLambda(node); // remove last parameter $ (or @) _builder.Length--; return l; } /// /// Visit lambda invocation /// protected override Expression VisitInvocation(InvocationExpression node) { var l = base.VisitInvocation(node); // remove last parameter $ (or @) _builder.Length--; return l; } /// /// Visit :: x => `x`.Customer.Name /// protected override Expression VisitParameter(ParameterExpression node) { _builder.Append(_rootParameter.Equals(node) ? "$" : "@"); return base.VisitParameter(node); } /// /// Visit :: x => x.`Customer.Name` /// protected override Expression VisitMember(MemberExpression node) { // test if member access is based on parameter expression or constant/external variable var isParam = ParameterExpressionVisitor.Test(node); var member = node.Member; // special types contains method access: string.Length, DateTime.Day, ... if (this.TryGetResolver(member.DeclaringType, out var type)) { var pattern = type.ResolveMember(member); if (pattern == null) throw new NotSupportedException($"Member {member.Name} are not support in {member.DeclaringType.Name} when convert to BsonExpression ({node.ToString()})."); this.ResolvePattern(pattern, node.Expression, new Expression[0]); } else { // for static member, Expression == null if (node.Expression != null) { _nodes.Push(node); base.Visit(node.Expression); if (isParam) { var name = this.ResolveMember(member); _builder.Append(name); } } // static member is not parameter expression - compile and execute as constant else { var value = this.Evaluate(node); base.Visit(Expression.Constant(value)); } } if (_nodes.Count > 0) { _nodes.Pop(); } return node; } /// /// Visit :: x => x.Customer.Name.`ToUpper()` /// protected override Expression VisitMethodCall(MethodCallExpression node) { // if special method for index access, eval index value (do not use parameters) if (this.IsMethodIndexEval(node, out var obj, out var idx)) { this.Visit(obj); var index = this.Evaluate(idx, typeof(string), typeof(int)); if (index is string) { _builder.Append("."); _builder.Append($"['{index}']"); } else { _builder.Append($"[{index}]"); } return node; } // if not found in resolver, try run method if (!this.TryGetResolver(node.Method.DeclaringType, out var type)) { // if method are called by parameter expression and it's not exists, throw error var isParam = ParameterExpressionVisitor.Test(node); if (isParam) throw new NotSupportedException($"Method {node.Method.Name} not available to convert to BsonExpression ({node.ToString()})."); // otherwise, try compile and execute var value = this.Evaluate(node); base.Visit(Expression.Constant(value)); return node; } // otherwise I have resolver for this method var pattern = type.ResolveMethod(node.Method); if (pattern == null) throw new NotSupportedException($"Method {Reflection.MethodName(node.Method)} in {node.Method.DeclaringType.Name} are not supported when convert to BsonExpression ({node.ToString()})."); // run pattern using object as # and args as @n this.ResolvePattern(pattern, node.Object, node.Arguments); return node; } /// /// Visit :: x => x.Age + `10` (will create parameter: `p0`, `p1`, ...) /// protected override Expression VisitConstant(ConstantExpression node) { MemberExpression prevNode; var value = node.Value; // https://stackoverflow.com/a/29708655/3286260 while (_nodes.Count > 0 && (prevNode = _nodes.Peek() as MemberExpression) != null) { if (prevNode.Member is FieldInfo fieldInfo) { value = fieldInfo.GetValue(value); } else if (prevNode.Member is PropertyInfo propertyInfo) { value = propertyInfo.GetValue(value); } _nodes.Pop(); } ENSURE(_nodes.Count == 0, "counter stack must be zero to eval all properties/field over object"); var parameter = "p" + (_paramIndex++); _builder.AppendFormat("@" + parameter); var type = value?.GetType(); // if type is string, use direct BsonValue(string) to avoid rules like TrimWhitespace/EmptyStringToNull in mapper var arg = type == null ? BsonValue.Null : type == typeof(string) ? new BsonValue((string)value) : _mapper.Serialize(value.GetType(), value); _parameters[parameter] = arg; return node; } /// /// Visit :: x => `!x.Active` /// protected override Expression VisitUnary(UnaryExpression node) { if (node.NodeType == ExpressionType.Not) { // when is only "not boolean" resolve as 'x => !x.Active' = '$.Active = false' if (node.Operand.NodeType == ExpressionType.MemberAccess) { _builder.Append("("); this.Visit(node.Operand); _builder.Append(" = false)"); } // otherwise, resolve all expression as inner expression = false else { _builder.Append("("); this.Visit(node.Operand); _builder.Append(")"); _builder.Append(" = false"); } } else if (node.NodeType == ExpressionType.Convert) { var fromType = node.Operand.Type; var toType = node.Type; // do Numeric cast only from "Double/Decimal" to "Int32/Int64" if ((fromType == typeof(Double) || fromType == typeof(Decimal)) && (toType == typeof(Int32) || toType == typeof(Int64))) { var methodName = "To" + toType.Name.ToString(); var convert = typeof(Convert).GetMethods() .Where(x => x.Name == methodName) .Where(x => x.GetParameters().Length == 1 && x.GetParameters().Any(z => z.ParameterType == fromType)) .FirstOrDefault(); if (convert == null) throw new NotSupportedException($"Cast from {fromType.Name} are not supported when convert to BsonExpression"); var method = Expression.Call(null, convert, node.Operand); this.VisitMethodCall(method); } else { base.VisitUnary(node); } } else if (node.NodeType == ExpressionType.ArrayLength) { _builder.Append("LENGTH("); this.Visit(node.Operand); _builder.Append(")"); } else { base.VisitUnary(node); } return node; } /// /// Visit :: x => `new { x.Id, x.Name }` /// protected override Expression VisitNew(NewExpression node) { if (node.Members == null) { if (this.TryGetResolver(node.Type, out var type)) { var pattern = type.ResolveCtor(node.Constructor); if (pattern == null) throw new NotSupportedException($"Constructor for {node.Type.Name} are not supported when convert to BsonExpression ({node.ToString()})."); this.ResolvePattern(pattern, null, node.Arguments); } else { throw new NotSupportedException($"New instance are not supported for {node.Type} when convert to BsonExpression ({node.ToString()})."); } } else { _builder.Append("{ "); for (var i = 0; i < node.Members.Count; i++) { var member = node.Members[i]; _builder.Append(i > 0 ? ", " : ""); _builder.AppendFormat("'{0}': ", member.Name); this.Visit(node.Arguments[i]); } _builder.Append(" }"); } return node; } /// /// Visit :: x => `new MyClass { Id = 10 }` /// protected override Expression VisitMemberInit(MemberInitExpression node) { // works only for empty ctor if (node.NewExpression.Constructor.GetParameters().Length > 0) { throw new NotSupportedException($"New instance of {node.Type} are not supported because contains ctor with parameter. Try use only property initializers: `new {node.Type.Name} {{ PropA = 1, PropB == \"John\" }}`."); } _builder.Append("{"); for (var i = 0; i < node.Bindings.Count; i++) { var bind = node.Bindings[i] as MemberAssignment; var member = this.ResolveMember(bind.Member); _builder.Append(i > 0 ? ", " : ""); _builder.Append(member.Substring(1)); _builder.Append(":"); this.Visit(bind.Expression); } _builder.Append("}"); return node; } /// /// Visit :: x => `new int[] { 1, 2, 3 }` /// protected override Expression VisitNewArray(NewArrayExpression node) { _builder.Append("[ "); for (var i = 0; i < node.Expressions.Count; i++) { _builder.Append(i > 0 ? ", " : ""); this.Visit(node.Expressions[i]); } _builder.Append(" ]"); return node; } /// /// Visit :: x => x.Id `+` 10 /// protected override Expression VisitBinary(BinaryExpression node) { var andOr = node.NodeType == ExpressionType.AndAlso || node.NodeType == ExpressionType.OrElse; // special visitors if (node.NodeType == ExpressionType.Coalesce) return this.VisitCoalesce(node); if (node.NodeType == ExpressionType.ArrayIndex) return this.VisitArrayIndex(node); var op = this.GetOperator(node.NodeType); _builder.Append("("); this.VisitAsPredicate(node.Left, andOr); _builder.Append(op); if (!_mapper.EnumAsInteger && node.Left.NodeType == ExpressionType.Convert && node.Left is UnaryExpression unex && unex.Operand.Type.GetTypeInfo().IsEnum && unex.Type == typeof(Int32)) { this.VisitAsPredicate(Expression.Constant(Enum.GetName(unex.Operand.Type, this.Evaluate(node.Right))), andOr); } else { this.VisitAsPredicate(node.Right, andOr); } _builder.Append(")"); return node; } /// /// Visit :: x => `x.Id > 0 ? "ok" : "not-ok"` /// protected override Expression VisitConditional(ConditionalExpression node) { _builder.Append("IIF("); this.Visit(node.Test); _builder.Append(", "); this.Visit(node.IfTrue); _builder.Append(", "); this.Visit(node.IfFalse); _builder.Append(")"); return node; } /// /// Visit :: x => `x.FirstName ?? x.LastName` /// private Expression VisitCoalesce(BinaryExpression node) { _builder.Append("COALESCE("); this.Visit(node.Left); _builder.Append(", "); this.Visit(node.Right); _builder.Append(")"); return node; } /// /// Visit :: x => `x.Items[5]` /// private Expression VisitArrayIndex(BinaryExpression node) { this.Visit(node.Left); _builder.Append("["); // index must be evaluated (must returns a constant) var index = this.Evaluate(node.Right, typeof(int)); _builder.Append(index); _builder.Append("]"); return node; } /// /// Resolve string pattern using an object + N arguments. Will write over _builder /// private void ResolvePattern(string pattern, Expression obj, IList args) { var tokenizer = new Tokenizer(pattern); // lets use tokenizer to parse this method pattern while (!tokenizer.EOF) { var token = tokenizer.ReadToken(false); if (token.Type == TokenType.Hashtag) { this.Visit(obj); } else if (token.Type == TokenType.At && tokenizer.LookAhead(false).Type == TokenType.Int) { var i = Convert.ToInt32(tokenizer.ReadToken(false).Expect(TokenType.Int).Value); this.Visit(args[i]); } else if (token.Type == TokenType.Percent) { // special ANY/ALL cases this.VisitEnumerablePredicate(args[1] as LambdaExpression); } else { _builder.Append(token.Type == TokenType.String ? "'" + token.Value + "'" : token.Value); } } } /// /// Resolve Enumerable predicate when using Any/All enumerable extensions /// private void VisitEnumerablePredicate(LambdaExpression lambda) { var expression = lambda.Body; // Visit .Any(x => `x == 10`) if (expression is BinaryExpression bin) { // requires only parameter in left side if (bin.Left.NodeType != ExpressionType.Parameter) throw new LiteException(0, "Any/All requires simple parameter on left side. Eg: `x => x.Phones.Select(p => p.Number).Any(n => n > 5)`"); var op = this.GetOperator(bin.NodeType); _builder.Append(op); this.VisitAsPredicate(bin.Right, false); } // Visit .Any(x => `x.StartsWith("John")`) else if (expression is MethodCallExpression met) { // requires only parameter in left side if (met.Object.NodeType != ExpressionType.Parameter) throw new NotSupportedException("Any/All requires simple parameter on left side. Eg: `x.Customers.Select(c => c.Name).Any(n => n.StartsWith('J'))`"); // if not found in resolver, try run method if (!this.TryGetResolver(met.Method.DeclaringType, out var type)) { throw new NotSupportedException($"Method {met.Method.Name} not available to convert to BsonExpression inside Any/All call."); } // otherwise I have resolver for this method var pattern = type.ResolveMethod(met.Method); if (pattern == null || !pattern.StartsWith("#")) throw new NotSupportedException($"Method {met.Method.Name} not available to convert to BsonExpression inside Any/All call."); // call resolve pattern removing first `#` this.ResolvePattern(pattern.Substring(1), met.Object, met.Arguments); } else { throw new LiteException(0, "When using Any/All method test do only simple predicate variable. Eg: `x => x.Phones.Select(p => p.Number).Any(n => n > 5)`"); } } /// /// Get string operator from an Binary expression /// private string GetOperator(ExpressionType nodeType) { switch (nodeType) { case ExpressionType.Add: return " + "; case ExpressionType.Multiply: return " * "; case ExpressionType.Subtract: return " - "; case ExpressionType.Divide: return " / "; case ExpressionType.Equal: return " = "; case ExpressionType.NotEqual: return " != "; case ExpressionType.GreaterThan: return " > "; case ExpressionType.GreaterThanOrEqual: return " >= "; case ExpressionType.LessThan: return " < "; case ExpressionType.LessThanOrEqual: return " <= "; case ExpressionType.And: return " AND "; case ExpressionType.AndAlso: return " AND "; case ExpressionType.Or: return " OR "; case ExpressionType.OrElse: return " OR "; } throw new NotSupportedException($"Operator not supported {nodeType}"); } /// /// Returns document field name for some type member /// private string ResolveMember(MemberInfo member) { var name = member.Name; // checks if parent field are not DbRef (checks for same dataType) var isParentDbRef = _dbRefType != null && member.DeclaringType.IsAssignableFrom(_dbRefType); // get class entity from mapper var entity = _mapper.GetEntityMapper(member.DeclaringType); entity.WaitForInitialization(); // get mapped field from entity var field = entity.Members.FirstOrDefault(x => x.MemberName == name); if (field == null) throw new NotSupportedException($"Member {name} not found on BsonMapper for type {member.DeclaringType}."); // define if this field are DbRef (child will need check parent) _dbRefType = field.IsDbRef ? field.UnderlyingType : null; // if parent call is DbRef and are calling _id field, rename to $id return "." + (isParentDbRef && field.FieldName == "_id" ? "$id" : field.FieldName); } /// /// Define if this method is index access and must eval index value (do not use parameter) /// private bool IsMethodIndexEval(MethodCallExpression node, out Expression obj, out Expression idx) { var method = node.Method; var type = method.DeclaringType; var pars = method.GetParameters(); // for List/Dictionary [int/string] if (method.Name == "get_Item" && pars.Length == 1 && (pars[0].ParameterType == typeof(int) || pars[0].ParameterType == typeof(string))) { obj = node.Object; idx = node.Arguments[0]; return true; } //** // for Sql.Items(int) //** if (type == typeof(Sql) && method.Name == "Items" && //** pars.Length == 2 && pars[1].ParameterType == typeof(int)) //** { //** obj = node.Arguments[0]; //** idx = node.Arguments[1]; //** return true; //** } obj = null; idx = null; return false; } /// /// Visit expression but, if ensurePredicate = true, force expression be a predicate (appending ` = true`) /// private void VisitAsPredicate(Expression expr, bool ensurePredicate) { // apppend `= true` only if expression is path (MemberAccess), method call or constant ensurePredicate = ensurePredicate && (expr.NodeType == ExpressionType.MemberAccess || expr.NodeType == ExpressionType.Call || expr.NodeType == ExpressionType.Invoke || expr.NodeType == ExpressionType.Constant); if (ensurePredicate) { _builder.Append("("); _builder.Append("("); base.Visit(expr); _builder.Append(")"); _builder.Append(" = true)"); } else { base.Visit(expr); } } /// /// Compile and execute expression (can be cached) /// private object Evaluate(Expression expr, params Type[] validTypes) { object value = null; if (expr.NodeType == ExpressionType.Constant) { var constant = (ConstantExpression)expr; value = constant.Value; } else { var func = Expression.Lambda(expr).Compile(); value = func.DynamicInvoke(); } // do some type validation to be ease to debug if (validTypes.Length > 0 && value == null) { throw new NotSupportedException($"Expression {expr} can't return null value"); } if (validTypes.Length > 0 && validTypes.Any(x => x == value.GetType()) == false) { throw new NotSupportedException($"Expression {expr} must return on of this types: {string.Join(", ", validTypes.Select(x => $"`{x.Name}`"))}"); } return value; } /// /// Try find a Type Resolver for declaring type /// private bool TryGetResolver(Type declaringType, out ITypeResolver typeResolver) { // get method declaring type - if is from any kind of list, read as Enumerable var isCollection = Reflection.IsCollection(declaringType); var isEnumerable = Reflection.IsEnumerable(declaringType); var isNullable = Reflection.IsNullable(declaringType); var type = isCollection ? typeof(ICollection) : isEnumerable ? typeof(Enumerable) : isNullable ? typeof(Nullable) : declaringType; return _resolver.TryGetValue(type, out typeResolver); } } } ================================================ FILE: LiteDB/Client/Mapper/Linq/ParameterExpressionVisitor.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { /// /// Class used to test in an Expression member expression is based on parameter `x => x.Name` or variable `x => externalVar` /// internal class ParameterExpressionVisitor : ExpressionVisitor { public bool IsParameter { get; private set; } = false; protected override Expression VisitParameter(ParameterExpression node) { this.IsParameter = true; return base.VisitParameter(node); } public static bool Test(Expression node) { var instance = new ParameterExpressionVisitor(); instance.Visit(node); return instance.IsParameter; } } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/BsonValueResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class BsonValueResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) => null; public string ResolveMember(MemberInfo member) { switch (member.Name) { case "AsArray": case "AsDocument": case "AsBinary": case "AsBoolean": case "AsString": case "AsInt32": case "AsInt64": case "AsDouble": case "AsDecimal": case "AsDateTime": case "AsObjectId": case "AsGuid": return "#"; case "IsNull": return "IS_NULL(#)"; case "IsArray": return "IS_ARRAY(#)"; case "IsDocument": return "IS_DOCUMENT(#)"; case "IsInt32": return "IS_INT32(#)"; case "IsInt64": return "IS_INT64(#)"; case "IsDouble": return "IS_DOUBLE(#)"; case "IsDecimal": return "IS_DECIMAL(#)"; case "IsNumber": return "IS_NUMBER(#)"; case "IsBinary": return "IS_BINARY(#)"; case "IsBoolean": return "IS_BOOLEAN(#)"; case "IsString": return "IS_STRING(#)"; case "IsObjectId": return "IS_OBJECTID(#)"; case "IsGuid": return "IS_GUID(#)"; case "IsDateTime": return "IS_DATETIME(#)"; case "IsMinValue": return "IS_MINVALUE(#)"; case "IsMaxValue": return "IS_MAXVALUE(#)"; }; return null; } public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/ConvertResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class ConvertResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { switch (method.Name) { case "ToInt32": return "INT32(@0)"; case "ToInt64": return "INT64(@0)"; case "ToDouble": return "DOUBLE(@0)"; case "ToDecimal": return "DECIMAL(@0)"; case "ToDateTime": return "DATE(@0)"; case "FromBase64String": return "BINARY(@0)"; case "ToBoolean": return "BOOL(@0)"; case "ToString": return "STRING(@0)"; } return null; } public string ResolveMember(MemberInfo member) => null; public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/DateTimeResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class DateTimeResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { switch (method.Name) { // instance methods case "AddYears": return "DATEADD('y', @0, #)"; case "AddMonths": return "DATEADD('M', @0, #)"; case "AddDays": return "DATEADD('d', @0, #)"; case "AddHours": return "DATEADD('h', @0, #)"; case "AddMinutes": return "DATEADD('m', @0, #)"; case "AddSeconds": return "DATEADD('s', @0, #)"; case "ToString": var pars = method.GetParameters(); if (pars.Length == 0) return "STRING(#)"; else if (pars.Length == 1 && pars[0].ParameterType == typeof(string)) return "FORMAT(#, @0)"; break; case "ToUniversalTime": return "TO_UTC(#)"; // static methods case "Parse": return "DATETIME(@0)"; case "Equals": return "# = @0"; }; return null; } public string ResolveMember(MemberInfo member) { switch (member.Name) { // static properties case "Now": return "NOW()"; case "UtcNow": return "NOW_UTC()"; case "Today": return "TODAY()"; // instance properties case "Year": return "YEAR(#)"; case "Month": return "MONTH(#)"; case "Day": return "DAY(#)"; case "Hour": return "HOUR(#)"; case "Minute": return "MINUTE(#)"; case "Second": return "SECOND(#)"; case "Date": return "DATETIME(YEAR(#), MONTH(#), DAY(#))"; case "ToLocalTime": return "TO_LOCAL(#)"; case "ToUniversalTime": return "TO_UTC(#)"; } return null; } public string ResolveCtor(ConstructorInfo ctor) { var pars = ctor.GetParameters(); if (pars.Length == 3) { // int year, int month, int day if (pars[0].ParameterType == typeof(int) && pars[1].ParameterType == typeof(int) && pars[2].ParameterType == typeof(int)) { return "DATETIME(@0, @1, @2)"; } } return null; } } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/EnumerableResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class EnumerableResolver : ITypeResolver { public virtual string ResolveMethod(MethodInfo method) { // all methods in Enumerable are Extensions (static methods), so first parameter is IEnumerable var name = Reflection.MethodName(method, 1); switch (name) { // get all items case "AsEnumerable()": return "@0[*]"; // get fixed index item case "get_Item(int)": return "#[@0]"; case "ElementAt(int)": return "@0[@1]"; case "Single()": case "First()": case "SingleOrDefault()": case "FirstOrDefault()": return "@0[0]"; case "Last()": case "LastOrDefault()": return "@0[-1]"; // get single item but with predicate function case "Single(Func)": case "First(Func)": case "SingleOrDefault(Func)": case "FirstOrDefault(Func)": return "FIRST(FILTER(@0 => @1))"; case "Last(Func)": case "LastOrDefault(Func)": return "LAST(FILTER(@0 => @1))"; // filter case "Where(Func)": return "FILTER(@0 => @1)"; // map case "Select(Func)": return "MAP(@0 => @1)"; // aggregate case "Count()": return "COUNT(@0)"; case "Sum()": return "SUM(@0)"; case "Average()": return "AVG(@0)"; case "Max()": return "MAX(@0)"; case "Min()": return "MIN(@0)"; // aggregate case "Count(Func)": return "COUNT(FILTER(@0 => @1))"; case "Sum(Func)": return "SUM(MAP(@0 => @1))"; case "Average(Func)": return "AVG(MAP(@0 => @1))"; case "Max(Func)": return "MAX(MAP(@0 => @1))"; case "Min(Func)": return "MIN(MAP(@0 => @1))"; // convert to array case "ToList()": case "ToArray()": return "ARRAY(@0)"; // any/all special cases case "Any(Func)": return "@0 ANY %"; case "All(Func)": return "@0 ALL %"; case "Any()": return "COUNT(@0) > 0"; } // special Contains method switch(method.Name) { case "Contains": return "@0 ANY = @1"; }; return null; } public virtual string ResolveMember(MemberInfo member) { // this both members are not from IEnumerable: // but any IEnumerable type will run this resolver (IList, ICollection) switch(member.Name) { case "Length": return "LENGTH(#)"; case "Count": return "COUNT(#)"; } return null; } public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/GuidResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class GuidResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { switch (method.Name) { // instance methods case "ToString": return "STRING(#)"; // static methods case "NewGuid": return "GUID()"; case "Parse": return "GUID(@0)"; case "TryParse": throw new NotSupportedException("There is no TryParse translate. Use Guid.Parse()"); case "Equals": return "# = @0"; } return null; } public string ResolveMember(MemberInfo member) { switch (member.Name) { // static properties case "Empty": return "GUID('00000000-0000-0000-0000-000000000000')"; } return null; } public string ResolveCtor(ConstructorInfo ctor) { var pars = ctor.GetParameters(); if (pars.Length == 1) { // string s if (pars[0].ParameterType == typeof(string)) { return "GUID(@0)"; } } return null; } } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/ICollectionResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class ICollectionResolver : EnumerableResolver { public override string ResolveMethod(MethodInfo method) { // special Contains method switch(method.Name) { case "Contains": return "# ANY = @0"; }; return base.ResolveMethod(method); } } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/ITypeResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal interface ITypeResolver { string ResolveMethod(MethodInfo method); string ResolveMember(MemberInfo member); string ResolveCtor(ConstructorInfo ctor); } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/MathResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class MathResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { var qtParams = method.GetParameters().Length; switch (method.Name) { case "Abs": return "ABS(@0)"; case "Pow": return "POW(@0, @1)"; case "Round": if (qtParams != 2) throw new ArgumentOutOfRangeException("Method Round need 2 arguments when convert to BsonExpression"); return "ROUND(@0, @1)"; } return null; } public string ResolveMember(MemberInfo member) => null; public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/NullableResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class NullableResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { return null; } public string ResolveMember(MemberInfo member) { switch (member.Name) { case "HasValue": return "(IS_NULL(#) = false)"; case "Value": return "#"; } return null; } public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/NumberResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class NumberResolver : ITypeResolver { private readonly string _parseMethod; public NumberResolver(string parseMethod) { _parseMethod = parseMethod; } public string ResolveMethod(MethodInfo method) { switch (method.Name) { // instance methods case "ToString": var pars = method.GetParameters(); if (pars.Length == 0) return "STRING(#)"; else if (pars.Length == 1 && pars[0].ParameterType == typeof(string)) return "FORMAT(#, @0)"; break; // static methods case "Parse": return $"{_parseMethod}(@0)"; case "Equals": return "# = @0"; }; return null; } public string ResolveMember(MemberInfo member) => null; public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/ObjectIdResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class ObjectIdResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { switch (method.Name) { // instance methods case "ToString": return "STRING(#)"; case "Equals": return "# = @0"; }; return null; } public string ResolveMember(MemberInfo member) { switch (member.Name) { // static properties case "Empty": return "OBJECTID('000000000000000000000000')"; // instance properties case "CreationTime": return "OID_CREATIONTIME(#)"; } return null; } public string ResolveCtor(ConstructorInfo ctor) { var pars = ctor.GetParameters(); if (pars.Length == 1) { // string value if (pars[0].ParameterType == typeof(string)) { return "OBJECTID(@0)"; } } return null; } } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/RegexResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal class RegexResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { switch (method.Name) { case "Split": return "SPLIT(@0, @1, true)"; case "IsMatch": return "IS_MATCH(@0, @1)"; // missing "Match" } return null; } public string ResolveMember(MemberInfo member) => null; public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/Linq/TypeResolver/StringResolver.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class StringResolver : ITypeResolver { public string ResolveMethod(MethodInfo method) { var qtParams = method.GetParameters().Length; switch (method.Name) { case "Count": return "LENGTH(#)"; case "Trim": return "TRIM(#)"; case "TrimStart": return "LTRIM(#)"; case "TrimEnd": return "RTRIM(#)"; case "ToUpper": return "UPPER(#)"; case "ToUpperInvariant": return "UPPER(#)"; case "ToLower": return "LOWER(#)"; case "ToLowerInvariant": return "LOWER(#)"; case "Replace": return "REPLACE(#, @0, @1)"; case "PadLeft": return "LPAD(#, @0, @1)"; case "RightLeft": return "RPAD(#, @0, @1)"; case "IndexOf": return qtParams == 1 ? "INDEXOF(#, @0)" : "INDEXOF(#, @0, @1)"; case "Substring": return qtParams == 1 ? "SUBSTRING(#, @0)" : "SUBSTRING(#, @0, @1)"; case "StartsWith": return "# LIKE (@0 + '%')"; case "Contains": return "# LIKE ('%' + @0 + '%')"; case "EndsWith": return "# LIKE ('%' + @0)"; case "ToString": return "#"; case "Equals": return "# = @0"; // static methods case "IsNullOrEmpty": return "(LENGTH(@0) = 0)"; case "IsNullOrWhiteSpace": return "(LENGTH(TRIM(@0)) = 0)"; case "Format": throw new NotImplementedException(); //TODO implement format case "Join": throw new NotImplementedException(); //TODO implement join }; return null; } public string ResolveMember(MemberInfo member) { switch (member.Name) { case "Length": return "LENGTH(#)"; case "Empty": return "''"; } return null; } public string ResolveCtor(ConstructorInfo ctor) => null; } } ================================================ FILE: LiteDB/Client/Mapper/MemberMapper.cs ================================================ using System; using System.Reflection; using static LiteDB.Constants; namespace LiteDB { /// /// Internal representation for a .NET member mapped to BsonDocument /// public class MemberMapper { /// /// If member is Id, indicate that are AutoId /// public bool AutoId { get; set; } /// /// Member name /// public string MemberName { get; set; } /// /// Member returns data type /// public Type DataType { get; set; } /// /// Converted document field name /// public string FieldName { get; set; } /// /// Delegate method to get value from entity instance /// public GenericGetter Getter { get; set; } /// /// Delegate method to set value to entity instance /// public GenericSetter Setter { get; set; } /// /// When used, can be define a serialization function from entity class to bson value /// public Func Serialize { get; set; } /// /// When used, can define a deserialization function from bson value /// public Func Deserialize { get; set; } /// /// Is this property an DbRef? Must implement Serialize/Deserialize delegates /// public bool IsDbRef { get; set; } /// /// Indicate that this property contains an list of elements (IEnumerable) /// public bool IsEnumerable { get; set; } /// /// When property is an array of items, gets underlying type (otherwise is same type of PropertyType) /// public Type UnderlyingType { get; set; } /// /// Is this property ignore /// public bool IsIgnore { get; set; } } } ================================================ FILE: LiteDB/Client/Mapper/Reflection/Reflection.Expression.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using static LiteDB.Constants; namespace LiteDB { /// /// Using Expressions is the easy and fast way to create classes, structs, get/set fields/properties. But it not works in NET35 /// internal partial class Reflection { public static CreateObject CreateClass(Type type) { var pDoc = Expression.Parameter(typeof(BsonDocument), "_doc"); return Expression.Lambda(Expression.New(type), pDoc).Compile(); } public static CreateObject CreateStruct(Type type) { var pDoc = Expression.Parameter(typeof(BsonDocument), "_doc"); var newType = Expression.New(type); var convert = Expression.Convert(newType, typeof(object)); return Expression.Lambda(convert, pDoc).Compile(); } public static GenericGetter CreateGenericGetter(Type type, MemberInfo memberInfo) { if (memberInfo == null) throw new ArgumentNullException(nameof(memberInfo)); // if has no read if (memberInfo is PropertyInfo && (memberInfo as PropertyInfo).CanRead == false) return null; var obj = Expression.Parameter(typeof(object), "o"); var accessor = Expression.MakeMemberAccess(Expression.Convert(obj, memberInfo.DeclaringType), memberInfo); return Expression.Lambda(Expression.Convert(accessor, typeof(object)), obj).Compile(); } public static GenericSetter CreateGenericSetter(Type type, MemberInfo memberInfo) { if (memberInfo == null) throw new ArgumentNullException(nameof(memberInfo)); var fieldInfo = memberInfo as FieldInfo; var propertyInfo = memberInfo as PropertyInfo; // if is property and has no write if (memberInfo is PropertyInfo && propertyInfo.CanWrite == false) return null; // if *Structs*, use direct reflection - net35 has no Expression.Unbox to cast target if (type.GetTypeInfo().IsValueType) { return memberInfo is FieldInfo ? (GenericSetter)fieldInfo.SetValue : ((t, v) => propertyInfo.SetValue(t, v, null)); } var dataType = memberInfo is PropertyInfo ? propertyInfo.PropertyType : fieldInfo.FieldType; var target = Expression.Parameter(typeof(object), "obj"); var value = Expression.Parameter(typeof(object), "val"); var castTarget = Expression.Convert(target, type); var castValue = Expression.ConvertChecked(value, dataType); var accessor = memberInfo is PropertyInfo ? Expression.Property(castTarget, propertyInfo) : Expression.Field(castTarget, fieldInfo); var assign = Expression.Assign(accessor, castValue); var conv = Expression.Convert(assign, typeof(object)); return Expression.Lambda(conv, target, value).Compile(); } } } ================================================ FILE: LiteDB/Client/Mapper/Reflection/Reflection.cs ================================================ using System; using System.CodeDom; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB { #region Delegates public delegate object CreateObject(BsonDocument value); public delegate void GenericSetter(object target, object value); public delegate object GenericGetter(object obj); #endregion /// /// Helper class to get entity properties and map as BsonValue /// internal partial class Reflection { #region CreateInstance private static readonly Dictionary _cacheCtor = new Dictionary(); /// /// Create a new instance from a Type /// public static object CreateInstance(Type type) { try { if (_cacheCtor.TryGetValue(type, out CreateObject c)) { return c(null); } } catch (Exception ex) { throw LiteException.InvalidCtor(type, ex); } lock (_cacheCtor) { try { if (_cacheCtor.TryGetValue(type, out CreateObject c)) { return c(null); } var typeInfo = type.GetTypeInfo(); if (typeInfo.IsClass) { _cacheCtor.Add(type, c = CreateClass(type)); } else if (typeInfo.IsInterface) // some know interfaces { if (typeInfo.IsGenericType) { var typeDef = type.GetGenericTypeDefinition(); if (typeDef == typeof(ISet<>)) { return CreateInstance(GetGenericSetOfType(UnderlyingTypeOf(type))); } else if (typeDef == typeof(IDictionary<,>)) { var k = type.GetGenericArguments()[0]; var v = type.GetGenericArguments()[1]; return CreateInstance(GetGenericDictionaryOfType(k, v)); } else if (typeDef == typeof(IList<>) || typeDef == typeof(ICollection<>) || typeDef == typeof(IEnumerable<>) || typeof(IEnumerable).IsAssignableFrom(typeDef)) { return CreateInstance(GetGenericListOfType(UnderlyingTypeOf(type))); } } throw LiteException.InvalidCtor(type, null); } else // structs { _cacheCtor.Add(type, c = CreateStruct(type)); } return c(null); } catch (Exception ex) { throw LiteException.InvalidCtor(type, ex); } } } #endregion #region Utils /// /// Get a list from all acepted data type to property converter BsonValue /// public static readonly Dictionary ConvertType = new Dictionary() { [typeof(DateTime)] = typeof(BsonValue).GetProperty("AsDateTime"), [typeof(decimal)] = typeof(BsonValue).GetProperty("AsDecimal"), [typeof(double)] = typeof(BsonValue).GetProperty("AsDouble"), [typeof(long)] = typeof(BsonValue).GetProperty("AsInt64"), [typeof(int)] = typeof(BsonValue).GetProperty("AsInt32"), [typeof(bool)] = typeof(BsonValue).GetProperty("AsBoolean"), [typeof(byte[])] = typeof(BsonValue).GetProperty("AsBinary"), [typeof(BsonDocument)] = typeof(BsonValue).GetProperty("AsDocument"), [typeof(BsonArray)] = typeof(BsonValue).GetProperty("AsArray"), [typeof(ObjectId)] = typeof(BsonValue).GetProperty("AsObjectId"), [typeof(string)] = typeof(BsonValue).GetProperty("AsString"), [typeof(Guid)] = typeof(BsonValue).GetProperty("AsGuid") }; // getting `bsonDocument.Item[string]` property access public static readonly PropertyInfo DocumentItemProperty = typeof(BsonDocument).GetProperties() .Where(x => x.Name == "Item" && x.GetGetMethod().GetParameters().First().ParameterType == typeof(String)) .First(); public static bool IsNullable(Type type) { if (!type.GetTypeInfo().IsGenericType) return false; var g = type.GetGenericTypeDefinition(); return (g.Equals(typeof(Nullable<>))); } /// /// Get underlying get - using to get inner Type from Nullable type /// public static Type UnderlyingTypeOf(Type type) { if (!type.GetTypeInfo().IsGenericType) return type; return type.GetGenericArguments()[0]; } public static Type GetGenericListOfType(Type type) { var listType = typeof(List<>); return listType.MakeGenericType(type); } public static Type GetGenericSetOfType(Type type) { var setType = typeof(HashSet<>); return setType.MakeGenericType(type); } public static Type GetGenericDictionaryOfType(Type k, Type v) { var dictionaryType = typeof(Dictionary<,>); return dictionaryType.MakeGenericType(k, v); } /// /// Get item type from a generic List or Array /// public static Type GetListItemType(Type listType) { if (listType.IsArray) return listType.GetElementType(); foreach (var i in listType.GetInterfaces()) { if (i.GetTypeInfo().IsGenericType && i.GetGenericTypeDefinition() == typeof(IEnumerable<>)) { return i.GetGenericArguments()[0]; } // if interface is IEnumerable (non-generic), let's get from listType and not from interface // from #395 else if (listType.GetTypeInfo().IsGenericType && i == typeof(IEnumerable)) { return listType.GetGenericArguments()[0]; } } return typeof(object); } /// /// Returns true if Type is any kind of Array/IList/ICollection/.... /// public static bool IsEnumerable(Type type) { if (type == typeof(IEnumerable) || type.IsArray) return true; if (type == typeof(string)) return false; // do not define "String" as IEnumerable foreach (var @interface in type.GetInterfaces()) { if (@interface.GetTypeInfo().IsGenericType) { if (@interface.GetGenericTypeDefinition() == typeof(IEnumerable<>)) { // if needed, you can also return the type used as generic argument return true; } } } return false; } /// /// Return if type is simple value /// public static bool IsSimpleType(Type type) { return type == typeof(string) || type == typeof(Boolean) || type == typeof(Byte) || type == typeof(SByte) || type == typeof(Int16) || type == typeof(Int32) || type == typeof(Int64) || type == typeof(UInt16) || type == typeof(UInt32) || type == typeof(UInt64) || type == typeof(Double) || type == typeof(Single) || type == typeof(Decimal) || type == typeof(ObjectId) || type == typeof(DateTime) || type == typeof(Guid); } /// /// Returns true if Type implement ICollection (like List, HashSet) /// public static bool IsCollection(Type type) { return type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(ICollection<>)) || type.GetInterfaces().Any(x => x == typeof(ICollection) || (x.GetTypeInfo().IsGenericType ? x.GetGenericTypeDefinition() == typeof(ICollection<>) : false)); } /// /// Returns if Type is a generic Dictionary /// public static bool IsDictionary(Type type) { return type.GetTypeInfo().IsGenericType && type.GetGenericTypeDefinition().Equals(typeof(IDictionary<,>)) || type.GetInterfaces().Any(x => x == typeof(IDictionary) || (x.GetTypeInfo().IsGenericType ? x.GetGenericTypeDefinition().Equals(typeof(IDictionary<,>)) : false)); } /// /// Select member from a list of member using predicate order function to select /// public static MemberInfo SelectMember(IEnumerable members, params Func[] predicates) { foreach (var predicate in predicates) { var member = members.FirstOrDefault(predicate); if (member != null) { return member; } } return null; } #endregion #region MethodName private static readonly Dictionary _cacheName = new Dictionary(); /// /// Get a friendly method name with parameter types /// public static string MethodName(MethodInfo method, int skipParameters = 0) { lock (_cacheName) { if (_cacheName.TryGetValue(method, out var value)) { return value; } value = MethodNameInternal(method, skipParameters); _cacheName.Add(method, value); return value; } } private static string MethodNameInternal(MethodInfo method, int skipParameters = 0) { var sb = new StringBuilder(method.Name + "("); var index = 0; foreach (var p in method.GetParameters().Skip(skipParameters)) { if (index++ > 0) sb.Append(","); sb.Append(FriendlyTypeName(p.ParameterType)); if (p.ParameterType.GetTypeInfo().IsGenericType) { var generic = p.ParameterType.GetGenericTypeDefinition(); var types = generic.GetGenericArguments(); sb.Append("<"); sb.Append(string.Join(",", types.Select(x => FriendlyTypeName(x)))); sb.Append(">"); } } sb.Append(")"); return sb.ToString(); } /// /// Get C# friendly primitive type names /// private static string FriendlyTypeName(Type type) { var generic = type.Name.IndexOf("`"); switch (type.FullName) { case "System.Object": return "object"; case "System.String": return "string"; case "System.Boolean": return "bool"; case "System.Byte": return "byte"; case "System.Char": return "char"; case "System.Decimal": return "decimal"; case "System.Double": return "double"; case "System.Int16": return "short"; case "System.Int32": return "int"; case "System.Int64": return "long"; case "System.SByte": return "sbyte"; case "System.Single": return "float"; case "System.UInt16": return "ushort"; case "System.UInt32": return "uint"; case "System.UInt64": return "ulong"; default: return generic > 0 ? type.Name.Substring(0, generic) : type.Name; } } #endregion } } ================================================ FILE: LiteDB/Client/Mapper/TypeNameBinder/DefaultTypeNameBinder.cs ================================================ using System; using System.Collections.Generic; using System.Reflection; namespace LiteDB { public class DefaultTypeNameBinder : ITypeNameBinder { public static DefaultTypeNameBinder Instance { get; } = new DefaultTypeNameBinder(); /// /// Contains all well known vulnerable types according to ysoserial.net /// private static readonly HashSet _disallowedTypeNames = new HashSet(StringComparer.OrdinalIgnoreCase) { "System.Workflow.ComponentModel.AppSettings", "System.Core", "WinRT.BaseActivationFactory", "System.Data", "System.Windows.Data.ObjectDataProvider", "System.CodeDom.Compiler.CompilerResults", "System.Collections.ArrayList", "System.Diagnostics.Process", "System.Diagnostics.ProcessStartInfo", "System.Management.Automation", "System.Windows.Markup.XamlReader", "System.Web.Security.RolePrincipal", "System.Security.Principal.WindowsIdentity", "System.Security.Principal.WindowsPrincipal", "Microsoft.VisualStudio.Text.Formatting.TextFormattingRunProperties", "System.Drawing.Design.ToolboxItemContainer", "Microsoft.IdentityModel.Claims.WindowsClaimsIdentity", "System.Resources.ResXResourceReader", "System.Resources.ResXResourceWriter", "System.Windows.Forms", "Microsoft.ApplicationId.Framework.InfiniteProgressPage", "Microsoft.VisualBasic.Logging.FileLogTraceListener", "Grpc.Core.Internal.UnmanagedLibrary", "MongoDB.Libmongocrypt.LibraryLoader+WindowsLibrary", "Xunit.Xunit1Executor", "Apache.NMS.ActiveMQ.Commands.ActiveMQObjectMessage", "Apache.NMS.ActiveMQ.Transport.Failover.FailoverTransport", "Apache.NMS.ActiveMQ.Util.IdGenerator", "Xunit.Sdk.TestFrameworkDiscoverer+PreserveWorkingFolder", "Xunit.Xunit1AssemblyInfo", "Amazon.Runtime.Internal.Util.OptimisticLockedTextFile", "Microsoft.Azure.Cosmos.Query.Core.QueryPlan.QueryPartitionProvider", "NLog.Internal.FileAppenders.SingleProcessFileAppender", "NLog.Targets.FileTarget", "Google.Apis.Util.Store.FileDataStore", }; private DefaultTypeNameBinder() { } public string GetName(Type type) => type.FullName + ", " + type.GetTypeInfo().Assembly.GetName().Name; public Type GetType(string name) { var type = Type.GetType(name); if (type == null) { return null; } if (_disallowedTypeNames.Contains(type.FullName)) { throw LiteException.IllegalDeserializationType(type.FullName); } return type; } } } ================================================ FILE: LiteDB/Client/Mapper/TypeNameBinder/ITypeNameBinder.cs ================================================ using System; namespace LiteDB { public interface ITypeNameBinder { string GetName(Type type); Type GetType(string name); } } ================================================ FILE: LiteDB/Client/Shared/SharedDataReader.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; namespace LiteDB { public class SharedDataReader : IBsonDataReader { private readonly IBsonDataReader _reader; private readonly Action _dispose; private bool _disposed = false; public SharedDataReader(IBsonDataReader reader, Action dispose) { _reader = reader; _dispose = dispose; } public BsonValue this[string field] => _reader[field]; public string Collection => _reader.Collection; public BsonValue Current => _reader.Current; public bool HasValues => _reader.HasValues; public bool Read() => _reader.Read(); public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } ~SharedDataReader() { this.Dispose(false); } protected virtual void Dispose(bool disposing) { if (_disposed) return; _disposed = true; if (disposing) { _reader.Dispose(); _dispose(); } } } } ================================================ FILE: LiteDB/Client/Shared/SharedEngine.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.IO; using System.Threading; #if NETFRAMEWORK using System.Security.AccessControl; using System.Security.Principal; #endif namespace LiteDB { public class SharedEngine : ILiteEngine { private readonly EngineSettings _settings; private readonly Mutex _mutex; private LiteEngine _engine; private bool _transactionRunning = false; public SharedEngine(EngineSettings settings) { _settings = settings; var name = Path.GetFullPath(settings.Filename).ToLower().Sha1(); try { #if NETFRAMEWORK var allowEveryoneRule = new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow); var securitySettings = new MutexSecurity(); securitySettings.AddAccessRule(allowEveryoneRule); _mutex = new Mutex(false, "Global\\" + name + ".Mutex", out _, securitySettings); #else _mutex = new Mutex(false, "Global\\" + name + ".Mutex"); #endif } catch (NotSupportedException ex) { throw new PlatformNotSupportedException("Shared mode is not supported in platforms that do not implement named mutex.", ex); } } /// /// Open database in safe mode /// /// true if successfully opened; false if already open private bool OpenDatabase() { try { // Acquire mutex for every call to open DB. _mutex.WaitOne(); } catch (AbandonedMutexException) { } // Don't create a new engine while a transaction is running. if (!_transactionRunning && _engine == null) { try { _engine = new LiteEngine(_settings); return true; } catch { _mutex.ReleaseMutex(); throw; } } else { return false; } } /// /// Dequeue stack and dispose database on empty stack /// private void CloseDatabase() { // Don't dispose the engine while a transaction is running. if (!_transactionRunning && _engine != null) { // If no transaction pending, dispose the engine. _engine.Dispose(); _engine = null; } // Release Mutex on every call to close DB. _mutex.ReleaseMutex(); } #region Transaction Operations public bool BeginTrans() { OpenDatabase(); try { _transactionRunning = _engine.BeginTrans(); return _transactionRunning; } catch { CloseDatabase(); throw; } } public bool Commit() { if (_engine == null) return false; try { return _engine.Commit(); } finally { _transactionRunning = false; CloseDatabase(); } } public bool Rollback() { if (_engine == null) return false; try { return _engine.Rollback(); } finally { _transactionRunning = false; CloseDatabase(); } } #endregion #region Read Operation public IBsonDataReader Query(string collection, Query query) { bool opened = OpenDatabase(); var reader = _engine.Query(collection, query); return new SharedDataReader(reader, () => { if (opened) { CloseDatabase(); } }); } public BsonValue Pragma(string name) { return QueryDatabase(() => _engine.Pragma(name)); } public bool Pragma(string name, BsonValue value) { return QueryDatabase(() => _engine.Pragma(name, value)); } #endregion #region Write Operations public int Checkpoint() { return QueryDatabase(() => _engine.Checkpoint()); } public long Rebuild(RebuildOptions options) { return QueryDatabase(() => _engine.Rebuild(options)); } public int Insert(string collection, IEnumerable docs, BsonAutoId autoId) { return QueryDatabase(() => _engine.Insert(collection, docs, autoId)); } public int Update(string collection, IEnumerable docs) { return QueryDatabase(() => _engine.Update(collection, docs)); } public int UpdateMany(string collection, BsonExpression extend, BsonExpression predicate) { return QueryDatabase(() => _engine.UpdateMany(collection, extend, predicate)); } public int Upsert(string collection, IEnumerable docs, BsonAutoId autoId) { return QueryDatabase(() => _engine.Upsert(collection, docs, autoId)); } public int Delete(string collection, IEnumerable ids) { return QueryDatabase(() => _engine.Delete(collection, ids)); } public int DeleteMany(string collection, BsonExpression predicate) { return QueryDatabase(() => _engine.DeleteMany(collection, predicate)); } public bool DropCollection(string name) { return QueryDatabase(() => _engine.DropCollection(name)); } public bool RenameCollection(string name, string newName) { return QueryDatabase(() => _engine.RenameCollection(name, newName)); } public bool DropIndex(string collection, string name) { return QueryDatabase(() => _engine.DropIndex(collection, name)); } public bool EnsureIndex(string collection, string name, BsonExpression expression, bool unique) { return QueryDatabase(() => _engine.EnsureIndex(collection, name, expression, unique)); } #endregion public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ~SharedEngine() { Dispose(false); } protected virtual void Dispose(bool disposing) { if (disposing) { if (_engine != null) { _engine.Dispose(); _engine = null; _mutex.ReleaseMutex(); } } } private T QueryDatabase(Func Query) { bool opened = OpenDatabase(); try { return Query(); } finally { if (opened) { CloseDatabase(); } } } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Begin.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// BEGIN [ TRANS | TRANSACTION ] /// private BsonDataReader ParseBegin() { _tokenizer.ReadToken().Expect("BEGIN"); var token = _tokenizer.ReadToken().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (token.Is("TRANS") || token.Is("TRANSACTION")) { _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); } var transactionId = _engine.BeginTrans(); return new BsonDataReader(transactionId); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Checkpoint.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// CHECKPOINT /// private BsonDataReader ParseCheckpoint() { _tokenizer.ReadToken().Expect(Pragmas.CHECKPOINT); // read or ; _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); var result = _engine.Checkpoint(); return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Commit.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// COMMIT [ TRANS | TRANSACTION ] /// private BsonDataReader ParseCommit() { _tokenizer.ReadToken().Expect("COMMIT"); var token = _tokenizer.ReadToken().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (token.Is("TRANS") || token.Is("TRANSACTION")) { _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); } var result = _engine.Commit(); return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Create.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// CREATE [ UNIQUE ] INDEX {indexName} ON {collection} ({indexExpr}) /// private BsonDataReader ParseCreate() { _tokenizer.ReadToken().Expect("CREATE"); var token = _tokenizer.ReadToken().Expect(TokenType.Word); var unique = token.Is("UNIQUE"); if (unique) { token = _tokenizer.ReadToken(); } token.Expect("INDEX"); // read indexName var name = _tokenizer.ReadToken().Expect(TokenType.Word).Value; _tokenizer.ReadToken().Expect("ON"); // read collectionName var collection = _tokenizer.ReadToken().Expect(TokenType.Word).Value; // read ( _tokenizer.ReadToken().Expect(TokenType.OpenParenthesis); // read index expression var expr = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, new BsonDocument()); // read ) _tokenizer.ReadToken().Expect(TokenType.CloseParenthesis); // read EOF or ; _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); var result = _engine.EnsureIndex(collection, name, expr, unique); return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Delete.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// DELETE {collection} WHERE {whereExpr} /// private BsonDataReader ParseDelete() { _tokenizer.ReadToken().Expect("DELETE"); var collection = _tokenizer.ReadToken().Expect(TokenType.Word).Value; BsonExpression where = null; if (_tokenizer.LookAhead().Is("WHERE")) { // read WHERE _tokenizer.ReadToken(); where = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, _parameters); } _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); _tokenizer.ReadToken(); var result = _engine.DeleteMany(collection, where); return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Drop.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// DROP INDEX {collection}.{indexName} /// DROP COLLECTION {collection} /// private BsonDataReader ParseDrop() { _tokenizer.ReadToken().Expect("DROP"); var token = _tokenizer.ReadToken().Expect(TokenType.Word); if (token.Is("INDEX")) { var collection = _tokenizer.ReadToken().Expect(TokenType.Word).Value; _tokenizer.ReadToken().Expect(TokenType.Period); var name = _tokenizer.ReadToken().Expect(TokenType.Word).Value; _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); var result = _engine.DropIndex(collection, name); return new BsonDataReader(result); } else if(token.Is("COLLECTION")) { var collection = _tokenizer.ReadToken().Expect(TokenType.Word).Value; _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); var result = _engine.DropCollection(collection); return new BsonDataReader(result); } else { throw LiteException.UnexpectedToken(token, "INDEX|COLLECTION"); } } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Insert.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// INSERT INTO {collection} VALUES {doc0} [, {docN}] [ WITH ID={type} ] ] /// private BsonDataReader ParseInsert() { _tokenizer.ReadToken().Expect("INSERT"); _tokenizer.ReadToken().Expect("INTO"); var collection = _tokenizer.ReadToken().Expect(TokenType.Word).Value; var autoId = this.ParseWithAutoId(); _tokenizer.ReadToken().Expect("VALUES"); // get list of documents (return an IEnumerable) // will validate EOF or ; var docs = this.ParseListOfDocuments(); var result = _engine.Insert(collection, docs, autoId); return new BsonDataReader(result); } /// /// Parse :[type] for AutoId (just after collection name) /// private BsonAutoId ParseWithAutoId() { var with = _tokenizer.LookAhead(); if (with.Type == TokenType.Colon) { _tokenizer.ReadToken(); var type = _tokenizer.ReadToken().Expect(TokenType.Word); switch(type.Value.ToUpper()) { case "GUID": return BsonAutoId.Guid; case "INT": return BsonAutoId.Int32; case "LONG": return BsonAutoId.Int64; case "OBJECTID": return BsonAutoId.ObjectId; default: throw LiteException.UnexpectedToken(type, "DATE, GUID, INT, LONG, OBJECTID"); } } return BsonAutoId.ObjectId; } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/ParseLists.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// {expr0}, {expr1}, ..., {exprN} /// private IEnumerable ParseListOfExpressions() { while(true) { var expr = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, _parameters); yield return expr; var next = _tokenizer.LookAhead(); if (next.Type == TokenType.Comma) { _tokenizer.ReadToken(); } else { yield break; } } } /// /// {doc0}, {doc1}, ..., {docN} {EOF|;} /// private IEnumerable ParseListOfDocuments() { var reader = new JsonReader(_tokenizer); while (true) { var value = reader.Deserialize(); if (value.IsDocument) { yield return value as BsonDocument; } else { throw LiteException.UnexpectedToken("Value must be a valid document", _tokenizer.Current); } var next = _tokenizer.LookAhead(); if (next.Type == TokenType.Comma) { _tokenizer.ReadToken(); } else { next.Expect(TokenType.EOF, TokenType.SemiColon); _tokenizer.ReadToken(); yield break; } } } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Pragma.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// PRAGMA [DB_PARAM] = VALUE /// PRAGMA [DB_PARAM] /// private IBsonDataReader ParsePragma() { _tokenizer.ReadToken().Expect("PRAGMA"); var name = _tokenizer.ReadToken().Expect(TokenType.Word).Value; var eof = _tokenizer.LookAhead(); if (eof.Type == TokenType.EOF || eof.Type == TokenType.SemiColon) { _tokenizer.ReadToken(); var result = _engine.Pragma(name); return new BsonDataReader(result); } else if (eof.Type == TokenType.Equals) { // read = _tokenizer.ReadToken().Expect(TokenType.Equals); // read var reader = new JsonReader(_tokenizer); var value = reader.Deserialize(); // read last ; \ _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); var result = _engine.Pragma(name, value); return new BsonDataReader(result); } throw LiteException.UnexpectedToken(eof); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Rebuild.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// SHRINK /// private BsonDataReader ParseRebuild() { _tokenizer.ReadToken().Expect("REBUILD"); var options = new RebuildOptions(); // read or ; var next = _tokenizer.LookAhead(); if (next.Type == TokenType.EOF || next.Type == TokenType.SemiColon) { options = null; _tokenizer.ReadToken(); } else { var reader = new JsonReader(_tokenizer); var json = reader.Deserialize(); if (json.IsDocument == false) throw LiteException.UnexpectedToken(next); if (json["password"].IsString) { options.Password = json["password"]; } if (json["collation"].IsString) { options.Collation = new Collation(json["collation"].AsString); } } var diff = _engine.Rebuild(options); return new BsonDataReader((int)diff); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Rename.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// RENAME COLLECTION {collection} TO {newName} /// private BsonDataReader ParseRename() { _tokenizer.ReadToken().Expect("RENAME"); _tokenizer.ReadToken().Expect("COLLECTION"); var collection = _tokenizer.ReadToken().Expect(TokenType.Word).Value; _tokenizer.ReadToken().Expect("TO"); var newName = _tokenizer.ReadToken().Expect(TokenType.Word).Value; _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); var result = _engine.RenameCollection(collection, newName); return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Rollback.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// ROLLBACK [ TRANS | TRANSACTION ] /// private BsonDataReader ParseRollback() { _tokenizer.ReadToken().Expect("ROLLBACK"); var token = _tokenizer.ReadToken().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (token.Is("TRANS") || token.Is("TRANSACTION")) { _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); } var result = _engine.Rollback(); return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Select.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// [ EXPLAIN ] /// SELECT {selectExpr} /// [ INTO {newcollection|$function} [ : {autoId} ] ] /// [ FROM {collection|$function} ] /// [ INCLUDE {pathExpr0} [, {pathExprN} ] /// [ WHERE {filterExpr} ] /// [ GROUP BY {groupByExpr} ] /// [ HAVING {filterExpr} ] /// [ ORDER BY {orderByExpr} [ ASC | DESC ] ] /// [ LIMIT {number} ] /// [ OFFSET {number} ] /// [ FOR UPDATE ] /// private IBsonDataReader ParseSelect() { // initialize query definition var query = new Query(); var token = _tokenizer.ReadToken(); query.ExplainPlan = token.Is("EXPLAIN"); if (query.ExplainPlan) token = _tokenizer.ReadToken(); token.Expect("SELECT"); // read required SELECT and convert into single expression query.Select = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.SelectDocument, _parameters); // read FROM|INTO var from = _tokenizer.ReadToken(); if (from.Type == TokenType.EOF || from.Type == TokenType.SemiColon) { // select with no FROM - just run expression (avoid DUAL table, Mr. Oracle) //TODO: i think will be better add all sql into engine var result = query.Select.Execute(_collation.Value); var defaultName = "expr"; var data = result.Select(x => x.IsDocument ? x.AsDocument : new BsonDocument { [defaultName] = x }).FirstOrDefault(); return new BsonDataReader(data, null); } else if (from.Is("INTO")) { query.Into = ParseCollection(_tokenizer); query.IntoAutoId = this.ParseWithAutoId(); _tokenizer.ReadToken().Expect("FROM"); } else { from.Expect("FROM"); } // read FROM var collection = ParseCollection(_tokenizer); var ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("INCLUDE")) { // read first INCLUDE (before) _tokenizer.ReadToken(); foreach(var path in this.ParseListOfExpressions()) { query.Includes.Add(path); } } ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("WHERE")) { // read WHERE keyword _tokenizer.ReadToken(); var where = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, _parameters); query.Where.Add(where); } ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("GROUP")) { // read GROUP BY keyword _tokenizer.ReadToken(); _tokenizer.ReadToken().Expect("BY"); var groupBy = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, _parameters); query.GroupBy = groupBy; ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("HAVING")) { // read HAVING keyword _tokenizer.ReadToken(); var having = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, _parameters); query.Having = having; } } ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("ORDER")) { // read ORDER BY keyword _tokenizer.ReadToken(); _tokenizer.ReadToken().Expect("BY"); var orderBy = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, _parameters); var orderByOrder = Query.Ascending; var orderByToken = _tokenizer.LookAhead(); if (orderByToken.Is("ASC") || orderByToken.Is("DESC")) { orderByOrder = _tokenizer.ReadToken().Is("ASC") ? Query.Ascending : Query.Descending; } query.OrderBy = orderBy; query.Order = orderByOrder; } ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("LIMIT")) { // read LIMIT keyword _tokenizer.ReadToken(); var limit = _tokenizer.ReadToken().Expect(TokenType.Int).Value; query.Limit = Convert.ToInt32(limit); } ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("OFFSET")) { // read OFFSET keyword _tokenizer.ReadToken(); var offset = _tokenizer.ReadToken().Expect(TokenType.Int).Value; query.Offset = Convert.ToInt32(offset); } ahead = _tokenizer.LookAhead().Expect(TokenType.Word, TokenType.EOF, TokenType.SemiColon); if (ahead.Is("FOR")) { // read FOR keyword _tokenizer.ReadToken(); _tokenizer.ReadToken().Expect("UPDATE"); query.ForUpdate = true; } // read eof/; _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); return _engine.Query(collection, query); } /// /// Read collection name and parameter (in case of system collections) /// public static string ParseCollection(Tokenizer tokenizer) { return ParseCollection(tokenizer, out var name, out var options); } /// /// Read collection name and parameter (in case of system collections) /// public static string ParseCollection(Tokenizer tokenizer, out string name, out BsonValue options) { name = tokenizer.ReadToken().Expect(TokenType.Word).Value; // if collection starts with $, check if exist any parameter if (name.StartsWith("$")) { var next = tokenizer.LookAhead(); if (next.Type == TokenType.OpenParenthesis) { tokenizer.ReadToken(); // read ( if (tokenizer.LookAhead().Type == TokenType.CloseParenthesis) { options = null; } else { options = new JsonReader(tokenizer).Deserialize(); } tokenizer.ReadToken().Expect(TokenType.CloseParenthesis); // read ) } else { options = null; } } else { options = null; } return name + (options == null ? "" : "(" + JsonSerializer.Serialize(options) + ")"); } } } ================================================ FILE: LiteDB/Client/SqlParser/Commands/Update.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { internal partial class SqlParser { /// /// UPDATE - update documents - if used with {key} = {exprValue} will merge current document with this fields /// if used with { key: value } will replace current document with new document /// UPDATE {collection} /// SET [{key} = {exprValue}, {key} = {exprValue} | { newDoc }] /// [ WHERE {whereExpr} ] /// private BsonDataReader ParseUpdate() { _tokenizer.ReadToken().Expect("UPDATE"); var collection = _tokenizer.ReadToken().Expect(TokenType.Word).Value; _tokenizer.ReadToken().Expect("SET"); var transform = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.UpdateDocument, _parameters); // optional where BsonExpression where = null; var token = _tokenizer.LookAhead(); if (token.Is("WHERE")) { // read WHERE _tokenizer.ReadToken(); where = BsonExpression.Create(_tokenizer, BsonExpressionParserMode.Full, _parameters); } // read eof _tokenizer.ReadToken().Expect(TokenType.EOF, TokenType.SemiColon); var result = _engine.UpdateMany(collection, transform, where); return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Client/SqlParser/SqlParser.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using LiteDB.Engine; using static LiteDB.Constants; namespace LiteDB { /// /// Internal class to parse and execute sql-like commands /// internal partial class SqlParser { private readonly ILiteEngine _engine; private readonly Tokenizer _tokenizer; private readonly BsonDocument _parameters; private readonly Lazy _collation; public SqlParser(ILiteEngine engine, Tokenizer tokenizer, BsonDocument parameters) { _engine = engine; _tokenizer = tokenizer; _parameters = parameters ?? new BsonDocument(); _collation = new Lazy(() => new Collation(_engine.Pragma(Pragmas.COLLATION))); } public IBsonDataReader Execute() { var ahead = _tokenizer.LookAhead().Expect(TokenType.Word); LOG($"executing `{ahead.Value.ToUpper()}`", "SQL"); switch (ahead.Value.ToUpper()) { case "SELECT": case "EXPLAIN": return this.ParseSelect(); case "INSERT": return this.ParseInsert(); case "DELETE": return this.ParseDelete(); case "UPDATE": return this.ParseUpdate(); case "DROP": return this.ParseDrop(); case "RENAME": return this.ParseRename(); case "CREATE": return this.ParseCreate(); case "CHECKPOINT": return this.ParseCheckpoint(); case "REBUILD": return this.ParseRebuild(); case "BEGIN": return this.ParseBegin(); case "ROLLBACK": return this.ParseRollback(); case "COMMIT": return this.ParseCommit(); case "PRAGMA": return this.ParsePragma(); default: throw LiteException.UnexpectedToken(ahead); } } } } ================================================ FILE: LiteDB/Client/Storage/ILiteStorage.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq.Expressions; namespace LiteDB { public interface ILiteStorage { /// /// Find a file inside datafile and returns LiteFileInfo instance. Returns null if not found /// LiteFileInfo FindById(TFileId id); /// /// Find all files that match with predicate expression. /// IEnumerable> Find(BsonExpression predicate); /// /// Find all files that match with predicate expression. /// IEnumerable> Find(string predicate, BsonDocument parameters); /// /// Find all files that match with predicate expression. /// IEnumerable> Find(string predicate, params BsonValue[] args); /// /// Find all files that match with predicate expression. /// IEnumerable> Find(Expression, bool>> predicate); /// /// Find all files inside file collections /// IEnumerable> FindAll(); /// /// Returns if a file exisits in database /// bool Exists(TFileId id); /// /// Open/Create new file storage and returns linked Stream to write operations. /// LiteFileStream OpenWrite(TFileId id, string filename, BsonDocument metadata = null); /// /// Upload a file based on stream data /// LiteFileInfo Upload(TFileId id, string filename, Stream stream, BsonDocument metadata = null); /// /// Upload a file based on file system data /// LiteFileInfo Upload(TFileId id, string filename); /// /// Update metadata on a file. File must exist. /// bool SetMetadata(TFileId id, BsonDocument metadata); /// /// Load data inside storage and returns as Stream /// LiteFileStream OpenRead(TFileId id); /// /// Copy all file content to a steam /// LiteFileInfo Download(TFileId id, Stream stream); /// /// Copy all file content to a file /// LiteFileInfo Download(TFileId id, string filename, bool overwritten); /// /// Delete a file inside datafile and all metadata related /// bool Delete(TFileId id); } } ================================================ FILE: LiteDB/Client/Storage/LiteFileInfo.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { /// /// Represents a file inside storage collection /// public class LiteFileInfo { public TFileId Id { get; internal set; } [BsonField("filename")] public string Filename { get; internal set; } [BsonField("mimeType")] public string MimeType { get; internal set; } [BsonField("length")] public long Length { get; internal set; } = 0; [BsonField("chunks")] public int Chunks { get; internal set; } = 0; [BsonField("uploadDate")] public DateTime UploadDate { get; internal set; } = DateTime.Now; [BsonField("metadata")] public BsonDocument Metadata { get; set; } = new BsonDocument(); // database instances references private BsonValue _fileId; private ILiteCollection> _files; private ILiteCollection _chunks; internal void SetReference(BsonValue fileId, ILiteCollection> files, ILiteCollection chunks) { _fileId = fileId; _files = files; _chunks = chunks; } /// /// Open file stream to read from database /// public LiteFileStream OpenRead() { return new LiteFileStream(_files, _chunks, this, _fileId, FileAccess.Read); } /// /// Open file stream to write to database /// public LiteFileStream OpenWrite() { return new LiteFileStream(_files, _chunks, this, _fileId, FileAccess.Write); } /// /// Copy file content to another stream /// public void CopyTo(Stream stream) { if (stream == null) throw new ArgumentNullException(nameof(stream)); using (var reader = this.OpenRead()) { reader.CopyTo(stream); } } /// /// Save file content to a external file /// public void SaveAs(string filename, bool overwritten = true) { if (filename.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(filename)); using (var file = File.Open(filename, overwritten ? FileMode.Create : FileMode.CreateNew)) { using (var stream = this.OpenRead()) { stream.CopyTo(file); } } } } } ================================================ FILE: LiteDB/Client/Storage/LiteFileStream.Read.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public partial class LiteFileStream : Stream { private Dictionary _chunkLengths = new Dictionary(); public override int Read(byte[] buffer, int offset, int count) { if (_mode != FileAccess.Read) throw new NotSupportedException(); if (_streamPosition == Length) { return 0; } var bytesLeft = count; while (_currentChunkData != null && bytesLeft > 0) { var bytesToCopy = Math.Min(bytesLeft, _currentChunkData.Length - _positionInChunk); Buffer.BlockCopy(_currentChunkData, _positionInChunk, buffer, offset, bytesToCopy); _positionInChunk += bytesToCopy; bytesLeft -= bytesToCopy; offset += bytesToCopy; _streamPosition += bytesToCopy; if (_positionInChunk >= _currentChunkData.Length) { _positionInChunk = 0; _currentChunkData = this.GetChunkData(++_currentChunkIndex); } } return count - bytesLeft; } private byte[] GetChunkData(int index) { // check if there is no more chunks in this file var chunk = _chunks .FindOne("_id = { f: @0, n: @1 }", _fileId, index); // if chunk is null there is no more chunks byte[] result = chunk?["data"].AsBinary; if (result != null) { _chunkLengths[index] = result.Length; } return result; } private void SetReadStreamPosition(long newPosition) { if (newPosition < 0) { throw new ArgumentOutOfRangeException(); } if (newPosition >= Length) { _streamPosition = Length; return; } _streamPosition = newPosition; // calculate new chunk position long seekStreamPosition = 0; int loadedChunk = _currentChunkIndex; int newChunkIndex = 0; while (seekStreamPosition <= _streamPosition) { if (_chunkLengths.TryGetValue(newChunkIndex, out long length)) { seekStreamPosition += length; } else { loadedChunk = newChunkIndex; _currentChunkData = GetChunkData(newChunkIndex); seekStreamPosition += _currentChunkData.Length; } newChunkIndex++; } newChunkIndex--; seekStreamPosition -= _chunkLengths[newChunkIndex]; _positionInChunk = (int)(_streamPosition - seekStreamPosition); _currentChunkIndex = newChunkIndex; if (loadedChunk != _currentChunkIndex) { _currentChunkData = GetChunkData(_currentChunkIndex); } } } } ================================================ FILE: LiteDB/Client/Storage/LiteFileStream.Write.cs ================================================ using System; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public partial class LiteFileStream : Stream { public override void Write(byte[] buffer, int offset, int count) { _streamPosition += count; _buffer.Write(buffer, offset, count); if (_buffer.Length >= MAX_CHUNK_SIZE) { this.WriteChunks(false); } } public override void Flush() { // write last unsaved chunks this.WriteChunks(true); } /// /// Consume all _buffer bytes and write to chunk collection /// private void WriteChunks(bool flush) { var buffer = new byte[MAX_CHUNK_SIZE]; var read = 0; _buffer.Seek(0, SeekOrigin.Begin); while ((read = _buffer.Read(buffer, 0, MAX_CHUNK_SIZE)) > 0) { var chunk = new BsonDocument { ["_id"] = new BsonDocument { ["f"] = _fileId, ["n"] = _file.Chunks++ // zero-based index } }; // get chunk byte array part if (read != MAX_CHUNK_SIZE) { var bytes = new byte[read]; Buffer.BlockCopy(buffer, 0, bytes, 0, read); chunk["data"] = bytes; } else { chunk["data"] = buffer; } // insert chunk part _chunks.Insert(chunk); } // if stream was closed/flush, update file too if (flush) { _file.UploadDate = DateTime.Now; _file.Length = _streamPosition; _files.Upsert(_file); } _buffer = new MemoryStream(); } } } ================================================ FILE: LiteDB/Client/Storage/LiteFileStream.cs ================================================ using System; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public partial class LiteFileStream : Stream { /// /// Number of bytes on each chunk document to store /// public const int MAX_CHUNK_SIZE = 255 * 1024; // 255kb like GridFS private readonly ILiteCollection> _files; private readonly ILiteCollection _chunks; private readonly LiteFileInfo _file; private readonly BsonValue _fileId; private readonly FileAccess _mode; private long _streamPosition = 0; private int _currentChunkIndex = 0; private byte[] _currentChunkData = null; private int _positionInChunk = 0; private MemoryStream _buffer; internal LiteFileStream(ILiteCollection> files, ILiteCollection chunks, LiteFileInfo file, BsonValue fileId, FileAccess mode) { _files = files; _chunks = chunks; _file = file; _fileId = fileId; _mode = mode; if (mode == FileAccess.Read) { // initialize first data block _currentChunkData = this.GetChunkData(_currentChunkIndex); } else if(mode == FileAccess.Write) { _buffer = new MemoryStream(MAX_CHUNK_SIZE); if (_file.Length > 0) { // delete all chunks before re-write var count = _chunks.DeleteMany("_id BETWEEN { f: @0, n: 0 } AND { f: @0, n: 99999999 }", _fileId); ENSURE(count == _file.Chunks); // clear file content length+chunks _file.Length = 0; _file.Chunks = 0; } } } /// /// Get file information /// public LiteFileInfo FileInfo { get { return _file; } } public override long Length { get { return _file.Length; } } public override bool CanRead { get { return _mode == FileAccess.Read; } } public override bool CanWrite { get { return _mode == FileAccess.Write; } } public override bool CanSeek { get { return _mode == FileAccess.Read; } } public override long Position { get { return _streamPosition; } set { if (_mode == FileAccess.Read) { this.SetReadStreamPosition(value); } else { throw new NotSupportedException(); } } } public override long Seek(long offset, SeekOrigin origin) { if (_mode == FileAccess.Write) { throw new NotSupportedException(); } switch (origin) { case SeekOrigin.Begin: this.SetReadStreamPosition(offset); break; case SeekOrigin.Current: this.SetReadStreamPosition(_streamPosition + offset); break; case SeekOrigin.End: this.SetReadStreamPosition(Length + offset); break; } return _streamPosition; } #region Dispose private bool _disposed = false; protected override void Dispose(bool disposing) { base.Dispose(disposing); if (_disposed) return; if (disposing && this.CanWrite) { this.Flush(); _buffer?.Dispose(); } _disposed = true; } #endregion #region Not supported operations public override void SetLength(long value) { throw new NotSupportedException(); } #endregion } } ================================================ FILE: LiteDB/Client/Storage/LiteStorage.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Linq.Expressions; using static LiteDB.Constants; namespace LiteDB { /// /// Storage is a special collection to store files and streams. /// public class LiteStorage : ILiteStorage { private readonly ILiteDatabase _db; private readonly ILiteCollection> _files; private readonly ILiteCollection _chunks; public LiteStorage(ILiteDatabase db, string filesCollection, string chunksCollection) { _db = db; _files = db.GetCollection>(filesCollection); _chunks = db.GetCollection(chunksCollection); } #region Find Files /// /// Find a file inside datafile and returns LiteFileInfo instance. Returns null if not found /// public LiteFileInfo FindById(TFileId id) { if (id == null) throw new ArgumentNullException(nameof(id)); var fileId = _db.Mapper.Serialize(typeof(TFileId), id); var file = _files.FindById(fileId); if (file == null) return null; file.SetReference(fileId, _files, _chunks); return file; } /// /// Find all files that match with predicate expression. /// public IEnumerable> Find(BsonExpression predicate) { var query = _files.Query(); if (predicate != null) { query = query.Where(predicate); } foreach (var file in query.ToEnumerable()) { var fileId = _db.Mapper.Serialize(typeof(TFileId), file.Id); file.SetReference(fileId, _files, _chunks); yield return file; } } /// /// Find all files that match with predicate expression. /// public IEnumerable> Find(string predicate, BsonDocument parameters) => this.Find(BsonExpression.Create(predicate, parameters)); /// /// Find all files that match with predicate expression. /// public IEnumerable> Find(string predicate, params BsonValue[] args) => this.Find(BsonExpression.Create(predicate, args)); /// /// Find all files that match with predicate expression. /// public IEnumerable> Find(Expression, bool>> predicate) => this.Find(_db.Mapper.GetExpression(predicate)); /// /// Find all files inside file collections /// public IEnumerable> FindAll() => this.Find((BsonExpression)null); /// /// Returns if a file exisits in database /// public bool Exists(TFileId id) { if (id == null) throw new ArgumentNullException(nameof(id)); var fileId = _db.Mapper.Serialize(typeof(TFileId), id); return _files.Exists("_id = @0", fileId); } #endregion #region Upload /// /// Open/Create new file storage and returns linked Stream to write operations. /// public LiteFileStream OpenWrite(TFileId id, string filename, BsonDocument metadata = null) { // get _id as BsonValue var fileId = _db.Mapper.Serialize(typeof(TFileId), id); // checks if file exists var file = this.FindById(id); if (file == null) { file = new LiteFileInfo { Id = id, Filename = Path.GetFileName(filename), MimeType = MimeTypeConverter.GetMimeType(filename), Metadata = metadata ?? new BsonDocument() }; // set files/chunks instances file.SetReference(fileId, _files, _chunks); } else { // if filename/metada was changed file.Filename = Path.GetFileName(filename); file.MimeType = MimeTypeConverter.GetMimeType(filename); file.Metadata = metadata ?? file.Metadata; } return file.OpenWrite(); } /// /// Upload a file based on stream data /// public LiteFileInfo Upload(TFileId id, string filename, Stream stream, BsonDocument metadata = null) { using (var writer = this.OpenWrite(id, filename, metadata)) { stream.CopyTo(writer); return writer.FileInfo; } } /// /// Upload a file based on file system data /// public LiteFileInfo Upload(TFileId id, string filename) { if (filename.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(filename)); using (var stream = File.OpenRead(filename)) { return this.Upload(id, Path.GetFileName(filename), stream); } } /// /// Update metadata on a file. File must exist. /// public bool SetMetadata(TFileId id, BsonDocument metadata) { var file = this.FindById(id); if (file == null) return false; file.Metadata = metadata ?? new BsonDocument(); _files.Update(file); return true; } #endregion #region Download /// /// Load data inside storage and returns as Stream /// public LiteFileStream OpenRead(TFileId id) { var file = this.FindById(id); if (file == null) throw LiteException.FileNotFound(id.ToString()); return file.OpenRead(); } /// /// Copy all file content to a steam /// public LiteFileInfo Download(TFileId id, Stream stream) { var file = this.FindById(id) ?? throw LiteException.FileNotFound(id.ToString()); file.CopyTo(stream); return file; } /// /// Copy all file content to a file /// public LiteFileInfo Download(TFileId id, string filename, bool overwritten) { var file = this.FindById(id) ?? throw LiteException.FileNotFound(id.ToString()); file.SaveAs(filename, overwritten); return file; } #endregion #region Delete /// /// Delete a file inside datafile and all metadata related /// public bool Delete(TFileId id) { if (id == null) throw new ArgumentNullException(nameof(id)); // get Id as BsonValue var fileId = _db.Mapper.Serialize(typeof(TFileId), id); // remove file reference var deleted = _files.Delete(fileId); if (deleted) { // delete all chunks _chunks.DeleteMany("_id BETWEEN { f: @0, n: 0} AND {f: @0, n: @1 }", fileId, int.MaxValue); } return deleted; } #endregion } } ================================================ FILE: LiteDB/Client/Structures/ConnectionString.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.Globalization; using static LiteDB.Constants; namespace LiteDB { /// /// Manage ConnectionString to connect and create databases. Connection string are NameValue using Name1=Value1; Name2=Value2 /// public class ConnectionString { private readonly Dictionary _values; /// /// "connection": Return how engine will be open (default: Direct) /// public ConnectionType Connection { get; set; } = ConnectionType.Direct; /// /// "filename": Full path or relative path from DLL directory /// public string Filename { get; set; } = ""; /// /// "password": Database password used to encrypt/decypted data pages /// public string Password { get; set; } = null; /// /// "initial size": If database is new, initialize with allocated space - support KB, MB, GB (default: 0) /// public long InitialSize { get; set; } = 0; /// /// "readonly": Open datafile in readonly mode (default: false) /// public bool ReadOnly { get; set; } = false; /// /// "upgrade": Check if data file is an old version and convert before open (default: false) /// public bool Upgrade { get; set; } = false; /// /// "auto-rebuild": If last close database exception result a invalid data state, rebuild datafile on next open (default: false) /// public bool AutoRebuild { get; set; } = false; /// /// "collation": Set default collaction when database creation (default: "[CurrentCulture]/IgnoreCase") /// public Collation Collation { get; set; } /// /// Initialize empty connection string /// public ConnectionString() { _values = new Dictionary(StringComparer.OrdinalIgnoreCase); } /// /// Initialize connection string parsing string in "key1=value1;key2=value2;...." format or only "filename" as default (when no ; char found) /// public ConnectionString(string connectionString) : this() { if (string.IsNullOrEmpty(connectionString)) throw new ArgumentNullException(nameof(connectionString)); // create a dictionary from string name=value collection if (connectionString.Contains("=")) { _values.ParseKeyValue(connectionString); } else { _values["filename"] = connectionString; } // setting values to properties this.Connection = _values.GetValue("connection", this.Connection); this.Filename = _values.GetValue("filename", this.Filename).Trim(); this.Password = _values.GetValue("password", this.Password); if(this.Password == string.Empty) { this.Password = null; } this.InitialSize = _values.GetFileSize(@"initial size", this.InitialSize); this.ReadOnly = _values.GetValue("readonly", this.ReadOnly); this.Collation = _values.ContainsKey("collation") ? new Collation(_values.GetValue("collation")) : this.Collation; this.Upgrade = _values.GetValue("upgrade", this.Upgrade); this.AutoRebuild = _values.GetValue("auto-rebuild", this.AutoRebuild); } /// /// Get value from parsed connection string. Returns null if not found /// public string this[string key] => _values.GetOrDefault(key); /// /// Create ILiteEngine instance according string connection parameters. For now, only Local/Shared are supported /// internal ILiteEngine CreateEngine(Action engineSettingsAction = null) { var settings = new EngineSettings { Filename = this.Filename, Password = this.Password, InitialSize = this.InitialSize, ReadOnly = this.ReadOnly, Collation = this.Collation, Upgrade = this.Upgrade, AutoRebuild = this.AutoRebuild, }; engineSettingsAction?.Invoke(settings); // create engine implementation as Connection Type if (this.Connection == ConnectionType.Direct) { return new LiteEngine(settings); } else if (this.Connection == ConnectionType.Shared) { return new SharedEngine(settings); } else { throw new NotImplementedException(); } } } } ================================================ FILE: LiteDB/Client/Structures/ConnectionType.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public enum ConnectionType { Direct, Shared // MimePipes // Tcp // Rest } } ================================================ FILE: LiteDB/Client/Structures/Query.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { /// /// Class is a result from optimized QueryBuild. Indicate how engine must run query - there is no more decisions to engine made, must only execute as query was defined /// public partial class Query { /// /// Indicate when a query must execute in ascending order /// public const int Ascending = 1; /// /// Indicate when a query must execute in descending order /// public const int Descending = -1; /// /// Returns all documents /// public static Query All() { return new Query(); } /// /// Returns all documents /// public static Query All(int order = Ascending) { return new Query { OrderBy = "_id", Order = order }; } /// /// Returns all documents /// public static Query All(string field, int order = Ascending) { return new Query { OrderBy = field, Order = order }; } /// /// Returns all documents that value are equals to value (=) /// public static BsonExpression EQ(string field, BsonValue value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return BsonExpression.Create($"{field} = {value ?? BsonValue.Null}"); } /// /// Returns all documents that value are less than value (<) /// public static BsonExpression LT(string field, BsonValue value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return BsonExpression.Create($"{field} < {value ?? BsonValue.Null}"); } /// /// Returns all documents that value are less than or equals value (<=) /// public static BsonExpression LTE(string field, BsonValue value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return BsonExpression.Create($"{field} <= {value ?? BsonValue.Null}"); } /// /// Returns all document that value are greater than value (>) /// public static BsonExpression GT(string field, BsonValue value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return BsonExpression.Create($"{field} > {value ?? BsonValue.Null}"); } /// /// Returns all documents that value are greater than or equals value (>=) /// public static BsonExpression GTE(string field, BsonValue value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return BsonExpression.Create($"{field} >= {value ?? BsonValue.Null}"); } /// /// Returns all document that values are between "start" and "end" values (BETWEEN) /// public static BsonExpression Between(string field, BsonValue start, BsonValue end) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return BsonExpression.Create($"{field} BETWEEN {start ?? BsonValue.Null} AND {end ?? BsonValue.Null}"); } /// /// Returns all documents that starts with value (LIKE) /// public static BsonExpression StartsWith(string field, string value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); if (value.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(value)); return BsonExpression.Create($"{field} LIKE {(new BsonValue(value + "%"))}"); } /// /// Returns all documents that contains value (CONTAINS) - string Contains /// public static BsonExpression Contains(string field, string value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); if (value.IsNullOrEmpty()) throw new ArgumentNullException(nameof(value)); return BsonExpression.Create($"{field} LIKE {(new BsonValue("%" + value + "%"))}"); } /// /// Returns all documents that are not equals to value (not equals) /// public static BsonExpression Not(string field, BsonValue value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); return BsonExpression.Create($"{field} != {value ?? BsonValue.Null}"); } /// /// Returns all documents that has value in values list (IN) /// public static BsonExpression In(string field, BsonArray value) { if (field.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(field)); if (value == null) throw new ArgumentNullException(nameof(value)); return BsonExpression.Create($"{field} IN {value}"); } /// /// Returns all documents that has value in values list (IN) /// public static BsonExpression In(string field, params BsonValue[] values) { return In(field, new BsonArray(values)); } /// /// Returns all documents that has value in values list (IN) /// public static BsonExpression In(string field, IEnumerable values) { return In(field, new BsonArray(values)); } /// /// Get all operands to works with array or enumerable values /// public static QueryAny Any() => new QueryAny(); /// /// Returns document that exists in BOTH queries results. If both queries has indexes, left query has index preference (other side will be run in full scan) /// public static BsonExpression And(BsonExpression left, BsonExpression right) { if (left == null) throw new ArgumentNullException(nameof(left)); if (right == null) throw new ArgumentNullException(nameof(right)); return $"({left.Source} AND {right.Source})"; } /// /// Returns document that exists in ALL queries results. /// public static BsonExpression And(params BsonExpression[] queries) { if (queries == null || queries.Length < 2) throw new ArgumentException("At least two Query should be passed"); var left = queries[0]; for (int i = 1; i < queries.Length; i++) { left = And(left, queries[i]); } return left; } /// /// Returns documents that exists in ANY queries results (Union). /// public static BsonExpression Or(BsonExpression left, BsonExpression right) { if (left == null) throw new ArgumentNullException(nameof(left)); if (right == null) throw new ArgumentNullException(nameof(right)); return $"({left.Source} OR {right.Source})"; } /// /// Returns document that exists in ANY queries results (Union). /// public static BsonExpression Or(params BsonExpression[] queries) { if (queries == null || queries.Length < 2) throw new ArgumentException("At least two Query should be passed"); var left = queries[0]; for (int i = 1; i < queries.Length; i++) { left = Or(left, queries[i]); } return left; } } } ================================================ FILE: LiteDB/Client/Structures/QueryAny.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public class QueryAny { /// /// Returns all documents for which at least one value in arrayFields is equal to value /// public BsonExpression EQ(string arrayField, BsonValue value) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); return BsonExpression.Create($"{arrayField} ANY = {value ?? BsonValue.Null}"); } /// /// Returns all documents for which at least one value in arrayFields are less tha to value (<) /// public BsonExpression LT(string arrayField, BsonValue value) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); return BsonExpression.Create($"{arrayField} ANY < {value ?? BsonValue.Null}"); } /// /// Returns all documents for which at least one value in arrayFields are less than or equals value (<=) /// public BsonExpression LTE(string arrayField, BsonValue value) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); return BsonExpression.Create($"{arrayField} ANY <= {value ?? BsonValue.Null}"); } /// /// Returns all documents for which at least one value in arrayFields are greater than value (>) /// public BsonExpression GT(string arrayField, BsonValue value) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); return BsonExpression.Create($"{arrayField} ANY > {value ?? BsonValue.Null}"); } /// /// Returns all documents for which at least one value in arrayFields are greater than or equals value (>=) /// public BsonExpression GTE(string arrayField, BsonValue value) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); return BsonExpression.Create($"{arrayField} ANY >= {value ?? BsonValue.Null}"); } /// /// Returns all documents for which at least one value in arrayFields are between "start" and "end" values (BETWEEN) /// public BsonExpression Between(string arrayField, BsonValue start, BsonValue end) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); return BsonExpression.Create($"{arrayField} ANY BETWEEN {start ?? BsonValue.Null} AND {end ?? BsonValue.Null}"); } /// /// Returns all documents for which at least one value in arrayFields starts with value (LIKE) /// public BsonExpression StartsWith(string arrayField, string value) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); if (value.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(value)); return BsonExpression.Create($"{arrayField} ANY LIKE {(new BsonValue(value + "%"))}"); } /// /// Returns all documents for which at least one value in arrayFields are not equals to value (not equals) /// public BsonExpression Not(string arrayField, BsonValue value) { if (arrayField.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(arrayField)); return BsonExpression.Create($"{arrayField} ANY != {value ?? BsonValue.Null}"); } } } ================================================ FILE: LiteDB/Document/Bson/BsonSerializer.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB { /// /// Class to call method for convert BsonDocument to/from byte[] - based on http://bsonspec.org/spec.html /// In v5 this class use new BufferRead/Writer to work with byte[] segments. This class are just a shortchut /// public class BsonSerializer { /// /// Serialize BsonDocument into a binary array /// public static byte[] Serialize(BsonDocument doc) { if (doc == null) throw new ArgumentNullException(nameof(doc)); var buffer = new byte[doc.GetBytesCount(true)]; using (var writer = new BufferWriter(buffer)) { writer.WriteDocument(doc, false); } return buffer; } /// /// Deserialize binary data into BsonDocument /// public static BsonDocument Deserialize(byte[] buffer, bool utcDate = false, HashSet fields = null) { if (buffer == null || buffer.Length == 0) throw new ArgumentNullException(nameof(buffer)); using (var reader = new BufferReader(buffer, utcDate)) { return reader.ReadDocument(fields).GetValue(); } } } } ================================================ FILE: LiteDB/Document/BsonArray.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public class BsonArray : BsonValue, IList { public BsonArray() : base(BsonType.Array, new List()) { } public BsonArray(List array) : this() { if (array == null) throw new ArgumentNullException(nameof(array)); this.AddRange(array); } public BsonArray(params BsonValue[] array) : this() { if (array == null) throw new ArgumentNullException(nameof(array)); this.AddRange(array); } public BsonArray(IEnumerable items) : this() { if (items == null) throw new ArgumentNullException(nameof(items)); this.AddRange(items); } public new IList RawValue => (IList)base.RawValue; public override BsonValue this[int index] { get { return this.RawValue[index]; } set { this.RawValue[index] = value ?? BsonValue.Null; } } public int Count => this.RawValue.Count; public bool IsReadOnly => false; public void Add(BsonValue item) => this.RawValue.Add(item ?? BsonValue.Null); public void AddRange(TCollection collection) where TCollection : ICollection { if(collection == null) throw new ArgumentNullException(nameof(collection)); var list = (List)base.RawValue; var listEmptySpace = list.Capacity - list.Count; if (listEmptySpace < collection.Count) { list.Capacity += collection.Count; } foreach (var bsonValue in collection) { list.Add(bsonValue ?? Null); } } public void AddRange(IEnumerable items) { if (items == null) throw new ArgumentNullException(nameof(items)); foreach (var item in items) { this.Add(item ?? BsonValue.Null); } } public void Clear() => this.RawValue.Clear(); public bool Contains(BsonValue item) => this.RawValue.Contains(item ?? BsonValue.Null); public void CopyTo(BsonValue[] array, int arrayIndex) => this.RawValue.CopyTo(array, arrayIndex); public IEnumerator GetEnumerator() => this.RawValue.GetEnumerator(); public int IndexOf(BsonValue item) => this.RawValue.IndexOf(item ?? BsonValue.Null); public void Insert(int index, BsonValue item) => this.RawValue.Insert(index, item ?? BsonValue.Null); public bool Remove(BsonValue item) => this.RawValue.Remove(item); public void RemoveAt(int index) => this.RawValue.RemoveAt(index); IEnumerator IEnumerable.GetEnumerator() { foreach (var value in this.RawValue) { yield return value; } } public override int CompareTo(BsonValue other) { // if types are different, returns sort type order if (other.Type != BsonType.Array) return this.Type.CompareTo(other.Type); var otherArray = other.AsArray; var result = 0; var i = 0; var stop = Math.Min(this.Count, otherArray.Count); // compare each element for (; 0 == result && i < stop; i++) result = this[i].CompareTo(otherArray[i]); if (result != 0) return result; if (i == this.Count) return i == otherArray.Count ? 0 : -1; return 1; } private int _length; internal override int GetBytesCount(bool recalc) { if (recalc == false && _length > 0) return _length; var length = 5; var array = this.RawValue; for (var i = 0; i < array.Count; i++) { length += this.GetBytesCountElement(i.ToString(), array[i]); } return _length = length; } } } ================================================ FILE: LiteDB/Document/BsonAutoId.cs ================================================ namespace LiteDB { /// /// All supported BsonTypes supported in AutoId insert operation /// public enum BsonAutoId { Int32 = 2, Int64 = 3, ObjectId = 10, Guid = 11 } } ================================================ FILE: LiteDB/Document/BsonDocument.cs ================================================ using LiteDB.Engine; using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB { public class BsonDocument : BsonValue, IDictionary { public BsonDocument() : base(BsonType.Document, new Dictionary(StringComparer.OrdinalIgnoreCase)) { } public BsonDocument(ConcurrentDictionary dict) : this() { if (dict == null) throw new ArgumentNullException(nameof(dict)); foreach(var element in dict) { this.Add(element); } } public BsonDocument(IDictionary dict) : this() { if (dict == null) throw new ArgumentNullException(nameof(dict)); foreach (var element in dict) { this.Add(element); } } public new IDictionary RawValue => base.RawValue as IDictionary; /// /// Get/Set position of this document inside database. It's filled when used in Find operation. /// internal PageAddress RawId { get; set; } = PageAddress.Empty; /// /// Get/Set a field for document. Fields are case sensitive /// public override BsonValue this[string key] { get { return this.RawValue.GetOrDefault(key, BsonValue.Null); } set { this.RawValue[key] = value ?? BsonValue.Null; } } #region CompareTo public override int CompareTo(BsonValue other) { // if types are different, returns sort type order if (other.Type != BsonType.Document) return this.Type.CompareTo(other.Type); var thisKeys = this.Keys.ToArray(); var thisLength = thisKeys.Length; var otherDoc = other.AsDocument; var otherKeys = otherDoc.Keys.ToArray(); var otherLength = otherKeys.Length; var result = 0; var i = 0; var stop = Math.Min(thisLength, otherLength); for (; 0 == result && i < stop; i++) result = this[thisKeys[i]].CompareTo(otherDoc[thisKeys[i]]); // are different if (result != 0) return result; // test keys length to check which is bigger if (i == thisLength) return i == otherLength ? 0 : -1; return 1; } #endregion #region IDictionary public ICollection Keys => this.RawValue.Keys; public ICollection Values => this.RawValue.Values; public int Count => this.RawValue.Count; public bool IsReadOnly => false; public bool ContainsKey(string key) => this.RawValue.ContainsKey(key); /// /// Get all document elements - Return "_id" as first of all (if exists) /// public IEnumerable> GetElements() { if(this.RawValue.TryGetValue("_id", out var id)) { yield return new KeyValuePair("_id", id); } foreach(var item in this.RawValue.Where(x => x.Key != "_id")) { yield return item; } } public void Add(string key, BsonValue value) => this.RawValue.Add(key, value ?? BsonValue.Null); public bool Remove(string key) => this.RawValue.Remove(key); public void Clear() => this.RawValue.Clear(); public bool TryGetValue(string key, out BsonValue value) => this.RawValue.TryGetValue(key, out value); public void Add(KeyValuePair item) => this.Add(item.Key, item.Value); public bool Contains(KeyValuePair item) => this.RawValue.Contains(item); public bool Remove(KeyValuePair item) => this.Remove(item.Key); public IEnumerator> GetEnumerator() => this.RawValue.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => this.RawValue.GetEnumerator(); public void CopyTo(KeyValuePair[] array, int arrayIndex) { ((ICollection>)this.RawValue).CopyTo(array, arrayIndex); } public void CopyTo(BsonDocument other) { foreach(var element in this) { other[element.Key] = element.Value; } } #endregion private int _length = 0; internal override int GetBytesCount(bool recalc) { if (recalc == false && _length > 0) return _length; var length = 5; foreach(var element in this.RawValue) { length += this.GetBytesCountElement(element.Key, element.Value); } return _length = length; } } } ================================================ FILE: LiteDB/Document/BsonType.cs ================================================ namespace LiteDB { /// /// All supported BsonTypes in sort order /// public enum BsonType : byte { MinValue = 0, Null = 1, Int32 = 2, Int64 = 3, Double = 4, Decimal = 5, String = 6, Document = 7, Array = 8, Binary = 9, ObjectId = 10, Guid = 11, Boolean = 12, DateTime = 13, MaxValue = 14 } } ================================================ FILE: LiteDB/Document/BsonValue.cs ================================================ using LiteDB.Engine; using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Text; using static LiteDB.Constants; namespace LiteDB { /// /// Represent a Bson Value used in BsonDocument /// public class BsonValue : IComparable, IEquatable { public static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); /// /// Represent a Null bson type /// public static BsonValue Null = new BsonValue(BsonType.Null, null); /// /// Represent a MinValue bson type /// public static BsonValue MinValue = new BsonValue(BsonType.MinValue, "-oo"); /// /// Represent a MaxValue bson type /// public static BsonValue MaxValue = new BsonValue(BsonType.MaxValue, "+oo"); /// /// Create a new document used in DbRef => { $id: id, $ref: collection } /// public static BsonDocument DbRef(BsonValue id, string collection) => new BsonDocument { ["$id"] = id, ["$ref"] = collection }; /// /// Indicate BsonType of this BsonValue /// public BsonType Type { get; } /// /// Get internal .NET value object /// public virtual object RawValue { get; } #region Constructor public BsonValue() { this.Type = BsonType.Null; this.RawValue = null; } public BsonValue(Int32 value) { this.Type = BsonType.Int32; this.RawValue = value; } public BsonValue(Int64 value) { this.Type = BsonType.Int64; this.RawValue = value; } public BsonValue(Double value) { this.Type = BsonType.Double; this.RawValue = value; } public BsonValue(Decimal value) { this.Type = BsonType.Decimal; this.RawValue = value; } public BsonValue(String value) { this.Type = value == null ? BsonType.Null : BsonType.String; this.RawValue = value; } public BsonValue(Byte[] value) { this.Type = value == null ? BsonType.Null : BsonType.Binary; this.RawValue = value; } public BsonValue(ObjectId value) { this.Type = value == null ? BsonType.Null : BsonType.ObjectId; this.RawValue = value; } public BsonValue(Guid value) { this.Type = BsonType.Guid; this.RawValue = value; } public BsonValue(Boolean value) { this.Type = BsonType.Boolean; this.RawValue = value; } public BsonValue(DateTime value) { this.Type = BsonType.DateTime; this.RawValue = value.Truncate(); } protected BsonValue(BsonType type, object rawValue) { this.Type = type; this.RawValue = rawValue; } public BsonValue(object value) { this.RawValue = value; if (value == null) this.Type = BsonType.Null; else if (value is Int32) this.Type = BsonType.Int32; else if (value is Int64) this.Type = BsonType.Int64; else if (value is Double) this.Type = BsonType.Double; else if (value is Decimal) this.Type = BsonType.Decimal; else if (value is String) this.Type = BsonType.String; else if (value is IDictionary) this.Type = BsonType.Document; else if (value is IList) this.Type = BsonType.Array; else if (value is Byte[]) this.Type = BsonType.Binary; else if (value is ObjectId) this.Type = BsonType.ObjectId; else if (value is Guid) this.Type = BsonType.Guid; else if (value is Boolean) this.Type = BsonType.Boolean; else if (value is DateTime) { this.Type = BsonType.DateTime; this.RawValue = ((DateTime)value).Truncate(); } else if (value is BsonValue) { var v = (BsonValue)value; this.Type = v.Type; this.RawValue = v.RawValue; } else { // test for array or dictionary (document) var enumerable = value as System.Collections.IEnumerable; var dictionary = value as System.Collections.IDictionary; // test first for dictionary (because IDictionary implements IEnumerable) if (dictionary != null) { var dict = new Dictionary(); foreach (var key in dictionary.Keys) { dict.Add(key.ToString(), new BsonValue(dictionary[key])); } this.Type = BsonType.Document; this.RawValue = dict; } else if (enumerable != null) { var list = new List(); foreach (var x in enumerable) { list.Add(new BsonValue(x)); } this.Type = BsonType.Array; this.RawValue = list; } else { throw new InvalidCastException("Value is not a valid BSON data type - Use Mapper.ToDocument for more complex types converts"); } } } #endregion #region Index "this" property /// /// Get/Set a field for document. Fields are case sensitive - Works only when value are document /// public virtual BsonValue this[string name] { get => throw new InvalidOperationException("Cannot access non-document type value on " + this.RawValue); set => throw new InvalidOperationException("Cannot access non-document type value on " + this.RawValue); } /// /// Get/Set value in array position. Works only when value are array /// public virtual BsonValue this[int index] { get => throw new InvalidOperationException("Cannot access non-array type value on " + this.RawValue); set => throw new InvalidOperationException("Cannot access non-array type value on " + this.RawValue); } #endregion #region Convert types [DebuggerBrowsable(DebuggerBrowsableState.Never)] public BsonArray AsArray => this as BsonArray; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public BsonDocument AsDocument => this as BsonDocument; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public Byte[] AsBinary => this.RawValue as Byte[]; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool AsBoolean => (bool)this.RawValue; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public string AsString => (string)this.RawValue; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public int AsInt32 => Convert.ToInt32(this.RawValue); [DebuggerBrowsable(DebuggerBrowsableState.Never)] public long AsInt64 => Convert.ToInt64(this.RawValue); [DebuggerBrowsable(DebuggerBrowsableState.Never)] public double AsDouble => Convert.ToDouble(this.RawValue); [DebuggerBrowsable(DebuggerBrowsableState.Never)] public decimal AsDecimal => Convert.ToDecimal(this.RawValue); [DebuggerBrowsable(DebuggerBrowsableState.Never)] public DateTime AsDateTime => (DateTime)this.RawValue; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public ObjectId AsObjectId => (ObjectId)this.RawValue; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public Guid AsGuid => (Guid)this.RawValue; #endregion #region IsTypes [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsNull => this.Type == BsonType.Null; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsArray => this.Type == BsonType.Array; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsDocument => this.Type == BsonType.Document; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsInt32 => this.Type == BsonType.Int32; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsInt64 => this.Type == BsonType.Int64; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsDouble => this.Type == BsonType.Double; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsDecimal => this.Type == BsonType.Decimal; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsNumber => this.IsInt32 || this.IsInt64 || this.IsDouble || this.IsDecimal; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsBinary => this.Type == BsonType.Binary; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsBoolean => this.Type == BsonType.Boolean; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsString => this.Type == BsonType.String; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsObjectId => this.Type == BsonType.ObjectId; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsGuid => this.Type == BsonType.Guid; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsDateTime => this.Type == BsonType.DateTime; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsMinValue => this.Type == BsonType.MinValue; [DebuggerBrowsable(DebuggerBrowsableState.Never)] public bool IsMaxValue => this.Type == BsonType.MaxValue; #endregion #region Implicit Ctor // Int32 public static implicit operator Int32(BsonValue value) { return (Int32)value.RawValue; } // Int32 public static implicit operator BsonValue(Int32 value) { return new BsonValue(value); } // Int64 public static implicit operator Int64(BsonValue value) { return (Int64)value.RawValue; } // Int64 public static implicit operator BsonValue(Int64 value) { return new BsonValue(value); } // Double public static implicit operator Double(BsonValue value) { return (Double)value.RawValue; } // Double public static implicit operator BsonValue(Double value) { return new BsonValue(value); } // Decimal public static implicit operator Decimal(BsonValue value) { return (Decimal)value.RawValue; } // Decimal public static implicit operator BsonValue(Decimal value) { return new BsonValue(value); } // UInt64 (to avoid ambigous between Double-Decimal) public static implicit operator UInt64(BsonValue value) { return (UInt64)value.RawValue; } // Decimal public static implicit operator BsonValue(UInt64 value) { return new BsonValue((Double)value); } // String public static implicit operator String(BsonValue value) { return (String)value.RawValue; } // String public static implicit operator BsonValue(String value) { return new BsonValue(value); } // Binary public static implicit operator Byte[] (BsonValue value) { return (Byte[])value.RawValue; } // Binary public static implicit operator BsonValue(Byte[] value) { return new BsonValue(value); } // ObjectId public static implicit operator ObjectId(BsonValue value) { return (ObjectId)value.RawValue; } // ObjectId public static implicit operator BsonValue(ObjectId value) { return new BsonValue(value); } // Guid public static implicit operator Guid(BsonValue value) { return (Guid)value.RawValue; } // Guid public static implicit operator BsonValue(Guid value) { return new BsonValue(value); } // Boolean public static implicit operator Boolean(BsonValue value) { return (Boolean)value.RawValue; } // Boolean public static implicit operator BsonValue(Boolean value) { return new BsonValue(value); } // DateTime public static implicit operator DateTime(BsonValue value) { return (DateTime)value.RawValue; } // DateTime public static implicit operator BsonValue(DateTime value) { return new BsonValue(value); } // + public static BsonValue operator +(BsonValue left, BsonValue right) { if (!left.IsNumber || !right.IsNumber) return BsonValue.Null; if (left.IsInt32 && right.IsInt32) return left.AsInt32 + right.AsInt32; if (left.IsInt64 && right.IsInt64) return left.AsInt64 + right.AsInt64; if (left.IsDouble && right.IsDouble) return left.AsDouble + right.AsDouble; if (left.IsDecimal && right.IsDecimal) return left.AsDecimal + right.AsDecimal; var result = left.AsDecimal + right.AsDecimal; var type = (BsonType)Math.Max((int)left.Type, (int)right.Type); return type == BsonType.Int64 ? new BsonValue((Int64)result) : type == BsonType.Double ? new BsonValue((Double)result) : new BsonValue(result); } // - public static BsonValue operator -(BsonValue left, BsonValue right) { if (!left.IsNumber || !right.IsNumber) return BsonValue.Null; if (left.IsInt32 && right.IsInt32) return left.AsInt32 - right.AsInt32; if (left.IsInt64 && right.IsInt64) return left.AsInt64 - right.AsInt64; if (left.IsDouble && right.IsDouble) return left.AsDouble - right.AsDouble; if (left.IsDecimal && right.IsDecimal) return left.AsDecimal - right.AsDecimal; var result = left.AsDecimal - right.AsDecimal; var type = (BsonType)Math.Max((int)left.Type, (int)right.Type); return type == BsonType.Int64 ? new BsonValue((Int64)result) : type == BsonType.Double ? new BsonValue((Double)result) : new BsonValue(result); } // * public static BsonValue operator *(BsonValue left, BsonValue right) { if (!left.IsNumber || !right.IsNumber) return BsonValue.Null; if (left.IsInt32 && right.IsInt32) return left.AsInt32 * right.AsInt32; if (left.IsInt64 && right.IsInt64) return left.AsInt64 * right.AsInt64; if (left.IsDouble && right.IsDouble) return left.AsDouble * right.AsDouble; if (left.IsDecimal && right.IsDecimal) return left.AsDecimal * right.AsDecimal; var result = left.AsDecimal * right.AsDecimal; var type = (BsonType)Math.Max((int)left.Type, (int)right.Type); return type == BsonType.Int64 ? new BsonValue((Int64)result) : type == BsonType.Double ? new BsonValue((Double)result) : new BsonValue(result); } // / public static BsonValue operator /(BsonValue left, BsonValue right) { if (!left.IsNumber || !right.IsNumber) return BsonValue.Null; if (left.IsDecimal || right.IsDecimal) return left.AsDecimal / right.AsDecimal; return left.AsDouble / right.AsDouble; } // % public static BsonValue operator %(BsonValue left, BsonValue right) { if (!left.IsNumber || !right.IsNumber) return BsonValue.Null; if (left.IsInt32 && right.IsInt32) return left.AsInt32 % right.AsInt32; if (left.IsInt64 && right.IsInt64) return left.AsInt64 % right.AsInt64; if (left.IsDecimal && right.IsDecimal) return left.AsDecimal % right.AsDecimal; return left.AsDouble % right.AsDouble; } public override string ToString() { return JsonSerializer.Serialize(this); } #endregion #region IComparable, IEquatable public virtual int CompareTo(BsonValue other) { return this.CompareTo(other, Collation.Binary); } public virtual int CompareTo(BsonValue other, Collation collation) { // first, test if types are different if (this.Type != other.Type) { // if both values are number, convert them to Decimal (128 bits) to compare // it's the slowest way, but more secure if (this.IsNumber && other.IsNumber) { return Convert.ToDecimal(this.RawValue).CompareTo(Convert.ToDecimal(other.RawValue)); } // if not, order by sort type order else { var result = this.Type.CompareTo(other.Type); return result < 0 ? -1 : result > 0 ? +1 : 0; } } // for both values with same data type just compare switch (this.Type) { case BsonType.Null: case BsonType.MinValue: case BsonType.MaxValue: return 0; case BsonType.Int32: return this.AsInt32.CompareTo(other.AsInt32); case BsonType.Int64: return this.AsInt64.CompareTo(other.AsInt64); case BsonType.Double: return this.AsDouble.CompareTo(other.AsDouble); case BsonType.Decimal: return this.AsDecimal.CompareTo(other.AsDecimal); case BsonType.String: return collation.Compare(this.AsString, other.AsString); case BsonType.Document: return this.AsDocument.CompareTo(other); case BsonType.Array: return this.AsArray.CompareTo(other); case BsonType.Binary: return this.AsBinary.BinaryCompareTo(other.AsBinary); case BsonType.ObjectId: return this.AsObjectId.CompareTo(other.AsObjectId); case BsonType.Guid: return this.AsGuid.CompareTo(other.AsGuid); case BsonType.Boolean: return this.AsBoolean.CompareTo(other.AsBoolean); case BsonType.DateTime: var d0 = this.AsDateTime; var d1 = other.AsDateTime; if (d0.Kind != DateTimeKind.Utc) d0 = d0.ToUniversalTime(); if (d1.Kind != DateTimeKind.Utc) d1 = d1.ToUniversalTime(); return d0.CompareTo(d1); default: throw new NotImplementedException(); } } public bool Equals(BsonValue other) { return this.CompareTo(other) == 0; } #endregion #region Operators public static bool operator ==(BsonValue lhs, BsonValue rhs) { if (object.ReferenceEquals(lhs, null)) return object.ReferenceEquals(rhs, null); if (object.ReferenceEquals(rhs, null)) return false; // don't check type because sometimes different types can be == return lhs.Equals(rhs); } public static bool operator !=(BsonValue lhs, BsonValue rhs) { return !(lhs == rhs); } public static bool operator >=(BsonValue lhs, BsonValue rhs) { return lhs.CompareTo(rhs) >= 0; } public static bool operator >(BsonValue lhs, BsonValue rhs) { return lhs.CompareTo(rhs) > 0; } public static bool operator <(BsonValue lhs, BsonValue rhs) { return lhs.CompareTo(rhs) < 0; } public static bool operator <=(BsonValue lhs, BsonValue rhs) { return lhs.CompareTo(rhs) <= 0; } public override bool Equals(object obj) { if (obj is BsonValue other) { return this.Equals(other); } return false; } public override int GetHashCode() { var hash = 17; hash = 37 * hash + this.Type.GetHashCode(); hash = 37 * hash + (this.RawValue?.GetHashCode() ?? 0); return hash; } #endregion #region GetBytesCount() /// /// Returns how many bytes this BsonValue will consume when converted into binary BSON /// If recalc = false, use cached length value (from Array/Document only) /// internal virtual int GetBytesCount(bool recalc) { switch (this.Type) { case BsonType.Null: case BsonType.MinValue: case BsonType.MaxValue: return 0; case BsonType.Int32: return 4; case BsonType.Int64: return 8; case BsonType.Double: return 8; case BsonType.Decimal: return 16; case BsonType.String: return StringEncoding.UTF8.GetByteCount(this.AsString); case BsonType.Binary: return this.AsBinary.Length; case BsonType.ObjectId: return 12; case BsonType.Guid: return 16; case BsonType.Boolean: return 1; case BsonType.DateTime: return 8; case BsonType.Document: return this.AsDocument.GetBytesCount(recalc); case BsonType.Array: return this.AsArray.GetBytesCount(recalc); } throw new ArgumentException(); } /// /// Get how many bytes one single element will used in BSON format /// protected int GetBytesCountElement(string key, BsonValue value) { // check if data type is variant var variant = value.Type == BsonType.String || value.Type == BsonType.Binary || value.Type == BsonType.Guid; return 1 + // element type StringEncoding.UTF8.GetByteCount(key) + // CString 1 + // CString \0 value.GetBytesCount(true) + (variant ? 5 : 0); // bytes.Length + 0x?? } #endregion } } ================================================ FILE: LiteDB/Document/DataReader/BsonDataReader.cs ================================================ using LiteDB.Engine; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { /// /// Class to read void, one or a collection of BsonValues. Used in SQL execution commands and query returns. Use local data source (IEnumerable[BsonDocument]) /// public class BsonDataReader : IBsonDataReader { private readonly IEnumerator _source = null; private readonly EngineState _state = null; private readonly string _collection = null; private readonly bool _hasValues; private BsonValue _current = null; private bool _isFirst; private bool _disposed = false; /// /// Initialize with no value /// internal BsonDataReader() { _hasValues = false; } /// /// Initialize with a single value /// internal BsonDataReader(BsonValue value, string collection = null) { _current = value; _isFirst = _hasValues = true; _collection = collection; } /// /// Initialize with an IEnumerable data source /// internal BsonDataReader(IEnumerable values, string collection, EngineState state) { _collection = collection; _source = values.GetEnumerator(); _state = state; try { _state.Validate(); if (_source.MoveNext()) { _hasValues = _isFirst = true; _current = _state.ReadTransform(_collection, _source.Current); } } catch (Exception ex) { _state.Handle(ex); throw; } } /// /// Return if has any value in result /// public bool HasValues => _hasValues; /// /// Return current value /// public BsonValue Current => _current; /// /// Return collection name /// public string Collection => _collection; /// /// Move cursor to next result. Returns true if read was possible /// public bool Read() { if (!_hasValues) return false; if (_isFirst) { _isFirst = false; return true; } else { if (_source != null) { _state.Validate(); // checks if engine still open try { var read = _source.MoveNext(); // can throw any error here _current = _state.ReadTransform(_collection, _source.Current); return read; } catch (Exception ex) { _state.Handle(ex); throw ex; } } else { return false; } } } public BsonValue this[string field] { get { return _current.AsDocument[field] ?? BsonValue.Null; } } public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } ~BsonDataReader() { this.Dispose(false); } protected virtual void Dispose(bool disposing) { if (_disposed) return; _disposed = true; if (disposing) { _source?.Dispose(); } } } } ================================================ FILE: LiteDB/Document/DataReader/BsonDataReaderExtensions.cs ================================================ using LiteDB.Engine; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB { /// /// Implement some Enumerable methods to IBsonDataReader /// public static class BsonDataReaderExtensions { public static IEnumerable ToEnumerable(this IBsonDataReader reader) { try { while (reader.Read()) { yield return reader.Current; } } finally { reader.Dispose(); } } public static BsonValue[] ToArray(this IBsonDataReader reader) => ToEnumerable(reader).ToArray(); public static IList ToList(this IBsonDataReader reader) => ToEnumerable(reader).ToList(); public static BsonValue First(this IBsonDataReader reader) => ToEnumerable(reader).First(); public static BsonValue FirstOrDefault(this IBsonDataReader reader) => ToEnumerable(reader).FirstOrDefault(); public static BsonValue Single(this IBsonDataReader reader) => ToEnumerable(reader).Single(); public static BsonValue SingleOrDefault(this IBsonDataReader reader) => ToEnumerable(reader).SingleOrDefault(); } } ================================================ FILE: LiteDB/Document/DataReader/IBsonDataReader.cs ================================================ using System; namespace LiteDB { public interface IBsonDataReader : IDisposable { BsonValue this[string field] { get; } string Collection { get; } BsonValue Current { get; } bool HasValues { get; } bool Read(); } } ================================================ FILE: LiteDB/Document/Expression/BsonExpression.cs ================================================ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { /// /// Delegate function to get compiled enumerable expression /// internal delegate IEnumerable BsonExpressionEnumerableDelegate(IEnumerable source, BsonDocument root, BsonValue current, Collation collation, BsonDocument parameters); /// /// Delegate function to get compiled scalar expression /// internal delegate BsonValue BsonExpressionScalarDelegate(IEnumerable source, BsonDocument root, BsonValue current, Collation collation, BsonDocument parameters); /// /// Compile and execute string expressions using BsonDocuments. Used in all document manipulation (transform, filter, indexes, updates). See https://github.com/mbdavid/LiteDB/wiki/Expressions /// public sealed class BsonExpression { /// /// Get formatted expression /// public string Source { get; internal set; } /// /// Indicate expression type /// public BsonExpressionType Type { get; internal set; } /// /// If true, this expression do not change if same document/paramter are passed (only few methods change - like NOW() - or parameters) /// public bool IsImmutable { get; internal set; } /// /// Get/Set parameter values that will be used on expression execution /// public BsonDocument Parameters { get; internal set; } /// /// In predicate expressions, indicate Left side /// internal BsonExpression Left { get; set; } /// /// In predicate expressions, indicate Rigth side /// internal BsonExpression Right { get; set; } /// /// Get/Set this expression (or any inner expression) use global Source (*) /// internal bool UseSource { get; set; } /// /// Get transformed LINQ expression /// internal Expression Expression { get; set; } /// /// Fill this hashset with all fields used in root level of document (be used to partial deserialize) - "$" means all fields /// public HashSet Fields { get; internal set; } /// /// Indicate if this expressions returns a single value or IEnumerable value /// public bool IsScalar { get; internal set; } /// /// Indicate that expression evaluate to TRUE or FALSE (=, >, ...). OR and AND are not considered Predicate expressions /// Predicate expressions must have Left/Right expressions /// internal bool IsPredicate => this.Type == BsonExpressionType.Equal || this.Type == BsonExpressionType.Like || this.Type == BsonExpressionType.Between || this.Type == BsonExpressionType.GreaterThan || this.Type == BsonExpressionType.GreaterThanOrEqual || this.Type == BsonExpressionType.LessThan || this.Type == BsonExpressionType.LessThanOrEqual || this.Type == BsonExpressionType.NotEqual || this.Type == BsonExpressionType.In; /// /// This expression can be indexed? To index some expression must contains fields (at least 1) and /// must use only immutable methods and no parameters /// internal bool IsIndexable => this.Fields.Count > 0 && this.IsImmutable == true && this.Parameters.Count == 0; /// /// This expression has no dependency of BsonDocument so can be used as user value (when select index) /// internal bool IsValue => this.Fields.Count == 0; /// /// Indicate when predicate expression uses ANY keywork for filter array items /// internal bool IsANY => this.IsPredicate && this.Expression.ToString().Contains("_ANY"); /// /// Compiled Expression into a function to be executed: func(source[], root, current, parameters)[] /// private BsonExpressionEnumerableDelegate _funcEnumerable; /// /// Compiled Expression into a scalar function to be executed: func(source[], root, current, parameters)1 /// private BsonExpressionScalarDelegate _funcScalar; /// /// Get default field name when need convert simple BsonValue into BsonDocument /// internal string DefaultFieldName() { var name = string.Join("_", this.Fields.Where(x => x != "$")); return string.IsNullOrEmpty(name) ? "expr" : name; } /// /// Only internal ctor (from BsonParserExpression) /// internal BsonExpression() { } /// /// Implicit string converter /// public static implicit operator String(BsonExpression expr) { return expr.Source; } /// /// Implicit string converter /// public static implicit operator BsonExpression(String expr) { return BsonExpression.Create(expr); } #region Execute Enumerable /// /// Execute expression with an empty document (used only for resolve math/functions). /// public IEnumerable Execute(Collation collation = null) { var root = new BsonDocument(); var source = new BsonDocument[] { root }; return this.Execute(source, root, root, collation); } /// /// Execute expression and returns IEnumerable values /// public IEnumerable Execute(BsonDocument root, Collation collation = null) { if (root == null) throw new ArgumentNullException(nameof(root)); var source = new BsonDocument[] { root }; return this.Execute(source, root, root, collation); } /// /// Execute expression and returns IEnumerable values /// public IEnumerable Execute(IEnumerable source, Collation collation = null) { if (source == null) throw new ArgumentNullException(nameof(source)); return this.Execute(source, null, null, collation); } /// /// Execute expression and returns IEnumerable values - returns NULL if no elements /// internal IEnumerable Execute(IEnumerable source, BsonDocument root, BsonValue current, Collation collation) { if (this.IsScalar) { var value = _funcScalar(source, root, current, collation ?? Collation.Binary, this.Parameters); yield return value; } else { var values = _funcEnumerable(source, root, current, collation ?? Collation.Binary, this.Parameters); foreach (var value in values) { yield return value; } } } /// /// Execute expression over document to get all index keys. /// Return distinct value (no duplicate key to same document) /// internal IEnumerable GetIndexKeys(BsonDocument doc, Collation collation) { return this.Execute(doc, collation).Distinct(); } #endregion #region ExecuteScalar /// /// Execute scalar expression with an blank document and empty source (used only for resolve math/functions). /// public BsonValue ExecuteScalar(Collation collation = null) { var root = new BsonDocument(); var source = new BsonDocument[] { }; return this.ExecuteScalar(source, root, root, collation); } /// /// Execute scalar expression over single document and return a single value (or BsonNull when empty). Throws exception if expression are not scalar expression /// public BsonValue ExecuteScalar(BsonDocument root, Collation collation = null) { if (root == null) throw new ArgumentNullException(nameof(root)); var source = new BsonDocument[] { root }; return this.ExecuteScalar(source, root, root, collation); } /// /// Execute scalar expression over multiple documents and return a single value (or BsonNull when empty). Throws exception if expression are not scalar expression /// public BsonValue ExecuteScalar(IEnumerable source, Collation collation = null) { if (source == null) throw new ArgumentNullException(nameof(source)); return this.ExecuteScalar(source, null, null, collation); } /// /// Execute expression and returns IEnumerable values - returns NULL if no elements /// internal BsonValue ExecuteScalar(IEnumerable source, BsonDocument root, BsonValue current, Collation collation) { if (this.IsScalar) { return _funcScalar(source, root, current, collation ?? Collation.Binary, this.Parameters); } else { throw new LiteException(0, $"Expression `{this.Source}` is not a scalar expression and can return more than one result"); } } #endregion #region Static method private static readonly ConcurrentDictionary _cacheEnumerable = new ConcurrentDictionary(); private static readonly ConcurrentDictionary _cacheScalar = new ConcurrentDictionary(); /// /// Parse string and create new instance of BsonExpression - can be cached /// public static BsonExpression Create(string expression) { return Create(expression, new BsonDocument()); } /// /// Parse string and create new instance of BsonExpression - can be cached /// public static BsonExpression Create(string expression, params BsonValue[] args) { var parameters = new BsonDocument(); for(var i = 0; i < args.Length; i++) { parameters[i.ToString()] = args[i]; } return Create(expression, parameters); } /// /// Parse string and create new instance of BsonExpression - can be cached /// public static BsonExpression Create(string expression, BsonDocument parameters) { if (string.IsNullOrWhiteSpace(expression)) throw new ArgumentNullException(nameof(expression)); var tokenizer = new Tokenizer(expression); var expr = Create(tokenizer, BsonExpressionParserMode.Full, parameters); tokenizer.LookAhead().Expect(TokenType.EOF); return expr; } /// /// Parse tokenizer and create new instance of BsonExpression - for now, do not use cache /// internal static BsonExpression Create(Tokenizer tokenizer, BsonExpressionParserMode mode, BsonDocument parameters) { if (tokenizer == null) throw new ArgumentNullException(nameof(tokenizer)); return ParseAndCompile(tokenizer, mode, parameters, DocumentScope.Root); } /// /// Parse and compile string expression and return BsonExpression /// internal static BsonExpression ParseAndCompile(Tokenizer tokenizer, BsonExpressionParserMode mode, BsonDocument parameters, DocumentScope scope) { if (tokenizer == null) throw new ArgumentNullException(nameof(tokenizer)); var context = new ExpressionContext(); var expr = mode == BsonExpressionParserMode.Full ? BsonExpressionParser.ParseFullExpression(tokenizer, context, parameters, scope) : mode == BsonExpressionParserMode.Single ? BsonExpressionParser.ParseSingleExpression(tokenizer, context, parameters, scope) : mode == BsonExpressionParserMode.SelectDocument ? BsonExpressionParser.ParseSelectDocumentBuilder(tokenizer, context, parameters) : BsonExpressionParser.ParseUpdateDocumentBuilder(tokenizer, context, parameters); // compile linq expression (with left+right expressions) Compile(expr, context); return expr; } internal static void Compile(BsonExpression expr, ExpressionContext context) { // compile linq expression according with return type (scalar or enumerable) // in both case, try use cached compiled version if (expr.IsScalar) { var cached = _cacheScalar.GetOrAdd(expr.Source, s => { var lambda = System.Linq.Expressions.Expression.Lambda(expr.Expression, context.Source, context.Root, context.Current, context.Collation, context.Parameters); return lambda.Compile(); }); expr._funcScalar = cached; } else { var cached = _cacheEnumerable.GetOrAdd(expr.Source, s => { var lambda = System.Linq.Expressions.Expression.Lambda(expr.Expression, context.Source, context.Root, context.Current, context.Collation, context.Parameters); return lambda.Compile(); }); expr._funcEnumerable = cached; } // compile child expressions (left/right) if (expr.Left != null) Compile(expr.Left, context); if (expr.Right != null) Compile(expr.Right, context); } /// /// Set same parameter referente to all expression child (left, right) /// internal static void SetParameters(BsonExpression expr, BsonDocument parameters) { expr.Parameters = parameters; if (expr.Left != null) SetParameters(expr.Left, parameters); if (expr.Right != null) SetParameters(expr.Right, parameters); } /// /// Get root document $ expression /// public static BsonExpression Root = Create("$"); #endregion #region MethodCall quick access /// /// Get all registered methods for BsonExpressions /// public static IEnumerable Methods => _methods.Values; /// /// Load all static methods from BsonExpressionMethods class. Use a dictionary using name + parameter count /// private static readonly Dictionary _methods = typeof(BsonExpressionMethods).GetMethods(BindingFlags.Public | BindingFlags.Static) .ToDictionary(m => m.Name.ToUpperInvariant() + "~" + m.GetParameters().Where(p => p.ParameterType != typeof(Collation)).Count()); /// /// Get expression method with same name and same parameter - return null if not found /// internal static MethodInfo GetMethod(string name, int parameterCount) { var key = name.ToUpperInvariant() + "~" + parameterCount; return _methods.GetOrDefault(key); } #endregion #region FunctionCall quick access /// /// Get all registered functions for BsonExpressions /// public static IEnumerable Functions => _functions.Values; /// /// Load all static methods from BsonExpressionFunctions class. Use a dictionary using name + parameter count /// private static readonly Dictionary _functions = typeof(BsonExpressionFunctions).GetMethods(BindingFlags.Public | BindingFlags.Static) .ToDictionary(m => m.Name.ToUpperInvariant() + "~" + m.GetParameters() .Skip(5).Count()); /// /// Get expression function with same name and same parameter - return null if not found /// internal static MethodInfo GetFunction(string name, int parameterCount = 0) { var key = name.ToUpperInvariant() + "~" + parameterCount; return _functions.GetOrDefault(key); } #endregion public override string ToString() { return $"`{this.Source}` [{this.Type}]"; } } } ================================================ FILE: LiteDB/Document/Expression/Methods/Aggregate.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal partial class BsonExpressionMethods { /// /// Count all values. Return a single value /// public static BsonValue COUNT(IEnumerable values) { return values.Count(); } /// /// Find minimal value from all values (number values only). Return a single value /// public static BsonValue MIN(IEnumerable values) { var min = BsonValue.MaxValue; foreach(var value in values) { if (value.CompareTo(min) <= 0) { min = value; } } return min == BsonValue.MaxValue ? BsonValue.MinValue : min; } /// /// Find max value from all values (number values only). Return a single value /// public static BsonValue MAX(IEnumerable values) { var max = BsonValue.MinValue; foreach (var value in values) { if (value.CompareTo(max) >= 0) { max = value; } } return max == BsonValue.MinValue ? BsonValue.MaxValue : max; } /// /// Returns first value from an list of values (scan all source) /// public static BsonValue FIRST(IEnumerable values) { return values.FirstOrDefault(); } /// /// Returns last value from an list of values /// public static BsonValue LAST(IEnumerable values) { return values.LastOrDefault(); } /// /// Find average value from all values (number values only). Return a single value /// public static BsonValue AVG(IEnumerable values) { var sum = new BsonValue(0); var count = 0; foreach (var value in values.Where(x => x.IsNumber)) { sum += value; count++; } if (count > 0) { return sum / count; } else { return 0; } } /// /// Sum all values (number values only). Return a single value /// public static BsonValue SUM(IEnumerable values) { var sum = new BsonValue(0); foreach (var value in values.Where(x => x.IsNumber)) { sum += value; } return sum; } /// /// Return "true" if inner collection contains any result /// ANY($.items[*]) /// public static BsonValue ANY(IEnumerable values) { return values.Any(); } } } ================================================ FILE: LiteDB/Document/Expression/Methods/DataTypes.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal partial class BsonExpressionMethods { #region NEW_INSTANCE /// /// Return a new instance of MINVALUE /// public static BsonValue MINVALUE() => BsonValue.MinValue; /// /// Create a new OBJECTID value /// [Volatile] public static BsonValue OBJECTID() => ObjectId.NewObjectId(); /// /// Create a new GUID value /// [Volatile] public static BsonValue GUID() => Guid.NewGuid(); /// /// Return a new DATETIME (Now) /// [Volatile] public static BsonValue NOW() => DateTime.Now; /// /// Return a new DATETIME (UtcNow) /// [Volatile] public static BsonValue NOW_UTC() => DateTime.UtcNow; /// /// Return a new DATETIME (Today) /// [Volatile] public static BsonValue TODAY() => DateTime.Today; /// /// Return a new instance of MAXVALUE /// public static BsonValue MAXVALUE() => BsonValue.MaxValue; #endregion #region DATATYPE // ==> MaxValue is a constant // ==> "null" are a keyword /// /// Convert values into INT32. Returns empty if not possible to convert /// public static BsonValue INT32(BsonValue value) { if (value.IsNumber) { return value.AsInt32; } else if(value.IsString) { if (Int32.TryParse(value.AsString, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into INT64. Returns empty if not possible to convert /// public static BsonValue INT64(BsonValue value) { if (value.IsNumber) { return value.AsInt64; } else if(value.IsString) { if (Int64.TryParse(value.AsString, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into DOUBLE. Returns empty if not possible to convert /// public static BsonValue DOUBLE(Collation collation, BsonValue value) { if (value.IsNumber) { return value.AsDouble; } else if(value.IsString) { if (Double.TryParse(value.AsString, NumberStyles.Any, collation.Culture.NumberFormat, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into DOUBLE. Returns empty if not possible to convert /// public static BsonValue DOUBLE(BsonValue value, BsonValue culture) { if (value.IsNumber) { return value.AsDouble; } else if(value.IsString && culture.IsString) { var c = new CultureInfo(culture.AsString); // en-US if (Double.TryParse(value.AsString, NumberStyles.Any, c.NumberFormat, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into DECIMAL. Returns empty if not possible to convert /// public static BsonValue DECIMAL(Collation collation, BsonValue value) { if (value.IsNumber) { return value.AsDecimal; } else if(value.IsString) { if (Decimal.TryParse(value.AsString, NumberStyles.Any, collation.Culture.NumberFormat, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into DECIMAL. Returns empty if not possible to convert /// public static BsonValue DECIMAL(BsonValue value, BsonValue culture) { if (value.IsNumber) { return value.AsDecimal; } else if(value.IsString && culture.IsString) { var c = new CultureInfo(culture.AsString); // en-US if (Decimal.TryParse(value.AsString, NumberStyles.Any, c.NumberFormat, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert value into STRING /// public static BsonValue STRING(BsonValue value) { return value.IsNull ? "" : value.IsString ? value.AsString : value.ToString(); } // ==> there is no convert to BsonDocument, must use { .. } syntax /// /// Return an array from list of values. Support multiple values but returns a single value /// public static BsonValue ARRAY(IEnumerable values) { return new BsonArray(values); } /// /// Return an binary from string (base64) values /// public static BsonValue BINARY(BsonValue value) { if (value.IsBinary) { return value; } else if (value.IsString) { byte[] data = null; var isBase64 = false; try { data = Convert.FromBase64String(value.AsString); isBase64 = true; } catch (FormatException) { } if (isBase64) return data; } return BsonValue.Null; } /// /// Convert values into OBJECTID. Returns empty if not possible to convert /// public static BsonValue OBJECTID(BsonValue value) { if (value.IsObjectId) { return value.AsObjectId; } else if(value.IsString) { ObjectId val = null; var isObjectId = false; try { val = new ObjectId(value.AsString); isObjectId = true; } catch { } if (isObjectId) return val; } return BsonValue.Null; } /// /// Convert values into GUID. Returns empty if not possible to convert /// public static BsonValue GUID(BsonValue value) { if (value.IsGuid) { return value.AsGuid; } else if(value.IsString) { var val = Guid.Empty; var isGuid = false; try { val = new Guid(value.AsString); isGuid = true; } catch { } if (isGuid) return val; } return BsonValue.Null; } /// /// Return converted value into BOOLEAN value /// public static BsonValue BOOLEAN(BsonValue value) { if (value.IsBoolean) { return value.AsBoolean; } else { var val = false; var isBool = false; try { val = Convert.ToBoolean(value.AsString); isBool = true; } catch { } if (isBool) return val; } return BsonValue.Null; } /// /// Convert values into DATETIME. Returns empty if not possible to convert /// public static BsonValue DATETIME(Collation collation, BsonValue value) { if (value.IsDateTime) { return value.AsDateTime; } else if(value.IsString) { if (DateTime.TryParse(value.AsString, collation.Culture.DateTimeFormat, DateTimeStyles.None, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into DATETIME. Returns empty if not possible to convert. Support custom culture info /// public static BsonValue DATETIME(BsonValue value, BsonValue culture) { if (value.IsDateTime) { return value.AsDateTime; } else if(value.IsString && culture.IsString) { var c = new CultureInfo(culture.AsString); // en-US if (DateTime.TryParse(value.AsString, c.DateTimeFormat, DateTimeStyles.None, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into DATETIME. Returns empty if not possible to convert /// public static BsonValue DATETIME_UTC(Collation collation, BsonValue value) { if (value.IsDateTime) { return value.AsDateTime; } else if(value.IsString) { if (DateTime.TryParse(value.AsString, collation.Culture.DateTimeFormat, DateTimeStyles.AssumeUniversal, out var val)) { return val; } } return BsonValue.Null; } /// /// Convert values into DATETIME. Returns empty if not possible to convert /// public static BsonValue DATETIME_UTC(BsonValue value, BsonValue culture) { if (value.IsDateTime) { return value.AsDateTime; } else if(value.IsString && culture.IsString) { var c = new CultureInfo(culture.AsString); // en-US if (DateTime.TryParse(value.AsString, c.DateTimeFormat, DateTimeStyles.AssumeUniversal, out var val)) { return val; } } return BsonValue.Null; } /// /// Create a new instance of DATETIME based on year, month, day (local time) /// public static BsonValue DATETIME(BsonValue year, BsonValue month, BsonValue day) { if (year.IsNumber && month.IsNumber && day.IsNumber) { return new DateTime(year.AsInt32, month.AsInt32, day.AsInt32); } return BsonValue.Null; } /// /// Create a new instance of DATETIME based on year, month, day (UTC) /// public static BsonValue DATETIME_UTC(BsonValue year, BsonValue month, BsonValue day) { if (year.IsNumber && month.IsNumber && day.IsNumber) { return new DateTime(year.AsInt32, month.AsInt32, day.AsInt32, 0, 0, 0, DateTimeKind.Utc); } return BsonValue.Null; } #endregion #region IS_DATETYPE /// /// Return true if value is MINVALUE /// public static BsonValue IS_MINVALUE(BsonValue value) => value.IsMinValue; /// /// Return true if value is NULL /// public static BsonValue IS_NULL(BsonValue value) => value.IsNull; /// /// Return true if value is INT32 /// public static BsonValue IS_INT32(BsonValue value) => value.IsInt32; /// /// Return true if value is INT64 /// public static BsonValue IS_INT64(BsonValue value) => value.IsInt64; /// /// Return true if value is DOUBLE /// public static BsonValue IS_DOUBLE(BsonValue value) => value.IsDouble; /// /// Return true if value is DECIMAL /// public static BsonValue IS_DECIMAL(BsonValue value) => value.IsDecimal; /// /// Return true if value is NUMBER (int, double, decimal) /// public static BsonValue IS_NUMBER(BsonValue value) => value.IsNumber; /// /// Return true if value is STRING /// public static BsonValue IS_STRING(BsonValue value) => value.IsString; /// /// Return true if value is DOCUMENT /// public static BsonValue IS_DOCUMENT(BsonValue value) => value.IsDocument; /// /// Return true if value is ARRAY /// public static BsonValue IS_ARRAY(BsonValue value) => value.IsArray; /// /// Return true if value is BINARY /// public static BsonValue IS_BINARY(BsonValue value) => value.IsBinary; /// /// Return true if value is OBJECTID /// public static BsonValue IS_OBJECTID(BsonValue value) => value.IsObjectId; /// /// Return true if value is GUID /// public static BsonValue IS_GUID(BsonValue value) => value.IsGuid; /// /// Return true if value is BOOLEAN /// public static BsonValue IS_BOOLEAN(BsonValue value) => value.IsBoolean; /// /// Return true if value is DATETIME /// public static BsonValue IS_DATETIME(BsonValue value) => value.IsDateTime; /// /// Return true if value is DATE (alias to DATETIME) /// public static BsonValue IS_MAXVALUE(BsonValue value) => value.IsMaxValue; #endregion #region ALIAS /// /// Alias to INT32(values) /// public static BsonValue INT(BsonValue value) => INT32(value); /// /// Alias to INT64(values) /// public static BsonValue LONG(BsonValue value) => INT64(value); /// /// Alias to BOOLEAN(values) /// public static BsonValue BOOL(BsonValue value) => BOOLEAN(value); /// /// Alias to DATETIME(values) and DATETIME_UTC(values) /// public static BsonValue DATE(Collation collation, BsonValue value) => DATETIME(collation, value); public static BsonValue DATE(BsonValue values, BsonValue culture) => DATETIME(values, culture); public static BsonValue DATE_UTC(Collation collation, BsonValue value) => DATETIME_UTC(collation, value); public static BsonValue DATE_UTC(BsonValue values, BsonValue culture) => DATETIME_UTC(values, culture); public static BsonValue DATE(BsonValue year, BsonValue month, BsonValue day) => DATETIME(year, month, day); public static BsonValue DATE_UTC(BsonValue year, BsonValue month, BsonValue day) => DATETIME_UTC(year, month, day); /// /// Alias to IS_INT32(values) /// public static BsonValue IS_INT(BsonValue value) => IS_INT32(value); /// /// Alias to IS_INT64(values) /// public static BsonValue IS_LONG(BsonValue value) => IS_INT64(value); /// /// Alias to IS_BOOLEAN(values) /// public static BsonValue IS_BOOL(BsonValue value) => IS_BOOLEAN(value); /// /// Alias to IS_DATE(values) /// public static BsonValue IS_DATE(BsonValue value) => IS_DATETIME(value); #endregion } } ================================================ FILE: LiteDB/Document/Expression/Methods/Date.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal partial class BsonExpressionMethods { #region Year/Month/Day/Hour/Minute/Second /// /// Get year from date /// public static BsonValue YEAR(BsonValue value) { if (value.IsDateTime) return value.AsDateTime.Year; return BsonValue.Null; } /// /// Get month from date /// public static BsonValue MONTH(BsonValue value) { if (value.IsDateTime) return value.AsDateTime.Month; return BsonValue.Null; } /// /// Get day from date /// public static BsonValue DAY(BsonValue value) { if (value.IsDateTime) return value.AsDateTime.Day; return BsonValue.Null; } /// /// Get hour from date /// public static BsonValue HOUR(BsonValue value) { if (value.IsDateTime) return value.AsDateTime.Hour; return BsonValue.Null; } /// /// Get minute from date /// public static BsonValue MINUTE(BsonValue value) { if (value.IsDateTime) return value.AsDateTime.Minute; return BsonValue.Null; } /// /// Get seconds from date /// public static BsonValue SECOND(BsonValue value) { if (value.IsDateTime) return value.AsDateTime.Second; return BsonValue.Null; } #endregion #region Date Functions /// /// Add an interval to date. Use dateInterval: "y" (or "year"), "M" (or "month"), "d" (or "day"), "h" (or "hour"), "m" (or "minute"), "s" or ("second") /// public static BsonValue DATEADD(BsonValue dateInterval, BsonValue number, BsonValue value) { if (dateInterval.IsString && number.IsNumber && value.IsDateTime) { var datePart = dateInterval.AsString; var numb = number.AsInt32; var date = value.AsDateTime; datePart = datePart == "M" ? "month" : datePart.ToLower(); if (datePart == "y" || datePart == "year") return date.AddYears(numb); else if (datePart == "month") return date.AddMonths(numb); else if (datePart == "d" || datePart == "day") return date.AddDays(numb); else if (datePart == "h" || datePart == "hour") return date.AddHours(numb); else if (datePart == "m" || datePart == "minute") return date.AddMinutes(numb); else if (datePart == "s" || datePart == "second") return date.AddSeconds(numb); } return BsonValue.Null; } /// /// Returns an interval about 2 dates. Use dateInterval: "y|year", "M|month", "d|day", "h|hour", "m|minute", "s|second" /// public static BsonValue DATEDIFF(BsonValue dateInterval, BsonValue starts, BsonValue ends) { if (dateInterval.IsString && starts.IsDateTime && ends.IsDateTime) { var datePart = dateInterval.AsString; var start = starts.AsDateTime; var end = ends.AsDateTime; datePart = datePart == "M" ? "month" : datePart.ToLower(); if (datePart == "y" || datePart == "year") return start.YearDifference(end); else if (datePart == "month") return start.MonthDifference(end); else if (datePart == "d" || datePart == "day") return Convert.ToInt32(Math.Truncate(end.Subtract(start).TotalDays)); else if (datePart == "h" || datePart == "hour") return Convert.ToInt32(Math.Truncate(end.Subtract(start).TotalHours)); else if (datePart == "m" || datePart == "minute") return Convert.ToInt32(Math.Truncate(end.Subtract(start).TotalMinutes)); else if (datePart == "s" || datePart == "second") return Convert.ToInt32(Math.Truncate(end.Subtract(start).TotalSeconds)); } return BsonValue.Null; } /// /// Convert UTC date into LOCAL date /// public static BsonValue TO_LOCAL(BsonValue date) { if (date.IsDateTime) { return date.AsDateTime.ToLocalTime(); } return BsonValue.Null; } /// /// Convert LOCAL date into UTC date /// public static BsonValue TO_UTC(BsonValue date) { if (date.IsDateTime) { return date.AsDateTime.ToUniversalTime(); } return BsonValue.Null; } #endregion } } ================================================ FILE: LiteDB/Document/Expression/Methods/Math.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal partial class BsonExpressionMethods { /// /// Apply absolute value (ABS) method in all number values /// public static BsonValue ABS(BsonValue value) { switch (value.Type) { case BsonType.Int32: return Math.Abs(value.AsInt32); case BsonType.Int64: return Math.Abs(value.AsInt64); case BsonType.Double: return Math.Abs(value.AsDouble); case BsonType.Decimal: return Math.Abs(value.AsDecimal); } return BsonValue.Null; } /// /// Round number method in all number values /// public static BsonValue ROUND(BsonValue value, BsonValue digits) { if (digits.IsNumber) { switch (value.Type) { case BsonType.Int32: return value.AsInt32; case BsonType.Int64: return value.AsInt64; case BsonType.Double: return Math.Round(value.AsDouble, digits.AsInt32); case BsonType.Decimal: return Math.Round(value.AsDecimal, digits.AsInt32); } } return BsonValue.Null; } /// /// Implement POWER (x and y) /// public static BsonValue POW(BsonValue x, BsonValue y) { if (x.IsNumber && y.IsNumber) { return Math.Pow(x.AsDouble, y.AsDouble); } return BsonValue.Null; } } } ================================================ FILE: LiteDB/Document/Expression/Methods/Misc.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal partial class BsonExpressionMethods { /// /// Parse a JSON string into a new BsonValue /// JSON('{a:1}') = {a:1} /// public static BsonValue JSON(BsonValue json) { if (json.IsString) { BsonValue value = null; var isJson = false; try { value = JsonSerializer.Deserialize(json.AsString); isJson = true; } catch (LiteException ex) when (ex.ErrorCode == LiteException.UNEXPECTED_TOKEN) { } if (isJson) return value; } return BsonValue.Null; } /// /// Create a new document and copy all properties from source document. Then copy properties (overritting if need) extend document /// Always returns a new document! /// EXTEND($, {a: 2}) = {_id:1, a: 2} /// public static BsonValue EXTEND(BsonValue source, BsonValue extend) { if (source.IsDocument && extend.IsDocument) { // make a copy of source document var newDoc = new BsonDocument(); source.AsDocument.CopyTo(newDoc); extend.AsDocument.CopyTo(newDoc); // copy rawId from source newDoc.RawId = source.AsDocument.RawId; return newDoc; } else if (source.IsDocument) return source; else if (extend.IsDocument) return extend; return new BsonDocument(); } /// /// Convert an array into IEnuemrable of values - If not array, returns as single yield value /// ITEMS([1, 2, null]) = 1, 2, null /// public static IEnumerable ITEMS(BsonValue array) { if (array.IsArray) { foreach (var value in array.AsArray) { yield return value; } } else if (array.IsBinary) { foreach (var value in array.AsBinary) { yield return (int)value; } } else { yield return array; } } /// /// Concatenates 2 sequences into a new single sequence /// public static IEnumerable CONCAT(IEnumerable first, IEnumerable second) { return first.Concat(second); } /// /// Get all KEYS names from a document /// public static IEnumerable KEYS(BsonValue document) { if (document.IsDocument) { foreach (var key in document.AsDocument.Keys) { yield return key; } } } /// /// Get all values from a document /// public static IEnumerable VALUES(BsonValue document) { if (document.IsDocument) { foreach (var value in document.AsDocument.Values) { yield return value; } } } /// /// Return CreationTime from ObjectId value - returns null if not an ObjectId /// public static BsonValue OID_CREATIONTIME(BsonValue objectId) { if (objectId.IsObjectId) { return objectId.AsObjectId.CreationTime; } return BsonValue.Null; } /// /// Conditional IF statment. If condition are true, returns TRUE value, otherwise, FALSE value /// public static BsonValue IIF(BsonValue test, BsonValue ifTrue, BsonValue ifFalse) { // this method are not implemented because will use "Expression.Conditional" // will execute "ifTrue" only if test = true and will execute "ifFalse" if test = false throw new NotImplementedException(); } /// /// Return first values if not null. If null, returns second value. /// public static BsonValue COALESCE(BsonValue left, BsonValue right) { return left.IsNull ? right : left; } /// /// Return length of variant value (valid only for String, Binary, Array or Document [keys]) /// public static BsonValue LENGTH(BsonValue value) { if (value.IsString) return value.AsString.Length; else if (value.IsBinary) return value.AsBinary.Length; else if (value.IsArray) return value.AsArray.Count; else if (value.IsDocument) return value.AsDocument.Keys.Count; else if (value.IsNull) return 0; return BsonValue.Null; } /// /// Returns the first num elements of values. /// public static IEnumerable TOP(IEnumerable values, BsonValue num) { if (num.IsInt32 || num.IsInt64) { var numInt = num.AsInt32; if (numInt > 0) return values.Take(numInt); } return Enumerable.Empty(); } /// /// Returns the union of the two enumerables. /// public static IEnumerable UNION(IEnumerable left, IEnumerable right) { return left.Union(right); } /// /// Returns the set difference between the two enumerables. /// public static IEnumerable EXCEPT(IEnumerable left, IEnumerable right) { return left.Except(right); } /// /// Returns a unique list of items /// public static IEnumerable DISTINCT(IEnumerable items) { return items.Distinct(); } private static readonly Random _random = new Random(); /// /// Return a random int value /// [Volatile] public static BsonValue RANDOM() { return _random.Next(); } /// /// Return a ranom int value inside this min/max values /// [Volatile] public static BsonValue RANDOM(BsonValue min, BsonValue max) { if (min.IsNumber && max.IsNumber) { return _random.Next(min.AsInt32, max.AsInt32); } else { return BsonValue.Null; } } } } ================================================ FILE: LiteDB/Document/Expression/Methods/String.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal partial class BsonExpressionMethods { /// /// Return lower case from string value /// public static BsonValue LOWER(BsonValue value) { if (value.IsString) { return value.AsString.ToLowerInvariant(); } return BsonValue.Null; } /// /// Return UPPER case from string value /// public static BsonValue UPPER(BsonValue value) { if (value.IsString) { return value.AsString.ToUpperInvariant(); } return BsonValue.Null; } /// /// Apply Left TRIM (start) from string value /// public static BsonValue LTRIM(BsonValue value) { if (value.IsString) { return value.AsString.TrimStart(); } return BsonValue.Null; } /// /// Apply Right TRIM (end) from string value /// public static BsonValue RTRIM(BsonValue value) { if (value.IsString) { return value.AsString.TrimEnd(); } return BsonValue.Null; } /// /// Apply TRIM from string value /// public static BsonValue TRIM(BsonValue value) { if (value.IsString) { return value.AsString.Trim(); } return BsonValue.Null; } /// /// Reports the zero-based index of the first occurrence of the specified string in this instance /// public static BsonValue INDEXOF(BsonValue value, BsonValue search) { if (value.IsString && search.IsString) { return value.AsString.IndexOf(search.AsString); } return BsonValue.Null; } /// /// Reports the zero-based index of the first occurrence of the specified string in this instance /// public static BsonValue INDEXOF(BsonValue value, BsonValue search, BsonValue startIndex) { if (value.IsString && search.IsString && startIndex.IsNumber) { return value.AsString.IndexOf(search.AsString, startIndex.AsInt32); } return BsonValue.Null; } /// /// Returns substring from string value using index and length (zero-based) /// public static BsonValue SUBSTRING(BsonValue value, BsonValue startIndex) { if (value.IsString && startIndex.IsNumber) { return value.AsString.Substring(startIndex.AsInt32); } return BsonValue.Null; } /// /// Returns substring from string value using index and length (zero-based) /// public static BsonValue SUBSTRING(BsonValue value, BsonValue startIndex, BsonValue length) { if (value.IsString && startIndex.IsNumber && length.IsNumber) { return value.AsString.Substring(startIndex.AsInt32, length.AsInt32); } return BsonValue.Null; } /// /// Returns replaced string changing oldValue with newValue /// public static BsonValue REPLACE(BsonValue value, BsonValue oldValue, BsonValue newValue) { if (value.IsString && oldValue.IsString && newValue.IsString) { return value.AsString.Replace(oldValue.AsString, newValue.AsString); } return BsonValue.Null; } /// /// Return value string with left padding /// public static BsonValue LPAD(BsonValue value, BsonValue totalWidth, BsonValue paddingChar) { if (value.IsString && totalWidth.IsNumber && paddingChar.IsString) { var c = paddingChar.AsString; if (string.IsNullOrEmpty(c)) throw new ArgumentOutOfRangeException(nameof(paddingChar)); return value.AsString.PadLeft(totalWidth.AsInt32, c[0]); } return BsonValue.Null; } /// /// Return value string with right padding /// public static BsonValue RPAD(BsonValue value, BsonValue totalWidth, BsonValue paddingChar) { if (value.IsString && totalWidth.IsNumber && paddingChar.IsString) { var c = paddingChar.AsString; if (string.IsNullOrEmpty(c)) throw new ArgumentOutOfRangeException(nameof(paddingChar)); return value.AsString.PadRight(totalWidth.AsInt32, c[0]); } return BsonValue.Null; } /// /// Slit value string based on separator /// public static IEnumerable SPLIT(BsonValue value, BsonValue separator) { if (value.IsString && separator.IsString) { var values = value.AsString.Split(new string[] { separator.AsString }, StringSplitOptions.RemoveEmptyEntries); foreach (var str in values) { yield return str; } } } /// /// Slit value string based on regular expression pattern /// public static IEnumerable SPLIT(BsonValue value, BsonValue pattern, BsonValue useRegex) { if (useRegex.IsBoolean && useRegex.AsBoolean) { if (value.IsString && pattern.IsString) { var values = Regex.Split(value.AsString, pattern.AsString, RegexOptions.Compiled); foreach (var str in values) { yield return str; } } } else { foreach(var str in SPLIT(value, pattern)) { yield return str; } } } /// /// Return format value string using format definition (same as String.Format("{0:~}", values)). /// public static BsonValue FORMAT(BsonValue value, BsonValue format) { if (format.IsString) { return string.Format("{0:" + format.AsString + "}", value.RawValue); } return BsonValue.Null; } /// /// Join all values into a single string with ',' separator. /// public static BsonValue JOIN(IEnumerable values) { return JOIN(values, ""); } /// /// Join all values into a single string with a string separator /// public static BsonValue JOIN(IEnumerable values, BsonValue separator) { if (separator.IsString) { return string.Join( separator.AsString, values.Select(x => STRING(x).AsString).ToArray() ); } return BsonValue.Null; } /// /// Test if value is match with regular expression pattern /// public static BsonValue IS_MATCH(BsonValue value, BsonValue pattern) { if (value.IsString == false || pattern.IsString == false) return false; return Regex.IsMatch(value.AsString, pattern.AsString); } /// /// Apply regular expression pattern over value to get group data. Return null if not found /// public static BsonValue MATCH(BsonValue value, BsonValue pattern, BsonValue group) { if (value.IsString == false || pattern.IsString == false) return null; var match = Regex.Match(value.AsString, pattern.AsString); if (match.Success == false) return BsonValue.Null; if (group.IsNumber) { return match.Groups[group.AsInt32].Value; } else if (group.IsString) { return match.Groups[group.AsString].Value; } else { return BsonValue.Null; } } } } ================================================ FILE: LiteDB/Document/Expression/Parser/BsonExpressionAttributes.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { /// /// When a method are decorated with this attribute means that this method are not immutable /// internal class VolatileAttribute: Attribute { } } ================================================ FILE: LiteDB/Document/Expression/Parser/BsonExpressionFunctions.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB { internal class BsonExpressionFunctions { public static IEnumerable MAP(BsonDocument root, Collation collation, BsonDocument parameters, IEnumerable input, BsonExpression mapExpr) { foreach (var item in input) { // execute for each child value and except a first bool value (returns if true) var values = mapExpr.Execute(new BsonDocument[] { root }, root, item, collation); foreach (var value in values) { yield return value; } } } public static IEnumerable FILTER(BsonDocument root, Collation collation, BsonDocument parameters, IEnumerable input, BsonExpression filterExpr) { foreach (var item in input) { // execute for each child value and except a first bool value (returns if true) var c = filterExpr.ExecuteScalar(new BsonDocument[] { root }, root, item, collation); if (c.IsBoolean && c.AsBoolean == true) { yield return item; } } } public static IEnumerable SORT(BsonDocument root, Collation collation, BsonDocument parameters, IEnumerable input, BsonExpression sortExpr, BsonValue order) { IEnumerable> source() { foreach (var item in input) { var value = sortExpr.ExecuteScalar(new BsonDocument[] { root }, root, item, collation); yield return new Tuple(item, value); } } return (order.IsInt32 && order.AsInt32 > 0) || (order.IsString && order.AsString.Equals("asc", StringComparison.OrdinalIgnoreCase)) ? source().OrderBy(x => x.Item2, collation).Select(x => x.Item1) : source().OrderByDescending(x => x.Item2, collation).Select(x => x.Item1); } public static IEnumerable SORT(BsonDocument root, Collation collation, BsonDocument parameters, IEnumerable input, BsonExpression sortExpr) { return SORT(root, collation, parameters, input, sortExpr, order: 1); } } } ================================================ FILE: LiteDB/Document/Expression/Parser/BsonExpressionOperators.cs ================================================ using LiteDB.Engine; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class BsonExpressionOperators { #region Arithmetic /// /// Add two number values. If any side are string, concat left+right as string /// public static BsonValue ADD(BsonValue left, BsonValue right) { // if both sides are string, concat if (left.IsString && right.IsString) { return left.AsString + right.AsString; } // if any sides are string, concat casting both to string else if (left.IsString || right.IsString) { return BsonExpressionMethods.STRING(left).AsString + BsonExpressionMethods.STRING(right).AsString; } // if any side are DateTime and another is number, add days in date else if (left.IsDateTime && right.IsNumber) { return left.AsDateTime.AddTicks(right.AsInt64); } else if (left.IsNumber && right.IsDateTime) { return right.AsDateTime.AddTicks(left.AsInt64); } // if both sides are number, add as math else if (left.IsNumber && right.IsNumber) { return left + right; } return BsonValue.Null; } /// /// Minus two number values /// public static BsonValue MINUS(BsonValue left, BsonValue right) { if (left.IsDateTime && right.IsNumber) { return left.AsDateTime.AddTicks(-right.AsInt64); } else if (left.IsNumber && right.IsDateTime) { return right.AsDateTime.AddTicks(-left.AsInt64); } else if (left.IsNumber && right.IsNumber) { return left - right; } return BsonValue.Null; } /// /// Multiply two number values /// public static BsonValue MULTIPLY(BsonValue left, BsonValue right) { if (left.IsNumber && right.IsNumber) { return left * right; } return BsonValue.Null; } /// /// Divide two number values /// public static BsonValue DIVIDE(BsonValue left, BsonValue right) { if (left.IsNumber && right.IsNumber) { return left / right; } return BsonValue.Null; } /// /// Mod two number values /// public static BsonValue MOD(BsonValue left, BsonValue right) { if (left.IsNumber && right.IsNumber) { return left % right; } return BsonValue.Null; } #endregion #region Predicates /// /// Test if left and right are same value. Returns true or false /// public static BsonValue EQ(Collation collation, BsonValue left, BsonValue right) => collation.Equals(left, right); public static BsonValue EQ_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => collation.Equals(x, right)); public static BsonValue EQ_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => collation.Equals(x, right)); /// /// Test if left is greater than right value. Returns true or false /// public static BsonValue GT(BsonValue left, BsonValue right) => left > right; public static BsonValue GT_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => collation.Compare(x, right) > 0); public static BsonValue GT_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => collation.Compare(x, right) > 0); /// /// Test if left is greater or equals than right value. Returns true or false /// public static BsonValue GTE(BsonValue left, BsonValue right) => left >= right; public static BsonValue GTE_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => collation.Compare(x, right) >= 0); public static BsonValue GTE_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => collation.Compare(x, right) >= 0); /// /// Test if left is less than right value. Returns true or false /// public static BsonValue LT(BsonValue left, BsonValue right) => left < right; public static BsonValue LT_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => collation.Compare(x, right) < 0); public static BsonValue LT_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => collation.Compare(x, right) < 0); /// /// Test if left is less or equals than right value. Returns true or false /// public static BsonValue LTE(Collation collation, BsonValue left, BsonValue right) => left <= right; public static BsonValue LTE_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => collation.Compare(x, right) <= 0); public static BsonValue LTE_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => collation.Compare(x, right) <= 0); /// /// Test if left and right are not same value. Returns true or false /// public static BsonValue NEQ(Collation collation, BsonValue left, BsonValue right) => !collation.Equals(left, right); public static BsonValue NEQ_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => !collation.Equals(x, right)); public static BsonValue NEQ_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => !collation.Equals(x, right)); /// /// Test if left is "SQL LIKE" with right. Returns true or false. Works only when left and right are string /// public static BsonValue LIKE(Collation collation, BsonValue left, BsonValue right) { if (left.IsString && right.IsString) { return left.AsString.SqlLike(right.AsString, collation); } else { return false; } } public static BsonValue LIKE_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => LIKE(collation, x, right)); public static BsonValue LIKE_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => LIKE(collation, x, right)); /// /// Test if left is between right-array. Returns true or false. Right value must be an array. Support multiple values /// public static BsonValue BETWEEN(Collation collation, BsonValue left, BsonValue right) { if (!right.IsArray) throw new InvalidOperationException("BETWEEN expression need an array with 2 values"); var arr = right.AsArray; if (arr.Count != 2) throw new InvalidOperationException("BETWEEN expression need an array with 2 values"); var start = arr[0]; var end = arr[1]; //return left >= start && right <= end; return collation.Compare(left, start) >= 0 && collation.Compare(left, end) <= 0; } public static BsonValue BETWEEN_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => BETWEEN(collation, x, right)); public static BsonValue BETWEEN_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => BETWEEN(collation, x, right)); /// /// Test if left are in any value in right side (when right side is an array). If right side is not an array, just implement a simple Equals (=). Returns true or false /// public static BsonValue IN(Collation collation, BsonValue left, BsonValue right) { if (right.IsArray) { return right.AsArray.Contains(left, collation); } else { return left == right; } } public static BsonValue IN_ANY(Collation collation, IEnumerable left, BsonValue right) => left.Any(x => IN(collation, x, right)); public static BsonValue IN_ALL(Collation collation, IEnumerable left, BsonValue right) => left.All(x => IN(collation, x, right)); #endregion #region Path Navigation /// /// Returns value from root document (used in parameter). Returns same document if name are empty /// public static BsonValue PARAMETER_PATH(BsonDocument doc, string name) { if (string.IsNullOrEmpty(name)) { return doc; } if (doc.TryGetValue(name, out BsonValue item)) { return item; } else { return BsonValue.Null; } } /// /// Return a value from a value as document. If has no name, just return values ($). If value are not a document, do not return anything /// public static BsonValue MEMBER_PATH(BsonValue value, string name) { // if value is null is because there is no "current document", only "all documents" // SELECT COUNT(*), $.pageID FROM $page_list IS invalid! if (value == null) { throw new LiteException(0, $"Field '{name}' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause."); } if (string.IsNullOrEmpty(name)) { return value; } else if (value.IsDocument) { var doc = value.AsDocument; if (doc.TryGetValue(name, out BsonValue item)) { return item; } } return BsonValue.Null; } #endregion #region Array Index/Filter /// /// Returns a single value from array according index or expression parameter /// public static BsonValue ARRAY_INDEX(BsonValue value, int index, BsonExpression expr, BsonDocument root, Collation collation, BsonDocument parameters) { if (!value.IsArray) return BsonValue.Null; var arr = value.AsArray; // for expr.Type = parameter, just get value as index (fixed position) if (expr.Type == BsonExpressionType.Parameter) { // get fixed position based on parameter value (must return int value) var indexValue = expr.ExecuteScalar(root, collation); if (!indexValue.IsNumber) throw new LiteException(0, "Parameter expression must return number when called inside an array"); index = indexValue.AsInt32; } var idx = index < 0 ? arr.Count + index : index; if (arr.Count > idx) { return arr[idx]; } return BsonValue.Null; } /// /// Returns all values from array according filter expression or all values (index = MaxValue) /// public static IEnumerable ARRAY_FILTER(BsonValue value, int index, BsonExpression filterExpr, BsonDocument root, Collation collation, BsonDocument parameters) { if (!value.IsArray) yield break; var arr = value.AsArray; // [*] - index are all values if (index == int.MaxValue) { foreach (var item in arr) { yield return item; } } // [] - index are an expression else { foreach (var item in arr) { // execute for each child value and except a first bool value (returns if true) var c = filterExpr.ExecuteScalar(new BsonDocument[] { root }, root, item, collation); if (c.IsBoolean && c.AsBoolean == true) { yield return item; } } } } #endregion #region Object Creation /// /// Create multi documents based on key-value pairs on parameters. DOCUMENT('_id', 1) /// public static BsonValue DOCUMENT_INIT(string[] keys, BsonValue[] values) { ENSURE(keys.Length == values.Length, "both keys/value must contains same length"); // test for special JsonEx data types (date, numberLong, ...) if (keys.Length == 1 && keys[0][0] == '$' && values[0].IsString) { switch (keys[0]) { case "$binary": return BsonExpressionMethods.BINARY(values[0]); case "$oid": return BsonExpressionMethods.OBJECTID(values[0]); case "$guid": return BsonExpressionMethods.GUID(values[0]); case "$date": return BsonExpressionMethods.DATE(Collation.Binary, values[0]); case "$numberLong": return BsonExpressionMethods.LONG(values[0]); case "$numberDecimal": return BsonExpressionMethods.DECIMAL(Collation.Binary, values[0]); case "$minValue": return BsonExpressionMethods.MINVALUE(); case "$maxValue": return BsonExpressionMethods.MAXVALUE(); } } var doc = new BsonDocument(); for (var i = 0; i < keys.Length; i++) { doc[keys[i]] = values[i]; } return doc; } /// /// Return an array from list of values. Support multiple values but returns a single value /// public static BsonValue ARRAY_INIT(BsonValue[] values) { return new BsonArray(values); } #endregion } } ================================================ FILE: LiteDB/Document/Expression/Parser/BsonExpressionParser.cs ================================================ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal enum BsonExpressionParserMode { Full, Single, SelectDocument, UpdateDocument } /// /// Compile and execute simple expressions using BsonDocuments. Used in indexes and updates operations. See https://github.com/mbdavid/LiteDB/wiki/Expressions /// internal class BsonExpressionParser { #region Operators quick access private static MethodInfo M(string s) => typeof(BsonExpressionOperators).GetMethod(s); /// /// Operation definition by methods with defined expression type (operators are in precedence order) /// private static readonly Dictionary> _operators = new Dictionary> { // arithmetic ["%"] = Tuple.Create("%", M("MOD"), BsonExpressionType.Modulo), ["/"] = Tuple.Create("/", M("DIVIDE"), BsonExpressionType.Divide), ["*"] = Tuple.Create("*", M("MULTIPLY"), BsonExpressionType.Multiply), ["+"] = Tuple.Create("+", M("ADD"), BsonExpressionType.Add), ["-"] = Tuple.Create("-", M("MINUS"), BsonExpressionType.Subtract), // predicate ["LIKE"] = Tuple.Create(" LIKE ", M("LIKE"), BsonExpressionType.Like), ["BETWEEN"] = Tuple.Create(" BETWEEN ", M("BETWEEN"), BsonExpressionType.Between), ["IN"] = Tuple.Create(" IN ", M("IN"), BsonExpressionType.In), [">"] = Tuple.Create(">", M("GT"), BsonExpressionType.GreaterThan), [">="] = Tuple.Create(">=", M("GTE"), BsonExpressionType.GreaterThanOrEqual), ["<"] = Tuple.Create("<", M("LT"), BsonExpressionType.LessThan), ["<="] = Tuple.Create("<=", M("LTE"), BsonExpressionType.LessThanOrEqual), ["!="] = Tuple.Create("!=", M("NEQ"), BsonExpressionType.NotEqual), ["="] = Tuple.Create("=", M("EQ"), BsonExpressionType.Equal), ["ANY LIKE"] = Tuple.Create(" ANY LIKE ", M("LIKE_ANY"), BsonExpressionType.Like), ["ANY BETWEEN"] = Tuple.Create(" ANY BETWEEN ", M("BETWEEN_ANY"), BsonExpressionType.Between), ["ANY IN"] = Tuple.Create(" ANY IN ", M("IN_ANY"), BsonExpressionType.In), ["ANY >"] = Tuple.Create(" ANY>", M("GT_ANY"), BsonExpressionType.GreaterThan), ["ANY >="] = Tuple.Create(" ANY>=", M("GTE_ANY"), BsonExpressionType.GreaterThanOrEqual), ["ANY <"] = Tuple.Create(" ANY<", M("LT_ANY"), BsonExpressionType.LessThan), ["ANY <="] = Tuple.Create(" ANY<=", M("LTE_ANY"), BsonExpressionType.LessThanOrEqual), ["ANY !="] = Tuple.Create(" ANY!=", M("NEQ_ANY"), BsonExpressionType.NotEqual), ["ANY ="] = Tuple.Create(" ANY=", M("EQ_ANY"), BsonExpressionType.Equal), ["ALL LIKE"] = Tuple.Create(" ALL LIKE ", M("LIKE_ALL"), BsonExpressionType.Like), ["ALL BETWEEN"] = Tuple.Create(" ALL BETWEEN ", M("BETWEEN_ALL"), BsonExpressionType.Between), ["ALL IN"] = Tuple.Create(" ALL IN ", M("IN_ALL"), BsonExpressionType.In), ["ALL >"] = Tuple.Create(" ALL>", M("GT_ALL"), BsonExpressionType.GreaterThan), ["ALL >="] = Tuple.Create(" ALL>=", M("GTE_ALL"), BsonExpressionType.GreaterThanOrEqual), ["ALL <"] = Tuple.Create(" ALL<", M("LT_ALL"), BsonExpressionType.LessThan), ["ALL <="] = Tuple.Create(" ALL<=", M("LTE_ALL"), BsonExpressionType.LessThanOrEqual), ["ALL !="] = Tuple.Create(" ALL!=", M("NEQ_ALL"), BsonExpressionType.NotEqual), ["ALL ="] = Tuple.Create(" ALL=", M("EQ_ALL"), BsonExpressionType.Equal), // logic (will use Expression.AndAlso|OrElse) ["AND"] = Tuple.Create(" AND ", (MethodInfo)null, BsonExpressionType.And), ["OR"] = Tuple.Create(" OR ", (MethodInfo)null, BsonExpressionType.Or) }; private static readonly MethodInfo _parameterPathMethod = M("PARAMETER_PATH"); private static readonly MethodInfo _memberPathMethod = M("MEMBER_PATH"); private static readonly MethodInfo _arrayIndexMethod = M("ARRAY_INDEX"); private static readonly MethodInfo _arrayFilterMethod = M("ARRAY_FILTER"); private static readonly MethodInfo _documentInitMethod = M("DOCUMENT_INIT"); private static readonly MethodInfo _arrayInitMethod = M("ARRAY_INIT"); private static readonly MethodInfo _itemsMethod = typeof(BsonExpressionMethods).GetMethod("ITEMS"); private static readonly MethodInfo _arrayMethod = typeof(BsonExpressionMethods).GetMethod("ARRAY"); #endregion /// /// Start parse string into linq expression. Read path, function or base type bson values (int, double, bool, string) /// public static BsonExpression ParseFullExpression(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { var first = ParseSingleExpression(tokenizer, context, parameters, scope); var values = new List { first }; var ops = new List(); // read all blocks and operation first while (!tokenizer.EOF) { // read operator between expressions var op = ReadOperant(tokenizer); if (op == null) break; var expr = ParseSingleExpression(tokenizer, context, parameters, scope); // special BETWEEN "AND" read if (op.EndsWith("BETWEEN", StringComparison.OrdinalIgnoreCase)) { var and = tokenizer.ReadToken(true).Expect("AND"); var expr2 = ParseSingleExpression(tokenizer, context, parameters, scope); // convert expr and expr2 into an array with 2 values expr = NewArray(expr, expr2); } values.Add(expr); ops.Add(op.ToUpperInvariant()); } var order = 0; // now, process operator in correct order while (values.Count >= 2) { var op = _operators.ElementAt(order); var n = ops.IndexOf(op.Key); if (n == -1) { order++; } else { // get left/right values to execute operator var left = values.ElementAt(n); var right = values.ElementAt(n + 1); var src = op.Value.Item1; var method = op.Value.Item2; var type = op.Value.Item3; // test left/right scalar var isLeftEnum = op.Key.StartsWith("ALL") || op.Key.StartsWith("ANY"); if (isLeftEnum && left.IsScalar) left = ConvertToEnumerable(left); //if (isLeftEnum && left.IsScalar) throw new LiteException(0, $"Left expression `{left.Source}` must return multiples values"); if (!isLeftEnum && !left.IsScalar) throw new LiteException(0, $"Left expression `{left.Source}` returns more than one result. Try use ANY or ALL before operant."); if (!isLeftEnum && !right.IsScalar) throw new LiteException(0, $"Left expression `{right.Source}` must return a single value"); if (right.IsScalar == false) throw new LiteException(0, $"Right expression `{right.Source}` must return a single value"); BsonExpression result; // when operation is AND/OR, use AndAlso|OrElse if (type == BsonExpressionType.And || type == BsonExpressionType.Or) { result = CreateLogicExpression(type, left, right); } else { // method call parameters var args = new List(); if (method?.GetParameters().FirstOrDefault()?.ParameterType == typeof(Collation)) { args.Add(context.Collation); } args.Add(left.Expression); args.Add(right.Expression); // process result in a single value result = new BsonExpression { Type = type, Parameters = parameters, IsImmutable = left.IsImmutable && right.IsImmutable, UseSource = left.UseSource || right.UseSource, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(left.Fields).AddRange(right.Fields), Expression = Expression.Call(method, args.ToArray()), Left = left, Right = right, Source = left.Source + src + right.Source }; } // remove left+right and insert result values.Insert(n, result); values.RemoveRange(n + 1, 2); // remove operation ops.RemoveAt(n); } } return values.Single(); } /// /// Start parse string into linq expression. Read path, function or base type bson values (int, double, bool, string) /// public static BsonExpression ParseSingleExpression(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { // read next token and test with all expression parts var token = tokenizer.ReadToken(); return TryParseDouble(tokenizer, parameters) ?? TryParseInt(tokenizer, parameters) ?? TryParseBool(tokenizer, parameters) ?? TryParseNull(tokenizer, parameters) ?? TryParseString(tokenizer, parameters) ?? TryParseSource(tokenizer, context, parameters, scope) ?? TryParseDocument(tokenizer, context, parameters, scope) ?? TryParseArray(tokenizer, context, parameters, scope) ?? TryParseParameter(tokenizer, context, parameters, scope) ?? TryParseInnerExpression(tokenizer, context, parameters, scope) ?? TryParseFunction(tokenizer, context, parameters, scope) ?? TryParseMethodCall(tokenizer, context, parameters, scope) ?? TryParsePath(tokenizer, context, parameters, scope) ?? throw LiteException.UnexpectedToken(token); } /// /// Parse a document builder syntax used in SELECT statment: {expr0} [AS] [{alias}], {expr1} [AS] [{alias}], ... /// public static BsonExpression ParseSelectDocumentBuilder(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters) { // creating unique field names var fields = new List>(); var names = new HashSet(); var counter = 1; // define when next token means finish reading document builder bool stop(Token t) => t.Is("FROM") || t.Is("INTO") || t.Type == TokenType.EOF || t.Type == TokenType.SemiColon; void Add(string alias, BsonExpression expr) { if (names.Contains(alias)) alias += counter++; names.Add(alias); if (!expr.IsScalar) expr = ConvertToArray(expr); fields.Add(new KeyValuePair(alias, expr)); }; while (true) { var expr = ParseFullExpression(tokenizer, context, parameters, DocumentScope.Root); var next = tokenizer.LookAhead(); // finish reading if (stop(next)) { Add(expr.DefaultFieldName(), expr); break; } // field with no alias if (next.Type == TokenType.Comma) { tokenizer.ReadToken(); // consume , Add(expr.DefaultFieldName(), expr); } // using alias else { if (next.Is("AS")) { tokenizer.ReadToken(); // consume "AS" } var alias = tokenizer.ReadToken().Expect(TokenType.Word); Add(alias.Value, expr); // go ahead to next token to see if last field next = tokenizer.LookAhead(); if (stop(next)) { break; } // consume , tokenizer.ReadToken().Expect(TokenType.Comma); } } var first = fields[0].Value; if (fields.Count == 1) { // if just $ return empty BsonExpression if (first.Type == BsonExpressionType.Path && first.Source == "$") return BsonExpression.Root; // if single field already a document if (fields.Count == 1 && first.Type == BsonExpressionType.Document) return first; // special case: EXTEND method also returns only a document if (fields.Count == 1 && first.Type == BsonExpressionType.Call && first.Source.StartsWith("EXTEND")) return first; } var arrKeys = Expression.NewArrayInit(typeof(string), fields.Select(x => Expression.Constant(x.Key)).ToArray()); var arrValues = Expression.NewArrayInit(typeof(BsonValue), fields.Select(x => x.Value.Expression).ToArray()); return new BsonExpression { Type = BsonExpressionType.Document, Parameters = parameters, IsImmutable = fields.All(x => x.Value.IsImmutable), UseSource = fields.Any(x => x.Value.UseSource), IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(fields.SelectMany(x => x.Value.Fields)), Expression = Expression.Call(_documentInitMethod, new Expression[] { arrKeys, arrValues }), Source = "{" + string.Join(",", fields.Select(x => x.Key + ":" + x.Value.Source)) + "}" }; } /// /// Parse a document builder syntax used in UPDATE statment: /// {key0} = {expr0}, .... will be converted into { key: [expr], ... } /// {key: value} ... return return a new document /// public static BsonExpression ParseUpdateDocumentBuilder(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters) { var next = tokenizer.LookAhead(); // if starts with { just return a normal document expression if (next.Type == TokenType.OpenBrace) { tokenizer.ReadToken(); // consume { return TryParseDocument(tokenizer, context, parameters, DocumentScope.Root); } var keys = new List(); var values = new List(); var src = new StringBuilder(); var isImmutable = true; var useSource = false; var fields = new HashSet(StringComparer.OrdinalIgnoreCase); src.Append("{"); while (!tokenizer.CheckEOF()) { var key = ReadKey(tokenizer, src); tokenizer.ReadToken().Expect(TokenType.Equals); src.Append(":"); var value = ParseFullExpression(tokenizer, context, parameters, DocumentScope.Root); if (!value.IsScalar) value = ConvertToArray(value); // update isImmutable only when came false if (value.IsImmutable == false) isImmutable = false; if (value.UseSource) useSource = true; fields.AddRange(value.Fields); // add key and value to parameter list (as an expression) keys.Add(Expression.Constant(key)); values.Add(value.Expression); src.Append(value.Source); // read , if (tokenizer.LookAhead().Type == TokenType.Comma) { src.Append(tokenizer.ReadToken().Value); continue; } break; } src.Append("}"); var arrKeys = Expression.NewArrayInit(typeof(string), keys.ToArray()); var arrValues = Expression.NewArrayInit(typeof(BsonValue), values.ToArray()); // create linq expression for "{ doc }" var docExpr = Expression.Call(_documentInitMethod, new Expression[] { arrKeys, arrValues }); return new BsonExpression { Type = BsonExpressionType.Document, Parameters = parameters, IsImmutable = isImmutable, UseSource = useSource, IsScalar = true, Fields = fields, Expression = docExpr, Source = src.ToString() }; } #region Constants /// /// Try parse double number - return null if not double token /// private static BsonExpression TryParseDouble(Tokenizer tokenizer, BsonDocument parameters) { string value = null; if (tokenizer.Current.Type == TokenType.Double) { value = tokenizer.Current.Value; } else if (tokenizer.Current.Type == TokenType.Minus) { var ahead = tokenizer.LookAhead(false); if (ahead.Type == TokenType.Double) { value = "-" + tokenizer.ReadToken().Value; } } if (value != null) { var number = Convert.ToDouble(value, CultureInfo.InvariantCulture.NumberFormat); var constant = Expression.Constant(new BsonValue(number)); return new BsonExpression { Type = BsonExpressionType.Double, Parameters = parameters, IsImmutable = true, UseSource = false, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase), Expression = constant, Source = number.ToString("0.0########", CultureInfo.InvariantCulture.NumberFormat) }; } return null; } /// /// Try parse int number - return null if not int token /// private static BsonExpression TryParseInt(Tokenizer tokenizer, BsonDocument parameters) { string value = null; if (tokenizer.Current.Type == TokenType.Int) { value = tokenizer.Current.Value; } else if (tokenizer.Current.Type == TokenType.Minus) { var ahead = tokenizer.LookAhead(false); if (ahead.Type == TokenType.Int) { value = "-" + tokenizer.ReadToken().Value; } } if (value != null) { var isInt32 = Int32.TryParse(value, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out var i32); if (isInt32) { var constant32 = Expression.Constant(new BsonValue(i32)); return new BsonExpression { Type = BsonExpressionType.Int, Parameters = parameters, IsImmutable = true, UseSource = false, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase), Expression = constant32, Source = i32.ToString(CultureInfo.InvariantCulture.NumberFormat) }; } var i64 = Int64.Parse(value, NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat); var constant64 = Expression.Constant(new BsonValue(i64)); return new BsonExpression { Type = BsonExpressionType.Int, Parameters = parameters, IsImmutable = true, UseSource = false, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase), Expression = constant64, Source = i64.ToString(CultureInfo.InvariantCulture.NumberFormat) }; } return null; } /// /// Try parse bool - return null if not bool token /// private static BsonExpression TryParseBool(Tokenizer tokenizer, BsonDocument parameters) { if (tokenizer.Current.Type == TokenType.Word && (tokenizer.Current.Is("true") || tokenizer.Current.Is("false"))) { var boolean = Convert.ToBoolean(tokenizer.Current.Value); var constant = Expression.Constant(new BsonValue(boolean)); return new BsonExpression { Type = BsonExpressionType.Boolean, Parameters = parameters, IsImmutable = true, UseSource = false, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase), Expression = constant, Source = boolean.ToString().ToLower() }; } return null; } /// /// Try parse null constant - return null if not null token /// private static BsonExpression TryParseNull(Tokenizer tokenizer, BsonDocument parameters) { if (tokenizer.Current.Type == TokenType.Word && tokenizer.Current.Is("null")) { var constant = Expression.Constant(BsonValue.Null); return new BsonExpression { Type = BsonExpressionType.Null, Parameters = parameters, IsImmutable = true, UseSource = false, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase), Expression = constant, Source = "null" }; } return null; } /// /// Try parse string with both single/double quote - return null if not string /// private static BsonExpression TryParseString(Tokenizer tokenizer, BsonDocument parameters) { if (tokenizer.Current.Type == TokenType.String) { var bstr = new BsonValue(tokenizer.Current.Value); var constant = Expression.Constant(bstr); return new BsonExpression { Type = BsonExpressionType.String, Parameters = parameters, IsImmutable = true, UseSource = false, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase), Expression = constant, Source = JsonSerializer.Serialize(bstr) }; } return null; } #endregion /// /// Try parse json document - return null if not document token /// private static BsonExpression TryParseDocument(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { if (tokenizer.Current.Type != TokenType.OpenBrace) return null; // read key value var keys = new List(); var values = new List(); var src = new StringBuilder(); var isImmutable = true; var useSource = false; var fields = new HashSet(StringComparer.OrdinalIgnoreCase); src.Append("{"); // test for empty array if (tokenizer.LookAhead().Type == TokenType.CloseBrace) { src.Append(tokenizer.ReadToken().Value); // read } } else { while (!tokenizer.CheckEOF()) { // read simple or complex document key name var innerSrc = new StringBuilder(); // use another builder to re-use in simplified notation var key = ReadKey(tokenizer, innerSrc); src.Append(innerSrc); tokenizer.ReadToken(); // update s.Current src.Append(":"); BsonExpression value; // test normal notation { a: 1 } if (tokenizer.Current.Type == TokenType.Colon) { value = ParseFullExpression(tokenizer, context, parameters, scope); // read next token here (, or }) because simplified version already did tokenizer.ReadToken(); } else { var fname = innerSrc.ToString(); // support for simplified notation { a, b, c } == { a: $.a, b: $.b, c: $.c } value = new BsonExpression { Type = BsonExpressionType.Path, Parameters = parameters, IsImmutable = isImmutable, UseSource = useSource, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(new string[] { key }), Expression = Expression.Call(_memberPathMethod, context.Root, Expression.Constant(key)) as Expression, Source = "$." + (fname.IsWord() ? fname : "[" + fname + "]") }; } // document value must be a scalar value if (!value.IsScalar) value = ConvertToArray(value); // update isImmutable only when came false if (value.IsImmutable == false) isImmutable = false; if (value.UseSource) useSource = true; fields.AddRange(value.Fields); // add key and value to parameter list (as an expression) keys.Add(Expression.Constant(key)); values.Add(value.Expression); // include value source in current source src.Append(value.Source); // test next token for , (continue) or } (break) tokenizer.Current.Expect(TokenType.Comma, TokenType.CloseBrace); src.Append(tokenizer.Current.Value); if (tokenizer.Current.Type == TokenType.Comma) continue; break; } } var arrKeys = Expression.NewArrayInit(typeof(string), keys.ToArray()); var arrValues = Expression.NewArrayInit(typeof(BsonValue), values.ToArray()); return new BsonExpression { Type = BsonExpressionType.Document, Parameters = parameters, IsImmutable = isImmutable, UseSource = useSource, IsScalar = true, Fields = fields, Expression = Expression.Call(_documentInitMethod, new Expression[] { arrKeys, arrValues }), Source = src.ToString() }; } /// /// Try parse source documents (when passed) * - return null if not source token /// private static BsonExpression TryParseSource(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { if (tokenizer.Current.Type != TokenType.Asterisk) return null; var sourceExpr = new BsonExpression { Type = BsonExpressionType.Source, Parameters = parameters, IsImmutable = true, UseSource = true, IsScalar = false, Fields = new HashSet(StringComparer.OrdinalIgnoreCase) { "$" }, Expression = context.Source, Source = "*" }; // checks if next token is "." to shortcut from "*.Name" as "MAP(*, @.Name)" if (tokenizer.LookAhead(false).Type == TokenType.Period) { tokenizer.ReadToken(); // consume . var pathExpr = BsonExpression.ParseAndCompile(tokenizer, BsonExpressionParserMode.Single, parameters, DocumentScope.Source); if (pathExpr == null) throw LiteException.UnexpectedToken(tokenizer.Current); return new BsonExpression { Type = BsonExpressionType.Map, Parameters = parameters, IsImmutable = pathExpr.IsImmutable, UseSource = true, IsScalar = false, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(pathExpr.Fields), Expression = Expression.Call(BsonExpression.GetFunction("MAP"), context.Root, context.Collation, context.Parameters, sourceExpr.Expression, Expression.Constant(pathExpr)), Source = "MAP(*=>" + pathExpr.Source + ")" }; } else { return sourceExpr; } } /// /// Try parse array - return null if not array token /// private static BsonExpression TryParseArray(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { if (tokenizer.Current.Type != TokenType.OpenBracket) return null; var values = new List(); var src = new StringBuilder(); var isImmutable = true; var useSource = false; var fields = new HashSet(StringComparer.OrdinalIgnoreCase); src.Append("["); // test for empty array if (tokenizer.LookAhead().Type == TokenType.CloseBracket) { src.Append(tokenizer.ReadToken().Value); // read ] } else { while (!tokenizer.CheckEOF()) { // read value expression var value = ParseFullExpression(tokenizer, context, parameters, scope); // document value must be a scalar value if (!value.IsScalar) value = ConvertToArray(value); src.Append(value.Source); // update isImmutable only when came false if (value.IsImmutable == false) isImmutable = false; if (value.UseSource) useSource = true; fields.AddRange(value.Fields); // include value source in current source values.Add(value.Expression); var next = tokenizer.ReadToken() .Expect(TokenType.Comma, TokenType.CloseBracket); src.Append(next.Value); if (next.Type == TokenType.Comma) continue; break; } } var arrValues = Expression.NewArrayInit(typeof(BsonValue), values.ToArray()); return new BsonExpression { Type = BsonExpressionType.Array, Parameters = parameters, IsImmutable = isImmutable, UseSource = useSource, IsScalar = true, Fields = fields, Expression = Expression.Call(_arrayInitMethod, arrValues), Source = src.ToString() }; } /// /// Try parse parameter - return null if not parameter token /// private static BsonExpression TryParseParameter(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { if (tokenizer.Current.Type != TokenType.At) return null; var ahead = tokenizer.LookAhead(false); if (ahead.Type == TokenType.Word || ahead.Type == TokenType.Int) { var parameterName = tokenizer.ReadToken(false).Value; var name = Expression.Constant(parameterName); return new BsonExpression { Type = BsonExpressionType.Parameter, Parameters = parameters, IsImmutable = false, UseSource = false, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase), Expression = Expression.Call(_parameterPathMethod, context.Parameters, name), Source = "@" + parameterName }; } else { return null; } } /// /// Try parse inner expression - return null if not bracket token /// private static BsonExpression TryParseInnerExpression(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { if (tokenizer.Current.Type != TokenType.OpenParenthesis) return null; // read a inner expression inside ( and ) var inner = ParseFullExpression(tokenizer, context, parameters, scope); // read close ) tokenizer.ReadToken().Expect(TokenType.CloseParenthesis); return new BsonExpression { Type = inner.Type, Parameters = inner.Parameters, IsImmutable = inner.IsImmutable, UseSource = inner.UseSource, IsScalar = inner.IsScalar, Fields = inner.Fields, Expression = inner.Expression, Left = inner.Left, Right = inner.Right, Source = "(" + inner.Source + ")" }; } /// /// Try parse method call - return null if not method call /// private static BsonExpression TryParseMethodCall(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { var token = tokenizer.Current; if (tokenizer.Current.Type != TokenType.Word) return null; if (tokenizer.LookAhead().Type != TokenType.OpenParenthesis) return null; // read ( tokenizer.ReadToken(); // get static method from this class var pars = new List(); var src = new StringBuilder(); var isImmutable = true; var useSource = false; var fields = new HashSet(StringComparer.OrdinalIgnoreCase); src.Append(token.Value.ToUpperInvariant() + "("); // method call with no parameters if (tokenizer.LookAhead().Type == TokenType.CloseParenthesis) { src.Append(tokenizer.ReadToken().Value); // read ) } else { while (!tokenizer.CheckEOF()) { var parameter = ParseFullExpression(tokenizer, context, parameters, scope); // update isImmutable only when came false if (parameter.IsImmutable == false) isImmutable = false; if (parameter.UseSource) useSource = true; // add fields from each parameters fields.AddRange(parameter.Fields); pars.Add(parameter); // append source string src.Append(parameter.Source); // read , or ) var next = tokenizer.ReadToken() .Expect(TokenType.Comma, TokenType.CloseParenthesis); src.Append(next.Value); if (next.Type == TokenType.Comma) continue; break; } } var method = BsonExpression.GetMethod(token.Value, pars.Count); if (method == null) throw LiteException.UnexpectedToken($"Method '{token.Value.ToUpperInvariant()}' does not exist or contains invalid parameters", token); // test if method are decorated with "Variable" (immutable = false) if (method.GetCustomAttribute() != null) { isImmutable = false; } // method call arguments var args = new List(); if (method.GetParameters().FirstOrDefault()?.ParameterType == typeof(Collation)) { args.Add(context.Collation); } // getting linq expression from BsonExpression for all parameters foreach (var item in method.GetParameters().Where(x => x.ParameterType != typeof(Collation)).Zip(pars, (parameter, expr) => new { parameter, expr })) { if (item.parameter.ParameterType.IsEnumerable() == false && item.expr.IsScalar == false) { // convert enumerable expresion into scalar expression args.Add(ConvertToArray(item.expr).Expression); } else if (item.parameter.ParameterType.IsEnumerable() && item.expr.IsScalar) { // convert scalar expression into enumerable expression args.Add(ConvertToEnumerable(item.expr).Expression); } else { args.Add(item.expr.Expression); } } // special IIF case if (method.Name == "IIF" && pars.Count == 3) return CreateConditionalExpression(pars[0], pars[1], pars[2]); return new BsonExpression { Type = BsonExpressionType.Call, Parameters = parameters, IsImmutable = isImmutable, UseSource = useSource, IsScalar = method.ReturnType.IsEnumerable() == false, Fields = fields, Expression = Expression.Call(method, args.ToArray()), Source = src.ToString() }; } /// /// Parse JSON-Path - return null if not method call /// private static BsonExpression TryParsePath(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { // test $ or @ or WORD if (tokenizer.Current.Type != TokenType.At && tokenizer.Current.Type != TokenType.Dollar && tokenizer.Current.Type != TokenType.Word) return null; var defaultScope = (scope == DocumentScope.Root ? TokenType.Dollar : TokenType.At); if (tokenizer.Current.Type == TokenType.At || tokenizer.Current.Type == TokenType.Dollar) { defaultScope = tokenizer.Current.Type; var ahead = tokenizer.LookAhead(false); if (ahead.Type == TokenType.Period) { tokenizer.ReadToken(); // read . tokenizer.ReadToken(); // read word or [ } } var src = new StringBuilder(); var isImmutable = true; var useSource = false; var isScalar = true; var fields = new HashSet(StringComparer.OrdinalIgnoreCase); src.Append(defaultScope == TokenType.Dollar ? "$" : "@"); // read field name (or "" if root) var field = ReadField(tokenizer, src); var name = Expression.Constant(field); var expr = Expression.Call(_memberPathMethod, defaultScope == TokenType.Dollar ? context.Root : context.Current, name) as Expression; // add as field only if working with root document (or source root) if (defaultScope == TokenType.Dollar || scope == DocumentScope.Source) { fields.Add(field.Length == 0 ? "$" : field); } // parse the rest of path while (!tokenizer.EOF) { var result = ParsePath(tokenizer, expr, context, parameters, fields, ref isImmutable, ref useSource, ref isScalar, src); if (isScalar == false) { expr = result; break; } // filter method must exit if (result == null) break; expr = result; } var pathExpr = new BsonExpression { Type = BsonExpressionType.Path, Parameters = parameters, IsImmutable = isImmutable, UseSource = useSource, IsScalar = isScalar, Fields = fields, Expression = expr, Source = src.ToString() }; // if expr is enumerable and next token is . translate do MAP if (isScalar == false && tokenizer.LookAhead(false).Type == TokenType.Period) { tokenizer.ReadToken(); // consume . var mapExpr = BsonExpression.ParseAndCompile(tokenizer, BsonExpressionParserMode.Single, parameters, DocumentScope.Current); if (mapExpr == null) throw LiteException.UnexpectedToken(tokenizer.Current); return new BsonExpression { Type = BsonExpressionType.Map, Parameters = parameters, IsImmutable = pathExpr.IsImmutable && mapExpr.IsImmutable, UseSource = pathExpr.UseSource || mapExpr.UseSource, IsScalar = false, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(pathExpr.Fields).AddRange(mapExpr.Fields), Expression = Expression.Call(BsonExpression.GetFunction("MAP"), context.Root, context.Collation, context.Parameters, pathExpr.Expression, Expression.Constant(mapExpr)), Source = "MAP(" + pathExpr.Source + "=>" + mapExpr.Source + ")" }; } else { return pathExpr; } } /// /// Implement a JSON-Path like navigation on BsonDocument. Support a simple range of paths /// private static Expression ParsePath(Tokenizer tokenizer, Expression expr, ExpressionContext context, BsonDocument parameters, HashSet fields, ref bool isImmutable, ref bool useSource, ref bool isScalar, StringBuilder src) { var ahead = tokenizer.LookAhead(false); if (ahead.Type == TokenType.Period) { tokenizer.ReadToken(); // read . tokenizer.ReadToken(false); // var field = ReadField(tokenizer, src); var name = Expression.Constant(field); return Expression.Call(_memberPathMethod, expr, name); } else if (ahead.Type == TokenType.OpenBracket) // array { src.Append("["); tokenizer.ReadToken(); // read [ ahead = tokenizer.LookAhead(); // look for "index" or "expression" var index = 0; var inner = new BsonExpression(); var method = _arrayIndexMethod; if (ahead.Type == TokenType.Int) { // fixed index src.Append(tokenizer.ReadToken().Value); index = Convert.ToInt32(tokenizer.Current.Value); } else if (ahead.Type == TokenType.Minus) { // fixed negative index src.Append(tokenizer.ReadToken().Value + tokenizer.ReadToken().Expect(TokenType.Int).Value); index = -Convert.ToInt32(tokenizer.Current.Value); } else if (ahead.Type == TokenType.Asterisk) { // all items * (index = MaxValue) method = _arrayFilterMethod; isScalar = false; index = int.MaxValue; src.Append(tokenizer.ReadToken().Value); } else { // inner expression inner = BsonExpression.ParseAndCompile(tokenizer, BsonExpressionParserMode.Full, parameters, DocumentScope.Current); if (inner == null) throw LiteException.UnexpectedToken(tokenizer.Current); // if array filter is not immutable, update ref (update only when false) if (inner.IsImmutable == false) isImmutable = false; if (inner.UseSource) useSource = true; // if inner expression returns a single parameter, still Scalar // otherwise it's an operand filter expression (enumerable) if (inner.Type != BsonExpressionType.Parameter) { method = _arrayFilterMethod; isScalar = false; } // add inner fields (can contains root call) fields.AddRange(inner.Fields); src.Append(inner.Source); } // read ] tokenizer.ReadToken().Expect(TokenType.CloseBracket); src.Append("]"); return Expression.Call(method, expr, Expression.Constant(index), Expression.Constant(inner), context.Root, context.Collation, context.Parameters); } return null; } /// /// Try parse FUNCTION methods: MAP, FILTER, SORT, ... /// private static BsonExpression TryParseFunction(Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { if (tokenizer.Current.Type != TokenType.Word) return null; if (tokenizer.LookAhead().Type != TokenType.OpenParenthesis) return null; var token = tokenizer.Current.Value.ToUpperInvariant(); switch (token) { case "MAP": return ParseFunction(token, BsonExpressionType.Map, tokenizer, context, parameters, scope); case "FILTER": return ParseFunction(token, BsonExpressionType.Filter, tokenizer, context, parameters, scope); case "SORT": return ParseFunction(token, BsonExpressionType.Sort, tokenizer, context, parameters, scope); } return null; } /// /// Parse expression functions, like MAP, FILTER or SORT. /// MAP(items[*] => @.Name) /// private static BsonExpression ParseFunction(string functionName, BsonExpressionType type, Tokenizer tokenizer, ExpressionContext context, BsonDocument parameters, DocumentScope scope) { // check if next token are ( otherwise returns null (is not a function) if (tokenizer.LookAhead().Type != TokenType.OpenParenthesis) return null; // read ( tokenizer.ReadToken().Expect(TokenType.OpenParenthesis); var left = ParseSingleExpression(tokenizer, context, parameters, scope); // if left is a scalar expression, convert into enumerable expression (avoid to use [*] all the time) if (left.IsScalar) { left = ConvertToEnumerable(left); } var args = new List(); args.Add(context.Root); args.Add(context.Collation); args.Add(context.Parameters); var src = new StringBuilder(functionName + "(" + left.Source); var isImmutable = left.IsImmutable; var useSource = left.UseSource; var fields = new HashSet(StringComparer.OrdinalIgnoreCase); args.Add(left.Expression); fields.AddRange(left.Fields); // read => if (tokenizer.LookAhead().Type == TokenType.Equals) { tokenizer.ReadToken().Expect(TokenType.Equals); tokenizer.ReadToken().Expect(TokenType.Greater); var right = BsonExpression.ParseAndCompile(tokenizer, BsonExpressionParserMode.Full, parameters, left.Type == BsonExpressionType.Source ? DocumentScope.Source : DocumentScope.Current); src.Append("=>" + right.Source); args.Add(Expression.Constant(right)); fields.AddRange(right.Fields); } if (tokenizer.LookAhead().Type != TokenType.CloseParenthesis) { tokenizer.ReadToken().Expect(TokenType.Comma); src.Append(","); // try more parameters , while (!tokenizer.CheckEOF()) { var parameter = ParseFullExpression(tokenizer, context, parameters, scope); // update isImmutable only when came false if (parameter.IsImmutable == false) isImmutable = false; if (parameter.UseSource) useSource = true; args.Add(parameter.Expression); src.Append(parameter.Source); fields.AddRange(parameter.Fields); if (tokenizer.LookAhead().Type == TokenType.Comma) { src.Append(tokenizer.ReadToken().Value); continue; } break; } } // read ) tokenizer.ReadToken().Expect(TokenType.CloseParenthesis); src.Append(")"); var method = BsonExpression.GetFunction(functionName, args.Count - 5); return new BsonExpression { Type = type, Parameters = parameters, IsImmutable = isImmutable, UseSource = useSource, IsScalar = false, Fields = fields, Expression = Expression.Call(method, args.ToArray()), Source = src.ToString() }; } /// /// Create an array expression with 2 values (used only in BETWEEN statement) /// private static BsonExpression NewArray(BsonExpression item0, BsonExpression item1) { var values = new Expression[] { item0.Expression, item1.Expression }; // both values must be scalar expressions if (item0.IsScalar == false) throw new LiteException(0, $"Expression `{item0.Source}` must be a scalar expression"); if (item1.IsScalar == false) throw new LiteException(0, $"Expression `{item0.Source}` must be a scalar expression"); var arrValues = Expression.NewArrayInit(typeof(BsonValue), values.ToArray()); return new BsonExpression { Type = BsonExpressionType.Array, Parameters = item0.Parameters, // should be == item1.Parameters IsImmutable = item0.IsImmutable && item1.IsImmutable, UseSource = item0.UseSource || item1.UseSource, IsScalar = true, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(item0.Fields).AddRange(item1.Fields), Expression = Expression.Call(_arrayInitMethod, new Expression[] { arrValues }), Source = item0.Source + " AND " + item1.Source }; } /// /// Get field from simple \w regex or ['comp-lex'] - also, add into source. Can read empty field (root) /// private static string ReadField(Tokenizer tokenizer, StringBuilder source) { var field = ""; // if field are complex if (tokenizer.Current.Type == TokenType.OpenBracket) { field = tokenizer.ReadToken().Expect(TokenType.String).Value; tokenizer.ReadToken().Expect(TokenType.CloseBracket); } else if (tokenizer.Current.Type == TokenType.Word) { field = tokenizer.Current.Value; } if (field.Length > 0) { source.Append("."); // add bracket in result only if is complex type if (field.IsWord()) { source.Append(field); } else { source.Append("["); JsonSerializer.Serialize(field, source); source.Append("]"); } } return field; } /// /// Read key in document definition with single word or "comp-lex" /// public static string ReadKey(Tokenizer tokenizer, StringBuilder source) { var token = tokenizer.ReadToken(); var key = ""; if (token.Type == TokenType.String) { key = token.Value; } else { key = token.Expect(TokenType.Word, TokenType.Int).Value; } if (key.IsWord()) { source.Append(key); } else { JsonSerializer.Serialize(key, source); } return key; } /// /// Read next token as Operant with ANY|ALL keyword before - returns null if next token are not an operant /// private static string ReadOperant(Tokenizer tokenizer) { var token = tokenizer.LookAhead(true); if (token.IsOperand) { tokenizer.ReadToken(); // consume operant return token.Value; } if (token.Is("ALL") || token.Is("ANY")) { var key = token.Value.ToUpperInvariant(); tokenizer.ReadToken(); // consume operant token = tokenizer.ReadToken(); if (token.IsOperand == false) throw LiteException.UnexpectedToken("Expected valid operand", token); return key + " " + token.Value; } return null; } /// /// Convert scalar expression into enumerable expression using ITEMS(...) method /// Append [*] to path or ITEMS(..) in all others /// private static BsonExpression ConvertToEnumerable(BsonExpression expr) { var src = expr.Type == BsonExpressionType.Path ? expr.Source + "[*]" : "ITEMS(" + expr.Source + ")"; var exprType = expr.Type == BsonExpressionType.Path ? BsonExpressionType.Path : BsonExpressionType.Call; return new BsonExpression { Type = exprType, Parameters = expr.Parameters, IsImmutable = expr.IsImmutable, UseSource = expr.UseSource, IsScalar = false, Fields = expr.Fields, Expression = Expression.Call(_itemsMethod, expr.Expression), Source = src }; } /// /// Convert enumerable expression into array using ARRAY(...) method /// private static BsonExpression ConvertToArray(BsonExpression expr) { return new BsonExpression { Type = BsonExpressionType.Call, Parameters = expr.Parameters, IsImmutable = expr.IsImmutable, UseSource = expr.UseSource, IsScalar = true, Fields = expr.Fields, Expression = Expression.Call(_arrayMethod, expr.Expression), Source = "ARRAY(" + expr.Source + ")" }; } /// /// Create new logic (AND/OR) expression based in 2 expressions /// internal static BsonExpression CreateLogicExpression(BsonExpressionType type, BsonExpression left, BsonExpression right) { // convert BsonValue into Boolean var boolLeft = Expression.Property(left.Expression, typeof(BsonValue), "AsBoolean"); var boolRight = Expression.Property(right.Expression, typeof(BsonValue), "AsBoolean"); var expr = type == BsonExpressionType.And ? Expression.AndAlso(boolLeft, boolRight) : Expression.OrElse(boolLeft, boolRight); // and convert back Boolean to BsonValue var ctor = typeof(BsonValue) .GetConstructors() .First(x => x.GetParameters().FirstOrDefault()?.ParameterType == typeof(bool)); // create new binary expression based in 2 other expressions var result = new BsonExpression { Type = type, Parameters = left.Parameters, // should be == right.Parameters IsImmutable = left.IsImmutable && right.IsImmutable, UseSource = left.UseSource || right.UseSource, IsScalar = left.IsScalar && right.IsScalar, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(left.Fields).AddRange(right.Fields), Expression = Expression.New(ctor, expr), Left = left, Right = right, Source = left.Source + " " + (type.ToString().ToUpperInvariant()) + " " + right.Source }; return result; } /// /// Create new conditional (IIF) expression. Execute expression only if True or False value /// internal static BsonExpression CreateConditionalExpression(BsonExpression test, BsonExpression ifTrue, BsonExpression ifFalse) { // convert BsonValue into Boolean var boolTest = Expression.Property(test.Expression, typeof(BsonValue), "AsBoolean"); var expr = Expression.Condition(boolTest, ifTrue.Expression, ifFalse.Expression); // create new binary expression based in 2 other expressions var result = new BsonExpression { Type = BsonExpressionType.Call, // there is not specific Conditional Parameters = test.Parameters, // should be == ifTrue|ifFalse parameters IsImmutable = test.IsImmutable && ifTrue.IsImmutable || ifFalse.IsImmutable, UseSource = test.UseSource || ifTrue.UseSource || ifFalse.UseSource, IsScalar = test.IsScalar && ifTrue.IsScalar && ifFalse.IsScalar, Fields = new HashSet(StringComparer.OrdinalIgnoreCase).AddRange(test.Fields).AddRange(ifTrue.Fields).AddRange(ifFalse.Fields), Expression = expr, Source = "IIF(" + test.Source + "," + ifTrue.Source + "," + ifFalse.Source + ")" }; return result; } } } ================================================ FILE: LiteDB/Document/Expression/Parser/BsonExpressionType.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { public enum BsonExpressionType : byte { Double = 1, Int = 2, String = 3, Boolean = 4, Null = 5, Array = 6, Document = 7, Parameter = 8, Call = 9, Path = 10, Modulo = 11, Add = 12, Subtract = 13, Multiply = 14, Divide = 15, Equal = 16, Like = 17, Between = 18, GreaterThan = 19, GreaterThanOrEqual = 20, LessThan = 21, LessThanOrEqual = 22, NotEqual = 23, In = 24, Or = 25, And = 26, Map = 27, Filter = 28, Sort = 29, Source = 30 } } ================================================ FILE: LiteDB/Document/Expression/Parser/DocumentScope.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal enum DocumentScope { Source, Root, Current } } ================================================ FILE: LiteDB/Document/Expression/Parser/ExpressionContext.cs ================================================ using LiteDB.Engine; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class ExpressionContext { public ExpressionContext() { this.Source = Expression.Parameter(typeof(IEnumerable), "source"); this.Root = Expression.Parameter(typeof(BsonDocument), "root"); this.Current = Expression.Parameter(typeof(BsonValue), "current"); this.Collation = Expression.Parameter(typeof(Collation), "collation"); this.Parameters = Expression.Parameter(typeof(BsonDocument), "parameters"); } public ParameterExpression Source { get; } public ParameterExpression Root { get; } public ParameterExpression Current { get; } public ParameterExpression Collation { get; } public ParameterExpression Parameters { get; } } } ================================================ FILE: LiteDB/Document/Json/JsonReader.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using static LiteDB.Constants; namespace LiteDB { /// /// A class that read a json string using a tokenizer (without regex) /// public class JsonReader { private readonly static IFormatProvider _numberFormat = CultureInfo.InvariantCulture.NumberFormat; private readonly Tokenizer _tokenizer = null; public long Position { get { return _tokenizer.Position; } } public JsonReader(TextReader reader) { if (reader == null) throw new ArgumentNullException(nameof(reader)); _tokenizer = new Tokenizer(reader); } internal JsonReader(Tokenizer tokenizer) { _tokenizer = tokenizer ?? throw new ArgumentNullException(nameof(tokenizer)); } public BsonValue Deserialize() { var token = _tokenizer.ReadToken(); if (token.Type == TokenType.EOF) return BsonValue.Null; var value = this.ReadValue(token); return value; } public IEnumerable DeserializeArray() { var token = _tokenizer.ReadToken(); if (token.Type == TokenType.EOF) yield break; token.Expect(TokenType.OpenBracket); token = _tokenizer.ReadToken(); while (token.Type != TokenType.CloseBracket) { yield return this.ReadValue(token); token = _tokenizer.ReadToken(); if (token.Type == TokenType.Comma) { token = _tokenizer.ReadToken(); } } token.Expect(TokenType.CloseBracket); yield break; } internal BsonValue ReadValue(Token token) { var value = token.Value; switch (token.Type) { case TokenType.String: return value; case TokenType.OpenBrace: return this.ReadObject(); case TokenType.OpenBracket: return this.ReadArray(); case TokenType.Minus: // read next token (must be a number) var number = _tokenizer.ReadToken(false).Expect(TokenType.Int, TokenType.Double); value = '-' + number.Value; if (number.Type == TokenType.Int) goto case TokenType.Int; else if (number.Type == TokenType.Double) goto case TokenType.Double; else break; case TokenType.Int: if (Int32.TryParse(value, NumberStyles.Any, _numberFormat, out int result)) return new BsonValue(result); else return new BsonValue(Int64.Parse(value, NumberStyles.Any, _numberFormat)); case TokenType.Double: return new BsonValue(Convert.ToDouble(value, _numberFormat)); case TokenType.Word: switch (value.ToLower()) { case "null": return BsonValue.Null; case "true": return true; case "false": return false; default: throw LiteException.UnexpectedToken(token); } } throw LiteException.UnexpectedToken(token); } private BsonValue ReadObject() { var obj = new BsonDocument(); var token = _tokenizer.ReadToken(); // read "" while (token.Type != TokenType.CloseBrace) { token.Expect(TokenType.String, TokenType.Word); var key = token.Value; token = _tokenizer.ReadToken(); // read ":" token.Expect(TokenType.Colon); token = _tokenizer.ReadToken(); // read "" // check if not a special data type - only if is first attribute if (key[0] == '$' && obj.Count == 0) { var val = this.ReadExtendedDataType(key, token.Value); // if val is null then it's not a extended data type - it's just a object with $ attribute if (!val.IsNull) return val; } obj[key] = this.ReadValue(token); // read "," or "}" token = _tokenizer.ReadToken(); if (token.Type == TokenType.Comma) { token = _tokenizer.ReadToken(); // read "" } } return obj; } private BsonArray ReadArray() { var arr = new BsonArray(); var token = _tokenizer.ReadToken(); while (token.Type != TokenType.CloseBracket) { var value = this.ReadValue(token); arr.Add(value); token = _tokenizer.ReadToken(); if (token.Type == TokenType.Comma) { token = _tokenizer.ReadToken(); } } return arr; } private BsonValue ReadExtendedDataType(string key, string value) { BsonValue val; switch (key) { case "$binary": val = new BsonValue(Convert.FromBase64String(value)); break; case "$oid": val = new BsonValue(new ObjectId(value)); break; case "$guid": val = new BsonValue(new Guid(value)); break; case "$date": val = new BsonValue(DateTime.Parse(value).ToLocalTime()); break; case "$numberLong": val = new BsonValue(Convert.ToInt64(value, _numberFormat)); break; case "$numberDecimal": val = new BsonValue(Convert.ToDecimal(value, _numberFormat)); break; case "$minValue": val = BsonValue.MinValue; break; case "$maxValue": val = BsonValue.MaxValue; break; default: return BsonValue.Null; // is not a special data type } _tokenizer.ReadToken().Expect(TokenType.CloseBrace); return val; } } } ================================================ FILE: LiteDB/Document/Json/JsonSerializer.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text; using static LiteDB.Constants; namespace LiteDB { /// /// Static class for serialize/deserialize BsonDocuments into json extended format /// public class JsonSerializer { #region Serialize /// /// Json serialize a BsonValue into a String /// public static string Serialize(BsonValue value, bool indent = false) { var sb = new StringBuilder(); Serialize(value, sb, indent); return sb.ToString(); } /// /// Json serialize a BsonValue into a TextWriter /// public static void Serialize(BsonValue value, TextWriter writer, bool indent = false) { var json = new JsonWriter(writer) { Pretty = indent }; json.Serialize(value ?? BsonValue.Null); } /// /// Json serialize a BsonValue into a StringBuilder /// public static void Serialize(BsonValue value, StringBuilder sb, bool indent = false) { using (var writer = new StringWriter(sb)) { var w = new JsonWriter(writer) { Pretty = indent }; w.Serialize(value ?? BsonValue.Null); } } #endregion #region Deserialize /// /// Deserialize a Json string into a BsonValue /// public static BsonValue Deserialize(string json) { if (json == null) throw new ArgumentNullException(nameof(json)); using (var sr = new StringReader(json)) { var reader = new JsonReader(sr); return reader.Deserialize(); } } /// /// Deserialize a Json TextReader into a BsonValue /// public static BsonValue Deserialize(TextReader reader) { if (reader == null) throw new ArgumentNullException(nameof(reader)); var jr = new JsonReader(reader); return jr.Deserialize(); } /// /// Deserialize a json array as an IEnumerable of BsonValue /// public static IEnumerable DeserializeArray(string json) { if (json == null) throw new ArgumentNullException(nameof(json)); var sr = new StringReader(json); var reader = new JsonReader(sr); return reader.DeserializeArray(); } /// /// Deserialize a json array as an IEnumerable of BsonValue reading on demand TextReader /// public static IEnumerable DeserializeArray(TextReader reader) { if (reader == null) throw new ArgumentNullException(nameof(reader)); var jr = new JsonReader(reader); return jr.DeserializeArray(); } #endregion } } ================================================ FILE: LiteDB/Document/Json/JsonWriter.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB { public class JsonWriter { private readonly static IFormatProvider _numberFormat = CultureInfo.InvariantCulture.NumberFormat; private readonly TextWriter _writer; private int _indent; private string _spacer = ""; /// /// Get/Set indent size /// public int Indent { get; set; } = 4; /// /// Get/Set if writer must print pretty (with new line/indent) /// public bool Pretty { get; set; } = false; public JsonWriter(TextWriter writer) { _writer = writer; } /// /// Serialize value into text writer /// public void Serialize(BsonValue value) { _indent = 0; _spacer = this.Pretty ? " " : ""; this.WriteValue(value ?? BsonValue.Null); } private void WriteValue(BsonValue value) { // use direct cast to better performance switch (value.Type) { case BsonType.Null: _writer.Write("null"); break; case BsonType.Array: this.WriteArray(value.AsArray); break; case BsonType.Document: this.WriteObject(value.AsDocument); break; case BsonType.Boolean: _writer.Write(value.AsBoolean.ToString().ToLower()); break; case BsonType.String: this.WriteString(value.AsString); break; case BsonType.Int32: _writer.Write(value.AsInt32.ToString(_numberFormat)); break; case BsonType.Double: var d = value.AsDouble; if (double.IsNaN(d) || double.IsNegativeInfinity(d) || double.IsPositiveInfinity(d)) { _writer.Write("null"); } else { _writer.Write(value.AsDouble.ToString("0.0########", _numberFormat)); } break; case BsonType.Binary: var bytes = value.AsBinary; this.WriteExtendDataType("$binary", Convert.ToBase64String(bytes, 0, bytes.Length)); break; case BsonType.ObjectId: this.WriteExtendDataType("$oid", value.AsObjectId.ToString()); break; case BsonType.Guid: this.WriteExtendDataType("$guid", value.AsGuid.ToString()); break; case BsonType.DateTime: this.WriteExtendDataType("$date", value.AsDateTime.ToUniversalTime().ToString("o")); break; case BsonType.Int64: this.WriteExtendDataType("$numberLong", value.AsInt64.ToString(_numberFormat)); break; case BsonType.Decimal: this.WriteExtendDataType("$numberDecimal", value.AsDecimal.ToString(_numberFormat)); break; case BsonType.MinValue: this.WriteExtendDataType("$minValue", "1"); break; case BsonType.MaxValue: this.WriteExtendDataType("$maxValue", "1"); break; } } private void WriteObject(BsonDocument obj) { var length = obj.Keys.Count(); var hasData = length > 0; this.WriteStartBlock("{", hasData); var index = 0; foreach (var el in obj.GetElements()) { this.WriteKeyValue(el.Key, el.Value, index++ < length - 1); } this.WriteEndBlock("}", hasData); } private void WriteArray(BsonArray arr) { var hasData = arr.Count > 0; this.WriteStartBlock("[", hasData); for (var i = 0; i < arr.Count; i++) { var item = arr[i]; // do not do this tests if is not pretty format - to better performance if (this.Pretty && item != null) { if (!((item.IsDocument && item.AsDocument.Keys.Any()) || (item.IsArray && item.AsArray.Count > 0))) { this.WriteIndent(); } } this.WriteValue(item ?? BsonValue.Null); if (i < arr.Count - 1) { _writer.Write(','); } this.WriteNewLine(); } this.WriteEndBlock("]", hasData); } private void WriteString(string s) { _writer.Write('\"'); int l = s.Length; for (var index = 0; index < l; index++) { var c = s[index]; switch (c) { case '\"': _writer.Write("\\\""); break; case '\\': _writer.Write("\\\\"); break; case '\b': _writer.Write("\\b"); break; case '\f': _writer.Write("\\f"); break; case '\n': _writer.Write("\\n"); break; case '\r': _writer.Write("\\r"); break; case '\t': _writer.Write("\\t"); break; default: switch (CharUnicodeInfo.GetUnicodeCategory(c)) { case UnicodeCategory.UppercaseLetter: case UnicodeCategory.LowercaseLetter: case UnicodeCategory.TitlecaseLetter: case UnicodeCategory.OtherLetter: case UnicodeCategory.DecimalDigitNumber: case UnicodeCategory.LetterNumber: case UnicodeCategory.OtherNumber: case UnicodeCategory.SpaceSeparator: case UnicodeCategory.ConnectorPunctuation: case UnicodeCategory.DashPunctuation: case UnicodeCategory.OpenPunctuation: case UnicodeCategory.ClosePunctuation: case UnicodeCategory.InitialQuotePunctuation: case UnicodeCategory.FinalQuotePunctuation: case UnicodeCategory.OtherPunctuation: case UnicodeCategory.MathSymbol: case UnicodeCategory.CurrencySymbol: case UnicodeCategory.ModifierSymbol: case UnicodeCategory.OtherSymbol: _writer.Write(c); break; default: _writer.Write("\\u"); _writer.Write(((int)c).ToString("x04")); break; } break; } } _writer.Write('\"'); } private void WriteExtendDataType(string type, string value) { // format: { "$type": "string-value" } // no string.Format to better performance _writer.Write("{\""); _writer.Write(type); _writer.Write("\":"); _writer.Write(_spacer); _writer.Write("\""); _writer.Write(value); _writer.Write("\"}"); } private void WriteKeyValue(string key, BsonValue value, bool comma) { this.WriteIndent(); _writer.Write('\"'); _writer.Write(key); _writer.Write("\":"); // do not do this tests if is not pretty format - to better performance if (this.Pretty) { _writer.Write(' '); if (value != null && ((value.IsDocument && value.AsDocument.Keys.Any()) || (value.IsArray && value.AsArray.Count > 0))) { this.WriteNewLine(); } } this.WriteValue(value ?? BsonValue.Null); if (comma) { _writer.Write(','); } this.WriteNewLine(); } private void WriteStartBlock(string str, bool hasData) { if (hasData) { this.WriteIndent(); _writer.Write(str); this.WriteNewLine(); _indent++; } else { _writer.Write(str); } } private void WriteEndBlock(string str, bool hasData) { if (hasData) { _indent--; this.WriteIndent(); _writer.Write(str); } else { _writer.Write(str); } } private void WriteNewLine() { if (this.Pretty) { _writer.WriteLine(); } } private void WriteIndent() { if (this.Pretty) { _writer.Write("".PadRight(_indent * this.Indent, ' ')); } } } } ================================================ FILE: LiteDB/Document/ObjectId.cs ================================================ using System; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Security; using System.Threading; using static LiteDB.Constants; namespace LiteDB { /// /// Represent a 12-bytes BSON type used in document Id /// public class ObjectId : IComparable, IEquatable { /// /// A zero 12-bytes ObjectId /// public static ObjectId Empty => new ObjectId(); #region Properties /// /// Get timestamp /// public int Timestamp { get; } /// /// Get machine number /// public int Machine { get; } /// /// Get pid number /// public short Pid { get; } /// /// Get increment /// public int Increment { get; } /// /// Get creation time /// public DateTime CreationTime { get { return BsonValue.UnixEpoch.AddSeconds(this.Timestamp); } } #endregion #region Ctor /// /// Initializes a new empty instance of the ObjectId class. /// public ObjectId() { this.Timestamp = 0; this.Machine = 0; this.Pid = 0; this.Increment = 0; } /// /// Initializes a new instance of the ObjectId class from ObjectId vars. /// public ObjectId(int timestamp, int machine, short pid, int increment) { this.Timestamp = timestamp; this.Machine = machine; this.Pid = pid; this.Increment = increment; } /// /// Initializes a new instance of ObjectId class from another ObjectId. /// public ObjectId(ObjectId from) { this.Timestamp = from.Timestamp; this.Machine = from.Machine; this.Pid = from.Pid; this.Increment = from.Increment; } /// /// Initializes a new instance of the ObjectId class from hex string. /// public ObjectId(string value) : this(FromHex(value)) { } /// /// Initializes a new instance of the ObjectId class from byte array. /// public ObjectId(byte[] bytes, int startIndex = 0) { if (bytes == null) throw new ArgumentNullException(nameof(bytes)); this.Timestamp = (bytes[startIndex + 0] << 24) + (bytes[startIndex + 1] << 16) + (bytes[startIndex + 2] << 8) + bytes[startIndex + 3]; this.Machine = (bytes[startIndex + 4] << 16) + (bytes[startIndex + 5] << 8) + bytes[startIndex + 6]; this.Pid = (short) ((bytes[startIndex + 7] << 8) + bytes[startIndex + 8]); this.Increment = (bytes[startIndex + 9] << 16) + (bytes[startIndex + 10] << 8) + bytes[startIndex + 11]; } /// /// Convert hex value string in byte array /// private static byte[] FromHex(string value) { if (string.IsNullOrEmpty(value)) throw new ArgumentNullException(nameof(value)); if (value.Length != 24) throw new ArgumentException(string.Format("ObjectId strings should be 24 hex characters, got {0} : \"{1}\"", value.Length, value)); var bytes = new byte[12]; for (var i = 0; i < 24; i += 2) { bytes[i / 2] = Convert.ToByte(value.Substring(i, 2), 16); } return bytes; } #endregion #region Equals/CompareTo/ToString /// /// Checks if this ObjectId is equal to the given object. Returns true /// if the given object is equal to the value of this instance. /// Returns false otherwise. /// public bool Equals(ObjectId other) { return other != null && this.Timestamp == other.Timestamp && this.Machine == other.Machine && this.Pid == other.Pid && this.Increment == other.Increment; } /// /// Determines whether the specified object is equal to this instance. /// public override bool Equals(object other) { return Equals(other as ObjectId); } /// /// Returns a hash code for this instance. /// public override int GetHashCode() { int hash = 17; hash = 37 * hash + this.Timestamp.GetHashCode(); hash = 37 * hash + this.Machine.GetHashCode(); hash = 37 * hash + this.Pid.GetHashCode(); hash = 37 * hash + this.Increment.GetHashCode(); return hash; } /// /// Compares two instances of ObjectId /// public int CompareTo(ObjectId other) { var r = this.Timestamp.CompareTo(other.Timestamp); if (r != 0) return r; r = this.Machine.CompareTo(other.Machine); if (r != 0) return r; r = this.Pid.CompareTo(other.Pid); if (r != 0) return r < 0 ? -1 : 1; return this.Increment.CompareTo(other.Increment); } /// /// Represent ObjectId as 12 bytes array /// public void ToByteArray(byte[] bytes, int startIndex) { bytes[startIndex + 0] = (byte)(this.Timestamp >> 24); bytes[startIndex + 1] = (byte)(this.Timestamp >> 16); bytes[startIndex + 2] = (byte)(this.Timestamp >> 8); bytes[startIndex + 3] = (byte)(this.Timestamp); bytes[startIndex + 4] = (byte)(this.Machine >> 16); bytes[startIndex + 5] = (byte)(this.Machine >> 8); bytes[startIndex + 6] = (byte)(this.Machine); bytes[startIndex + 7] = (byte)(this.Pid >> 8); bytes[startIndex + 8] = (byte)(this.Pid); bytes[startIndex + 9] = (byte)(this.Increment >> 16); bytes[startIndex + 10] = (byte)(this.Increment >> 8); bytes[startIndex + 11] = (byte)(this.Increment); } public byte[] ToByteArray() { var bytes = new byte[12]; this.ToByteArray(bytes, 0); return bytes; } public override string ToString() { return BitConverter.ToString(this.ToByteArray()).Replace("-", "").ToLower(); } #endregion #region Operators public static bool operator ==(ObjectId lhs, ObjectId rhs) { if (lhs is null) return rhs is null; if (rhs is null) return false; // don't check type because sometimes different types can be == return lhs.Equals(rhs); } public static bool operator !=(ObjectId lhs, ObjectId rhs) { return !(lhs == rhs); } public static bool operator >=(ObjectId lhs, ObjectId rhs) { return lhs.CompareTo(rhs) >= 0; } public static bool operator >(ObjectId lhs, ObjectId rhs) { return lhs.CompareTo(rhs) > 0; } public static bool operator <(ObjectId lhs, ObjectId rhs) { return lhs.CompareTo(rhs) < 0; } public static bool operator <=(ObjectId lhs, ObjectId rhs) { return lhs.CompareTo(rhs) <= 0; } #endregion #region Static methods private static readonly int _machine; private static readonly short _pid; private static int _increment; // static constructor static ObjectId() { _machine = (GetMachineHash() + #if HAVE_APP_DOMAIN AppDomain.CurrentDomain.Id #else 10000 // Magic number #endif ) & 0x00ffffff; _increment = (new Random()).Next(); try { _pid = (short)GetCurrentProcessId(); } catch (SecurityException) { _pid = 0; } } [MethodImpl(MethodImplOptions.NoInlining)] private static int GetCurrentProcessId() { #if HAVE_PROCESS return Process.GetCurrentProcess().Id; #else return (new Random()).Next(0, 5000); // Any same number for this process #endif } private static int GetMachineHash() { var hostName = #if HAVE_ENVIRONMENT Environment.MachineName; // use instead of Dns.HostName so it will work offline #else "SOMENAME"; #endif return 0x00ffffff & hostName.GetHashCode(); // use first 3 bytes of hash } /// /// Creates a new ObjectId. /// public static ObjectId NewObjectId() { var timestamp = (long)Math.Floor((DateTime.UtcNow - BsonValue.UnixEpoch).TotalSeconds); var inc = Interlocked.Increment(ref _increment) & 0x00ffffff; return new ObjectId((int)timestamp, _machine, _pid, inc); } #endregion } } ================================================ FILE: LiteDB/Engine/Disk/DiskReader.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Memory file reader - must call Dipose after use to return reader into pool /// This class is not ThreadSafe - must have 1 instance per thread (get instance from DiskService) /// internal class DiskReader : IDisposable { private readonly EngineState _state; private readonly MemoryCache _cache; private readonly StreamPool _dataPool; private readonly StreamPool _logPool; private readonly Lazy _dataStream; private readonly Lazy _logStream; public DiskReader(EngineState state, MemoryCache cache, StreamPool dataPool, StreamPool logPool) { _state = state; _cache = cache; _dataPool = dataPool; _logPool = logPool; _dataStream = new Lazy(() => _dataPool.Rent()); _logStream = new Lazy(() => _logPool.Rent()); } public PageBuffer ReadPage(long position, bool writable, FileOrigin origin) { ENSURE(position % PAGE_SIZE == 0, "invalid page position"); var stream = origin == FileOrigin.Data ? _dataStream.Value : _logStream.Value; var page = writable ? _cache.GetWritablePage(position, origin, (pos, buf) => this.ReadStream(stream, pos, buf)) : _cache.GetReadablePage(position, origin, (pos, buf) => this.ReadStream(stream, pos, buf)); #if DEBUG _state.SimulateDiskReadFail?.Invoke(page); #endif return page; } /// /// Read bytes from stream into buffer slice /// private void ReadStream(Stream stream, long position, BufferSlice buffer) { // can't test "Length" from out-to-date stream // ENSURE(stream.Length <= position - PAGE_SIZE, "can't be read from beyond file length"); stream.Position = position; stream.Read(buffer.Array, buffer.Offset, buffer.Count); DEBUG(buffer.All(0) == false, "check if are not reading out of file length"); } /// /// Request for a empty, writable non-linked page (same as DiskService.NewPage) /// public PageBuffer NewPage() { return _cache.NewPage(); } /// /// When dispose, return stream to pool /// public void Dispose() { if (_dataStream.IsValueCreated) { _dataPool.Return(_dataStream.Value); } if (_logStream.IsValueCreated) { _logPool.Return(_logStream.Value); } } } } ================================================ FILE: LiteDB/Engine/Disk/DiskService.cs ================================================ using System; using System.Buffers; using System.Collections.Generic; using System.IO; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement custom fast/in memory mapped disk access /// [ThreadSafe] /// internal class DiskService : IDisposable { private readonly MemoryCache _cache; private readonly EngineState _state; private IStreamFactory _dataFactory; private readonly IStreamFactory _logFactory; private StreamPool _dataPool; private readonly StreamPool _logPool; private readonly Lazy _writer; private long _dataLength; private long _logLength; private static readonly ArrayPool _bufferPool = ArrayPool.Shared; public DiskService( EngineSettings settings, EngineState state, int[] memorySegmentSizes) { _cache = new MemoryCache(memorySegmentSizes); _state = state; // get new stream factory based on settings _dataFactory = settings.CreateDataFactory(); _logFactory = settings.CreateLogFactory(); // create stream pool _dataPool = new StreamPool(_dataFactory, false); _logPool = new StreamPool(_logFactory, true); // get lazy disk writer (log file) - created only when used _writer = _logPool.Writer; var isNew = _dataFactory.GetLength() == 0L; // create new database if not exist yet if (isNew) { LOG($"creating new database: '{Path.GetFileName(_dataFactory.Name)}'", "DISK"); this.Initialize(_dataPool.Writer.Value, settings.Collation, settings.InitialSize); } // if not readonly, force open writable datafile if (settings.ReadOnly == false) { _ = _dataPool.Writer.Value.CanRead; } // get initial data file length _dataLength = _dataFactory.GetLength() - PAGE_SIZE; // get initial log file length (should be 1 page before) if (_logFactory.Exists()) { _logLength = _logFactory.GetLength() - PAGE_SIZE; } else { _logLength = -PAGE_SIZE; } } /// /// Get memory cache instance /// public MemoryCache Cache => _cache; /// /// Create a new empty database (use synced mode) /// private void Initialize(Stream stream, Collation collation, long initialSize) { var buffer = new PageBuffer(new byte[PAGE_SIZE], 0, 0); var header = new HeaderPage(buffer, 0); // update collation header.Pragmas.Set(Pragmas.COLLATION, (collation ?? Collation.Default).ToString(), false); // update buffer header.UpdateBuffer(); stream.Write(buffer.Array, buffer.Offset, PAGE_SIZE); if (initialSize > 0) { if (stream is AesStream) throw LiteException.InitialSizeCryptoNotSupported(); if (initialSize % PAGE_SIZE != 0) throw LiteException.InvalidInitialSize(); stream.SetLength(initialSize); } stream.FlushToDisk(); } /// /// Get a new instance for read data/log pages. This instance are not thread-safe - must request 1 per thread (used in Transaction) /// public DiskReader GetReader() { return new DiskReader(_state, _cache, _dataPool, _logPool); } /// /// This method calculates the maximum number of items (documents or IndexNodes) that this database can have. /// The result is used to prevent infinite loops in case of problems with pointers /// Each page support max of 255 items. Use 10 pages offset (avoid empty disk) /// public uint MAX_ITEMS_COUNT => (uint)(((_dataLength + _logLength) / PAGE_SIZE) + 10) * byte.MaxValue; /// /// When a page are requested as Writable but not saved in disk, must be discard before release /// public void DiscardDirtyPages(IEnumerable pages) { // only for ROLLBACK action foreach (var page in pages) { // complete discard page and content _cache.DiscardPage(page); } } /// /// Discard pages that contains valid data and was not modified /// public void DiscardCleanPages(IEnumerable pages) { foreach (var page in pages) { // if page was not modified, try move to readable list if (_cache.TryMoveToReadable(page) == false) { // if already in readable list, just discard _cache.DiscardPage(page); } } } /// /// Request for a empty, writable non-linked page. /// public PageBuffer NewPage() { return _cache.NewPage(); } /// /// Write all pages inside log file in a thread safe operation /// public int WriteLogDisk(IEnumerable pages) { var count = 0; var stream = _writer.Value; // do a global write lock - only 1 thread can write on disk at time lock(stream) { foreach (var page in pages) { ENSURE(page.ShareCounter == BUFFER_WRITABLE, "to enqueue page, page must be writable"); // adding this page into file AS new page (at end of file) // must add into cache to be sure that new readers can see this page page.Position = Interlocked.Add(ref _logLength, PAGE_SIZE); // should mark page origin to log because async queue works only for log file // if this page came from data file, must be changed before MoveToReadable page.Origin = FileOrigin.Log; // mark this page as readable and get cached paged to enqueue var readable = _cache.MoveToReadable(page); // set log stream position to page stream.Position = page.Position; #if DEBUG _state.SimulateDiskWriteFail?.Invoke(page); #endif // and write to disk in a sync mode stream.Write(page.Array, page.Offset, PAGE_SIZE); // release page here (no page use after this) page.Release(); count++; } } return count; } /// /// Get file length based on data/log length variables (no direct on disk) /// public long GetFileLength(FileOrigin origin) { if (origin == FileOrigin.Log) { return _logLength + PAGE_SIZE; } else { return _dataLength + PAGE_SIZE; } } /// /// Mark a file with a single signal to next open do auto-rebuild. Used only when closing database (after close files) /// internal void MarkAsInvalidState() { FileHelper.TryExec(60, () => { using (var stream = _dataFactory.GetStream(true, true)) { var buffer = _bufferPool.Rent(PAGE_SIZE); stream.Read(buffer, 0, PAGE_SIZE); buffer[HeaderPage.P_INVALID_DATAFILE_STATE] = 1; stream.Position = 0; stream.Write(buffer, 0, PAGE_SIZE); _bufferPool.Return(buffer, true); } }); } #region Sync Read/Write operations /// /// Read all database pages inside file with no cache using. PageBuffers dont need to be Released /// public IEnumerable ReadFull(FileOrigin origin) { // do not use MemoryCache factory - reuse same buffer array (one page per time) // do not use BufferPool because header page can't be shared (byte[] is used inside page return) var buffer = new byte[PAGE_SIZE]; var pool = origin == FileOrigin.Log ? _logPool : _dataPool; var stream = pool.Rent(); try { // get length before starts (avoid grow during loop) var length = this.GetFileLength(origin); stream.Position = 0; while (stream.Position < length) { var position = stream.Position; var bytesRead = stream.Read(buffer, 0, PAGE_SIZE); ENSURE(bytesRead == PAGE_SIZE, "ReadFull must read PAGE_SIZE bytes [{0}]", bytesRead); yield return new PageBuffer(buffer, 0, 0) { Position = position, Origin = origin, ShareCounter = 0 }; } } finally { pool.Return(stream); } } /// /// Write pages DIRECT in disk. This pages are not cached and are not shared - WORKS FOR DATA FILE ONLY /// public void WriteDataDisk(IEnumerable pages) { var stream = _dataPool.Writer.Value; foreach (var page in pages) { ENSURE(page.ShareCounter == 0, "this page can't be shared to use sync operation - do not use cached pages"); _dataLength = Math.Max(_dataLength, page.Position); stream.Position = page.Position; stream.Write(page.Array, page.Offset, PAGE_SIZE); } stream.FlushToDisk(); } /// /// Set new length for file in sync mode. Queue must be empty before set length /// public void SetLength(long length, FileOrigin origin) { var stream = origin == FileOrigin.Log ? _logPool.Writer : _dataPool.Writer; if (origin == FileOrigin.Log) { Interlocked.Exchange(ref _logLength, length - PAGE_SIZE); } else { Interlocked.Exchange(ref _dataLength, length - PAGE_SIZE); } stream.Value.SetLength(length); } /// /// Get file name (or Stream name) /// public string GetName(FileOrigin origin) { return origin == FileOrigin.Data ? _dataFactory.Name : _logFactory.Name; } #endregion public void Dispose() { // get stream length from writer - is safe because only this instance // can change file size var delete = _logFactory.Exists() && _logPool.Writer.Value.Length == 0; // dispose Stream pools _dataPool.Dispose(); _logPool.Dispose(); if (delete) _logFactory.Delete(); // other disposes _cache.Dispose(); } } } ================================================ FILE: LiteDB/Engine/Disk/MemoryCache.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Manage linear memory segments to avoid re-creating array buffer in heap memory /// Do not share same memory store with different files /// [ThreadSafe] /// internal class MemoryCache : IDisposable { /// /// Contains free ready-to-use pages in memory /// - All pages here MUST have ShareCounter = 0 /// - All pages here MUST have Position = MaxValue /// private readonly ConcurrentQueue _free = new ConcurrentQueue(); /// /// Contains only clean pages (from both data/log file) - support page concurrency use /// - MUST have defined Origin and Position /// - Contains only 1 instance per Position/Origin /// - Contains only pages with ShareCounter >= 0 /// * = 0 - Page is available but is not in use by anyone (can be moved into _free list on next Extend()) /// * >= 1 - Page is in use by 1 or more threads. Page must run "Release" when finished using /// private readonly ConcurrentDictionary _readable = new ConcurrentDictionary(); /// /// Get how many extends were made in this store /// private int _extends = 0; /// /// Get memory segment sizes /// private readonly int[] _segmentSizes; public MemoryCache(int[] memorySegmentSizes) { _segmentSizes = memorySegmentSizes; this.Extend(); } #region Readable Pages /// /// Get page from clean cache (readable). If page doesn't exist, create this new page and load data using factory fn /// public PageBuffer GetReadablePage(long position, FileOrigin origin, Action factory) { // get dict key based on position/origin var key = this.GetReadableKey(position, origin); // try get from _readble dict or create new var page = _readable.GetOrAdd(key, (k) => { // get new page from _free pages (or extend) var newPage = this.GetFreePage(); newPage.Position = position; newPage.Origin = origin; // load page content with disk stream factory(position, newPage); return newPage; }); // update LRU Interlocked.Exchange(ref page.Timestamp, DateTime.UtcNow.Ticks); // increment share counter Interlocked.Increment(ref page.ShareCounter); return page; } /// /// Get unique position in dictionary according with origin. Use positive/negative values /// private long GetReadableKey(long position, FileOrigin origin) { ENSURE(origin != FileOrigin.None, "file origin must be defined"); if (origin == FileOrigin.Data) { return position; } else { if (position == 0) return long.MinValue; return -position; } } #endregion #region Writable Pages /// /// Request for a writable page - no other can read this page and this page has no reference /// Writable pages can be MoveToReadable() or DiscardWritable() - but never Released() /// public PageBuffer GetWritablePage(long position, FileOrigin origin, Action factory) { var key = this.GetReadableKey(position, origin); // write pages always contains a new buffer array var writable = this.NewPage(position, origin); // if requested page already in cache, just copy buffer and avoid load from stream if (_readable.TryGetValue(key, out var clean)) { Buffer.BlockCopy(clean.Array, clean.Offset, writable.Array, writable.Offset, PAGE_SIZE); } else { factory(position, writable); } return writable; } /// /// Create new page using an empty buffer block. Mark this page as writable. /// public PageBuffer NewPage() { return this.NewPage(long.MaxValue, FileOrigin.None); } /// /// Create new page using an empty buffer block. Mark this page as writable. /// private PageBuffer NewPage(long position, FileOrigin origin) { var page = this.GetFreePage(); // set page position and page as writable page.Position = position; // define as writable page.ShareCounter = BUFFER_WRITABLE; // Timestamp = 0 means this page was never used (do not clear) if (page.Timestamp > 0) { page.Clear(); } DEBUG(page.All(0), "new page must be full zero empty before return"); page.Origin = origin; page.Timestamp = DateTime.UtcNow.Ticks; return page; } /// /// Try to move this page to readable list (if not already in readable list) /// Returns true if it was moved /// public bool TryMoveToReadable(PageBuffer page) { ENSURE(page.Position != long.MaxValue, "page must have a position"); ENSURE(page.ShareCounter == BUFFER_WRITABLE, "page must be writable"); ENSURE(page.Origin != FileOrigin.None, "page must have origin defined"); var key = this.GetReadableKey(page.Position, page.Origin); // set page as not in use page.ShareCounter = 0; var added = _readable.TryAdd(key, page); // if not added, let's get ShareCounter back to writable state if (!added) { page.ShareCounter = BUFFER_WRITABLE; } return added; } /// /// Move a writable page to readable list - if already exists, override content /// Used after write operation that must mark page as readable because page content was changed /// This method runs BEFORE send to write disk queue - but new page request must read this new content /// Returns readable page /// public PageBuffer MoveToReadable(PageBuffer page) { ENSURE(page.Position != long.MaxValue, "page must have position to be readable"); ENSURE(page.Origin != FileOrigin.None, "page should be a source before move to readable"); ENSURE(page.ShareCounter == BUFFER_WRITABLE, "page must be writable before move to readable dict"); var key = this.GetReadableKey(page.Position, page.Origin); var added = true; // no concurrency in writable page page.ShareCounter = 1; var readable = _readable.AddOrUpdate(key, page, (newKey, current) => { // if page already exist inside readable list, should never be in-used (this will be guaranteed by lock control) ENSURE(current.ShareCounter == 0, "user must ensure this page is not in use when marked as read only"); ENSURE(current.Origin == page.Origin, "origin must be same"); current.ShareCounter = 1; // if page already in cache, this is a duplicate page in memory // must update cached page with new page content Buffer.BlockCopy(page.Array, page.Offset, current.Array, current.Offset, PAGE_SIZE); added = false; // Bug 2184: readable page was updated, need to set the page.ShareCounter back to writeable // so that DiscardPage can free the page and put it into the queue. page.ShareCounter = BUFFER_WRITABLE; return current; }); // if page was not added into readable list, move page to free list if (added == false) { this.DiscardPage(page); } // return page that are in _readable list return readable; } /// /// Completely discard a writable page - clean content and move to free list /// public void DiscardPage(PageBuffer page) { ENSURE(page.ShareCounter == BUFFER_WRITABLE, "discarded page must be writable"); // clear page controls page.ShareCounter = 0; page.Position = long.MaxValue; page.Origin = FileOrigin.None; // DO NOT CLEAR CONTENT // when this page get requested from free list, it will be cleared if requested from NewPage() // or will be overwritten by ReadPage // added into free list _free.Enqueue(page); } #endregion #region Cache managment /// /// Get a clean, re-usable page from store. Can extend buffer segments if store is empty /// private PageBuffer GetFreePage() { if (_free.TryDequeue(out var page)) { ENSURE(page.Position == long.MaxValue, "pages in memory store must have no position defined"); ENSURE(page.ShareCounter == 0, "pages in memory store must be non-shared"); ENSURE(page.Origin == FileOrigin.None, "page in memory must have no page origin"); return page; } // if no more page inside memory store - extend store/reuse non-shared pages else { // ensure only 1 single thread call extend method lock(_free) { if (_free.Count > 0) return this.GetFreePage(); this.Extend(); } return this.GetFreePage(); } } /// /// Check if it's possible move readable pages to free list - if not possible, extend memory /// private void Extend() { // count how many pages in cache are available to be re-used (is not in use at this time) var emptyShareCounter = _readable.Values.Count(x => x.ShareCounter == 0); // get segmentSize var segmentSize = _segmentSizes[Math.Min(_segmentSizes.Length - 1, _extends)]; // if this count is larger than MEMORY_SEGMENT_SIZE, re-use all this pages if (emptyShareCounter > segmentSize) { // get all readable pages that can return to _free (slow way) // sort by timestamp used (set as free oldest first) var readables = _readable .Where(x => x.Value.ShareCounter == 0) .OrderBy(x => x.Value.Timestamp) .Select(x => x.Key) .Take(segmentSize) .ToArray(); // move pages from readable list to free list foreach (var key in readables) { var removed = _readable.TryRemove(key, out var page); ENSURE(removed, "page should be in readable list before moving to free list"); // if removed page was changed between make array and now, must add back to readable list if (page.ShareCounter > 0) { // but wait: between last "remove" and now, another thread can added this page if (!_readable.TryAdd(key, page)) { // this is a terrible situation, to avoid memory corruption I will throw expcetion for now throw new LiteException(0, "MemoryCache: removed in-use memory page. This situation has no way to fix (yet). Throwing exception to avoid database corruption. No other thread can read/write from database now."); } } else { ENSURE(page.ShareCounter == 0, "page should not be in use by anyone"); // clean controls page.Position = long.MaxValue; page.Origin = FileOrigin.None; _free.Enqueue(page); } } LOG($"re-using cache pages (flushing {_free.Count} pages)", "CACHE"); } else { // create big linear array in heap memory (LOH => 85Kb) var buffer = new byte[PAGE_SIZE * segmentSize]; var uniqueID = this.ExtendPages + 1; // split linear array into many array slices for (var i = 0; i < segmentSize; i++) { _free.Enqueue(new PageBuffer(buffer, i * PAGE_SIZE, uniqueID++)); } _extends++; LOG($"extending memory usage: (segments: {_extends})", "CACHE"); } } /// /// Return how many pages are in use when call this method (ShareCounter != 0). /// public int PagesInUse => _readable.Values.Where(x => x.ShareCounter != 0).Count(); /// /// Return how many pages are available (completely free) /// public int FreePages => _free.Count; /// /// Return how many segments are already loaded in memory /// public int ExtendSegments => _extends; /// /// Get how many pages this cache extends in memory /// public int ExtendPages => Enumerable.Range(0, _extends).Select(x => _segmentSizes[Math.Min(_segmentSizes.Length - 1, x)]).Sum(); /// /// Get how many pages are used as Writable at this moment /// public int WritablePages => this.ExtendPages - // total memory _free.Count - _readable.Count; // allocated pages /// /// Get all readable pages /// public ICollection GetPages() => _readable.Values; /// /// Clean all cache memory - moving back all readable pages into free list /// This command must be called inside an exclusive lock /// public int Clear() { var counter = 0; ENSURE(this.PagesInUse == 0, "must have no pages in use when call Clear() cache"); foreach (var page in _readable.Values) { page.Position = long.MaxValue; page.Origin = FileOrigin.None; _free.Enqueue(page); counter++; } _readable.Clear(); return counter; } #endregion public void Dispose() { } } } ================================================ FILE: LiteDB/Engine/Disk/Serializer/BufferReader.cs ================================================ using System; using System.Buffers; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Read multiple array segment as a single linear segment - Forward Only /// internal class BufferReader : IDisposable { private readonly IEnumerator _source; private readonly bool _utcDate; private BufferSlice _current; private int _currentPosition = 0; // position in _current private int _position = 0; // global position private bool _isEOF = false; private static readonly ArrayPool _bufferPool = ArrayPool.Shared; /// /// Current global cursor position /// public int Position => _position; /// /// Indicate position are at end of last source array segment /// public bool IsEOF => _isEOF; public BufferReader(byte[] buffer, bool utcDate = false) : this(new BufferSlice(buffer, 0, buffer.Length), utcDate) { } public BufferReader(BufferSlice buffer, bool utcDate = false) { _source = null; _utcDate = utcDate; _current = buffer; } public BufferReader(IEnumerable source, bool utcDate = false) { _source = source.GetEnumerator(); _utcDate = utcDate; _source.MoveNext(); _current = _source.Current; } #region Basic Read /// /// Move forward in current segment. If array segment finishes, open next segment /// Returns true if moved to another segment - returns false if continues in the same segment /// private bool MoveForward(int count) { // do not move forward if source finish if (_isEOF) return false; ENSURE(_currentPosition + count <= _current.Count, "forward is only for current segment"); _currentPosition += count; _position += count; // request new source array if _current all consumed if (_currentPosition == _current.Count) { if (_source == null || _source.MoveNext() == false) { _isEOF = true; } else { _current = _source.Current; _currentPosition = 0; } return true; } return false; } /// /// Read bytes from source and copy into buffer. Return how many bytes was read /// public int Read(byte[] buffer, int offset, int count) { var bufferPosition = 0; while (bufferPosition < count) { var bytesLeft = _current.Count - _currentPosition; var bytesToCopy = Math.Min(count - bufferPosition, bytesLeft); // fill buffer if (buffer != null) { Buffer.BlockCopy(_current.Array, _current.Offset + _currentPosition, buffer, offset + bufferPosition, bytesToCopy); } bufferPosition += bytesToCopy; // move position in current segment (and go to next segment if finish) this.MoveForward(bytesToCopy); if (_isEOF) break; } ENSURE(count == bufferPosition, "current value must fit inside defined buffer"); return bufferPosition; } /// /// Skip bytes (same as Read but with no array copy) /// public int Skip(int count) => this.Read(null, 0, count); /// /// Consume all data source until finish /// public void Consume() { if (_source != null) { while (_source.MoveNext()) { } } } #endregion #region Read String /// /// Read string with fixed size /// public string ReadString(int count) { string value; // if fits in current segment, use inner array - otherwise copy from multiples segments if (_currentPosition + count <= _current.Count) { value = StringEncoding.UTF8.GetString(_current.Array, _current.Offset + _currentPosition, count); this.MoveForward(count); } else { // rent a buffer to be re-usable var buffer = _bufferPool.Rent(count); this.Read(buffer, 0, count); value = StringEncoding.UTF8.GetString(buffer, 0, count); _bufferPool.Return(buffer, true); } return value; } /// /// Reading string until find \0 at end /// public string ReadCString() { // first try read CString in current segment if (this.TryReadCStringCurrentSegment(out var value)) { return value; } else { using (var mem = new MemoryStream()) { // copy all first segment var initialCount = _current.Count - _currentPosition; mem.Write(_current.Array, _current.Offset + _currentPosition, initialCount); this.MoveForward(initialCount); // and go to next segment while (_current[_currentPosition] != 0x00 && _isEOF == false) { mem.WriteByte(_current[_currentPosition]); this.MoveForward(1); } this.MoveForward(1); // +1 to '\0' return StringEncoding.UTF8.GetString(mem.ToArray()); } } } /// /// Try read CString in current segment avoind read byte-to-byte over segments /// private bool TryReadCStringCurrentSegment(out string value) { var pos = _currentPosition; var count = 0; while (pos < _current.Count) { if (_current[pos] == 0x00) { value = StringEncoding.UTF8.GetString(_current.Array, _current.Offset + _currentPosition, count); this.MoveForward(count + 1); // +1 means '\0' return true; } else { count++; pos++; } } value = null; return false; } #endregion #region Read Numbers private T ReadNumber(Func convert, int size) { T value; // if fits in current segment, use inner array - otherwise copy from multiples segments if (_currentPosition + size <= _current.Count) { value = convert(_current.Array, _current.Offset + _currentPosition); this.MoveForward(size); } else { var buffer = _bufferPool.Rent(size); this.Read(buffer, 0, size); value = convert(buffer, 0); _bufferPool.Return(buffer, true); } return value; } public Int32 ReadInt32() => this.ReadNumber(BitConverter.ToInt32, 4); public Int64 ReadInt64() => this.ReadNumber(BitConverter.ToInt64, 8); public UInt32 ReadUInt32() => this.ReadNumber(BitConverter.ToUInt32, 4); public Double ReadDouble() => this.ReadNumber(BitConverter.ToDouble, 8); public Decimal ReadDecimal() { var a = this.ReadInt32(); var b = this.ReadInt32(); var c = this.ReadInt32(); var d = this.ReadInt32(); return new Decimal(new int[] { a, b, c, d }); } #endregion #region Complex Types /// /// Read DateTime as UTC ticks (not BSON format) /// public DateTime ReadDateTime() { var date = new DateTime(this.ReadInt64(), DateTimeKind.Utc); return _utcDate ? date.ToLocalTime() : date; } /// /// Read Guid as 16 bytes array /// public Guid ReadGuid() { Guid value; if (_currentPosition + 16 <= _current.Count) { value = _current.ReadGuid(_currentPosition); this.MoveForward(16); } else { // can't use _tempoBuffer because Guid validate 16 bytes array length value = new Guid(this.ReadBytes(16)); } return value; } /// /// Write ObjectId as 12 bytes array /// public ObjectId ReadObjectId() { ObjectId value; if (_currentPosition + 12 <= _current.Count) { value = new ObjectId(_current.Array, _current.Offset + _currentPosition); this.MoveForward(12); } else { var buffer = _bufferPool.Rent(12); this.Read(buffer, 0, 12); value = new ObjectId(buffer, 0); _bufferPool.Return(buffer, true); } return value; } /// /// Write a boolean as 1 byte (0 or 1) /// public bool ReadBoolean() { var value = _current[_currentPosition] != 0; this.MoveForward(1); return value; } /// /// Write single byte /// public byte ReadByte() { var value = _current[_currentPosition]; this.MoveForward(1); return value; } /// /// Write PageAddress as PageID, Index /// internal PageAddress ReadPageAddress() { return new PageAddress(this.ReadUInt32(), this.ReadByte()); } /// /// Read byte array - not great because need create new array instance /// public byte[] ReadBytes(int count) { var buffer = new byte[count]; this.Read(buffer, 0, count); return buffer; } /// /// Read single IndexKey (BsonValue) from buffer. Use +1 length only for string/binary /// public BsonValue ReadIndexKey() { var type = (BsonType)this.ReadByte(); switch (type) { case BsonType.Null: return BsonValue.Null; case BsonType.Int32: return this.ReadInt32(); case BsonType.Int64: return this.ReadInt64(); case BsonType.Double: return this.ReadDouble(); case BsonType.Decimal: return this.ReadDecimal(); // Use +1 byte only for length case BsonType.String: return this.ReadString(this.ReadByte()); case BsonType.Document: return this.ReadDocument(null).GetValue(); case BsonType.Array: return this.ReadArray().GetValue(); // Use +1 byte only for length case BsonType.Binary: return this.ReadBytes(this.ReadByte()); case BsonType.ObjectId: return this.ReadObjectId(); case BsonType.Guid: return this.ReadGuid(); case BsonType.Boolean: return this.ReadBoolean(); case BsonType.DateTime: return this.ReadDateTime(); case BsonType.MinValue: return BsonValue.MinValue; case BsonType.MaxValue: return BsonValue.MaxValue; default: throw new NotImplementedException(); } } #endregion #region BsonDocument as SPECS /// /// Read a BsonDocument from reader /// public Result ReadDocument(HashSet fields = null) { var doc = new BsonDocument(); try { var length = this.ReadInt32(); var end = _position + length - 5; var remaining = fields == null || fields.Count == 0 ? null : new HashSet(fields, StringComparer.OrdinalIgnoreCase); while (_position < end && (remaining == null || remaining?.Count > 0)) { var value = this.ReadElement(remaining, out string name); // null value means are not selected field if (value != null) { doc[name] = value; // remove from remaining fields remaining?.Remove(name); } } this.MoveForward(1); // skip \0 ** can read disk here! return doc; } catch (Exception ex) { return new Result(doc, ex); } } /// /// Read an BsonArray from reader /// public Result ReadArray() { var arr = new BsonArray(); try { var length = this.ReadInt32(); var end = _position + length - 5; while (_position < end) { var value = this.ReadElement(null, out string name); arr.Add(value); } this.MoveForward(1); // skip \0 return arr; } catch (Exception ex) { return new Result(arr, ex); } } /// /// Reads an element (key-value) from an reader /// private BsonValue ReadElement(HashSet remaining, out string name) { var type = this.ReadByte(); name = this.ReadCString(); // check if need skip this element if (remaining != null && !remaining.Contains(name)) { // define skip length according type var length = (type == 0x0A || type == 0xFF || type == 0x7F) ? 0 : // Null, MinValue, MaxValue (type == 0x08) ? 1 : // Boolean (type == 0x10) ? 4 : // Int (type == 0x01 || type == 0x12 || type == 0x09) ? 8 : // Double, Int64, DateTime (type == 0x07) ? 12 : // ObjectId (type == 0x13) ? 16 : // Decimal (type == 0x02) ? this.ReadInt32() : // String (type == 0x05) ? this.ReadInt32() + 1 : // Binary (+1 for subtype) (type == 0x03 || type == 0x04) ? this.ReadInt32() - 4 : 0; // Document, Array (-4 to Length + zero) if (length > 0) { this.Skip(length); } return null; } if (type == 0x01) // Double { return this.ReadDouble(); } else if (type == 0x02) // String { var length = this.ReadInt32(); var value = this.ReadString(length - 1); this.MoveForward(1); // read '\0' return value; } else if (type == 0x03) // Document { return this.ReadDocument().GetValue(); } else if (type == 0x04) // Array { return this.ReadArray().GetValue(); } else if (type == 0x05) // Binary { var length = this.ReadInt32(); var subType = this.ReadByte(); var bytes = this.ReadBytes(length); switch (subType) { case 0x00: return bytes; case 0x04: return new Guid(bytes); } } else if (type == 0x07) // ObjectId { return this.ReadObjectId(); } else if (type == 0x08) // Boolean { return this.ReadBoolean(); } else if (type == 0x09) // DateTime { var ts = this.ReadInt64(); // catch specific values for MaxValue / MinValue #19 if (ts == 253402300800000) return DateTime.MaxValue; if (ts == -62135596800000) return DateTime.MinValue; var date = BsonValue.UnixEpoch.AddMilliseconds(ts); return _utcDate ? date : date.ToLocalTime(); } else if (type == 0x0A) // Null { return BsonValue.Null; } else if (type == 0x10) // Int32 { return this.ReadInt32(); } else if (type == 0x12) // Int64 { return this.ReadInt64(); } else if (type == 0x13) // Decimal { return this.ReadDecimal(); } else if (type == 0xFF) // MinKey { return BsonValue.MinValue; } else if (type == 0x7F) // MaxKey { return BsonValue.MaxValue; } throw new NotSupportedException("BSON type not supported"); } #endregion public void Dispose() { _source?.Dispose(); } } } ================================================ FILE: LiteDB/Engine/Disk/Serializer/BufferWriter.cs ================================================ using System; using System.Buffers; using System.Collections.Generic; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Write data types/BSON data into byte[]. It's forward only and support multi buffer slice as source /// internal class BufferWriter : IDisposable { private readonly IEnumerator _source; private BufferSlice _current; private int _currentPosition = 0; // position in _current private int _position = 0; // global position private bool _isEOF = false; private static readonly ArrayPool _bufferPool = ArrayPool.Shared; /// /// Current global cursor position /// public int Position => _position; /// /// Indicate position are at end of last source array segment /// public bool IsEOF => _isEOF; public BufferWriter(byte[] buffer) : this(new BufferSlice(buffer, 0, buffer.Length)) { } public BufferWriter(BufferSlice buffer) { _source = null; _current = buffer; } public BufferWriter(IEnumerable source) { _source = source.GetEnumerator(); _source.MoveNext(); _current = _source.Current; } #region Basic Write /// /// Move forward in current segment. If array segment finish, open next segment /// Returns true if move to another segment - returns false if continue in same segment /// private bool MoveForward(int count) { // do not move forward if source finish if (_isEOF) return false; ENSURE(_currentPosition + count <= _current.Count, "forward is only for current segment"); _currentPosition += count; _position += count; // request new source array if _current all consumed if (_currentPosition == _current.Count) { if (_source == null || _source.MoveNext() == false) { _isEOF = true; } else { _current = _source.Current; _currentPosition = 0; } return true; } return false; } /// /// Write bytes from buffer into segmentsr. Return how many bytes was write /// public int Write(byte[] buffer, int offset, int count) { var bufferPosition = 0; while (bufferPosition < count) { var bytesLeft = _current.Count - _currentPosition; var bytesToCopy = Math.Min(count - bufferPosition, bytesLeft); // fill buffer if (buffer != null) { Buffer.BlockCopy(buffer, offset + bufferPosition, _current.Array, _current.Offset + _currentPosition, bytesToCopy); } bufferPosition += bytesToCopy; // move position in current segment (and go to next segment if finish) this.MoveForward(bytesToCopy); if (_isEOF) break; } ENSURE(count == bufferPosition, "current value must fit inside defined buffer"); return bufferPosition; } /// /// Write bytes from buffer into segmentsr. Return how many bytes was write /// public int Write(byte[] buffer) => this.Write(buffer, 0, buffer.Length); /// /// Skip bytes (same as Write but with no array copy) /// public int Skip(int count) => this.Write(null, 0, count); /// /// Consume all data source until finish /// public void Consume() { if (_source != null) { while (_source.MoveNext()) { } } } #endregion #region String /// /// Write String with \0 at end /// public void WriteCString(string value) { if (value.IndexOf('\0') > -1) throw LiteException.InvalidNullCharInString(); var bytesCount = StringEncoding.UTF8.GetByteCount(value); var available = _current.Count - _currentPosition; // avaiable in current segment // can write direct in current segment (use < because need +1 \0) if (bytesCount < available) { StringEncoding.UTF8.GetBytes(value, 0, value.Length, _current.Array, _current.Offset + _currentPosition); _current[_currentPosition + bytesCount] = 0x00; this.MoveForward(bytesCount + 1); // +1 to '\0' } else { var buffer = _bufferPool.Rent(bytesCount); StringEncoding.UTF8.GetBytes(value, 0, value.Length, buffer, 0); this.Write(buffer, 0, bytesCount); _current[_currentPosition] = 0x00; this.MoveForward(1); _bufferPool.Return(buffer, true); } } /// /// Write string into output buffer. /// Support direct string (with no length information) or BSON specs: with (legnth + 1) [4 bytes] before and '\0' at end = 5 extra bytes /// public void WriteString(string value, bool specs) { var count = StringEncoding.UTF8.GetByteCount(value); if (specs) { this.Write(count + 1); // write Length + 1 (for \0) } if (count <= _current.Count - _currentPosition) { StringEncoding.UTF8.GetBytes(value, 0, value.Length, _current.Array, _current.Offset + _currentPosition); this.MoveForward(count); } else { // rent a buffer to be re-usable var buffer = _bufferPool.Rent(count); StringEncoding.UTF8.GetBytes(value, 0, value.Length, buffer, 0); this.Write(buffer, 0, count); _bufferPool.Return(buffer, true); } if (specs) { this.Write((byte)0x00); } } #endregion #region Numbers private void WriteNumber(T value, Action toBytes, int size) { if (_currentPosition + size <= _current.Count) { toBytes(value, _current.Array, _current.Offset + _currentPosition); this.MoveForward(size); } else { var buffer = _bufferPool.Rent(size); toBytes(value, buffer, 0); this.Write(buffer, 0, size); _bufferPool.Return(buffer, true); } } public void Write(Int32 value) => this.WriteNumber(value, BufferExtensions.ToBytes, 4); public void Write(Int64 value) => this.WriteNumber(value, BufferExtensions.ToBytes, 8); public void Write(UInt32 value) => this.WriteNumber(value, BufferExtensions.ToBytes, 4); public void Write(Double value) => this.WriteNumber(value, BufferExtensions.ToBytes, 8); public void Write(Decimal value) { var bits = Decimal.GetBits(value); this.Write(bits[0]); this.Write(bits[1]); this.Write(bits[2]); this.Write(bits[3]); } #endregion #region Complex Types /// /// Write DateTime as UTC ticks (not BSON format) /// public void Write(DateTime value) { var utc = (value == DateTime.MinValue || value == DateTime.MaxValue) ? value : value.ToUniversalTime(); this.Write(utc.Ticks); } /// /// Write Guid as 16 bytes array /// public void Write(Guid value) { // there is no avaiable value.TryWriteBytes (TODO: implement conditional compile)? var bytes = value.ToByteArray(); this.Write(bytes, 0, 16); } /// /// Write ObjectId as 12 bytes array /// public void Write(ObjectId value) { if (_currentPosition + 12 <= _current.Count) { value.ToByteArray(_current.Array, _current.Offset + _currentPosition); this.MoveForward(12); } else { var buffer = _bufferPool.Rent(12); value.ToByteArray(buffer, 0); this.Write(buffer, 0, 12); _bufferPool.Return(buffer, true); } } /// /// Write a boolean as 1 byte (0 or 1) /// public void Write(bool value) { _current[_currentPosition] = value ? (byte)0x01 : (byte)0x00; this.MoveForward(1); } /// /// Write single byte /// public void Write(byte value) { _current[_currentPosition] = value; this.MoveForward(1); } /// /// Write PageAddress as PageID, Index /// internal void Write(PageAddress address) { this.Write(address.PageID); this.Write(address.Index); } #endregion #region BsonDocument as SPECS /// /// Write BsonArray as BSON specs. Returns array bytes count /// public int WriteArray(BsonArray value, bool recalc) { var bytesCount = value.GetBytesCount(recalc); this.Write(bytesCount); for (var i = 0; i < value.Count; i++) { this.WriteElement(i.ToString(), value[i]); } this.Write((byte)0x00); return bytesCount; } /// /// Write BsonDocument as BSON specs. Returns document bytes count /// public int WriteDocument(BsonDocument value, bool recalc) { var bytesCount = value.GetBytesCount(recalc); this.Write(bytesCount); foreach (var el in value.GetElements()) { this.WriteElement(el.Key, el.Value); } this.Write((byte)0x00); return bytesCount; } private void WriteElement(string key, BsonValue value) { // cast RawValue to avoid one if on As switch (value.Type) { case BsonType.Double: this.Write((byte)0x01); this.WriteCString(key); this.Write(value.AsDouble); break; case BsonType.String: this.Write((byte)0x02); this.WriteCString(key); this.WriteString(value.AsString, true); // true = BSON Specs (add LENGTH at begin + \0 at end) break; case BsonType.Document: this.Write((byte)0x03); this.WriteCString(key); this.WriteDocument(value.AsDocument, false); break; case BsonType.Array: this.Write((byte)0x04); this.WriteCString(key); this.WriteArray(value.AsArray, false); break; case BsonType.Binary: this.Write((byte)0x05); this.WriteCString(key); var bytes = value.AsBinary; this.Write(bytes.Length); this.Write((byte)0x00); // subtype 00 - Generic binary subtype this.Write(bytes, 0, bytes.Length); break; case BsonType.Guid: this.Write((byte)0x05); this.WriteCString(key); var guid = value.AsGuid; this.Write(16); this.Write((byte)0x04); // UUID this.Write(guid); break; case BsonType.ObjectId: this.Write((byte)0x07); this.WriteCString(key); this.Write(value.AsObjectId); break; case BsonType.Boolean: this.Write((byte)0x08); this.WriteCString(key); this.Write((byte)(value.AsBoolean ? 0x01 : 0x00)); break; case BsonType.DateTime: this.Write((byte)0x09); this.WriteCString(key); var date = value.AsDateTime; // do not convert to UTC min/max date values - #19 var utc = (date == DateTime.MinValue || date == DateTime.MaxValue) ? date : date.ToUniversalTime(); var ts = utc - BsonValue.UnixEpoch; this.Write(Convert.ToInt64(ts.TotalMilliseconds)); break; case BsonType.Null: this.Write((byte)0x0A); this.WriteCString(key); break; case BsonType.Int32: this.Write((byte)0x10); this.WriteCString(key); this.Write(value.AsInt32); break; case BsonType.Int64: this.Write((byte)0x12); this.WriteCString(key); this.Write(value.AsInt64); break; case BsonType.Decimal: this.Write((byte)0x13); this.WriteCString(key); this.Write(value.AsDecimal); break; case BsonType.MinValue: this.Write((byte)0xFF); this.WriteCString(key); break; case BsonType.MaxValue: this.Write((byte)0x7F); this.WriteCString(key); break; } } #endregion public void Dispose() { _source?.Dispose(); } } } ================================================ FILE: LiteDB/Engine/Disk/StreamFactory/FileStreamFactory.cs ================================================ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// FileStream disk implementation of disk factory /// [ThreadSafe] /// internal class FileStreamFactory : IStreamFactory { private readonly string _filename; private readonly string _password; private readonly bool _readonly; private readonly bool _hidden; private readonly bool _useAesStream; public FileStreamFactory(string filename, string password, bool readOnly, bool hidden, bool useAesStream = true) { _filename = filename; _password = password; _readonly = readOnly; _hidden = hidden; _useAesStream = useAesStream; } /// /// Get data filename /// public string Name => Path.GetFileName(_filename); /// /// Create new data file FileStream instance based on filename /// public Stream GetStream(bool canWrite, bool sequencial) { var write = canWrite && (_readonly == false); var fileMode = _readonly ? System.IO.FileMode.Open : System.IO.FileMode.OpenOrCreate; var fileAccess = write ? FileAccess.ReadWrite : FileAccess.Read; var fileShare = write ? FileShare.Read : FileShare.ReadWrite; var fileOptions = sequencial ? FileOptions.SequentialScan : FileOptions.RandomAccess; var isNewFile = write && this.Exists() == false; var stream = new FileStream(_filename, fileMode, fileAccess, fileShare, PAGE_SIZE, fileOptions); if (isNewFile && _hidden) { File.SetAttributes(_filename, FileAttributes.Hidden); } return _password == null || !_useAesStream ? (Stream)stream : new AesStream(_password, stream); } /// /// Get file length using FileInfo. Crop file length if not length % PAGE_SIZE /// public long GetLength() { // if not file do not exists, returns 0 if (!this.Exists()) return 0; // get physical file length from OS var length = new FileInfo(_filename).Length; // if file length are not PAGE_SIZE module, maybe last save are not completed saved on disk // crop file removing last uncompleted page saved if (length % PAGE_SIZE != 0) { length = length - (length % PAGE_SIZE); using (var fs = new FileStream( _filename, System.IO.FileMode.Open, FileAccess.Write, FileShare.None, PAGE_SIZE, FileOptions.SequentialScan)) { fs.SetLength(length); fs.FlushToDisk(); } } // if encrypted must remove salt first page (only if page contains data) return length > 0 ? length - (_password == null ? 0 : PAGE_SIZE) : 0; } /// /// Check if file exists (without open it) /// public bool Exists() { return File.Exists(_filename); } /// /// Delete file (must all stream be closed) /// public void Delete() { File.Delete(_filename); } /// /// Test if this file are locked by another process /// public bool IsLocked() => this.Exists() && FileHelper.IsFileLocked(_filename); /// /// Close all stream on end /// public bool CloseOnDispose => true; } } ================================================ FILE: LiteDB/Engine/Disk/StreamFactory/IStreamFactory.cs ================================================ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Interface factory to provider new Stream instances for datafile/walfile resources. It's useful to multiple threads can read same datafile /// internal interface IStreamFactory { /// /// Get Stream name (filename) /// string Name { get; } /// /// Get new Stream instance /// Stream GetStream(bool canWrite, bool sequencial); /// /// Get file length /// /// long GetLength(); /// /// Checks if file exists /// bool Exists(); /// /// Delete physical file on disk /// void Delete(); /// /// Test if this file are used by another process /// bool IsLocked(); /// /// Indicate that factory must be dispose on finish /// bool CloseOnDispose { get; } } } ================================================ FILE: LiteDB/Engine/Disk/StreamFactory/StreamFactory.cs ================================================ using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Simple Stream disk implementation of disk factory - used for Memory/Temp database /// [ThreadSafe] /// internal class StreamFactory : IStreamFactory { private readonly Stream _stream; private readonly string _password; public StreamFactory(Stream stream, string password) { _stream = stream; _password = password; } /// /// Stream has no name (use stream type) /// public string Name => _stream is MemoryStream ? ":memory:" : _stream is TempStream ? ":temp:" : ":stream:"; /// /// Use ConcurrentStream wrapper to support multi thread in same Stream (using lock control) /// public Stream GetStream(bool canWrite, bool sequencial) { if (_password == null) { return new ConcurrentStream(_stream, canWrite); } else { return new AesStream(_password, new ConcurrentStream(_stream, canWrite)); } } /// /// Get file length using _stream.Length /// public long GetLength() { var length = _stream.Length; // if file length are not PAGE_SIZE module, maybe last save are not completed saved on disk // crop file removing last uncompleted page saved if (length % PAGE_SIZE != 0) { length = length - (length % PAGE_SIZE); _stream.SetLength(length); _stream.FlushToDisk(); } return length > 0 ? length - (_password == null ? 0 : PAGE_SIZE) : 0; } /// /// Check if file exists based on stream length /// public bool Exists() => _stream.Length > 0; /// /// There is no delete method in Stream factory /// public void Delete() { } /// /// Test if this file are locked by another process (there is no way to test when Stream only) /// public bool IsLocked() => false; /// /// Do no dispose on finish /// public bool CloseOnDispose => false; } } ================================================ FILE: LiteDB/Engine/Disk/StreamFactory/StreamPool.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Manage multiple open readonly Stream instances from same source (file). /// Support single writer instance /// Close all Stream on dispose /// [ThreadSafe] /// internal class StreamPool : IDisposable { private readonly ConcurrentBag _pool = new ConcurrentBag(); private readonly Lazy _writer; private readonly IStreamFactory _factory; public StreamPool(IStreamFactory factory, bool appendOnly) { _factory = factory; _writer = new Lazy(() => _factory.GetStream(true, appendOnly), true); } /// /// Get single Stream writer instance /// public Lazy Writer => _writer; /// /// Rent a Stream reader instance /// public Stream Rent() { if (!_pool.TryTake(out var stream)) { stream = _factory.GetStream(false, false); } return stream; } /// /// After use, return Stream reader instance /// public void Return(Stream stream) { _pool.Add(stream); } /// /// Close all Stream instances (readers/writer) /// public void Dispose() { // dipose stream only implement on factory if (_factory.CloseOnDispose == false) return; // dispose all reader stream foreach (var stream in _pool) { stream.Dispose(); } // do writer dispose (wait async writer thread) if (_writer.IsValueCreated) { _writer.Value.Dispose(); } } } } ================================================ FILE: LiteDB/Engine/Disk/Streams/AesStream.cs ================================================ using System; using System.Buffers; using System.IO; using System.Linq; using System.Security.Cryptography; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Encrypted AES Stream /// public class AesStream : Stream { private readonly Aes _aes; private readonly ICryptoTransform _encryptor; private readonly ICryptoTransform _decryptor; private readonly string _name; private readonly Stream _stream; private readonly CryptoStream _reader; private readonly CryptoStream _writer; private readonly byte[] _decryptedZeroes = new byte[16]; private static readonly byte[] _emptyContent = new byte[PAGE_SIZE - 1 - 16]; // 1 for aes indicator + 16 for salt private static readonly ArrayPool _bufferPool = ArrayPool.Shared; public byte[] Salt { get; } public override bool CanRead => _stream.CanRead; public override bool CanSeek => _stream.CanSeek; public override bool CanWrite => _stream.CanWrite; public override long Length => _stream.Length - PAGE_SIZE; public override long Position { get => _stream.Position - PAGE_SIZE; set => this.Seek(value, SeekOrigin.Begin); } public long StreamPosition => _stream.Position; public AesStream(string password, Stream stream) { _stream = stream; _name = _stream is FileStream fileStream ? Path.GetFileName(fileStream.Name) : null; var isNew = _stream.Length < PAGE_SIZE; // start stream from zero position _stream.Position = 0; const int checkBufferSize = 32; var checkBuffer = _bufferPool.Rent(checkBufferSize); var msBuffer = _bufferPool.Rent(16); try { // new file? create new salt if (isNew) { this.Salt = NewSalt(); // first byte =1 means this datafile is encrypted _stream.WriteByte(1); _stream.Write(this.Salt, 0, ENCRYPTION_SALT_SIZE); } else { this.Salt = new byte[ENCRYPTION_SALT_SIZE]; // checks if this datafile are encrypted var isEncrypted = _stream.ReadByte(); if (isEncrypted != 1) { throw LiteException.FileNotEncrypted(); } _stream.Read(this.Salt, 0, ENCRYPTION_SALT_SIZE); } _aes = Aes.Create(); _aes.Padding = PaddingMode.None; _aes.Mode = CipherMode.ECB; var pdb = new Rfc2898DeriveBytes(password, this.Salt); using (pdb as IDisposable) { _aes.Key = pdb.GetBytes(32); _aes.IV = pdb.GetBytes(16); } _encryptor = _aes.CreateEncryptor(); _decryptor = _aes.CreateDecryptor(); _reader = _stream.CanRead ? new CryptoStream(_stream, _decryptor, CryptoStreamMode.Read) : null; _writer = _stream.CanWrite ? new CryptoStream(_stream, _encryptor, CryptoStreamMode.Write) : null; // set stream to password checking _stream.Position = 32; if (!isNew) { // check whether bytes 32 to 64 is empty. This indicates LiteDb was unable to write encrypted 1s during last attempt. _stream.Read(checkBuffer, 0, checkBufferSize); isNew = checkBuffer.All(x => x == 0); // reset checkBuffer and stream position Array.Clear(checkBuffer, 0, checkBufferSize); _stream.Position = 32; } // fill checkBuffer with encrypted 1 to check when open if (isNew) { checkBuffer.Fill(1, 0, checkBufferSize); _writer.Write(checkBuffer, 0, checkBufferSize); //ensure that the "hidden" page in encrypted files is created correctly _stream.Position = PAGE_SIZE - 1; _stream.WriteByte(0); } else { _reader.Read(checkBuffer, 0, checkBufferSize); if (!checkBuffer.All(x => x == 1)) { throw LiteException.InvalidPassword(); } } _stream.Position = PAGE_SIZE; _stream.FlushToDisk(); using (var ms = new MemoryStream(msBuffer)) using (var tempStream = new CryptoStream(ms, _decryptor, CryptoStreamMode.Read)) { tempStream.Read(_decryptedZeroes, 0, _decryptedZeroes.Length); } } catch { _stream.Dispose(); throw; } finally { _bufferPool.Return(msBuffer, true); _bufferPool.Return(checkBuffer, true); } } /// /// Decrypt data from Stream /// public override int Read(byte[] array, int offset, int count) { ENSURE(this.Position % PAGE_SIZE == 0, "AesRead: position must be in PAGE_SIZE module. Position={0}, File={1}", this.Position, _name); var r = _reader.Read(array, offset, count); // checks if the first 16 bytes of the page in the original stream are zero // this should never happen, but if it does, return a blank page // the blank page will be skipped by WalIndexService.CheckpointInternal() and WalIndexService.RestoreIndex() if (this.IsBlank(array, offset)) { array.Fill(0, offset, count); } return r; } /// /// Encrypt data to Stream /// public override void Write(byte[] array, int offset, int count) { ENSURE(count == PAGE_SIZE || count == 1, "buffer size must be PAGE_SIZE"); ENSURE(this.Position == HeaderPage.P_INVALID_DATAFILE_STATE || this.Position % PAGE_SIZE == 0, "AesWrite: position must be in PAGE_SIZE module. Position={0}, File={1}", this.Position, _name); _writer.Write(array, offset, count); } protected override void Dispose(bool disposing) { base.Dispose(disposing); _stream?.Dispose(); _encryptor.Dispose(); _decryptor.Dispose(); _aes.Dispose(); } /// /// Get new salt for encryption /// public static byte[] NewSalt() { var salt = new byte[ENCRYPTION_SALT_SIZE]; using (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(salt); } return salt; } public override void Flush() { _stream.Flush(); } public override long Seek(long offset, SeekOrigin origin) { return _stream.Seek(offset + PAGE_SIZE, origin); } public override void SetLength(long value) { _stream.SetLength(value + PAGE_SIZE); } private unsafe bool IsBlank(byte[] array, int offset) { fixed (byte* arrayPtr = array) fixed (void* vPtr = _decryptedZeroes) { ulong* ptr = (ulong*)(arrayPtr + offset); ulong* zeroptr = (ulong*)vPtr; return *ptr == *zeroptr && *(ptr + 1) == *(zeroptr + 1); } } } } ================================================ FILE: LiteDB/Engine/Disk/Streams/ConcurrentStream.cs ================================================ using System; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement internal thread-safe Stream using lock control - A single instance of ConcurrentStream are not multi thread, /// but multiples ConcurrentStream instances using same stream base will support concurrency /// internal class ConcurrentStream : Stream { private readonly Stream _stream; private readonly bool _canWrite; private long _position = 0; public ConcurrentStream(Stream stream, bool canWrite) { _stream = stream; _canWrite = canWrite; } public override bool CanRead => _stream.CanRead; public override bool CanSeek => _stream.CanSeek; public override bool CanWrite => _canWrite; public override long Length => _stream.Length; public override long Position { get => _position; set => _position = value; } public override void Flush() => _stream.Flush(); public override void SetLength(long value) => _stream.SetLength(value); protected override void Dispose(bool disposing) => _stream.Dispose(); public override long Seek(long offset, SeekOrigin origin) { lock(_stream) { var position = origin == SeekOrigin.Begin ? offset : origin == SeekOrigin.Current ? _position + offset : _position - offset; _position = position; return _position; } } public override int Read(byte[] buffer, int offset, int count) { // lock internal stream and set position before read lock (_stream) { _stream.Position = _position; var read = _stream.Read(buffer, offset, count); _position = _stream.Position; return read; } } public override void Write(byte[] buffer, int offset, int count) { if (_canWrite == false) throw new NotSupportedException("Current stream are readonly"); // lock internal stream and set position before write lock (_stream) { _stream.Position = _position; _stream.Write(buffer, offset, count); _position = _stream.Position; } } } } ================================================ FILE: LiteDB/Engine/Disk/Streams/TempStream.cs ================================================ using System; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement a temporary stream that uses MemoryStream until get LIMIT bytes, then copy all to tempoary disk file and delete on dispose /// Can be pass /// public class TempStream : Stream { private Stream _stream = new MemoryStream(); private string _filename = null; private readonly long _maxMemoryUsage; public TempStream(string filename = null, long maxMemoryUsage = 10485760 /* 10MB */) { _maxMemoryUsage = maxMemoryUsage; _filename = filename; } /// /// Indicate that stream are all in memory /// public bool InMemory => _stream is MemoryStream; /// /// Indicate that stream is now on this /// public bool InDisk => _stream is FileStream; /// /// Get temp disk filename (if null will be generate only when create file) /// public string Filename => _filename; public override bool CanRead => _stream.CanRead; public override bool CanSeek => _stream.CanWrite; public override bool CanWrite => _stream.CanWrite; public override long Length => _stream.Length; public override long Position { get => _stream.Position; set => this.Seek(value, SeekOrigin.Begin); } public override void Flush() => _stream.Flush(); public override int Read(byte[] buffer, int offset, int count) => _stream.Read(buffer, offset, count); public override void SetLength(long value) => _stream.SetLength(value); public override void Write(byte[] buffer, int offset, int count) => _stream.Write(buffer, offset, count); public override long Seek(long offset, SeekOrigin origin) { var position = origin == SeekOrigin.Begin ? offset : origin == SeekOrigin.Current ? _stream.Position + offset : _stream.Position - offset; // when offset pass limit first time, change current _stream from MemoryStrem to FileStream with TempFilename() if (position > _maxMemoryUsage && this.InMemory) { // create new filename if not passed on ctor (must be unique _filename = _filename ?? Path.Combine(Path.GetTempPath(), "litedb_" + Guid.NewGuid() + ".db"); var file = new FileStream(_filename, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, PAGE_SIZE, FileOptions.RandomAccess); // copy data from memory to disk _stream.Position = 0; _stream.CopyTo(file); // dispose MemoryStream _stream.Dispose(); // and replace with FileStream _stream = file; } return _stream.Seek(offset, origin); } protected override void Dispose(bool disposing) { base.Dispose(disposing); _stream.Dispose(); // if any file was created, let's delete now if (this.InDisk) { File.Delete(_filename); } } } } ================================================ FILE: LiteDB/Engine/Engine/Collection.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Returns all collection inside datafile /// public IEnumerable GetCollectionNames() { return _header.GetCollections().Select(x => x.Key); } /// /// Drop collection including all documents, indexes and extended pages (do not support transactions) /// public bool DropCollection(string name) { if (name.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name)); // drop collection is possible only in exclusive transaction for this if (_locker.IsInTransaction) throw LiteException.AlreadyExistsTransaction(); return this.AutoTransaction(transaction => { var snapshot = transaction.CreateSnapshot(LockMode.Write, name, false); // if collection do not exist, just exit if (snapshot.CollectionPage == null) return false; LOG($"drop collection `{name}`", "COMMAND"); // call drop collection service snapshot.DropCollection(transaction.Safepoint); // remove sequence number (if exists) _sequences.TryRemove(name, out var dummy); return true; }); } /// /// Rename a collection (do not support transactions) /// public bool RenameCollection(string collection, string newName) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (newName.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(newName)); // rename collection is possible only in exclusive transaction for this if (_locker.IsInTransaction) throw LiteException.AlreadyExistsTransaction(); // check for collection name if (collection.Equals(newName, StringComparison.OrdinalIgnoreCase)) throw LiteException.InvalidCollectionName(newName, "New name must be different from current name"); // checks if newName are compatible CollectionService.CheckName(newName, _header); // rename collection is possible only in exclusive transaction for this if (_locker.IsInTransaction) throw LiteException.AlreadyExistsTransaction(); return this.AutoTransaction(transaction => { var currentSnapshot = transaction.CreateSnapshot(LockMode.Write, collection, false); var newSnapshot = transaction.CreateSnapshot(LockMode.Write, newName, false); if (currentSnapshot.CollectionPage == null) return false; // checks if do not already exists this collection name if (_header.GetCollectionPageID(newName) != uint.MaxValue) { throw LiteException.AlreadyExistsCollectionName(newName); } // rename collection and set page as dirty (there is no need to set IsDirty in HeaderPage) transaction.Pages.Commit += (h) => { h.RenameCollection(collection, newName); }; return true; }); } } } ================================================ FILE: LiteDB/Engine/Engine/Delete.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Implements delete based on IDs enumerable /// public int Delete(string collection, IEnumerable ids) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (ids == null) throw new ArgumentNullException(nameof(ids)); return this.AutoTransaction(transaction => { var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, false); var collectionPage = snapshot.CollectionPage; var data = new DataService(snapshot, _disk.MAX_ITEMS_COUNT); var indexer = new IndexService(snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); if (collectionPage == null) return 0; LOG($"delete `{collection}`", "COMMAND"); var count = 0; var pk = collectionPage.PK; foreach (var id in ids) { var pkNode = indexer.Find(pk, id, false, LiteDB.Query.Ascending); // if pk not found, continue if (pkNode == null) continue; _state.Validate(); // remove object data data.Delete(pkNode.DataBlock); // delete all nodes (start in pk node) indexer.DeleteAll(pkNode.Position); transaction.Safepoint(); count++; } return count; }); } /// /// Implements delete based on filter expression /// public int DeleteMany(string collection, BsonExpression predicate) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); // do optimization for when using "_id = value" key if (predicate != null && predicate.Type == BsonExpressionType.Equal && predicate.Left.Type == BsonExpressionType.Path && predicate.Left.Source == "$._id" && predicate.Right.IsValue) { var id = predicate.Right.Execute(_header.Pragmas.Collation).First(); return this.Delete(collection, new BsonValue[] { id }); } else { IEnumerable getIds() { // this is intresting: if _id returns an document (like in FileStorage) you can't run direct _id // field because "reader.Current" will return _id document - but not - { _id: [document] } // create inner document to ensure _id will be a document var query = new Query { Select = "{ i: _id }", ForUpdate = true }; if(predicate != null) { query.Where.Add(predicate); } using (var reader = this.Query(collection, query)) { while (reader.Read()) { var value = reader.Current["i"]; if (value != BsonValue.Null) { yield return value; } } } } return this.Delete(collection, getIds()); } } } } ================================================ FILE: LiteDB/Engine/Engine/Index.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Create a new index (or do nothing if already exists) to a collection/field /// public bool EnsureIndex(string collection, string name, BsonExpression expression, bool unique) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (name.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name)); if (expression == null) throw new ArgumentNullException(nameof(expression)); if (expression.IsIndexable == false) throw new ArgumentException("Index expressions must contains at least one document field. Used methods must be immutable. Parameters are not supported.", nameof(expression)); if (name.Length > INDEX_NAME_MAX_LENGTH) throw LiteException.InvalidIndexName(name, collection, "MaxLength = " + INDEX_NAME_MAX_LENGTH); if (!name.IsWord()) throw LiteException.InvalidIndexName(name, collection, "Use only [a-Z$_]"); if (name.StartsWith("$")) throw LiteException.InvalidIndexName(name, collection, "Index name can't start with `$`"); if (expression.IsScalar == false && unique) throw new LiteException(0, "Multikey index expression do not support unique option"); if (expression.Source == "$._id") return false; // always exists return this.AutoTransaction(transaction => { var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, true); var collectionPage = snapshot.CollectionPage; var indexer = new IndexService(snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); var data = new DataService(snapshot, _disk.MAX_ITEMS_COUNT); // check if index already exists var current = collectionPage.GetCollectionIndex(name); // if already exists, just exit if (current != null) { // but if expression are different, throw error if (current.Expression != expression.Source) throw LiteException.IndexAlreadyExist(name); return false; } LOG($"create index `{collection}.{name}`", "COMMAND"); // create index head var index = indexer.CreateIndex(name, expression.Source, unique); var count = 0u; // read all objects (read from PK index) foreach (var pkNode in new IndexAll("_id", LiteDB.Query.Ascending).Run(collectionPage, indexer)) { using (var reader = new BufferReader(data.Read(pkNode.DataBlock))) { var doc = reader.ReadDocument(expression.Fields).GetValue(); // first/last node in this document that will be added IndexNode last = null; IndexNode first = null; // get values from expression in document var keys = expression.GetIndexKeys(doc, _header.Pragmas.Collation); // adding index node for each value foreach (var key in keys) { _state.Validate(); // insert new index node var node = indexer.AddNode(index, key, pkNode.DataBlock, last); if (first == null) first = node; last = node; count++; } // fix single linked-list in pkNode if (first != null) { last.SetNextNode(pkNode.NextNode); pkNode.SetNextNode(first.Position); } } transaction.Safepoint(); } return true; }); } /// /// Drop an index from a collection /// public bool DropIndex(string collection, string name) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (name.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(name)); if (name == "_id") throw LiteException.IndexDropId(); return this.AutoTransaction(transaction => { var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, false); var col = snapshot.CollectionPage; var indexer = new IndexService(snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); // no collection, no index if (col == null) return false; // search for index reference var index = col.GetCollectionIndex(name); // no index, no drop if (index == null) return false; // delete all data pages + indexes pages indexer.DropIndex(index); // remove index entry in collection page snapshot.CollectionPage.DeleteCollectionIndex(name); return true; }); } } } ================================================ FILE: LiteDB/Engine/Engine/Insert.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Insert all documents in collection. If document has no _id, use AutoId generation. /// public int Insert(string collection, IEnumerable docs, BsonAutoId autoId) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (docs == null) throw new ArgumentNullException(nameof(docs)); return this.AutoTransaction(transaction => { var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, true); var count = 0; var indexer = new IndexService(snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); var data = new DataService(snapshot, _disk.MAX_ITEMS_COUNT); LOG($"insert `{collection}`", "COMMAND"); foreach (var doc in docs) { _state.Validate(); transaction.Safepoint(); this.InsertDocument(snapshot, doc, autoId, indexer, data); count++; } return count; }); } /// /// Internal implementation of insert a document /// private void InsertDocument(Snapshot snapshot, BsonDocument doc, BsonAutoId autoId, IndexService indexer, DataService data) { // if no _id, use AutoId if (!doc.TryGetValue("_id", out var id)) { doc["_id"] = id = autoId == BsonAutoId.ObjectId ? new BsonValue(ObjectId.NewObjectId()) : autoId == BsonAutoId.Guid ? new BsonValue(Guid.NewGuid()) : this.GetSequence(snapshot, autoId); } else if(id.IsNumber) { // update memory sequence of numeric _id this.SetSequence(snapshot, id); } // test if _id is a valid type if (id.IsNull || id.IsMinValue || id.IsMaxValue) { throw LiteException.InvalidDataType("_id", id); } // storage in data pages - returns dataBlock address var dataBlock = data.Insert(doc); IndexNode last = null; // for each index, insert new IndexNode foreach (var index in snapshot.CollectionPage.GetCollectionIndexes()) { // for each index, get all keys (supports multi-key) - gets distinct values only // if index are unique, get single key only var keys = index.BsonExpr.GetIndexKeys(doc, _header.Pragmas.Collation); // do a loop with all keys (multi-key supported) foreach(var key in keys) { // insert node var node = indexer.AddNode(index, key, dataBlock, last); last = node; } } } } } ================================================ FILE: LiteDB/Engine/Engine/Pragma.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Get engine internal pragma value /// public BsonValue Pragma(string name) { return _header.Pragmas.Get(name); } /// /// Set engine pragma new value (some pragmas will be affected only after realod) /// public bool Pragma(string name, BsonValue value) { if (this.Pragma(name) == value) return false; if (_locker.IsInTransaction) throw LiteException.AlreadyExistsTransaction(); // do a inside transaction to edit pragma on commit event return this.AutoTransaction(transaction => { transaction.Pages.Commit += (h) => { h.Pragmas.Set(name, value, true); }; return true; }); } } } ================================================ FILE: LiteDB/Engine/Engine/Query.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Run query over collection using a query definition. /// Returns a new IBsonDataReader that run and return first document result (open transaction) /// public IBsonDataReader Query(string collection, Query query) { if (string.IsNullOrWhiteSpace(collection)) throw new ArgumentNullException(nameof(collection)); if (query == null) throw new ArgumentNullException(nameof(query)); IEnumerable source = null; // test if is an system collection if (collection.StartsWith("$")) { SqlParser.ParseCollection(new Tokenizer(collection), out var name, out var options); // get registered system collection to get data source var sys = this.GetSystemCollection(name); source = sys.Input(options); collection = sys.Name; } var exec = new QueryExecutor( this, _state, _monitor, _sortDisk, _disk, _header.Pragmas, collection, query, source); return exec.ExecuteQuery(); } } } ================================================ FILE: LiteDB/Engine/Engine/Rebuild.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Implement a full rebuild database. Engine will be closed and re-created in another instance. /// A backup copy will be created with -backup extention. All data will be readed and re created in another database /// After run, will re-open database /// public long Rebuild(RebuildOptions options) { if (string.IsNullOrEmpty(_settings.Filename)) return 0; // works only with os file this.Close(); // run build service var rebuilder = new RebuildService(_settings); // return how many bytes of diference from original/rebuild version var diff = rebuilder.Rebuild(options); // re-open engine this.Open(); _state.Disposed = false; return diff; } /// /// Implement a full rebuild database. A backup copy will be created with -backup extention. All data will be readed and re created in another database /// public long Rebuild() { var collation = new Collation(this.Pragma(Pragmas.COLLATION)); var password = _settings.Password; return this.Rebuild(new RebuildOptions { Password = password, Collation = collation }); } /// /// Fill current database with data inside file reader - run inside a transacion /// internal void RebuildContent(IFileReader reader) { // begin transaction and get TransactionID var transaction = _monitor.GetTransaction(true, false, out _); try { foreach (var collection in reader.GetCollections()) { // get snapshot, indexer and data services var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, true); var indexer = new IndexService(snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); var data = new DataService(snapshot, _disk.MAX_ITEMS_COUNT); // get all documents from current collection var docs = reader.GetDocuments(collection); // insert one-by-one foreach (var doc in docs) { transaction.Safepoint(); this.InsertDocument(snapshot, doc, BsonAutoId.ObjectId, indexer, data); } // first create all user indexes (exclude _id index) foreach (var index in reader.GetIndexes(collection)) { this.EnsureIndex(collection, index.Name, BsonExpression.Create(index.Expression), index.Unique); } } transaction.Commit(); _monitor.ReleaseTransaction(transaction); } catch (Exception ex) { this.Close(ex); throw; } } } } ================================================ FILE: LiteDB/Engine/Engine/Recovery.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Recovery datafile using a rebuild process. Run only on "Open" database /// private void Recovery(Collation collation) { // run build service var rebuilder = new RebuildService(_settings); var options = new RebuildOptions { Collation = collation, Password = _settings.Password, IncludeErrorReport = true }; // run rebuild process rebuilder.Rebuild(options); } } } ================================================ FILE: LiteDB/Engine/Engine/Sequence.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Get lastest value from a _id collection and plus 1 - use _sequence cache /// private BsonValue GetSequence(Snapshot snapshot, BsonAutoId autoId) { var next = _sequences.AddOrUpdate(snapshot.CollectionName, (s) => { var lastId = this.GetLastId(snapshot); // emtpy collection, return 1 if (lastId.IsMinValue) return 1; // if lastId is not number, throw exception if (!lastId.IsNumber) { throw new LiteException(0, $"It's not possible use AutoId={autoId} because '{snapshot.CollectionName}' collection contains not only numbers in _id index ({lastId})."); } // return nextId return lastId.AsInt64 + 1; }, (s, value) => { // update last value return value + 1; }); return autoId == BsonAutoId.Int32 ? new BsonValue((int)next) : new BsonValue(next); } /// /// Update sequence number with new _id passed by user, IF this number are higher than current last _id /// At this point, newId.Type is Number /// private void SetSequence(Snapshot snapshot, BsonValue newId) { _sequences.AddOrUpdate(snapshot.CollectionName, (s) => { var lastId = this.GetLastId(snapshot); // create new collection based with max value between last _id index key or new passed _id if (lastId.IsNumber) { return Math.Max(lastId.AsInt64, newId.AsInt64); } else { // if collection last _id is not an number (is empty collection or contains another data type _id) // use newId return newId.AsInt64; } }, (s, value) => { // return max value between current sequence value vs new inserted value return Math.Max(value, newId.AsInt64); }); } /// /// Get last _id index key from collection. Returns MinValue if collection are empty /// private BsonValue GetLastId(Snapshot snapshot) { var pk = snapshot.CollectionPage.PK; // get tail page and previous page var tailPage = snapshot.GetPage(pk.Tail.PageID); var node = tailPage.GetIndexNode(pk.Tail.Index); var prevNode = node.Prev[0]; if (prevNode == pk.Head) { return BsonValue.MinValue; } else { var lastPage = prevNode.PageID == tailPage.PageID ? tailPage : snapshot.GetPage(prevNode.PageID); var lastNode = lastPage.GetIndexNode(prevNode.Index); var lastKey = lastNode.Key; return lastKey; } } } } ================================================ FILE: LiteDB/Engine/Engine/SystemCollections.cs ================================================ using System; using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Get registered system collection /// internal SystemCollection GetSystemCollection(string name) { if (_systemCollections.TryGetValue(name, out var sys)) { return sys; } throw new LiteException(0, $"System collection '{name}' are not registered as system collection"); } /// /// Register a new system collection that can be used in query for input/output data /// Collection name must starts with $ /// internal void RegisterSystemCollection(SystemCollection systemCollection) { if (systemCollection == null) throw new ArgumentNullException(nameof(systemCollection)); _systemCollections[systemCollection.Name] = systemCollection; } /// /// Register a new system collection that can be used in query for input data /// Collection name must starts with $ /// internal void RegisterSystemCollection(string collectionName, Func> factory) { if (collectionName.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collectionName)); if (factory == null) throw new ArgumentNullException(nameof(factory)); _systemCollections[collectionName] = new SystemCollection(collectionName, factory); } } } ================================================ FILE: LiteDB/Engine/Engine/Transaction.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Initialize a new transaction. Transaction are created "per-thread". There is only one single transaction per thread. /// Return true if transaction was created or false if current thread already in a transaction. /// public bool BeginTrans() { _state.Validate(); var transacion = _monitor.GetTransaction(true, false, out var isNew); transacion.ExplicitTransaction = true; if (transacion.OpenCursors.Count > 0) throw new LiteException(0, "This thread contains an open cursors/query. Close cursors before Begin()"); LOG(isNew, $"begin trans", "COMMAND"); return isNew; } /// /// Persist all dirty pages into LOG file /// public bool Commit() { _state.Validate(); var transaction = _monitor.GetTransaction(false, false, out _); if (transaction != null) { // do not accept explicit commit transaction when contains open cursors running if (transaction.OpenCursors.Count > 0) throw new LiteException(0, "Current transaction contains open cursors. Close cursors before run Commit()"); if (transaction.State == TransactionState.Active) { this.CommitAndReleaseTransaction(transaction); return true; } } return false; } /// /// Do rollback to current transaction. Clear dirty pages in memory and return new pages to main empty linked-list /// public bool Rollback() { _state.Validate(); var transaction = _monitor.GetTransaction(false, false, out _); if (transaction != null && transaction.State == TransactionState.Active) { transaction.Rollback(); _monitor.ReleaseTransaction(transaction); return true; } return false; } /// /// Create (or reuse) a transaction an add try/catch block. Commit transaction if is new transaction /// private T AutoTransaction(Func fn) { _state.Validate(); var transaction = _monitor.GetTransaction(true, false, out var isNew); try { var result = fn(transaction); // if this transaction was auto-created for this operation, commit & dispose now if (isNew) this.CommitAndReleaseTransaction(transaction); return result; } catch(Exception ex) { if (_state.Handle(ex)) { transaction.Rollback(); _monitor.ReleaseTransaction(transaction); } throw; } } private void CommitAndReleaseTransaction(TransactionService transaction) { transaction.Commit(); _monitor.ReleaseTransaction(transaction); // try checkpoint when finish transaction and log file are bigger than checkpoint pragma value (in pages) if (_header.Pragmas.Checkpoint > 0 && _disk.GetFileLength(FileOrigin.Log) > (_header.Pragmas.Checkpoint * PAGE_SIZE)) { _walIndex.TryCheckpoint(); } } } } ================================================ FILE: LiteDB/Engine/Engine/Update.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Implement update command to a document inside a collection. Return number of documents updated /// public int Update(string collection, IEnumerable docs) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (docs == null) throw new ArgumentNullException(nameof(docs)); return this.AutoTransaction(transaction => { var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, false); var collectionPage = snapshot.CollectionPage; var indexer = new IndexService(snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); var data = new DataService(snapshot, _disk.MAX_ITEMS_COUNT); var count = 0; if (collectionPage == null) return 0; LOG($"update `{collection}`", "COMMAND"); foreach (var doc in docs) { _state.Validate(); transaction.Safepoint(); if (this.UpdateDocument(snapshot, collectionPage, doc, indexer, data)) { count++; } } return count; }); } /// /// Update documents using transform expression (must return a scalar/document value) using predicate as filter /// public int UpdateMany(string collection, BsonExpression transform, BsonExpression predicate) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (transform == null) throw new ArgumentNullException(nameof(transform)); return this.Update(collection, transformDocs()); IEnumerable transformDocs() { var q = new Query { Select = "$", ForUpdate = true }; if (predicate != null) { q.Where.Add(predicate); } using (var reader = this.Query(collection, q)) { while (reader.Read()) { var doc = reader.Current.AsDocument; var id = doc["_id"]; var value = transform.ExecuteScalar(doc, _header.Pragmas.Collation); if (!value.IsDocument) throw new ArgumentException("Extend expression must return a document", nameof(transform)); var result = BsonExpressionMethods.EXTEND(doc, value.AsDocument).AsDocument; // be sure result document will contain same _id as current doc if (result.TryGetValue("_id", out var newId)) { if (newId != id) throw LiteException.InvalidUpdateField("_id"); } else { result["_id"] = id; } yield return result; } } } } /// /// Implement internal update document /// private bool UpdateDocument(Snapshot snapshot, CollectionPage col, BsonDocument doc, IndexService indexer, DataService data) { // normalize id before find var id = doc["_id"]; // validate id for null, min/max values if (id.IsNull || id.IsMinValue || id.IsMaxValue) { throw LiteException.InvalidDataType("_id", id); } // find indexNode from pk index var pkNode = indexer.Find(col.PK, id, false, LiteDB.Query.Ascending); // if not found document, no updates if (pkNode == null) return false; // update data storage data.Update(col, pkNode.DataBlock, doc); // get all current non-pk index nodes from this data block (slot, key, nodePosition) var oldKeys = indexer.GetNodeList(pkNode.NextNode) .Select(x => new Tuple(x.Slot, x.Key, x.Position)) .ToArray(); // build a list of all new key index keys var newKeys = new List>(); foreach (var index in col.GetCollectionIndexes().Where(x => x.Name != "_id")) { // getting all keys from expression over document var keys = index.BsonExpr.GetIndexKeys(doc, _header.Pragmas.Collation); foreach (var key in keys) { newKeys.Add(new Tuple(index.Slot, key, index.Name)); } } if (oldKeys.Length == 0 && newKeys.Count == 0) return true; // get a list of all nodes that are in oldKeys but not in newKeys (must delete) var toDelete = new HashSet(oldKeys .Where(x => newKeys.Any(n => n.Item1 == x.Item1 && n.Item2 == x.Item2) == false) .Select(x => x.Item3)); // get a list of all keys that are not in oldKeys (must insert) var toInsert = newKeys .Where(x => oldKeys.Any(o => o.Item1 == x.Item1 && o.Item2 == x.Item2) == false) .ToArray(); // if nothing to change, just exit if (toDelete.Count == 0 && toInsert.Length == 0) return true; // delete nodes and return last keeped node in list var last = indexer.DeleteList(pkNode.Position, toDelete); // now, insert all new nodes foreach(var elem in toInsert) { var index = col.GetCollectionIndex(elem.Item3); last = indexer.AddNode(index, elem.Item2, pkNode.DataBlock, last); } return true; } } } ================================================ FILE: LiteDB/Engine/Engine/Upgrade.cs ================================================ using System; using System.Buffers; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private static readonly ArrayPool _bufferPool = ArrayPool.Shared; /// /// If Upgrade=true, run this before open Disk service /// private void TryUpgrade() { var filename = _settings.Filename; // if file not exists, just exit if (!File.Exists(filename)) return; const int bufferSize = 1024; var buffer = _bufferPool.Rent(bufferSize); using (var stream = new FileStream( _settings.Filename, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize)) { stream.Position = 0; stream.Read(buffer, 0, bufferSize); if (FileReaderV7.IsVersion(buffer) == false) return; } _bufferPool.Return(buffer, true); // run rebuild process this.Recovery(_settings.Collation); } /// /// Upgrade old version of LiteDB into new LiteDB file structure. Returns true if database was completed converted /// If database already in current version just return false /// [Obsolete("Upgrade your LiteDB v4 datafiles using Upgrade=true in EngineSettings. You can use upgrade=true in connection string.")] public static bool Upgrade(string filename, string password = null, Collation collation = null) { if (filename.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(filename)); if (!File.Exists(filename)) return false; var settings = new EngineSettings { Filename = filename, Password = password, Collation = collation, Upgrade = true }; using (var db = new LiteEngine(settings)) { // database are now converted to v5 } return true; } } } ================================================ FILE: LiteDB/Engine/Engine/Upsert.cs ================================================ using System; using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Implement upsert command to documents in a collection. Calls update on all documents, /// then any documents not updated are then attempted to insert. /// This will have the side effect of throwing if duplicate items are attempted to be inserted. /// public int Upsert(string collection, IEnumerable docs, BsonAutoId autoId) { if (collection.IsNullOrWhiteSpace()) throw new ArgumentNullException(nameof(collection)); if (docs == null) throw new ArgumentNullException(nameof(docs)); return this.AutoTransaction(transaction => { var snapshot = transaction.CreateSnapshot(LockMode.Write, collection, true); var collectionPage = snapshot.CollectionPage; var indexer = new IndexService(snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); var data = new DataService(snapshot, _disk.MAX_ITEMS_COUNT); var count = 0; LOG($"upsert `{collection}`", "COMMAND"); foreach (var doc in docs) { _state.Validate(); transaction.Safepoint(); // first try update document (if exists _id), if not found, do insert if (doc["_id"] == BsonValue.Null || this.UpdateDocument(snapshot, collectionPage, doc, indexer, data) == false) { this.InsertDocument(snapshot, doc, autoId, indexer, data); count++; } } // returns how many document was inserted return count; }); } } } ================================================ FILE: LiteDB/Engine/EnginePragmas.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Internal database pragmas persisted inside header page /// internal class EnginePragmas { // pragma reserved area: 76-190 (115 bytes) public const int P_USER_VERSION = 76; // 76-79 (4 bytes) public const int P_COLLATION_LCID = 80; // 80-83 (4 bytes) public const int P_COLLATION_SORT = 84; // 84-87 (4 bytes) public const int P_TIMEOUT = 88; // 88-91 (4 bytes) // reserved 92-95 (4 bytes) public const int P_UTC_DATE = 96; // 96-96 (1 byte) public const int P_CHECKPOINT = 97; // 97-100 (4 bytes) public const int P_LIMIT_SIZE = 101; // 101-108 (8 bytes) /// /// Internal user version control to detect database changes /// public int UserVersion { get; private set; } = 0; /// /// Define collation for this database. Value will be persisted on disk at first write database. After this, there is no change of collation /// public Collation Collation { get; private set; } = Collation.Default; /// /// Timeout for waiting unlock operations (default: 1 minute) /// public TimeSpan Timeout { get; private set; } = TimeSpan.FromMinutes(1); /// /// Max limit of datafile (in bytes) (default: MaxValue) /// public long LimitSize { get; private set; } = long.MaxValue; /// /// Returns date in UTC timezone from BSON deserialization (default: false == LocalTime) /// public bool UtcDate { get; private set; } = false; /// /// When LOG file gets larger than checkpoint size (in pages), do a soft checkpoint (and also do a checkpoint at shutdown) /// Checkpoint = 0 means there's no auto-checkpoint nor shutdown checkpoint /// public int Checkpoint { get; private set; } = 1000; private readonly Dictionary _pragmas; private bool _isDirty = false; private readonly HeaderPage _headerPage; /// /// Get all pragmas /// public IEnumerable Pragmas => _pragmas.Values; public EnginePragmas(HeaderPage headerPage) { _headerPage = headerPage; _pragmas = new Dictionary(StringComparer.OrdinalIgnoreCase) { [Engine.Pragmas.USER_VERSION] = new Pragma { Name = Engine.Pragmas.USER_VERSION, Get = () => this.UserVersion, Set = (v) => this.UserVersion = v.AsInt32, Read = (b) => this.UserVersion = b.ReadInt32(P_USER_VERSION), Validate = (v, h) => { }, Write = (b) => b.Write(this.UserVersion, P_USER_VERSION) }, [Engine.Pragmas.COLLATION] = new Pragma { Name = Engine.Pragmas.COLLATION, Get = () => this.Collation.ToString(), Set = (v) => this.Collation = new Collation(v.AsString), Read = (b) => this.Collation = new Collation(b.ReadInt32(P_COLLATION_LCID), (CompareOptions)b.ReadInt32(P_COLLATION_SORT)), Validate = (v, h) => { throw new LiteException(0, "Pragma COLLATION is read only. Use Rebuild options."); }, Write = (b) => { b.Write(this.Collation.LCID, P_COLLATION_LCID); b.Write((int)this.Collation.SortOptions, P_COLLATION_SORT); } }, [Engine.Pragmas.TIMEOUT] = new Pragma { Name = Engine.Pragmas.TIMEOUT, Get = () => (int)this.Timeout.TotalSeconds, Set = (v) => this.Timeout = TimeSpan.FromSeconds(v.AsInt32), Read = (b) => this.Timeout = TimeSpan.FromSeconds(b.ReadInt32(P_TIMEOUT)), Validate = (v, h) => { if (v <= 0) throw new LiteException(0, "Pragma TIMEOUT must be greater than zero"); }, Write = (b) => b.Write((int)this.Timeout.TotalSeconds, P_TIMEOUT) }, [Engine.Pragmas.LIMIT_SIZE] = new Pragma { Name = Engine.Pragmas.LIMIT_SIZE, Get = () => this.LimitSize, Set = (v) => this.LimitSize = v.AsInt64, Read = (b) => { var limit = b.ReadInt64(P_LIMIT_SIZE); this.LimitSize = limit == 0 ? long.MaxValue : limit; }, Validate = (v, h) => { if (v < 4 * PAGE_SIZE) throw new LiteException(0, "Pragma LIMIT_SIZE must be at least 4 pages (32768 bytes)"); if (h != null && v.AsInt64 < (h.LastPageID + 1) * Constants.PAGE_SIZE) throw new LiteException(0, "Pragma LIMIT_SIZE must be greater or equal to the current file size"); }, Write = (b) => b.Write(this.LimitSize, P_LIMIT_SIZE) }, [Engine.Pragmas.UTC_DATE] = new Pragma { Name = Engine.Pragmas.UTC_DATE, Get = () => this.UtcDate, Set = (v) => this.UtcDate = v.AsBoolean, Read = (b) => this.UtcDate = b.ReadBool(P_UTC_DATE), Validate = (v, h) => { }, Write = (b) => b.Write(this.UtcDate, P_UTC_DATE) }, [Engine.Pragmas.CHECKPOINT] = new Pragma { Name = Engine.Pragmas.CHECKPOINT, Get = () => this.Checkpoint, Set = (v) => this.Checkpoint = v.AsInt32, Read = (b) => this.Checkpoint = b.ReadInt32(P_CHECKPOINT), Validate = (v, h) => { if (v < 0) throw new LiteException(0, "Pragma CHECKPOINT must be greater or equal to zero"); }, Write = (b) => b.Write(this.Checkpoint, P_CHECKPOINT) } }; _isDirty = true; } public EnginePragmas(BufferSlice buffer, HeaderPage headerPage) : this(headerPage) { foreach(var pragma in _pragmas.Values) { pragma.Read(buffer); } _isDirty = false; } public void UpdateBuffer(BufferSlice buffer) { if (_isDirty == false) return; foreach(var pragma in _pragmas) { pragma.Value.Write(buffer); } _isDirty = false; } public BsonValue Get(string name) { if (_pragmas.TryGetValue(name, out var pragma)) { return pragma.Get(); } throw new LiteException(0, $"Pragma `{name}` not exist"); } public void Set(string name, BsonValue value, bool validate) { if (_pragmas.TryGetValue(name, out var pragma)) { if (validate) pragma.Validate(value, _headerPage); pragma.Set(value); _isDirty = true; } else { throw new LiteException(0, $"Pragma `{name}` not exist"); } } } } ================================================ FILE: LiteDB/Engine/EngineSettings.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// All engine settings used to starts new engine /// public class EngineSettings { /// /// Get/Set custom stream to be used as datafile (can be MemoryStream or TempStream). Do not use FileStream - to use physical file, use "filename" attribute (and keep DataStream/WalStream null) /// public Stream DataStream { get; set; } = null; /// /// Get/Set custom stream to be used as log file. If is null, use a new TempStream (for TempStream datafile) or MemoryStream (for MemoryStream datafile) /// public Stream LogStream { get; set; } = null; /// /// Get/Set custom stream to be used as temp file. If is null, will create new FileStreamFactory with "-tmp" on name /// public Stream TempStream { get; set; } = null; /// /// Full path or relative path from DLL directory. Can use ':temp:' for temp database or ':memory:' for in-memory database. (default: null) /// public string Filename { get; set; } /// /// Get database password to decrypt pages /// public string Password { get; set; } /// /// If database is new, initialize with allocated space (in bytes) (default: 0) /// public long InitialSize { get; set; } = 0; /// /// Create database with custom string collection (used only to create database) (default: Collation.Default) /// public Collation Collation { get; set; } /// /// Indicate that engine will open files in readonly mode (and will not support any database change) /// public bool ReadOnly { get; set; } = false; /// /// After a Close with exception do a database rebuild on next open /// public bool AutoRebuild { get; set; } = false; /// /// If detect it's a older version (v4) do upgrade in datafile to new v5. A backup file will be keeped in same directory /// public bool Upgrade { get; set; } = false; /// /// Is used to transform a from the database on read. This can be used to upgrade data from older versions. /// public Func ReadTransform { get; set; } /// /// Create new IStreamFactory for datafile /// internal IStreamFactory CreateDataFactory(bool useAesStream = true) { if (this.DataStream != null) { return new StreamFactory(this.DataStream, this.Password); } else if (this.Filename == ":memory:") { return new StreamFactory(new MemoryStream(), this.Password); } else if (this.Filename == ":temp:") { return new StreamFactory(new TempStream(), this.Password); } else if (!string.IsNullOrEmpty(this.Filename)) { return new FileStreamFactory(this.Filename, this.Password, this.ReadOnly, false, useAesStream); } throw new ArgumentException("EngineSettings must have Filename or DataStream as data source"); } /// /// Create new IStreamFactory for logfile /// internal IStreamFactory CreateLogFactory() { if (this.LogStream != null) { return new StreamFactory(this.LogStream, this.Password); } else if (this.Filename == ":memory:") { return new StreamFactory(new MemoryStream(), this.Password); } else if (this.Filename == ":temp:") { return new StreamFactory(new TempStream(), this.Password); } else if (!string.IsNullOrEmpty(this.Filename)) { var logName = FileHelper.GetLogFile(this.Filename); return new FileStreamFactory(logName, this.Password, this.ReadOnly, false); } return new StreamFactory(new MemoryStream(), this.Password); } /// /// Create new IStreamFactory for temporary file (sort) /// internal IStreamFactory CreateTempFactory() { if (this.TempStream != null) { return new StreamFactory(this.TempStream, this.Password); } else if (this.Filename == ":memory:") { return new StreamFactory(new MemoryStream(), this.Password); } else if (this.Filename == ":temp:") { return new StreamFactory(new TempStream(), this.Password); } else if (!string.IsNullOrEmpty(this.Filename)) { var tempName = FileHelper.GetTempFile(this.Filename); return new FileStreamFactory(tempName, this.Password, false, true); } return new StreamFactory(new TempStream(), this.Password); } } } ================================================ FILE: LiteDB/Engine/EngineState.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { internal class EngineState { public bool Disposed = false; private Exception _exception; private readonly LiteEngine _engine; // can be null for unit tests private readonly EngineSettings _settings; #if DEBUG public Action SimulateDiskReadFail = null; public Action SimulateDiskWriteFail = null; #endif public EngineState(LiteEngine engine, EngineSettings settings) { _engine = engine; _settings = settings; } public void Validate() { if (this.Disposed) throw _exception ?? LiteException.EngineDisposed(); } public bool Handle(Exception ex) { LOG(ex.Message, "ERROR"); if (ex is IOException || (ex is LiteException lex && lex.ErrorCode == LiteException.INVALID_DATAFILE_STATE)) { _exception = ex; _engine?.Close(ex); return false; } return true; } public BsonValue ReadTransform(string collection, BsonValue value) { if (_settings?.ReadTransform is null) return value; return _settings.ReadTransform(collection, value); } } } ================================================ FILE: LiteDB/Engine/FileReader/FileReaderError.cs ================================================ using System; using System.Collections.Generic; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// internal class FileReaderError { public DateTime Created { get; } = DateTime.Now; public FileOrigin Origin { get; set; } public long Position { get; set; } public uint? PageID { get; set; } public PageType PageType { get; set; } public string Collection { get; set; } public string Message { get; set; } public Exception Exception { get; set; } } } ================================================ FILE: LiteDB/Engine/FileReader/FileReaderV7.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Internal class to read old LiteDB v4 database version (datafile v7 structure) /// internal class FileReaderV7 : IFileReader { // v7 uses 4k page size private const int V7_PAGE_SIZE = 4096; private readonly EngineSettings _settings; private Stream _stream; private AesEncryption _aes; private BsonDocument _header; private byte[] _buffer = new byte[V7_PAGE_SIZE]; private bool _disposedValue; private static readonly byte[] arrayByteEmpty = new byte[0]; public IDictionary GetPragmas() => new Dictionary() { { Pragmas.USER_VERSION, _header["userVersion"].AsInt32 }, { Pragmas.CHECKPOINT, 1000 }, { Pragmas.TIMEOUT, 60 }, { Pragmas.LIMIT_SIZE, long.MaxValue }, { Pragmas.UTC_DATE, true }, }; public FileReaderV7(EngineSettings settings) { _settings = settings; } public void Open() { var streamFactory = _settings.CreateDataFactory(false); // open datafile from stream factory _stream = streamFactory.GetStream(true, true); // only userVersion was avaiable in old file format versions _header = this.ReadPage(0); if (_settings.Password == null && _header["salt"].AsBinary.IsFullZero() == false) { throw LiteException.InvalidPassword(); } else if (_settings.Password != null) { if (_header["salt"].AsBinary.IsFullZero()) { throw LiteException.FileNotEncrypted(); } var hash = AesEncryption.HashSHA1(_settings.Password); if (hash.SequenceEqual(_header["password"].AsBinary) == false) { throw LiteException.InvalidPassword(); } } _aes = _settings.Password == null ? null : new AesEncryption(_settings.Password, _header["salt"].AsBinary); } /// /// Check header slots to test if data file is a LiteDB FILE_VERSION = v7 /// public static bool IsVersion(byte[] buffer) { var header = Encoding.UTF8.GetString(buffer, 25, HeaderPage.HEADER_INFO.Length); var version = buffer[52]; return (header == HeaderPage.HEADER_INFO && version == 7); } /// /// Read all collection based on header page /// public IEnumerable GetCollections() { return _header["collections"].AsDocument.Keys; } /// /// Read all indexes from all collection pages /// public IEnumerable GetIndexes(string collection) { var pageID = (uint)_header["collections"].AsDocument[collection].AsInt32; var page = this.ReadPage(pageID); foreach(var index in page["indexes"].AsArray) { string name = Regex.Replace(index["name"].AsString, @"[^a-z0-9]", "", RegexOptions.IgnoreCase | RegexOptions.Compiled); if(name.Length > INDEX_NAME_MAX_LENGTH) { name = name.Substring(0, INDEX_NAME_MAX_LENGTH); } yield return new IndexInfo { Collection = collection, Name = name, Expression = index["expression"].AsString, Unique = index["unique"].AsBoolean }; } } /// /// Get all document using an indexInfo as start point (_id index). /// public IEnumerable GetDocuments(string collection) { var colPageID = (uint)_header["collections"].AsDocument[collection].AsInt32; var col = this.ReadPage(colPageID); var headPageID = (uint)col["indexes"][0]["headPageID"].AsInt32; var indexPages = this.VisitIndexPages(headPageID); foreach(var indexPageID in indexPages) { var indexPage = this.ReadPage(indexPageID); foreach(var node in indexPage["nodes"].AsArray) { var dataBlock = node["dataBlock"]; // if datablock link to a data page if (dataBlock["pageID"].AsInt32 != -1) { // read dataPage and data block var dataPage = this.ReadPage((uint)dataBlock["pageID"].AsInt32); if (dataPage["pageType"].AsInt32 != 4) continue; var block = dataPage["blocks"].AsArray.FirstOrDefault(x => x["index"] == dataBlock["index"])?.AsDocument; if (block == null) continue; // read byte[] from block or from extend pages var data = block["extendPageID"] == -1 ? block["data"].AsBinary : this.ReadExtendData((uint)block["extendPageID"].AsInt32); if (data.Length == 0) continue; // BSON format still same from all version var doc = BsonSerializer.Deserialize(data); // change _id PK in _chunks collection if (collection == "_chunks") { var parts = doc["_id"].AsString.Split('\\'); if (!int.TryParse(parts[1], out var n)) throw LiteException.InvalidFormat("_id"); doc["_id"] = new BsonDocument { ["f"] = parts[0], ["n"] = n }; } yield return doc; } } } } /// /// Read all database pages from v7 structure into a flexible BsonDocument - only read what really needs /// private BsonDocument ReadPage(uint pageID) { if (pageID * V7_PAGE_SIZE > _stream.Length) return null; _stream.Position = pageID * V7_PAGE_SIZE; // v7 uses 4k page size _stream.Read(_buffer, 0, V7_PAGE_SIZE); // decrypt encrypted page (except header page - header are plain data) if (_aes != null && pageID > 0) { _buffer = _aes.Decrypt(_buffer); } var reader = new ByteReader(_buffer); // reading page header var page = new BsonDocument { ["pageID"] = (int)reader.ReadUInt32(), ["pageType"] = (int)reader.ReadByte(), ["prevPageID"] = (int)reader.ReadUInt32(), ["nextPageID"] = (int)reader.ReadUInt32(), ["itemCount"] = (int)reader.ReadUInt16() }; // skip freeByte + reserved reader.ReadBytes(2 + 8); #region Header (1) // read header if (page["pageType"] == 1) { var info = reader.ReadString(27); var ver = reader.ReadByte(); if (string.CompareOrdinal(info, HeaderPage.HEADER_INFO) != 0 || ver != 7) { throw LiteException.InvalidDatabase(); } // skip ChangeID + FreeEmptyPageID + LastPageID reader.ReadBytes(2 + 4 + 4); page["userVersion"] = (int)reader.ReadUInt16(); page["password"] = reader.ReadBytes(20); page["salt"] = reader.ReadBytes(16); page["collections"] = new BsonDocument(); var cols = reader.ReadByte(); for (var i = 0; i < cols; i++) { var name = reader.ReadString(); var colPageID = reader.ReadUInt32(); page["collections"][name] = (int)colPageID; } } #endregion #region Collection (2) // collection page else if (page["pageType"] == 2) { page["collectionName"] = reader.ReadString(); page["indexes"] = new BsonArray(); reader.ReadBytes(12); for(var i = 0; i < 16; i++) { var index = new BsonDocument(); var field = reader.ReadString(); var eq = field.IndexOf('='); if (eq > 0) { index["name"] = field.Substring(0, eq); index["expression"] = field.Substring(eq + 1); } else { index["name"] = field; index["expression"] = "$." + field; } index["unique"] = reader.ReadBoolean(); index["headPageID"] = (int)reader.ReadUInt32(); // skip HeadNode (index) + TailNode + FreeIndexPageID reader.ReadBytes(2 + 6 + 4); if (field.Length > 0) { page["indexes"].AsArray.Add(index); } } } #endregion #region Index (3) else if (page["pageType"] == 3) { page["nodes"] = new BsonArray(); for(var i = 0; i < page["itemCount"].AsInt32; i++) { var node = new BsonDocument { ["index"] = (int)reader.ReadUInt16() }; var levels = reader.ReadByte(); // skip Slot + PrevNode + NextNode reader.ReadBytes(1 + 6 + 6); var length = reader.ReadUInt16(); // skip DataType + KeyValue reader.ReadBytes(1 + length); node["dataBlock"] = new BsonDocument { ["pageID"] = (int)reader.ReadUInt32(), ["index"] = (int)reader.ReadUInt16() }; // reading Prev[0] node["prev"] = new BsonDocument { ["pageID"] = (int)reader.ReadUInt32(), ["index"] = (int)reader.ReadUInt16() }; // reading Next[0] node["next"] = new BsonDocument { ["pageID"] = (int)reader.ReadUInt32(), ["index"] = (int)reader.ReadUInt16() }; // skip Prev/Next[1..N] reader.ReadBytes((levels - 1) * (6 + 6)); page["nodes"].AsArray.Add(node); } } #endregion #region Data (4) else if (page["pageType"] == 4) { page["blocks"] = new BsonArray(); for (var i = 0; i < page["itemCount"].AsInt32; i++) { var block = new BsonDocument { ["index"] = (int)reader.ReadUInt16(), ["extendPageID"] = (int)reader.ReadUInt32() }; var length = reader.ReadUInt16(); block["data"] = reader.ReadBytes(length); page["blocks"].AsArray.Add(block); } } #endregion #region Extend (5) else if (page["pageType"] == 5) { page["data"] = reader.ReadBytes(page["itemCount"].AsInt32); } #endregion return page; } /// /// Read extend data block /// private byte[] ReadExtendData(uint extendPageID) { // read all extended pages and build byte array using (var buffer = new MemoryStream()) { while(extendPageID != uint.MaxValue) { var page = this.ReadPage(extendPageID); if (page["pageType"].AsInt32 != 5) return arrayByteEmpty; buffer.Write(page["data"].AsBinary, 0, page["itemCount"].AsInt32); extendPageID = (uint)page["nextPageID"].AsInt32; } return buffer.ToArray(); } } /// /// Visit all index pages by starting index page. Get a list with all index pages from a collection /// private HashSet VisitIndexPages(uint startPageID) { var toVisit = new HashSet { startPageID }; var visited = new HashSet(); while (toVisit.Count > 0) { var indexPageID = toVisit.First(); toVisit.Remove(indexPageID); var indexPage = this.ReadPage(indexPageID); if (indexPage == null || indexPage["pageType"] != 3) continue; visited.Add(indexPageID); foreach(var node in indexPage["nodes"].AsArray) { var prev = (uint)node["prev"]["pageID"].AsInt32; var next = (uint)node["next"]["pageID"].AsInt32; if (!visited.Contains(prev)) toVisit.Add(prev); if (!visited.Contains(next)) toVisit.Add(next); } } return visited; } protected virtual void Dispose(bool disposing) { if (!_disposedValue) { if (disposing) { _stream?.Dispose(); _aes?.Dispose(); } _disposedValue = true; // no external resources } } public void Dispose() { Dispose(disposing: true); GC.SuppressFinalize(this); } } } ================================================ FILE: LiteDB/Engine/FileReader/FileReaderV8.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Internal class to read all datafile documents - use only Stream - no cache system. Read log file (read commited transtraction) /// internal class FileReaderV8 : IFileReader { private struct PageInfo { public uint PageID; public FileOrigin Origin; public PageType PageType; public long Position; public uint ColID; } private readonly Dictionary _collections = new Dictionary(); private readonly Dictionary> _indexes = new Dictionary>(); private readonly Dictionary> _collectionsDataPages = new Dictionary>(); private readonly Dictionary _pragmas = new Dictionary { [Pragmas.USER_VERSION] = 0, [Pragmas.CHECKPOINT] = 1000, [Pragmas.TIMEOUT] = 60, [Pragmas.UTC_DATE] = true, [Pragmas.LIMIT_SIZE] = long.MaxValue, }; private Stream _dataStream; private Stream _logStream; private readonly IDictionary _logIndexMap = new Dictionary(); private uint _maxPageID; // a file-length based max pageID to be tested private bool _disposed; private readonly EngineSettings _settings; private readonly IList _errors; public FileReaderV8(EngineSettings settings, IList errors) { _settings = settings; _errors = errors; } /// /// Open data file and log file, read header and collection pages /// public void Open() { try { var dataFactory = _settings.CreateDataFactory(); var logFactory = _settings.CreateLogFactory(); // get maxPageID based on both file length _maxPageID = (uint)((dataFactory.GetLength() + logFactory.GetLength()) / PAGE_SIZE); _dataStream = dataFactory.GetStream(true, false); _dataStream.Position = 0; if (logFactory.Exists()) { _logStream = logFactory.GetStream(false, true); this.LoadIndexMap(); } this.LoadPragmas(); this.LoadDataPages(); this.LoadCollections(); this.LoadIndexes(); } catch (Exception ex) { this.HandleError(ex, new PageInfo()); } } /// /// Read all pragma values /// public IDictionary GetPragmas() => _pragmas; /// /// Read all collection based on header page /// public IEnumerable GetCollections() => _collections.Keys; /// /// Read all indexes from all collection pages (except _id index) /// public IEnumerable GetIndexes(string collection) => _indexes.ContainsKey(collection) ? _indexes[collection] : new List(); /// /// Read all documents from current collection with NO index use - read direct from free lists /// There is no document order /// public IEnumerable GetDocuments(string collection) { if (!_collections.ContainsKey(collection)) yield break; var colID = _collections[collection]; if (!_collectionsDataPages.ContainsKey(colID)) yield break; var dataPages = _collectionsDataPages[colID]; var uniqueIDs = new HashSet(); foreach (var dataPage in dataPages) { var page = this.ReadPage(dataPage, out var pageInfo); if (page.Fail) { this.HandleError(page.Exception, pageInfo); continue; } var buffer = page.Value.Buffer; var itemsCount = page.Value.ItemsCount; var highestIndex = page.Value.HighestIndex; // no items if (itemsCount == 0 || highestIndex == byte.MaxValue) continue; for (int i = 0; i <= highestIndex; i++) { BsonDocument doc; // try/catch block per dataBlock extend=false try { // resolve slot address var positionAddr = BasePage.CalcPositionAddr((byte)i); var lengthAddr = BasePage.CalcLengthAddr((byte)i); // read segment position/length var position = buffer.ReadUInt16(positionAddr); var length = buffer.ReadUInt16(lengthAddr); // empty slot if (position == 0) continue; ENSURE(position > 0 && length > 0, "Invalid footer ref position {0} with length {1}", position, length); ENSURE(position + length < PAGE_SIZE, "Invalid footer ref position {0} with length {1}", position, length); // get segment slice var segment = buffer.Slice(position, length); var extend = segment.ReadBool(DataBlock.P_EXTEND); var nextBlock = segment.ReadPageAddress(DataBlock.P_NEXT_BLOCK); var data = segment.Slice(DataBlock.P_BUFFER, segment.Count - DataBlock.P_BUFFER); if (extend) continue; // ignore extend block (start only in first data block) // merge all data block content into a single memory stream and read bson document using (var mem = new MemoryStream()) { // write first block mem.Write(data.Array, data.Offset, data.Count); while (nextBlock.IsEmpty == false) { // read next page block var nextPage = this.ReadPage(nextBlock.PageID, out pageInfo); if (nextPage.Fail) throw nextPage.Exception; var nextBuffer = nextPage.Value.Buffer; // make page validations ENSURE(nextPage.Value.PageType == PageType.Data, "Invalid PageType (excepted Data, get {0})", nextPage.Value.PageType); ENSURE(nextPage.Value.ColID == colID, "Invalid ColID in this page (expected {0}, get {1})", colID, nextPage.Value.ColID); ENSURE(nextPage.Value.ItemsCount > 0, "Page with no items count"); // read slot address positionAddr = BasePage.CalcPositionAddr(nextBlock.Index); lengthAddr = BasePage.CalcLengthAddr(nextBlock.Index); // read segment position/length position = nextBuffer.ReadUInt16(positionAddr); length = nextBuffer.ReadUInt16(lengthAddr); // empty slot ENSURE(length > 0, "Last DataBlock request a next extend to {0}, but this block are empty footer", nextBlock); // get segment slice segment = nextBuffer.Slice(position, length); extend = segment.ReadBool(DataBlock.P_EXTEND); nextBlock = segment.ReadPageAddress(DataBlock.P_NEXT_BLOCK); data = segment.Slice(DataBlock.P_BUFFER, segment.Count - DataBlock.P_BUFFER); ENSURE(extend == true, "Next datablock always be an extend. Invalid data block {0}", nextBlock); // write data on memorystream mem.Write(data.Array, data.Offset, data.Count); } var docBytes = mem.ToArray(); // read all data array in bson document using (var r = new BufferReader(docBytes, false)) { var docResult = r.ReadDocument(); var id = docResult.Value["_id"]; ENSURE(!(id == BsonValue.Null || id == BsonValue.MinValue || id == BsonValue.MaxValue), "Invalid _id value: {0}", id); ENSURE(uniqueIDs.Contains(id) == false, "Duplicated _id value: {0}", id); uniqueIDs.Add(id); if (docResult.Fail) { this.HandleError(docResult.Exception, pageInfo); } doc = docResult.Value; } } } // try/catch block per dataBlock extend=false catch (Exception ex) { this.HandleError(ex, pageInfo); doc = null; } if (doc != null) { yield return doc; } } } } /// /// Load all pragmas from header page /// private void LoadPragmas() { var result = this.ReadPage(0, out var pageInfo); if (result.Ok) { var buffer = result.Value.Buffer; _pragmas[Pragmas.USER_VERSION] = buffer.ReadInt32(EnginePragmas.P_USER_VERSION); _pragmas[Pragmas.CHECKPOINT] = buffer.ReadInt32(EnginePragmas.P_CHECKPOINT); _pragmas[Pragmas.TIMEOUT] = buffer.ReadInt32(EnginePragmas.P_TIMEOUT); _pragmas[Pragmas.UTC_DATE] = buffer.ReadBool(EnginePragmas.P_UTC_DATE); _pragmas[Pragmas.LIMIT_SIZE] = buffer.ReadInt64(EnginePragmas.P_LIMIT_SIZE); } else { this.HandleError(result.Exception, pageInfo); } } /// /// Read all file (and log) to find all data pages (and store groupby colPageID) /// private void LoadDataPages() { var header = this.ReadPage(0, out var pageInfo).GetValue(); var lastPageID = header.Buffer.ReadUInt32(HeaderPage.P_LAST_PAGE_ID); //TOFO: tentar não usar esse valor como referencia (varrer tudo) ENSURE(lastPageID <= _maxPageID, "LastPageID {0} should be less or equals to maxPageID {1}", lastPageID, _maxPageID); for (uint i = 0; i <= lastPageID; i++) { var result = this.ReadPage(i, out pageInfo); if (result.Ok) { var page = result.Value; if (page.PageType == PageType.Data) { if (_collectionsDataPages.TryGetValue(page.ColID, out var list)) { list.Add(page.PageID); } else { _collectionsDataPages[page.ColID] = new List { page.PageID }; } } } else { this.HandleError(result.Exception, pageInfo); } } } /// /// Load all collections from header OR via all data-pages ColID /// private void LoadCollections() { var header = this.ReadPage(0, out var pageInfo).GetValue(); var area = header.Buffer.Slice(HeaderPage.P_COLLECTIONS, HeaderPage.COLLECTIONS_SIZE); using (var r = new BufferReader(new[] { area }, false)) { var result = r.ReadDocument(); // can't be fully read var collections = result.Value; foreach (var key in collections.Keys) { // collections.key = collection name // collections.value = collection PageID var colID = collections[key]; if (colID.IsNumber == false) { this.HandleError($"ColID expect a number but get {colID}", pageInfo); } else { _collections[key] = (uint)collections[key].AsInt32; } } if (result.Fail) { this.HandleError(result.Exception, pageInfo); } } // for each collection loaded by datapages, check if exists in _collections foreach(var collection in _collectionsDataPages) { if (!_collections.ContainsValue(collection.Key)) { _collections["col_" + collection.Key] = collection.Key; } } } /// /// Load all indexes for all collections /// private void LoadIndexes() { foreach (var collection in _collections) { var result = this.ReadPage(collection.Value, out var pageInfo); if (result.Fail) { this.HandleError(result.Exception, pageInfo); continue; } var page = result.Value; var buffer = page.Buffer; var count = buffer.ReadByte(CollectionPage.P_INDEXES); // 1 byte var position = CollectionPage.P_INDEXES + 1; // handle error per collection try { for (var i = 0; i < count; i++) { position += 2; // skip: slot (1 byte) + indexType (1 byte) var name = buffer.ReadCString(position, out var nameLength); position += nameLength; var expr = buffer.ReadCString(position, out var exprLength); position += exprLength; var unique = buffer.ReadBool(position); position++; position += 15; // head 5 bytes, tail 5 bytes, reserved 1 byte, freeIndexPageList 4 bytes ENSURE(!string.IsNullOrEmpty(name), "Index name can't be empty (collection {0} - index: {1})", collection.Key, i); ENSURE(!string.IsNullOrEmpty(expr), "Index expression can't be empty (collection {0} - index: {1})", collection.Key, i); var indexInfo = new IndexInfo { Collection = collection.Key, Name = name, Expression = expr, Unique = unique }; // ignore _id index if (name == "_id") continue; if (_indexes.TryGetValue(collection.Key, out var indexInfos)) { indexInfos.Add(indexInfo); } else { _indexes[collection.Key] = new List { indexInfo }; } } } catch (Exception ex) { this.HandleError(ex, pageInfo); continue; } } } /// /// Check header slots to test if data file is a LiteDB FILE_VERSION = v8 /// public static bool IsVersion(byte[] buffer) { var header = Encoding.UTF8.GetString(buffer, HeaderPage.P_HEADER_INFO, HeaderPage.HEADER_INFO.Length); var version = buffer[HeaderPage.P_FILE_VERSION]; // buffer[0] = 1 when datafile is encrypted (this feature was added in v8 only) // all other version has this buffer[0] = 0 return (header == HeaderPage.HEADER_INFO && version == HeaderPage.FILE_VERSION) || buffer[0] == 1; } /// /// Load log file to build index map (wal map index) /// private void LoadIndexMap() { var buffer = new PageBuffer(new byte[PAGE_SIZE], 0, 0); var transactions = new Dictionary>(); var confirmedTransactions = new List(); var currentPosition = 0L; var pageInfo = new PageInfo { Origin = FileOrigin.Log }; _logStream.Position = 0; while (_logStream.Position < _logStream.Length) { try { _logStream.Position = pageInfo.Position = currentPosition; var read = _logStream.Read(buffer.Array, buffer.Offset, PAGE_SIZE); if (buffer.IsBlank()) { // this should not happen, but if it does, it means there's a zeroed page in the file // just skip it currentPosition += PAGE_SIZE; continue; } var pageID = buffer.ReadUInt32(BasePage.P_PAGE_ID); var isConfirmed = buffer.ReadBool(BasePage.P_IS_CONFIRMED); var transactionID = buffer.ReadUInt32(BasePage.P_TRANSACTION_ID); pageInfo.PageID = pageID; pageInfo.ColID = buffer.ReadUInt32(BasePage.P_COL_ID); ENSURE(read == PAGE_SIZE, "Page position {0} read only than {1} bytes (instead {2})", _logStream, read, PAGE_SIZE); var position = new PagePosition(pageID, currentPosition); if (transactions.TryGetValue(transactionID, out var list)) { list.Add(position); } else { transactions[transactionID] = new List { position }; } // when page confirm transaction, add to confirmed transaction list if (isConfirmed) { confirmedTransactions.Add(transactionID); } } catch (Exception ex) { this.HandleError(ex, pageInfo); } finally { currentPosition += PAGE_SIZE; } } // now, log index map using only confirmed transactions (override with last transactionID) foreach (var transactionID in confirmedTransactions) { var mapIndexPages = transactions[transactionID]; // update foreach (var page in mapIndexPages) { _logIndexMap[page.PageID] = page.Position; } } } /// /// Read page from data/log stream (checks in logIndexMap file/position). Capture any exception here, but don't call HandleError /// private Result ReadPage(uint pageID, out PageInfo pageInfo) { pageInfo = new PageInfo { PageID = pageID }; try { ENSURE(pageID <= _maxPageID, "PageID: {0} should be less then or equals to maxPageID: {1}", pageID, _maxPageID); var pageBuffer = new PageBuffer(new byte[PAGE_SIZE], 0, PAGE_SIZE); Stream stream; int read; // get data from log file or original file if (_logIndexMap.TryGetValue(pageID, out pageInfo.Position)) { pageInfo.Origin = FileOrigin.Log; stream = _logStream; } else { pageInfo.Origin = FileOrigin.Data; pageInfo.Position = BasePage.GetPagePosition(pageID); stream = _dataStream; } stream.Position = pageInfo.Position; read = stream.Read(pageBuffer.Array, pageBuffer.Offset, pageBuffer.Count); ENSURE(read == PAGE_SIZE, "Page position {0} read only than {1} bytes (instead {2})", stream.Position, read, PAGE_SIZE); var page = new BasePage(pageBuffer); pageInfo.ColID = page.ColID; ENSURE(page.PageID == pageID, "Expect read pageID: {0} but header contains pageID: {1}", pageID, page.PageID); return page; } catch (Exception ex) { return new Result(null, ex); } } /// /// Handle any error avoiding throw exceptions during process. If exception must stop process (ioexceptions), throw exception /// Add errors to log and continue reading data file /// private void HandleError(Exception ex, PageInfo pageInfo) { var collection = _collections.FirstOrDefault(x => x.Value == pageInfo.ColID).Key; _errors.Add(new FileReaderError { Position = pageInfo.Position, Origin = pageInfo.Origin, PageID = pageInfo.PageID, PageType = pageInfo.PageType, Collection = collection, Message = ex.Message, Exception = ex, }); if (ex is IOException) { // Código de erros HResult do IOException // https://learn.microsoft.com/pt-br/windows/win32/debug/system-error-codes--0-499- throw ex; } } private void HandleError(string message, PageInfo pageInfo) => this.HandleError(new Exception(message), pageInfo); protected virtual void Dispose(bool disposing) { if (!_disposed) { _dataStream?.Dispose(); _logStream?.Dispose(); _disposed = true; } } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } } } ================================================ FILE: LiteDB/Engine/FileReader/IFileReader.cs ================================================ using System; using System.Collections.Generic; namespace LiteDB.Engine { /// /// Interface to read current or old datafile structure - Used to shirnk/upgrade datafile from old LiteDB versions /// interface IFileReader : IDisposable { /// /// Open and initialize file reader (run before any other command) /// void Open(); /// /// Get all database pragma variables /// IDictionary GetPragmas(); /// /// Get all collections name from database /// IEnumerable GetCollections(); /// /// Get all indexes from collection (except _id index) /// IEnumerable GetIndexes(string name); /// /// Get all documents from a collection /// IEnumerable GetDocuments(string collection); } } ================================================ FILE: LiteDB/Engine/FileReader/IndexInfo.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { internal class IndexInfo { public string Collection { get; set; } public string Name { get; set; } public string Expression { get; set; } public bool Unique { get; set; } } } ================================================ FILE: LiteDB/Engine/FileReader/Legacy/AesEncryption.cs ================================================ using System; using System.Security.Cryptography; using System.IO; using System.Text; using static LiteDB.Constants; namespace LiteDB { /// /// Encryption AES wrapper to encrypt data pages /// internal class AesEncryption : IDisposable { private Aes _aes; public AesEncryption(string password, byte[] salt) { _aes = Aes.Create(); _aes.Padding = PaddingMode.Zeros; var pdb = new Rfc2898DeriveBytes(password, salt); using (pdb as IDisposable) { _aes.Key = pdb.GetBytes(32); _aes.IV = pdb.GetBytes(16); } } /// /// Encrypt byte array returning new encrypted byte array with same length of original array (PAGE_SIZE) /// public byte[] Encrypt(byte[] bytes) { using (var encryptor = _aes.CreateEncryptor()) using (var stream = new MemoryStream()) using (var crypto = new CryptoStream(stream, encryptor, CryptoStreamMode.Write)) { crypto.Write(bytes, 0, bytes.Length); crypto.FlushFinalBlock(); stream.Position = 0; var encrypted = new byte[stream.Length]; stream.Read(encrypted, 0, encrypted.Length); return encrypted; } } /// /// Decrypt and byte array returning a new byte array /// public byte[] Decrypt(byte[] encryptedValue, int offset = 0, int count = -1) { using (var decryptor = _aes.CreateDecryptor()) using (var stream = new MemoryStream()) using (var crypto = new CryptoStream(stream, decryptor, CryptoStreamMode.Write)) { crypto.Write(encryptedValue, offset, count == -1 ? encryptedValue.Length : count); crypto.FlushFinalBlock(); stream.Position = 0; var decryptedBytes = new byte[stream.Length]; stream.Read(decryptedBytes, 0, decryptedBytes.Length); return decryptedBytes; } } /// /// Hash a password using SHA1 just to verify password /// public static byte[] HashSHA1(string password) { var sha = SHA1.Create(); var shaBytes = sha.ComputeHash(Encoding.UTF8.GetBytes(password)); return shaBytes; } /// /// Generate a salt key that will be stored inside first page database /// /// public static byte[] Salt(int maxLength = 16) { var salt = new byte[maxLength]; { var rng = RandomNumberGenerator.Create(); using (rng as IDisposable) rng.GetBytes(salt); } return salt; } public void Dispose() { if (_aes != null) { _aes.Dispose(); _aes = null; } } } } ================================================ FILE: LiteDB/Engine/FileReader/Legacy/BsonReader.cs ================================================ using System; using System.Text; using static LiteDB.Constants; namespace LiteDB { /// /// Internal class to deserialize a byte[] into a BsonDocument using BSON data format /// internal class BsonReader { private readonly bool _utcDate = false; public BsonReader(bool utcDate) { _utcDate = utcDate; } /// /// Main method - deserialize using ByteReader helper /// public BsonDocument Deserialize(byte[] bson) { return this.ReadDocument(new ByteReader(bson)); } /// /// Read a BsonDocument from reader /// public BsonDocument ReadDocument(ByteReader reader) { var length = reader.ReadInt32(); var end = reader.Position + length - 5; var obj = new BsonDocument(); while (reader.Position < end) { var value = this.ReadElement(reader, out string name); obj.RawValue[name] = value; } reader.ReadByte(); // zero return obj; } /// /// Read an BsonArray from reader /// public BsonArray ReadArray(ByteReader reader) { var length = reader.ReadInt32(); var end = reader.Position + length - 5; var arr = new BsonArray(); while (reader.Position < end) { var value = this.ReadElement(reader, out string name); arr.Add(value); } reader.ReadByte(); // zero return arr; } /// /// Reads an element (key-value) from an reader /// private BsonValue ReadElement(ByteReader reader, out string name) { var type = reader.ReadByte(); name = reader.ReadCString(); if (type == 0x01) // Double { return reader.ReadDouble(); } else if (type == 0x02) // String { return reader.ReadBsonString(); } else if (type == 0x03) // Document { return this.ReadDocument(reader); } else if (type == 0x04) // Array { return this.ReadArray(reader); } else if (type == 0x05) // Binary { var length = reader.ReadInt32(); var subType = reader.ReadByte(); var bytes = reader.ReadBytes(length); switch (subType) { case 0x00: return bytes; case 0x04: return new Guid(bytes); } } else if (type == 0x07) // ObjectId { return new ObjectId(reader.ReadBytes(12)); } else if (type == 0x08) // Boolean { return reader.ReadBoolean(); } else if (type == 0x09) // DateTime { var ts = reader.ReadInt64(); // catch specific values for MaxValue / MinValue #19 if (ts == 253402300800000) return DateTime.MaxValue; if (ts == -62135596800000) return DateTime.MinValue; var date = BsonValue.UnixEpoch.AddMilliseconds(ts); return _utcDate ? date : date.ToLocalTime(); } else if (type == 0x0A) // Null { return BsonValue.Null; } else if (type == 0x10) // Int32 { return reader.ReadInt32(); } else if (type == 0x12) // Int64 { return reader.ReadInt64(); } else if (type == 0x13) // Decimal { return reader.ReadDecimal(); } else if (type == 0xFF) // MinKey { return BsonValue.MinValue; } else if (type == 0x7F) // MaxKey { return BsonValue.MaxValue; } throw new NotSupportedException("BSON type not supported"); } } } ================================================ FILE: LiteDB/Engine/FileReader/Legacy/ByteReader.cs ================================================ using LiteDB.Engine; using System; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal class ByteReader { private readonly byte[] _buffer; private readonly int _length; private int _pos; public int Position { get { return _pos; } set { _pos = value; } } public ByteReader(byte[] buffer) { _buffer = buffer; _length = buffer.Length; _pos = 0; } public void Skip(int length) { _pos += length; } #region Native data types public Byte ReadByte() { var value = _buffer[_pos]; _pos++; return value; } public Boolean ReadBoolean() { var value = _buffer[_pos]; _pos++; return value == 0 ? false : true; } public UInt16 ReadUInt16() { _pos += 2; return BitConverter.ToUInt16(_buffer, _pos - 2); } public UInt32 ReadUInt32() { _pos += 4; return BitConverter.ToUInt32(_buffer, _pos - 4); } public UInt64 ReadUInt64() { _pos += 8; return BitConverter.ToUInt64(_buffer, _pos - 8); } public Int16 ReadInt16() { _pos += 2; return BitConverter.ToInt16(_buffer, _pos - 2); } public Int32 ReadInt32() { _pos += 4; return BitConverter.ToInt32(_buffer, _pos - 4); } public Int64 ReadInt64() { _pos += 8; return BitConverter.ToInt64(_buffer, _pos - 8); } public Single ReadSingle() { _pos += 4; return BitConverter.ToSingle(_buffer, _pos - 4); } public Double ReadDouble() { _pos += 8; return BitConverter.ToDouble(_buffer, _pos - 8); } public Decimal ReadDecimal() { _pos += 16; var a = BitConverter.ToInt32(_buffer, _pos - 16); var b = BitConverter.ToInt32(_buffer, _pos - 12); var c = BitConverter.ToInt32(_buffer, _pos - 8); var d = BitConverter.ToInt32(_buffer, _pos - 4); return new Decimal(new int[] { a, b, c, d }); } public byte[] ReadBytes(int count) { var buffer = new byte[count]; System.Buffer.BlockCopy(_buffer, _pos, buffer, 0, count); _pos += count; return buffer; } #endregion #region Extended types public string ReadString() { var length = this.ReadInt32(); var str = Encoding.UTF8.GetString(_buffer, _pos, length); _pos += length; return str; } public string ReadString(int length) { var str = Encoding.UTF8.GetString(_buffer, _pos, length); _pos += length; return str; } /// /// Read BSON string add \0x00 at and of string and add this char in length before /// public string ReadBsonString() { var length = this.ReadInt32(); var str = Encoding.UTF8.GetString(_buffer, _pos, length - 1); _pos += length; return str; } public string ReadCString() { var pos = _pos; var length = 0; while (true) { if (_buffer[pos] == 0x00) { var str = Encoding.UTF8.GetString(_buffer, _pos, length); _pos += length + 1; // read last 0x00 return str; } else if (pos > _length) { return "_"; } pos++; length++; } } public DateTime ReadDateTime() { // fix #921 converting index key into LocalTime // this is not best solution because uctDate must be a global parameter // this will be review in v5 var date = new DateTime(this.ReadInt64(), DateTimeKind.Utc); return date.ToLocalTime(); } public Guid ReadGuid() { return new Guid(this.ReadBytes(16)); } public ObjectId ReadObjectId() { return new ObjectId(this.ReadBytes(12)); } // Legacy PageAddress structure: [uint, ushort] // public PageAddress ReadPageAddress() // { // return new PageAddress(this.ReadUInt32(), this.ReadUInt16()); // } public BsonValue ReadBsonValue(ushort length) { var type = (BsonType)this.ReadByte(); switch (type) { case BsonType.Null: return BsonValue.Null; case BsonType.Int32: return this.ReadInt32(); case BsonType.Int64: return this.ReadInt64(); case BsonType.Double: return this.ReadDouble(); case BsonType.Decimal: return this.ReadDecimal(); case BsonType.String: return this.ReadString(length); case BsonType.Document: return new BsonReader(false).ReadDocument(this); case BsonType.Array: return new BsonReader(false).ReadArray(this); case BsonType.Binary: return this.ReadBytes(length); case BsonType.ObjectId: return this.ReadObjectId(); case BsonType.Guid: return this.ReadGuid(); case BsonType.Boolean: return this.ReadBoolean(); case BsonType.DateTime: return this.ReadDateTime(); case BsonType.MinValue: return BsonValue.MinValue; case BsonType.MaxValue: return BsonValue.MaxValue; } throw new NotImplementedException(); } #endregion } } ================================================ FILE: LiteDB/Engine/ILiteEngine.cs ================================================ using System; using System.Collections.Generic; namespace LiteDB.Engine { public interface ILiteEngine : IDisposable { int Checkpoint(); long Rebuild(RebuildOptions options); bool BeginTrans(); bool Commit(); bool Rollback(); IBsonDataReader Query(string collection, Query query); int Insert(string collection, IEnumerable docs, BsonAutoId autoId); int Update(string collection, IEnumerable docs); int UpdateMany(string collection, BsonExpression transform, BsonExpression predicate); int Upsert(string collection, IEnumerable docs, BsonAutoId autoId); int Delete(string collection, IEnumerable ids); int DeleteMany(string collection, BsonExpression predicate); bool DropCollection(string name); bool RenameCollection(string name, string newName); bool EnsureIndex(string collection, string name, BsonExpression expression, bool unique); bool DropIndex(string collection, string name); BsonValue Pragma(string name); bool Pragma(string name, BsonValue value); } } ================================================ FILE: LiteDB/Engine/LiteEngine.cs ================================================ using LiteDB.Utils; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// A public class that take care of all engine data structure access - it´s basic implementation of a NoSql database /// Its isolated from complete solution - works on low level only (no linq, no poco... just BSON objects) /// [ThreadSafe] /// public partial class LiteEngine : ILiteEngine { #region Services instances private LockService _locker; private DiskService _disk; private WalIndexService _walIndex; private HeaderPage _header; private TransactionMonitor _monitor; private SortDisk _sortDisk; private EngineState _state; // immutable settings private readonly EngineSettings _settings; /// /// All system read-only collections for get metadata database information /// private Dictionary _systemCollections; /// /// Sequence cache for collections last ID (for int/long numbers only) /// private ConcurrentDictionary _sequences; #endregion #region Ctor /// /// Initialize LiteEngine using connection memory database /// public LiteEngine() : this(new EngineSettings { DataStream = new MemoryStream() }) { } /// /// Initialize LiteEngine using connection string using key=value; parser /// public LiteEngine(string filename) : this (new EngineSettings { Filename = filename }) { } /// /// Initialize LiteEngine using initial engine settings /// public LiteEngine(EngineSettings settings) { _settings = settings ?? throw new ArgumentNullException(nameof(settings)); this.Open(); } #endregion #region Open & Close internal bool Open() { LOG($"start initializing{(_settings.ReadOnly ? " (readonly)" : "")}", "ENGINE"); _systemCollections = new Dictionary(StringComparer.OrdinalIgnoreCase); _sequences = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); try { // initialize engine state _state = new EngineState(this, _settings); // before initilize, try if must be upgrade if (_settings.Upgrade) this.TryUpgrade(); // initialize disk service (will create database if needed) _disk = new DiskService(_settings, _state, MEMORY_SEGMENT_SIZES); // read page with no cache ref (has a own PageBuffer) - do not Release() support var buffer = _disk.ReadFull(FileOrigin.Data).First(); // if first byte are 1 this datafile are encrypted but has do defined password to open if (buffer[0] == 1) throw new LiteException(0, "This data file is encrypted and needs a password to open"); // read header database page _header = new HeaderPage(buffer); // if database is set to invalid state, need rebuild if (buffer[HeaderPage.P_INVALID_DATAFILE_STATE] != 0 && _settings.AutoRebuild) { // dispose disk access to rebuild process _disk.Dispose(); _disk = null; // rebuild database, create -backup file and include _rebuild_errors collection this.Recovery(_header.Pragmas.Collation); // re-initialize disk service _disk = new DiskService(_settings, _state, MEMORY_SEGMENT_SIZES); // read buffer header page again buffer = _disk.ReadFull(FileOrigin.Data).First(); _header = new HeaderPage(buffer); } // test for same collation if (_settings.Collation != null && _settings.Collation.ToString() != _header.Pragmas.Collation.ToString()) { throw new LiteException(0, $"Datafile collation '{_header.Pragmas.Collation}' is different from engine settings. Use Rebuild database to change collation."); } // initialize locker service _locker = new LockService(_header.Pragmas); // initialize wal-index service _walIndex = new WalIndexService(_disk, _locker); // if exists log file, restore wal index references (can update full _header instance) if (_disk.GetFileLength(FileOrigin.Log) > 0) { _walIndex.RestoreIndex(ref _header); } // initialize sort temp disk _sortDisk = new SortDisk(_settings.CreateTempFactory(), CONTAINER_SORT_SIZE, _header.Pragmas); // initialize transaction monitor as last service _monitor = new TransactionMonitor(_header, _locker, _disk, _walIndex); // register system collections this.InitializeSystemCollections(); LOG("initialization completed", "ENGINE"); return true; } catch (Exception ex) { LOG(ex.Message, "ERROR"); this.Close(ex); throw; } } /// /// Normal close process: /// - Stop any new transaction /// - Stop operation loops over database (throw in SafePoint) /// - Wait for writer queue /// - Close disks /// - Clean variables /// internal List Close() { if (_state.Disposed) return new List(); _state.Disposed = true; var tc = new TryCatch(); // stop running all transactions tc.Catch(() => _monitor?.Dispose()); if (_header?.Pragmas.Checkpoint > 0) { // do a soft checkpoint (only if exclusive lock is possible) tc.Catch(() => _walIndex?.TryCheckpoint()); } // close all disk streams (and delete log if empty) tc.Catch(() => _disk?.Dispose()); // delete sort temp file tc.Catch(() => _sortDisk?.Dispose()); // dispose lockers tc.Catch(() => _locker?.Dispose()); return tc.Exceptions; } /// /// Exception close database: /// - Stop diskQueue /// - Stop any disk read/write (dispose) /// - Dispose sort disk /// - Dispose locker /// - Checks Exception type for INVALID_DATAFILE_STATE to auto rebuild on open /// internal List Close(Exception ex) { if (_state.Disposed) return new List(); _state.Disposed = true; var tc = new TryCatch(ex); tc.Catch(() => _monitor?.Dispose()); // close disks streams tc.Catch(() => _disk?.Dispose()); // close sort disk service tc.Catch(() => _sortDisk?.Dispose()); // close engine lock service tc.Catch(() => _locker?.Dispose()); if (tc.InvalidDatafileState) { // mark byte = 1 in HeaderPage.P_INVALID_DATAFILE_STATE - will open in auto-rebuild // this method will throw no errors tc.Catch(() => _disk.MarkAsInvalidState()); } return tc.Exceptions; } #endregion #if DEBUG // exposes for unit tests internal TransactionMonitor GetMonitor() => _monitor; internal Action SimulateDiskReadFail { set => _state.SimulateDiskReadFail = value; } internal Action SimulateDiskWriteFail { set => _state.SimulateDiskWriteFail = value; } #endif /// /// Run checkpoint command to copy log file into data file /// public int Checkpoint() => _walIndex.Checkpoint(); public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { this.Close(); } } } ================================================ FILE: LiteDB/Engine/Pages/BasePage.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { internal enum PageType { Empty = 0, Header = 1, Collection = 2, Index = 3, Data = 4 } internal class BasePage { protected readonly PageBuffer _buffer; /// /// Bytes used in each offset slot (to store segment position (2) + length (2)) /// public const int SLOT_SIZE = 4; #region Buffer Field Positions public const int P_PAGE_ID = 0; // 00-03 [uint] public const int P_PAGE_TYPE = 4; // 04-04 [byte] public const int P_PREV_PAGE_ID = 5; // 05-08 [uint] public const int P_NEXT_PAGE_ID = 9; // 09-12 [uint] public const int P_INITIAL_SLOT = 13; // 13-13 [byte] public const int P_TRANSACTION_ID = 14; // 14-17 [uint] public const int P_IS_CONFIRMED = 18; // 18-18 [byte] public const int P_COL_ID = 19; // 19-22 [uint] public const int P_ITEMS_COUNT = 23; // 23-23 [byte] public const int P_USED_BYTES = 24; // 24-25 [ushort] public const int P_FRAGMENTED_BYTES = 26; // 26-27 [ushort] public const int P_NEXT_FREE_POSITION = 28; // 28-29 [ushort] public const int P_HIGHEST_INDEX = 30; // 30-30 [byte] #endregion /// /// Represent page number - start in 0 with HeaderPage [4 bytes] /// public uint PageID { get; } /// /// Indicate the page type [1 byte] /// public PageType PageType { get; private set; } /// /// Represent the previous page. Used for page-sequences - MaxValue represent that has NO previous page [4 bytes] /// public uint PrevPageID { get; set; } /// /// Represent the next page. Used for page-sequences - MaxValue represent that has NO next page [4 bytes] /// public uint NextPageID { get; set; } /// /// Get/Set where this page are in free list slot [1 byte] /// Used only in DataPage (0-4) and IndexPage (0-1) - when new or not used: 255 /// DataPage: 0 (7344 - 8160 free space) - 1 (6120 - 7343) - 2 (4896 - 6119) - 3 (2448 - 4895) - 4 (0 - 2447) /// IndexPage 0 (1400 - 8160 free bytes) - 1 (0 - 1399 bytes free) /// public byte PageListSlot { get; set; } /// /// Indicate how many items are used inside this page [1 byte] /// public byte ItemsCount { get; private set; } /// /// Get how many bytes are used on content area (exclude header and footer blocks) [2 bytes] /// public ushort UsedBytes { get; private set; } /// /// Get how many bytes are fragmented inside this page (free blocks inside used blocks) [2 bytes] /// public ushort FragmentedBytes { get; private set; } /// /// Get next free position. Starts with 32 (first byte after header) - There is no fragmentation after this [2 bytes] /// public ushort NextFreePosition { get; private set; } /// /// Get last (highest) used index slot - use byte.MaxValue for empty [1 byte] /// public byte HighestIndex { get; private set; } /// /// Get how many free bytes (including fragmented bytes) are in this page (content space) - Will return 0 bytes if page are full (or with max 255 items) /// public int FreeBytes => this.ItemsCount == byte.MaxValue ? 0 : PAGE_SIZE - PAGE_HEADER_SIZE - this.UsedBytes - this.FooterSize; /// /// Get how many bytes are used in footer page at this moment /// ((HighestIndex + 1) * 4 bytes per slot: [2 for position, 2 for length]) /// public int FooterSize => (this.HighestIndex == byte.MaxValue ? 0 : // no items in page ((this.HighestIndex + 1) * SLOT_SIZE)); // 4 bytes PER item (2 to position + 2 to length) - need consider HighestIndex used /// /// Set in all datafile pages the page id about data/index collection. Useful if want re-build database without any index [4 bytes] /// public uint ColID { get; set; } /// /// Represent transaction ID that was stored [4 bytes] /// public uint TransactionID { get; set; } /// /// Used in WAL, define this page is last transaction page and are confirmed on disk [1 byte] /// public bool IsConfirmed { get; set; } /// /// Set this pages that was changed and must be persist in disk [not peristable] /// public bool IsDirty { get; set; } /// /// Get page buffer instance /// public PageBuffer Buffer => _buffer; #region Initialize/Update buffer /// /// Create new Page based on pre-defined PageID and PageType /// public BasePage(PageBuffer buffer, uint pageID, PageType pageType) { _buffer = buffer; DEBUG(buffer.Slice(PAGE_HEADER_SIZE, PAGE_SIZE - PAGE_HEADER_SIZE - 1).All(0), "new page buffer must be empty before use in a new page"); // page information this.PageID = pageID; this.PageType = pageType; this.PrevPageID = uint.MaxValue; this.NextPageID = uint.MaxValue; this.PageListSlot = byte.MaxValue; // no slot // transaction information this.ColID = uint.MaxValue; this.TransactionID = uint.MaxValue; this.IsConfirmed = false; // block information this.ItemsCount = 0; this.UsedBytes = 0; this.FragmentedBytes = 0; this.NextFreePosition = PAGE_HEADER_SIZE; // 32 this.HighestIndex = byte.MaxValue; // empty - not used yet // default values this.IsDirty = false; // writing direct into buffer in Ctor() because there is no change later (write once) _buffer.Write(this.PageID, P_PAGE_ID); _buffer.Write((byte)this.PageType, P_PAGE_TYPE); } /// /// Read header data from byte[] buffer into local variables /// using fixed position be be faster than use BufferReader /// public BasePage(PageBuffer buffer) { _buffer = buffer; // page information this.PageID = _buffer.ReadUInt32(P_PAGE_ID); this.PageType = (PageType)_buffer.ReadByte(P_PAGE_TYPE); this.PrevPageID = _buffer.ReadUInt32(P_PREV_PAGE_ID); this.NextPageID = _buffer.ReadUInt32(P_NEXT_PAGE_ID); this.PageListSlot = _buffer.ReadByte(P_INITIAL_SLOT); // transaction information this.TransactionID = _buffer.ReadUInt32(P_TRANSACTION_ID); this.IsConfirmed = _buffer.ReadBool(P_IS_CONFIRMED); this.ColID = _buffer.ReadUInt32(P_COL_ID); // blocks information this.ItemsCount = _buffer.ReadByte(P_ITEMS_COUNT); this.UsedBytes = _buffer.ReadUInt16(P_USED_BYTES); this.FragmentedBytes = _buffer.ReadUInt16(P_FRAGMENTED_BYTES); this.NextFreePosition = _buffer.ReadUInt16(P_NEXT_FREE_POSITION); this.HighestIndex = _buffer.ReadByte(P_HIGHEST_INDEX); } /// /// Write header data from variable into byte[] buffer. When override, call base.UpdateBuffer() after write your code /// public virtual PageBuffer UpdateBuffer() { // using fixed position to be faster than BufferWriter ENSURE(this.PageID == _buffer.ReadUInt32(P_PAGE_ID), "pageID can't be changed"); // page information // PageID - never change! _buffer.Write(this.PrevPageID, P_PREV_PAGE_ID); _buffer.Write(this.NextPageID, P_NEXT_PAGE_ID); _buffer.Write(this.PageListSlot, P_INITIAL_SLOT); // transaction information _buffer.Write(this.TransactionID, P_TRANSACTION_ID); _buffer.Write(this.IsConfirmed, P_IS_CONFIRMED); _buffer.Write(this.ColID, P_COL_ID); // segments information _buffer.Write(this.ItemsCount, P_ITEMS_COUNT); _buffer.Write(this.UsedBytes, P_USED_BYTES); _buffer.Write(this.FragmentedBytes, P_FRAGMENTED_BYTES); _buffer.Write(this.NextFreePosition, P_NEXT_FREE_POSITION); _buffer.Write(this.HighestIndex, P_HIGHEST_INDEX); return _buffer; } /// /// Change current page to Empty page - fix variables and buffer (DO NOT change PageID) /// public void MarkAsEmtpy() { this.IsDirty = true; // page information // PageID never change this.PageType = PageType.Empty; this.PrevPageID = uint.MaxValue; this.NextPageID = uint.MaxValue; this.PageListSlot = byte.MaxValue; // transaction information this.ColID = uint.MaxValue; this.TransactionID = uint.MaxValue; this.IsConfirmed = false; // block information this.ItemsCount = 0; this.UsedBytes = 0; this.FragmentedBytes = 0; this.NextFreePosition = PAGE_HEADER_SIZE; // 32 this.HighestIndex = byte.MaxValue; // empty - not used yet // MUST CLEAR CONTENT // because this page will be readed when re-used _buffer.Clear(PAGE_HEADER_SIZE, PAGE_SIZE - PAGE_HEADER_SIZE); // fix buffer page type position _buffer.Write((byte)this.PageType, P_PAGE_TYPE); } #endregion #region Access/Manipulate PageSegments /// /// Get a page segment item based on index slot /// public BufferSlice Get(byte index) { ENSURE(this.ItemsCount > 0, "should have items in this page"); ENSURE(this.HighestIndex != byte.MaxValue, "should have at least 1 index in this page"); ENSURE(index <= this.HighestIndex, "get only index below highest index"); // read slot address var positionAddr = CalcPositionAddr(index); var lengthAddr = CalcLengthAddr(index); // read segment position/length var position = _buffer.ReadUInt16(positionAddr); var length = _buffer.ReadUInt16(lengthAddr); ENSURE(this.IsValidPos(position), "invalid segment position in index footer: {0}/{1}", this, index); ENSURE(this.IsValidLen(length), "invalid segment length in index footer: {0}/{1}", this, index); // return buffer slice with content only data return _buffer.Slice(position, length); } /// /// Get a new page segment for this length content /// public BufferSlice Insert(ushort bytesLength, out byte index) { index = byte.MaxValue; return this.InternalInsert(bytesLength, ref index); } /// /// Get a new page segment for this length content using fixed index /// private BufferSlice InternalInsert(ushort bytesLength, ref byte index) { var isNewInsert = index == byte.MaxValue; ENSURE(_buffer.ShareCounter == BUFFER_WRITABLE, "page must be writable to support changes"); ENSURE(bytesLength > 0, "must insert more than 0 bytes"); ENSURE(this.FreeBytes >= bytesLength + (isNewInsert ? SLOT_SIZE : 0), "length must be always lower than current free space"); ENSURE(this.ItemsCount < byte.MaxValue, "page full"); ENSURE(this.FreeBytes >= this.FragmentedBytes, "fragmented bytes must be at most free bytes"); if(!(this.FreeBytes >= bytesLength + (isNewInsert ? SLOT_SIZE : 0))) { throw LiteException.InvalidFreeSpacePage(this.PageID, this.FreeBytes, bytesLength + (isNewInsert ? SLOT_SIZE : 0)); } // calculate how many continuous bytes are avaiable in this page var continuousBlocks = this.FreeBytes - this.FragmentedBytes - (isNewInsert ? SLOT_SIZE : 0); ENSURE(continuousBlocks == PAGE_SIZE - this.NextFreePosition - this.FooterSize - (isNewInsert ? SLOT_SIZE : 0), "continuousBlock must be same as from NextFreePosition"); // if continuous blocks are not enough for this data, must run page defrag if (bytesLength > continuousBlocks) { this.Defrag(); } // if index is new insert segment, must request for new Index if (index == byte.MaxValue) { // get new free index must run after defrag index = this.GetFreeIndex(); } if (index > this.HighestIndex || this.HighestIndex == byte.MaxValue) { ENSURE(index == (byte)(this.HighestIndex + 1), "new index must be next highest index"); this.HighestIndex = index; } // get segment addresses var positionAddr = CalcPositionAddr(index); var lengthAddr = CalcLengthAddr(index); ENSURE(_buffer.ReadUInt16(positionAddr) == 0, "slot position must be empty before use"); ENSURE(_buffer.ReadUInt16(lengthAddr) == 0, "slot length must be empty before use"); // get next free position in page var position = this.NextFreePosition; // write this page position in my position address _buffer.Write(position, positionAddr); // write page segment length in my length address _buffer.Write(bytesLength, lengthAddr); // update next free position and counters this.ItemsCount++; this.UsedBytes += bytesLength; this.NextFreePosition += bytesLength; this.IsDirty = true; ENSURE(position + bytesLength <= (PAGE_SIZE - (this.HighestIndex + 1) * SLOT_SIZE), "new buffer slice could not override footer area"); // create page segment based new inserted segment return _buffer.Slice(position, bytesLength); } /// /// Remove index slot about this page segment /// public void Delete(byte index) { ENSURE(_buffer.ShareCounter == BUFFER_WRITABLE, "page must be writable to support changes"); // read block position on index slot var positionAddr = CalcPositionAddr(index); var lengthAddr = CalcLengthAddr(index); var position = _buffer.ReadUInt16(positionAddr); var length = _buffer.ReadUInt16(lengthAddr); ENSURE(this.IsValidPos(position), "invalid segment position"); ENSURE(this.IsValidLen(length), "invalid segment length"); // clear both position/length _buffer.Write((ushort)0, positionAddr); _buffer.Write((ushort)0, lengthAddr); // add as free blocks this.ItemsCount--; this.UsedBytes -= length; // clean segment area with \0 [[can be removed later for production]] _buffer.Array.Fill(0, _buffer.Offset + position, length); // check if deleted segment are at end of page var isLastSegment = (position + length == this.NextFreePosition); if (isLastSegment) { // update next free position with this deleted position this.NextFreePosition = position; } else { // if segment is in middle of the page, add this blocks as fragment block this.FragmentedBytes += length; } // if deleted if are HighestIndex, update HighestIndex if (this.HighestIndex == index) { this.UpdateHighestIndex(); } // reset start index (used in GetFreeIndex) _startIndex = 0; // if there is no more items in page, fix fragmentation if (this.ItemsCount == 0) { ENSURE(this.HighestIndex == byte.MaxValue, "if there is no items, HighestIndex must be clear"); ENSURE(this.UsedBytes == 0, "should be no bytes used in clean page"); DEBUG(_buffer.Slice(PAGE_HEADER_SIZE, PAGE_SIZE - PAGE_HEADER_SIZE - 1).All(0), "all content area must be 0"); this.NextFreePosition = PAGE_HEADER_SIZE; this.FragmentedBytes = 0; } // set page as dirty this.IsDirty = true; } /// /// Update segment bytes with new data. Current page must have bytes enougth for this new size. Index will not be changed /// Update will try use same segment to store. If not possible, write on end of page (with possible Defrag operation) /// public BufferSlice Update(byte index, ushort bytesLength) { ENSURE(_buffer.ShareCounter == BUFFER_WRITABLE, "page must be writable to support changes"); ENSURE(bytesLength > 0, "must update more than 0 bytes"); // read slot address var positionAddr = CalcPositionAddr(index); var lengthAddr = CalcLengthAddr(index); // read segment position/length var position = _buffer.ReadUInt16(positionAddr); var length = _buffer.ReadUInt16(lengthAddr); ENSURE(this.IsValidPos(position), "invalid segment position"); ENSURE(this.IsValidLen(length), "invalid segment length"); // check if deleted segment are at end of page var isLastSegment = (position + length == this.NextFreePosition); // mark page as dirty before return buffer slice this.IsDirty = true; // best situation: same slice length if (bytesLength == length) { return _buffer.Slice(position, length); } // when new length are less than original length (will fit in current segment) else if (bytesLength < length) { var diff = (ushort)(length - bytesLength); // bytes removed (should > 0) if (isLastSegment) { // if is at end of page, must get back unused blocks this.NextFreePosition -= diff; } else { // is this segment are not at end, must add this as fragment this.FragmentedBytes += diff; } // less blocks will be used this.UsedBytes -= diff; // update length _buffer.Write(bytesLength, lengthAddr); // clear fragment bytes _buffer.Clear(position + bytesLength, diff); return _buffer.Slice(position, bytesLength); } // when new length are large than current segment must remove current item and add again else { // clear current segment _buffer.Clear(position, length); this.ItemsCount--; this.UsedBytes -= length; if (isLastSegment) { // if segment is end of page, must update next free position to current segment position this.NextFreePosition = position; } else { // if segment is on middle of page, add content length as fragment bytes this.FragmentedBytes += length; } // clear slot index position/length _buffer.Write((ushort)0, positionAddr); _buffer.Write((ushort)0, lengthAddr); // call insert return this.InternalInsert(bytesLength, ref index); } } /// /// Defrag method re-organize all byte data content removing all fragmented data. This will move all page segments /// to create a single continuous content area (just after header area). No index segment will be changed (only positions) /// public void Defrag() { ENSURE(this.FragmentedBytes > 0, "do not call this when page has no fragmentation"); ENSURE(_buffer.ShareCounter == BUFFER_WRITABLE, "page must be writable to support changes"); ENSURE(this.HighestIndex < byte.MaxValue, "there is no items in this page to run defrag"); LOG($"defrag page #{this.PageID} (fragments: {this.FragmentedBytes})", "DISK"); // first get all segments inside this page sorted by position (position, index) var segments = new SortedList(); // use int to avoid byte overflow for (int index = 0; index <= this.HighestIndex; index++) { var positionAddr = CalcPositionAddr((byte)index); var position = _buffer.ReadUInt16(positionAddr); // get only used index if (position != 0) { ENSURE(this.IsValidPos(position), "invalid segment position"); // sort by position segments.Add(position, (byte)index); } } // here first block position var next = (ushort)PAGE_HEADER_SIZE; // now, list all segments order by Position foreach (var slot in segments) { var index = slot.Value; var position = slot.Key; // get segment length var lengthAddr = CalcLengthAddr(index); var length = _buffer.ReadUInt16(lengthAddr); ENSURE(this.IsValidLen(length), "invalid segment length"); // if current segment are not as excpect, copy buffer to right position (excluding empty space) if (position != next) { ENSURE(position > next, "current segment position must be greater than current empty space"); // copy from original position into new (correct) position System.Buffer.BlockCopy(_buffer.Array, _buffer.Offset + position, _buffer.Array, _buffer.Offset + next, length); // update index slot with this new block position var positionAddr = CalcPositionAddr(index); _buffer.Write(next, positionAddr); } next += length; } // fill all non-used content area with 0 var emptyLength = PAGE_SIZE - next - this.FooterSize; _buffer.Array.Fill(0, _buffer.Offset + next, emptyLength); // clear fragment blocks (page are in a continuous segment) this.FragmentedBytes = 0; this.NextFreePosition = next; } /// /// Store start index used in GetFreeIndex to avoid always run full loop over all indexes /// private byte _startIndex = 0; /// /// Get a free index slot in this page /// private byte GetFreeIndex() { // check for all slot area to get first empty slot [safe for byte loop] for (byte index = _startIndex; index <= this.HighestIndex; index++) { var positionAddr = CalcPositionAddr(index); var position = _buffer.ReadUInt16(positionAddr); // if position = 0 means this slot is not used if (position == 0) { _startIndex = (byte)(index + 1); return index; } } return (byte)(this.HighestIndex + 1); } /// /// Get all used slots indexes in this page /// public IEnumerable GetUsedIndexs() { // check for empty before loop if (this.ItemsCount == 0) yield break; ENSURE(this.HighestIndex != byte.MaxValue, "if has items count, Highest index should be not empty"); // [safe for byte loop] - because this.HighestIndex can't be 255 for (byte index = 0; index <= this.HighestIndex; index++) { var positionAddr = CalcPositionAddr(index); var position = _buffer.ReadUInt16(positionAddr); if (position != 0) { yield return index; } } } /// /// Update HighestIndex based on current HighestIndex (step back looking for next used slot) /// Used only in Delete() operation /// private void UpdateHighestIndex() { ENSURE(this.HighestIndex < byte.MaxValue, "can run only if contains a valid HighestIndex"); // if current index is 0, clear index if (this.HighestIndex == 0) { this.HighestIndex = byte.MaxValue; return; } // start from current - 1 to 0 (should use "int" because for use ">= 0") for (int index = this.HighestIndex - 1; index >= 0; index--) { var positionAddr = CalcPositionAddr((byte)index); var position = _buffer.ReadUInt16(positionAddr); if (position != 0) { ENSURE(this.IsValidPos(position), "invalid segment position"); this.HighestIndex = (byte)index; return; } } // there is no more slots used this.HighestIndex = byte.MaxValue; } /// /// Checks if segment position has a valid value (used for DEBUG) /// private bool IsValidPos(ushort position) => position >= PAGE_HEADER_SIZE && position < (PAGE_SIZE - this.FooterSize); /// /// Checks if segment length has a valid value (used for DEBUG) /// private bool IsValidLen(ushort length) => length > 0 && length <= (PAGE_SIZE - PAGE_HEADER_SIZE - this.FooterSize); #endregion #region Static Helpers /// /// Get buffer offset position where one page segment length are located (based on index slot) /// public static int CalcPositionAddr(byte index) => PAGE_SIZE - ((index + 1) * SLOT_SIZE) + 2; /// /// Get buffer offset position where one page segment length are located (based on index slot) /// public static int CalcLengthAddr(byte index) => PAGE_SIZE - ((index + 1) * SLOT_SIZE); /// /// Returns a size of specified number of pages /// public static long GetPagePosition(uint pageID) { return checked((long)pageID * PAGE_SIZE); } /// /// Returns a size of specified number of pages /// public static long GetPagePosition(int pageID) { ENSURE(pageID >= 0, "page could not be less than 0."); return BasePage.GetPagePosition((uint)pageID); } /// /// Create new page instance based on buffer (READ) /// public static T ReadPage(PageBuffer buffer) where T : BasePage { if (typeof(T) == typeof(BasePage)) return (T)(object)new BasePage(buffer); if (typeof(T) == typeof(HeaderPage)) return (T)(object)new HeaderPage(buffer); if (typeof(T) == typeof(CollectionPage)) return (T)(object)new CollectionPage(buffer); if (typeof(T) == typeof(IndexPage)) return (T)(object)new IndexPage(buffer); if (typeof(T) == typeof(DataPage)) return (T)(object)new DataPage(buffer); throw new InvalidCastException(); } /// /// Create new page instance with new PageID and passed buffer (NEW) /// public static T CreatePage(PageBuffer buffer, uint pageID) where T : BasePage { if (typeof(T) == typeof(CollectionPage)) return (T)(object)new CollectionPage(buffer, pageID); if (typeof(T) == typeof(IndexPage)) return (T)(object)new IndexPage(buffer, pageID); if (typeof(T) == typeof(DataPage)) return (T)(object)new DataPage(buffer, pageID); throw new InvalidCastException(); } #endregion public override string ToString() { return $"PageID: {this.PageID.ToString().PadLeft(4, '0')} : {this.PageType} ({this.ItemsCount} Items)"; } } } ================================================ FILE: LiteDB/Engine/Pages/CollectionPage.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { internal class CollectionPage : BasePage { #region Buffer Field Positions public const int P_INDEXES = 96; // 96-8192 (64 + 32 header = 96) public const int P_INDEXES_COUNT = PAGE_SIZE - P_INDEXES; // 8096 #endregion /// /// Free data page linked-list (N lists for different range of FreeBlocks) /// public uint[] FreeDataPageList { get; } = new uint[PAGE_FREE_LIST_SLOTS]; /// /// All indexes references for this collection /// private readonly Dictionary _indexes = new Dictionary(); public CollectionPage(PageBuffer buffer, uint pageID) : base(buffer, pageID, PageType.Collection) { for(var i = 0; i < PAGE_FREE_LIST_SLOTS; i++) { this.FreeDataPageList[i] = uint.MaxValue; } } public CollectionPage(PageBuffer buffer) : base(buffer) { ENSURE(this.PageType == PageType.Collection, "page type must be collection page"); if (this.PageType != PageType.Collection) throw LiteException.InvalidPageType(PageType.Collection, this); // create new buffer area to store BsonDocument indexes var area = _buffer.Slice(PAGE_HEADER_SIZE, PAGE_SIZE - PAGE_HEADER_SIZE); using (var r = new BufferReader(new[] { area }, false)) { // read position for FreeDataPage and FreeIndexPage for(var i = 0; i < PAGE_FREE_LIST_SLOTS; i++) { this.FreeDataPageList[i] = r.ReadUInt32(); } // skip reserved area r.Skip(P_INDEXES - PAGE_HEADER_SIZE - r.Position); var count = r.ReadByte(); // 1 byte for(var i = 0; i < count; i++) { var index = new CollectionIndex(r); _indexes[index.Name] = index; } } } public override PageBuffer UpdateBuffer() { // if page was deleted, do not write in content area (must keep with 0 only) if (this.PageType == PageType.Empty) return base.UpdateBuffer(); var area = _buffer.Slice(PAGE_HEADER_SIZE, PAGE_SIZE - PAGE_HEADER_SIZE); using (var w = new BufferWriter(area)) { // read position for FreeDataPage and FreeIndexPage for (var i = 0; i < PAGE_FREE_LIST_SLOTS; i++) { w.Write(this.FreeDataPageList[i]); } // skip reserved area (indexes starts at position 96) w.Skip(P_INDEXES - PAGE_HEADER_SIZE - w.Position); w.Write((byte)_indexes.Count); // 1 byte foreach (var index in _indexes.Values) { index.UpdateBuffer(w); } } return base.UpdateBuffer(); } /// /// Get PK index /// public CollectionIndex PK { get { return _indexes["_id"]; } } /// /// Get index from index name (index name is case sensitive) - returns null if not found /// public CollectionIndex GetCollectionIndex(string name) { if (_indexes.TryGetValue(name, out var index)) { return index; } return null; } /// /// Get all indexes in this collection page /// public ICollection GetCollectionIndexes() { return _indexes.Values; } /// /// Get all collections array based on slot number /// public CollectionIndex[] GetCollectionIndexesSlots() { var indexes = new CollectionIndex[_indexes.Max(x => x.Value.Slot) + 1]; foreach (var index in _indexes.Values) { indexes[index.Slot] = index; } return indexes; } /// /// Insert new index inside this collection page /// public CollectionIndex InsertCollectionIndex(string name, string expr, bool unique) { var totalLength = 1 + _indexes.Sum(x => CollectionIndex.GetLength(x.Value)) + CollectionIndex.GetLength(name, expr); // check if has space avaiable if (_indexes.Count == 255 || totalLength >= P_INDEXES_COUNT) throw new LiteException(0, $"This collection has no more space for new indexes"); var slot = (byte)(_indexes.Count == 0 ? 0 : (_indexes.Max(x => x.Value.Slot) + 1)); var index = new CollectionIndex(slot, 0, name, expr, unique); _indexes[name] = index; this.IsDirty = true; return index; } /// /// Return index instance and mark as updatable /// public CollectionIndex UpdateCollectionIndex(string name) { this.IsDirty = true; return _indexes[name]; } /// /// Remove index reference in this page /// public void DeleteCollectionIndex(string name) { _indexes.Remove(name); this.IsDirty = true; } } } ================================================ FILE: LiteDB/Engine/Pages/DataPage.cs ================================================ using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// The DataPage thats stores object data. /// internal class DataPage : BasePage { /// /// Read existing DataPage in buffer /// public DataPage(PageBuffer buffer) : base(buffer) { ENSURE(this.PageType == PageType.Data, "Page type must be data page: {0}", PageType); if (this.PageType != PageType.Data) throw LiteException.InvalidPageType(PageType.Data, this); } /// /// Create new DataPage /// public DataPage(PageBuffer buffer, uint pageID) : base(buffer, pageID, PageType.Data) { } /// /// Get single DataBlock /// public DataBlock GetBlock(byte index) { var segment = base.Get(index); return new DataBlock(this, index, segment); } /// /// Insert new DataBlock. Use extend to indicate document sequence (document are large than PAGE_SIZE) /// public DataBlock InsertBlock(int bytesLength, bool extend) { var segment = base.Insert((ushort)(bytesLength + DataBlock.DATA_BLOCK_FIXED_SIZE), out var index); return new DataBlock(this, index, segment, extend, PageAddress.Empty); } /// /// Update current block returning data block to be fill /// public DataBlock UpdateBlock(DataBlock currentBlock, int bytesLength) { var segment = base.Update(currentBlock.Position.Index, (ushort)(bytesLength + DataBlock.DATA_BLOCK_FIXED_SIZE)); return new DataBlock(this, currentBlock.Position.Index, segment, currentBlock.Extend, currentBlock.NextBlock); } /// /// Delete single data block inside this page /// public void DeleteBlock(byte index) { base.Delete(index); } /// /// Get all block positions inside this page that are not extend blocks (initial data block) /// public IEnumerable GetBlocks() { foreach(var index in base.GetUsedIndexs()) { var slotPosition = BasePage.CalcPositionAddr(index); var position = _buffer.ReadUInt16(slotPosition); var extend = _buffer.ReadBool(position + DataBlock.P_EXTEND); if (extend == false) { yield return new PageAddress(this.PageID, index); } } } /// /// FreeBytes ranges on page slot for free list page /// 90% - 100% = 0 (7344 - 8160) /// 75% - 90% = 1 (6120 - 7343) /// 60% - 75% = 2 (4896 - 6119) /// 30% - 60% = 3 (2448 - 4895) /// 0% - 30% = 4 (0000 - 2447) /// private static readonly int[] _freePageSlots = new[] { (int)((PAGE_SIZE - PAGE_HEADER_SIZE) * .90), // 0 (int)((PAGE_SIZE - PAGE_HEADER_SIZE) * .75), // 1 (int)((PAGE_SIZE - PAGE_HEADER_SIZE) * .60), // 2 (int)((PAGE_SIZE - PAGE_HEADER_SIZE) * .30) // 3 }; /// /// Returns the slot the page should be in, given the it has /// /// A slot number between 0 and 4 public static byte FreeIndexSlot(int freeBytes) { ENSURE(freeBytes >= 0, "FreeBytes must be positive: {0}", freeBytes); for (var i = 0; i < _freePageSlots.Length; i++) { if (freeBytes >= _freePageSlots[i]) return (byte)i; } return PAGE_FREE_LIST_SLOTS - 1; // Slot 4 (last slot) } /// /// Returns the slot where there is a page with enough space for bytes of data. /// Returns -1 if no space guaranteed (more than 90% of a DataPage net size) /// /// A slot number between -1 and 3 public static int GetMinimumIndexSlot(int length) { return FreeIndexSlot(length) - 1; } } } ================================================ FILE: LiteDB/Engine/Pages/HeaderPage.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Header page represent first page on datafile. Engine contains a single instance of HeaderPage and all changes /// must be synchronized (using lock). /// internal class HeaderPage : BasePage { /// /// Header info the validate that datafile is a LiteDB file (27 bytes) /// public const string HEADER_INFO = "** This is a LiteDB file **"; /// /// Datafile specification version /// public const byte FILE_VERSION = 8; #region Buffer Field Positions public const int P_HEADER_INFO = 32; // 32-58 (27 bytes) public const int P_FILE_VERSION = 59; // 59-59 (1 byte) public const int P_FREE_EMPTY_PAGE_ID = 60; // 60-63 (4 bytes) public const int P_LAST_PAGE_ID = 64; // 64-67 (4 bytes) public const int P_CREATION_TIME = 68; // 68-75 (8 bytes) // private const int P_PRAGMAS = 76; // 76-190 (115 bytes) public const int P_INVALID_DATAFILE_STATE = 191; // 191-191 (1 byte) public const int P_COLLECTIONS = 192; // 192-8159 (8064 bytes) public const int COLLECTIONS_SIZE = 8000; // 250 blocks with 32 bytes each #endregion /// /// Get/Set the pageID that start sequence with a complete empty pages (can be used as a new page) [4 bytes] /// public uint FreeEmptyPageList { get; set; } /// /// Last created page - Used when there is no free page inside file [4 bytes] /// public uint LastPageID { get; set; } /// /// DateTime when database was created [8 bytes] /// public DateTime CreationTime { get; } /// /// Get database pragmas instance class /// public EnginePragmas Pragmas { get; set; } /// /// All collections names/link pointers are stored inside this document /// private BsonDocument _collections; /// /// Check if collections was changed /// private bool _isCollectionsChanged = false; /// /// Create new Header Page /// public HeaderPage(PageBuffer buffer, uint pageID) : base(buffer, 0, PageType.Header) { // initialize page version this.CreationTime = DateTime.UtcNow; this.FreeEmptyPageList = uint.MaxValue; this.LastPageID = 0; // initialize pragmas this.Pragmas = new EnginePragmas(this); // writing direct into buffer in Ctor() because there is no change later (write once) _buffer.Write(HEADER_INFO, P_HEADER_INFO); _buffer.Write(FILE_VERSION, P_FILE_VERSION); _buffer.Write(this.CreationTime, P_CREATION_TIME); // initialize collections _collections = new BsonDocument(); } /// /// Load HeaderPage from buffer page /// public HeaderPage(PageBuffer buffer) : base(buffer) { this.CreationTime = _buffer.ReadDateTime(P_CREATION_TIME); this.LoadPage(); } /// /// Load page content based on page buffer /// private void LoadPage() { // check database file format var info = _buffer.ReadString(P_HEADER_INFO, HEADER_INFO.Length); var ver = _buffer[P_FILE_VERSION]; if (string.CompareOrdinal(info, HEADER_INFO) != 0 || ver != FILE_VERSION) { throw LiteException.InvalidDatabase(); } // CreateTime is readonly this.FreeEmptyPageList = _buffer.ReadUInt32(P_FREE_EMPTY_PAGE_ID); this.LastPageID = _buffer.ReadUInt32(P_LAST_PAGE_ID); // initialize engine pragmas this.Pragmas = new EnginePragmas(_buffer, this); // create new buffer area to store BsonDocument collections var area = _buffer.Slice(P_COLLECTIONS, COLLECTIONS_SIZE); using (var r = new BufferReader(new[] { area }, false)) { _collections = r.ReadDocument().GetValue(); } _isCollectionsChanged = false; } public override PageBuffer UpdateBuffer() { _buffer.Write(this.FreeEmptyPageList, P_FREE_EMPTY_PAGE_ID); _buffer.Write(this.LastPageID, P_LAST_PAGE_ID); // update engine pragmas this.Pragmas.UpdateBuffer(_buffer); // update collection only if needed if (_isCollectionsChanged) { var area = _buffer.Slice(P_COLLECTIONS, COLLECTIONS_SIZE); using (var w = new BufferWriter(area)) { w.WriteDocument(_collections, true); } _isCollectionsChanged = false; } return base.UpdateBuffer(); } /// /// Create a save point before do any change on header page (execute UpdateBuffer()) /// public PageBuffer Savepoint() { this.UpdateBuffer(); var savepoint = new PageBuffer(new byte[PAGE_SIZE], 0, 0); System.Buffer.BlockCopy(_buffer.Array, _buffer.Offset, savepoint.Array, savepoint.Offset, PAGE_SIZE); return savepoint; } /// /// Restore savepoint content and override on page. Must run in lock(_header) /// public void Restore(PageBuffer savepoint) { System.Buffer.BlockCopy(savepoint.Array, savepoint.Offset, _buffer.Array, _buffer.Offset, PAGE_SIZE); this.LoadPage(); } /// /// Get collection PageID - return uint.MaxValue if not exists /// public uint GetCollectionPageID(string collection) { if (_collections.TryGetValue(collection, out var pageID)) { return (uint)pageID.AsInt32; } return uint.MaxValue; } /// /// Get all collections with pageID /// public IEnumerable> GetCollections() { foreach(var el in _collections.GetElements()) { yield return new KeyValuePair(el.Key, (uint)el.Value.AsInt32); } } /// /// Insert new collection in header /// public void InsertCollection(string name, uint pageID) { _collections[name] = (int)pageID; _isCollectionsChanged = true; } /// /// Remove existing collection reference in header /// public void DeleteCollection(string name) { _collections.Remove(name); _isCollectionsChanged = true; } /// /// Rename collection with new name /// public void RenameCollection(string oldName, string newName) { var pageID = _collections[oldName]; _collections.Remove(oldName); _collections.Add(newName, pageID); _isCollectionsChanged = true; } /// /// Get how many bytes are available in collection to store new collections /// public int GetAvailableCollectionSpace() { return COLLECTIONS_SIZE - _collections.GetBytesCount(true) - 1 - // for int32 type (0x10) 1 - // for new CString ('\0') 4 - // for PageID (int32) 8; // reserved } } } ================================================ FILE: LiteDB/Engine/Pages/IndexPage.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// The IndexPage thats stores object data. /// internal class IndexPage : BasePage { /// /// Read existing IndexPage in buffer /// public IndexPage(PageBuffer buffer) : base(buffer) { ENSURE(this.PageType == PageType.Index, "page type must be index page"); if (this.PageType != PageType.Index) throw LiteException.InvalidPageType(PageType.Index, this); } /// /// Create new IndexPage /// public IndexPage(PageBuffer buffer, uint pageID) : base(buffer, pageID, PageType.Index) { } /// /// Read single IndexNode /// public IndexNode GetIndexNode(byte index) { var segment = base.Get(index); var node = new IndexNode(this, index, segment); return node; } /// /// Insert new IndexNode. After call this, "node" instance can't be changed /// public IndexNode InsertIndexNode(byte slot, byte level, BsonValue key, PageAddress dataBlock, int bytesLength) { var segment = base.Insert((ushort)bytesLength, out var index); var node = new IndexNode(this, index, segment, slot, level, key, dataBlock); return node; } /// /// Delete index node based on page index /// public void DeleteIndexNode(byte index) { base.Delete(index); } /// /// Get all index nodes inside this page /// public IEnumerable GetIndexNodes() { foreach (var index in base.GetUsedIndexs()) { yield return this.GetIndexNode(index); } } /// /// Get page index slot on FreeIndexPageID /// 8160 - 600 : Slot #0 /// 599 - 0 : Slot #1 (no page in list) /// public static byte FreeIndexSlot(int freeBytes) { ENSURE(freeBytes >= 0, "freeBytes must be positive"); return freeBytes >= MAX_INDEX_LENGTH ? (byte)0 : (byte)1; } } } ================================================ FILE: LiteDB/Engine/Pragmas.cs ================================================ namespace LiteDB.Engine { public static class Pragmas { public const string USER_VERSION = nameof(USER_VERSION); public const string COLLATION = nameof(COLLATION); public const string TIMEOUT = nameof(TIMEOUT); public const string LIMIT_SIZE = nameof(LIMIT_SIZE); public const string UTC_DATE = nameof(UTC_DATE); public const string CHECKPOINT = nameof(CHECKPOINT); } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/Index.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Class that implement higher level of index search operations (equals, greater, less, ...) /// internal abstract class Index { /// /// Index name /// public string Name { get; private set; } /// /// Get/Set index order /// public int Order { get; set; } internal Index(string name, int order) { this.Name = name; this.Order = order; } #region Executing Index Search /// /// Calculate cost based on type/value/collection - Lower is best (1) /// public abstract uint GetCost(CollectionIndex index); /// /// Abstract method that must be implement for index seek/scan - Returns IndexNodes that match with index /// public abstract IEnumerable Execute(IndexService indexer, CollectionIndex index); /// /// Find witch index will be used and run Execute method /// public virtual IEnumerable Run(CollectionPage col, IndexService indexer) { // get index for this query var index = col.GetCollectionIndex(this.Name); if (index == null) throw LiteException.IndexNotFound(this.Name); // execute query to get all IndexNodes return this.Execute(indexer, index) .DistinctBy(x => x.DataBlock, null); } #endregion } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/IndexAll.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Return all index nodes /// internal class IndexAll : Index { public IndexAll(string name, int order) : base(name, order) { } public override uint GetCost(CollectionIndex index) { return 100; // worst index cost } public override IEnumerable Execute(IndexService indexer, CollectionIndex index) { return indexer.FindAll(index, this.Order); } public override string ToString() { return string.Format("FULL INDEX SCAN({0})", this.Name); } } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/IndexEquals.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement equals index operation = /// internal class IndexEquals : Index { private readonly BsonValue _value; public IndexEquals(string name, BsonValue value) : base(name, Query.Ascending) { _value = value; } public override uint GetCost(CollectionIndex index) { if (index.Unique) return 1; // best index cost return 10; // } public override IEnumerable Execute(IndexService indexer, CollectionIndex index) { var node = indexer.Find(index, _value, false, Query.Ascending); if (node == null) yield break; yield return node; if (index.Unique == false) { // navigate in both sides to return all nodes found var first = node; // first go forward while (!node.Next[0].IsEmpty && ((node = indexer.GetNode(node.Next[0])).Key.CompareTo(_value, indexer.Collation) == 0)) { if (node.Key.IsMinValue || node.Key.IsMaxValue) break; yield return node; } node = first; // and than, go backward while (!node.Prev[0].IsEmpty && ((node = indexer.GetNode(node.Prev[0])).Key.CompareTo(_value, indexer.Collation) == 0)) { if (node.Key.IsMinValue || node.Key.IsMaxValue) break; yield return node; } } } public override string ToString() { return string.Format("INDEX SEEK({0} = {1})", this.Name, _value); } } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/IndexIn.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement IN index operation. Value must be an array /// internal class IndexIn : Index { private readonly BsonArray _values; public IndexIn(string name, BsonArray values, int order) : base(name, order) { _values = values; } public override uint GetCost(CollectionIndex index) { return index.Unique ? (uint)_values.Count * 1 : (uint)_values.Count * 10; } public override IEnumerable Execute(IndexService indexer, CollectionIndex index) { foreach (var value in _values.Distinct()) { var idx = new IndexEquals(this.Name, value); foreach (var node in idx.Execute(indexer, index)) { yield return node; } } } public override string ToString() { return string.Format("INDEX SEEK({0} IN {1})", this.Name, JsonSerializer.Serialize(_values)); } } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/IndexLike.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { internal class IndexLike : Index { private readonly string _startsWith; private readonly bool _equals; private readonly bool _testSqlLike; private readonly string _pattern; public IndexLike(string name, BsonValue value, int order) : base(name, order) { _pattern = value.AsString; _startsWith = _pattern.SqlLikeStartsWith(out _testSqlLike); _equals = _pattern == _startsWith; } public override uint GetCost(CollectionIndex index) { if (_startsWith.Length > 0) return 10; // similar to equals non-unique return 100; // index full scan } public override IEnumerable Execute(IndexService indexer, CollectionIndex index) { // if contains startsWith string, search using index Find // otherwise, use index full scan and test results return _startsWith.Length > 0 ? this.ExecuteStartsWith(indexer, index) : this.ExecuteLike(indexer, index); } private IEnumerable ExecuteStartsWith(IndexService indexer, CollectionIndex index) { // find first indexNode var first = indexer.Find(index, _startsWith, true, this.Order); var node = first; // if collection exists but are empty if (first == null) yield break; // first, go backward to get all same values while (node != null) { // if current node are edges exit while if (node.Key.IsMinValue || node.Key.IsMaxValue) break; var valueString = node.Key.IsString ? node.Key.AsString : node.Key.IsNull ? "" : node.Key.ToString(); if (_equals ? valueString.Equals(_startsWith, StringComparison.OrdinalIgnoreCase) : valueString.StartsWith(_startsWith, StringComparison.OrdinalIgnoreCase)) { // must still testing SqlLike method for rest of pattern - only if exists more to test (avoid slow SqlLike test) if ((_testSqlLike == false) || (_testSqlLike == true && valueString.SqlLike(_pattern, indexer.Collation) == true)) { yield return node; } } else { break; } node = indexer.GetNode(node.GetNextPrev(0, -this.Order)); } // move forward node = indexer.GetNode(first.GetNextPrev(0, this.Order)); while (node != null) { // if current node are edges exit while if (node.Key.IsMinValue || node.Key.IsMaxValue) break; var valueString = node.Key.IsString ? node.Key.AsString : node.Key.IsNull ? "" : node.Key.ToString(); if (_equals ? valueString.Equals(_pattern, StringComparison.OrdinalIgnoreCase) : valueString.StartsWith(_startsWith, StringComparison.OrdinalIgnoreCase)) { // must still testing SqlLike method for rest of pattern - only if exists more to test (avoid slow SqlLike test) if (node.DataBlock.IsEmpty == false && ((_testSqlLike == false) || (_testSqlLike == true && valueString.SqlLike(_pattern, indexer.Collation) == true))) { yield return node; } } else { break; } // first, go backward to get all same values node = indexer.GetNode(node.GetNextPrev(0, this.Order)); } } private IEnumerable ExecuteLike(IndexService indexer, CollectionIndex index) { return indexer .FindAll(index, this.Order) .Where(x => x.Key.IsString && x.Key.AsString.SqlLike(_pattern, indexer.Collation)); } public override string ToString() { return string.Format("{0}({1} LIKE \"{2}\")", _startsWith.Length > 0 ? "INDEX SEEK (+RANGE SCAN)" : "FULL INDEX SCAN", this.Name, _pattern); } } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/IndexRange.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement range operation - in asc or desc way - can be used as LT, LTE, GT, GTE too because support MinValue/MaxValue /// internal class IndexRange : Index { private readonly BsonValue _start; private readonly BsonValue _end; private readonly bool _startEquals; private readonly bool _endEquals; public IndexRange(string name, BsonValue start, BsonValue end, bool startEquals, bool endEquals, int order) : base(name, order) { _start = start; _end = end; _startEquals = startEquals; _endEquals = endEquals; } public override uint GetCost(CollectionIndex index) { return 20; } public override IEnumerable Execute(IndexService indexer, CollectionIndex index) { // if order are desc, swap start/end values var start = this.Order == Query.Ascending ? _start : _end; var end = this.Order == Query.Ascending ? _end : _start; var startEquals = this.Order == Query.Ascending ? _startEquals : _endEquals; var endEquals = this.Order == Query.Ascending ? _endEquals : _startEquals; // find first indexNode (or get from head/tail if Min/Max value) var first = start.Type == BsonType.MinValue ? indexer.GetNode(index.Head) : start.Type == BsonType.MaxValue ? indexer.GetNode(index.Tail) : indexer.Find(index, start, true, this.Order); var node = first; // if startsEquals, return all equals value from start linked list if (startEquals && node != null) { // going backward in same value list to get first value while (!node.GetNextPrev(0, -this.Order).IsEmpty && ((node = indexer.GetNode(node.GetNextPrev(0, -this.Order))).Key.CompareTo(start) == 0)) { if (node.Key.IsMinValue || node.Key.IsMaxValue) break; yield return node; } node = first; } // returns (or not) equals start value while (node != null) { var diff = node.Key.CompareTo(start, indexer.Collation); // if current value are not equals start, go out this loop if (diff != 0) break; if (startEquals && !(node.Key.IsMinValue || node.Key.IsMaxValue)) { yield return node; } node = indexer.GetNode(node.GetNextPrev(0, this.Order)); } // navigate using next[0] do next node - if less or equals returns while (node != null) { var diff = node.Key.CompareTo(end, indexer.Collation); if (endEquals && diff == 0 && !(node.Key.IsMinValue || node.Key.IsMaxValue)) { yield return node; } else if (diff == -this.Order && !(node.Key.IsMinValue || node.Key.IsMaxValue)) { yield return node; } else { break; } node = indexer.GetNode(node.GetNextPrev(0, this.Order)); } } public override string ToString() { if (_start.IsMinValue && _endEquals == false) { return string.Format("INDEX SCAN({0} < {1})", this.Name, _end); } else if (_start.IsMinValue && _endEquals == true) { return string.Format("INDEX SCAN({0} <= {1})", this.Name, _end); } else if (_end.IsMaxValue && _startEquals == false) { return string.Format("INDEX SCAN({0} > {1})", this.Name, _start); } else if (_end.IsMaxValue && _startEquals == true) { return string.Format("INDEX SCAN({0} >= {1})", this.Name, _start); } else { return string.Format("INDEX RANGE SCAN({0} BETWEEN {1} AND {2})", this.Name, _start, _end); } } } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/IndexScan.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Execute an "index scan" passing a Func as where /// internal class IndexScan : Index { private readonly Func _func; public IndexScan(string name, Func func, int order) : base(name, order) { _func = func; } public override uint GetCost(CollectionIndex index) { return 80; } public override IEnumerable Execute(IndexService indexer, CollectionIndex index) { return indexer .FindAll(index, this.Order) .Where(i => _func(i.Key)); } public override string ToString() { return string.Format("FULL INDEX SCAN({0})", this.Name); } } } ================================================ FILE: LiteDB/Engine/Query/IndexQuery/IndexVirtual.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement virtual index for system collections AND full data collection read /// internal class IndexVirtual : Index, IDocumentLookup { private readonly IEnumerable _source; private Dictionary _cache = new Dictionary(); public IndexVirtual(IEnumerable source) : base(null, 0) { _source = source; } public override uint GetCost(CollectionIndex index) { return 100; // virtual index is always full scan } public override IEnumerable Execute(IndexService indexer, CollectionIndex index) { throw new NotImplementedException(); } public override IEnumerable Run(CollectionPage col, IndexService indexer) { var rawId = 0u; foreach(var doc in _source) { rawId++; // create fake rawId for document source doc.RawId = new PageAddress(rawId, 0); // create cache until reach 1000 document - after this, delete cache and remove support if (_cache != null) { _cache[rawId] = doc; if (_cache.Count > VIRTUAL_INDEX_MAX_CACHE) _cache = null; } // return an fake indexNode yield return new IndexNode(doc); } } public BsonDocument Load(IndexNode node) { return node.Key as BsonDocument; } public BsonDocument Load(PageAddress rawId) { if (_cache == null) throw new LiteException(0, $"OrderBy/GroupBy operation are supported only in virtual collection with less than {VIRTUAL_INDEX_MAX_CACHE} documents"); return _cache[rawId.PageID]; } public override string ToString() { return string.Format("FULL COLLECTION SCAN"); } } } ================================================ FILE: LiteDB/Engine/Query/Lookup/DatafileLookup.cs ================================================ using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement basic document loader based on data service/bson reader /// internal class DatafileLookup : IDocumentLookup { protected readonly DataService _data; protected readonly bool _utcDate; protected readonly HashSet _fields; public DatafileLookup(DataService data, bool utcDate, HashSet fields) { _data = data; _utcDate = utcDate; _fields = fields; } public virtual BsonDocument Load(IndexNode node) { ENSURE(node.DataBlock != PageAddress.Empty, "data block must be a valid block address"); return this.Load(node.DataBlock); } public virtual BsonDocument Load(PageAddress rawId) { using (var reader = new BufferReader(_data.Read(rawId), _utcDate)) { var doc = reader.ReadDocument(_fields).GetValue(); doc.RawId = rawId; return doc; } } } } ================================================ FILE: LiteDB/Engine/Query/Lookup/IDocumentLookup.cs ================================================ using System; namespace LiteDB.Engine { /// /// Interface for abstract document lookup that can be direct from datafile or by virtual collections /// internal interface IDocumentLookup { BsonDocument Load(IndexNode node); BsonDocument Load(PageAddress rawId); } } ================================================ FILE: LiteDB/Engine/Query/Lookup/IndexKeyLoader.cs ================================================ using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement lookup based only in index Key /// internal class IndexLookup : IDocumentLookup { private readonly IndexService _indexer; private readonly string _name; public IndexLookup(IndexService indexer, string name) { _indexer = indexer; _name = name; } public BsonDocument Load(IndexNode node) { ENSURE(node.DataBlock.IsEmpty == false, "Never should be empty rawid"); var doc = new BsonDocument { [_name] = node.Key, }; doc.RawId = node.DataBlock; return doc; } public BsonDocument Load(PageAddress rawId) { var node = _indexer.GetNode(rawId); return this.Load(node); } } } ================================================ FILE: LiteDB/Engine/Query/Pipeline/BasePipe.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Abstract class with workflow method to be used in pipeline implementation /// internal abstract class BasePipe { protected readonly TransactionService _transaction; protected readonly IDocumentLookup _lookup; protected readonly SortDisk _tempDisk; protected readonly EnginePragmas _pragmas; protected readonly uint _maxItemsCount; public BasePipe(TransactionService transaction, IDocumentLookup lookup, SortDisk tempDisk, EnginePragmas pragmas, uint maxItemsCount) { _transaction = transaction; _lookup = lookup; _tempDisk = tempDisk; _pragmas = pragmas; _maxItemsCount = maxItemsCount; } /// /// Abstract method to be implement according pipe workflow /// public abstract IEnumerable Pipe(IEnumerable nodes, QueryPlan query); // load documents from document loader protected IEnumerable LoadDocument(IEnumerable nodes) { foreach (var node in nodes) { yield return _lookup.Load(node); // check if transaction all full of pages to clear before continue _transaction.Safepoint(); } } /// /// INCLUDE: Do include in result document according path expression - Works only with DocumentLookup /// protected IEnumerable Include(IEnumerable source, BsonExpression path) { // cached services string last = null; Snapshot snapshot = null; IndexService indexer = null; DataService data = null; CollectionIndex index = null; IDocumentLookup lookup = null; foreach (var doc in source) { foreach (var value in path.Execute(doc, _pragmas.Collation) .Where(x => x.IsDocument || x.IsArray) .ToList()) { // if value is document, convert this ref document into full document (do another query) if (value.IsDocument) { DoInclude(value.AsDocument); } else { // if value is array, do same per item foreach(var item in value.AsArray .Where(x => x.IsDocument) .Select(x => x.AsDocument)) { DoInclude(item); } } } yield return doc; } void DoInclude(BsonDocument value) { // works only if is a document var refId = value["$id"]; var refCol = value["$ref"]; // if has no reference, just go out if (refId.IsNull || !refCol.IsString) return; // do some cache re-using when is same $ref (almost always is the same $ref collection) if (last != refCol.AsString) { last = refCol.AsString; // initialize services snapshot = _transaction.CreateSnapshot(LockMode.Read, last, false); indexer = new IndexService(snapshot, _pragmas.Collation, _maxItemsCount); data = new DataService(snapshot, _maxItemsCount); lookup = new DatafileLookup(data, _pragmas.UtcDate, null); index = snapshot.CollectionPage?.PK; } // fill only if index and ref node exists if (index != null) { var node = indexer.Find(index, refId, false, Query.Ascending); if (node != null) { // load document based on dataBlock position var refDoc = lookup.Load(node); //do not remove $id value.Remove("$ref"); // copy values from refDocument into current documet (except _id - will keep $id) foreach (var element in refDoc.Where(x => x.Key != "_id")) { value[element.Key] = element.Value; } } else { // set in ref document that was not found value["$missing"] = true; } } } } /// /// WHERE: Filter document according expression. Expression must be an Bool result /// protected IEnumerable Filter(IEnumerable source, BsonExpression expr) { foreach(var doc in source) { // checks if any result of expression is true var result = expr.ExecuteScalar(doc, _pragmas.Collation); if(result.IsBoolean && result.AsBoolean) { yield return doc; } } } /// /// ORDER BY: Sort documents according orderby expression and order asc/desc /// protected IEnumerable OrderBy(IEnumerable source, BsonExpression expr, int order, int offset, int limit) { var keyValues = source .Select(x => new KeyValuePair(expr.ExecuteScalar(x, _pragmas.Collation), x.RawId)); using (var sorter = new SortService(_tempDisk, order, _pragmas)) { sorter.Insert(keyValues); LOG($"sort {sorter.Count} keys in {sorter.Containers.Count} containers", "SORT"); var result = sorter.Sort().Skip(offset).Take(limit); foreach (var keyValue in result) { var doc = _lookup.Load(keyValue.Value); yield return doc; } } } } } ================================================ FILE: LiteDB/Engine/Query/Pipeline/DocumentCacheEnumerable.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement an IEnumerable document cache that read data first time and store in memory/disk cache /// Used in GroupBy operation and MUST read all IEnumerable source before dispose because are need be linear from main resultset /// internal class DocumentCacheEnumerable : IEnumerable, IDisposable { private IEnumerator _enumerator; private readonly List _cache = new List(); private readonly IDocumentLookup _lookup; public DocumentCacheEnumerable(IEnumerable source, IDocumentLookup lookup) { _enumerator = source.GetEnumerator(); _lookup = lookup; } public void Dispose() { // must read all enumerable before dispose if (_enumerator != null) { while (_enumerator.MoveNext()) ; _enumerator.Dispose(); _enumerator = null; } } public IEnumerator GetEnumerator() { // https://stackoverflow.com/a/34633464/3286260 // the index of the current item in the cache. var index = 0; // enumerate the _cache first for (; index < _cache.Count; index++) { var rawId = _cache[index]; yield return _lookup.Load(rawId); } // continue enumeration of the original _enumerator, until it is finished. // this adds items to the cache and increment for (; _enumerator != null && _enumerator.MoveNext(); index++) { var current = _enumerator.Current; ENSURE(current.RawId.IsEmpty == false, "rawId must have a valid value"); _cache.Add(current.RawId); yield return current; } if (_enumerator != null) { _enumerator.Dispose(); _enumerator = null; } // other users of the same instance of DocumentEnumerable // can add more items to the cache, so we need to enumerate them as well for (; index < _cache.Count; index++) { var rawId = _cache[index]; yield return _lookup.Load(rawId); } } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } } } ================================================ FILE: LiteDB/Engine/Query/Pipeline/GroupByPipe.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement query using GroupBy expression /// internal class GroupByPipe : BasePipe { public GroupByPipe(TransactionService transaction, IDocumentLookup loader, SortDisk tempDisk, EnginePragmas pragmas, uint maxItemsCount) : base(transaction, loader, tempDisk, pragmas, maxItemsCount) { } /// /// GroupBy Pipe Order /// - LoadDocument /// - Filter /// - OrderBy (to GroupBy) /// - GroupBy /// - HavingSelectGroupBy /// - OffSet /// - Limit /// public override IEnumerable Pipe(IEnumerable nodes, QueryPlan query) { // starts pipe loading document var source = this.LoadDocument(nodes); // filter results according filter expressions foreach (var expr in query.Filters) { source = this.Filter(source, expr); } // run orderBy used in GroupBy (if not already ordered by index) if (query.OrderBy != null) { source = this.OrderBy(source, query.OrderBy.Expression, query.OrderBy.Order, 0, int.MaxValue); } // apply groupby var groups = this.GroupBy(source, query.GroupBy); // apply group filter and transform result var result = this.SelectGroupBy(groups, query.GroupBy); // apply offset if (query.Offset > 0) result = result.Skip(query.Offset); // apply limit if (query.Limit < int.MaxValue) result = result.Take(query.Limit); return result; } /// /// GROUP BY: Apply groupBy expression and aggregate results in DocumentGroup /// private IEnumerable GroupBy(IEnumerable source, GroupBy groupBy) { using (var enumerator = source.GetEnumerator()) { var done = new Done { Running = enumerator.MoveNext() }; while (done.Running) { var key = groupBy.Expression.ExecuteScalar(enumerator.Current, _pragmas.Collation); groupBy.Select.Parameters["key"] = key; var group = YieldDocuments(key, enumerator, groupBy, done); yield return new DocumentCacheEnumerable(group, _lookup); } } } /// /// YieldDocuments will run over all key-ordered source and returns groups of source /// private IEnumerable YieldDocuments(BsonValue key, IEnumerator enumerator, GroupBy groupBy, Done done) { yield return enumerator.Current; while (done.Running = enumerator.MoveNext()) { var current = groupBy.Expression.ExecuteScalar(enumerator.Current, _pragmas.Collation); if (key == current) { // yield return document in same key (group) yield return enumerator.Current; } else { groupBy.Select.Parameters["key"] = current; // stop current sequence yield break; } } } /// /// Run Select expression over a group source - each group will return a single value /// If contains Having expression, test if result = true before run Select /// private IEnumerable SelectGroupBy(IEnumerable groups, GroupBy groupBy) { var defaultName = groupBy.Select.DefaultFieldName(); foreach (var group in groups) { // transfom group result if contains select expression BsonValue value; try { if (groupBy.Having != null) { var filter = groupBy.Having.ExecuteScalar(group, null, null, _pragmas.Collation); if (!filter.IsBoolean || !filter.AsBoolean) continue; } value = groupBy.Select.ExecuteScalar(group, null, null, _pragmas.Collation); } finally { group.Dispose(); } if (value.IsDocument) { yield return value.AsDocument; } else { yield return new BsonDocument { [defaultName] = value }; } } } } } ================================================ FILE: LiteDB/Engine/Query/Pipeline/QueryPipe.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Basic query pipe workflow - support filter, includes and orderby /// internal class QueryPipe : BasePipe { public QueryPipe(TransactionService transaction, IDocumentLookup loader, SortDisk tempDisk, EnginePragmas pragmas, uint maxItemsCount) : base(transaction, loader, tempDisk, pragmas, maxItemsCount) { } /// /// Query Pipe order /// - LoadDocument /// - IncludeBefore /// - Filter /// - OrderBy /// - OffSet /// - Limit /// - IncludeAfter /// - Select /// public override IEnumerable Pipe(IEnumerable nodes, QueryPlan query) { // starts pipe loading document var source = this.LoadDocument(nodes); // do includes in result before filter foreach (var path in query.IncludeBefore) { source = this.Include(source, path); } // filter results according expressions foreach (var expr in query.Filters) { source = this.Filter(source, expr); } if (query.OrderBy != null) { // pipe: orderby with offset+limit source = this.OrderBy(source, query.OrderBy.Expression, query.OrderBy.Order, query.Offset, query.Limit); } else { // pipe: apply offset (no orderby) if (query.Offset > 0) source = source.Skip(query.Offset); // pipe: apply limit (no orderby) if (query.Limit < int.MaxValue) source = source.Take(query.Limit); } // do includes in result after filter foreach (var path in query.IncludeAfter) { source = this.Include(source, path); } // if is an aggregate query, run select transform over all resultset - will return a single value if (query.Select.All) { return this.SelectAll(source, query.Select.Expression); } // run select transform in each document and return a new document or value else { return this.Select(source, query.Select.Expression); } } /// /// Pipe: Transaform final result appling expressin transform. Can return document or simple values /// private IEnumerable Select(IEnumerable source, BsonExpression select) { var defaultName = select.DefaultFieldName(); foreach (var doc in source) { var value = select.ExecuteScalar(doc, _pragmas.Collation); if (value.IsDocument) { yield return value.AsDocument; } else { yield return new BsonDocument { [defaultName] = value }; } } } /// /// Pipe: Run select expression over all recordset /// private IEnumerable SelectAll(IEnumerable source, BsonExpression select) { var cached = new DocumentCacheEnumerable(source, _lookup); var defaultName = select.DefaultFieldName(); var result = select.Execute(cached, _pragmas.Collation); foreach (var value in result) { if (value.IsDocument) { yield return value.AsDocument; } else { yield return new BsonDocument { [defaultName] = value }; } } } } } ================================================ FILE: LiteDB/Engine/Query/Query.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB { /// /// Represent full query options /// public partial class Query { public BsonExpression Select { get; set; } = BsonExpression.Root; public List Includes { get; } = new List(); public List Where { get; } = new List(); public BsonExpression OrderBy { get; set; } = null; public int Order { get; set; } = Query.Ascending; public BsonExpression GroupBy { get; set; } = null; public BsonExpression Having { get; set; } = null; public int Offset { get; set; } = 0; public int Limit { get; set; } = int.MaxValue; public bool ForUpdate { get; set; } = false; public string Into { get; set; } public BsonAutoId IntoAutoId { get; set; } = BsonAutoId.ObjectId; public bool ExplainPlan { get; set; } /// /// [ EXPLAIN ] /// SELECT {selectExpr} /// [ INTO {newcollection|$function} [ : {autoId} ] ] /// [ FROM {collection|$function} ] /// [ INCLUDE {pathExpr0} [, {pathExprN} ] /// [ WHERE {filterExpr} ] /// [ GROUP BY {groupByExpr} ] /// [ HAVING {filterExpr} ] /// [ ORDER BY {orderByExpr} [ ASC | DESC ] ] /// [ LIMIT {number} ] /// [ OFFSET {number} ] /// [ FOR UPDATE ] /// public string ToSQL(string collection) { var sb = new StringBuilder(); if (this.ExplainPlan) { sb.AppendLine("EXPLAIN"); } sb.AppendLine($"SELECT {this.Select.Source}"); if (this.Into != null) { sb.AppendLine($"INTO {this.Into}:{IntoAutoId.ToString().ToLower()}"); } sb.AppendLine($"FROM {collection}"); if (this.Includes.Count > 0) { sb.AppendLine($"INCLUDE {string.Join(", ", this.Includes.Select(x => x.Source))}"); } if (this.Where.Count > 0) { sb.AppendLine($"WHERE {string.Join(" AND ", this.Where.Select(x => x.Source))}"); } if (this.GroupBy != null) { sb.AppendLine($"GROUP BY {this.GroupBy.Source}"); } if (this.Having != null) { sb.AppendLine($"HAVING {this.Having.Source}"); } if (this.OrderBy != null) { sb.AppendLine($"ORDER BY {this.OrderBy.Source} {(this.Order == Query.Ascending ? "ASC" : "DESC")}"); } if (this.Limit != int.MaxValue) { sb.AppendLine($"LIMIT {this.Limit}"); } if (this.Offset != 0) { sb.AppendLine($"OFFSET {this.Offset}"); } if (this.ForUpdate) { sb.AppendLine($"FOR UPDATE"); } return sb.ToString().Trim(); } } } ================================================ FILE: LiteDB/Engine/Query/QueryExecutor.cs ================================================ using LiteDB.Utils.Extensions; using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Class that execute QueryPlan returing results /// internal class QueryExecutor { private readonly LiteEngine _engine; private readonly EngineState _state; private readonly TransactionMonitor _monitor; private readonly SortDisk _sortDisk; private readonly DiskService _disk; private readonly EnginePragmas _pragmas; private readonly CursorInfo _cursor; private readonly string _collection; private readonly Query _query; private readonly IEnumerable _source; public QueryExecutor( LiteEngine engine, EngineState state, TransactionMonitor monitor, SortDisk sortDisk, DiskService disk, EnginePragmas pragmas, string collection, Query query, IEnumerable source) { _engine = engine; _state = state; _monitor = monitor; _sortDisk = sortDisk; _disk = disk; _pragmas = pragmas; _collection = collection; _query = query; _cursor = new CursorInfo(collection, query); LOG(_query.ToSQL(_collection).Replace(Environment.NewLine, " "), "QUERY"); // source will be != null when query will run over external data source, like system collections or files (not user collection) _source = source; } public BsonDataReader ExecuteQuery() { if (_query.Into == null) { return this.ExecuteQuery(_query.ExplainPlan); } else { return this.ExecuteQueryInto(_query.Into, _query.IntoAutoId); } } /// /// Run query definition into engine. Execute optimization to get query planner /// internal BsonDataReader ExecuteQuery(bool executionPlan) { // get current transaction (if contains a explicit transaction) or a query-only transaction var transaction = _monitor.GetTransaction(true, true, out var isNew); transaction.OpenCursors.Add(_cursor); var enumerable = RunQuery(); enumerable = enumerable.OnDispose(() => transaction.OpenCursors.Remove(_cursor)); if (isNew) { enumerable = enumerable.OnDispose(() => _monitor.ReleaseTransaction(transaction)); } // return new BsonDataReader with IEnumerable source return new BsonDataReader(enumerable, _collection, _state); IEnumerable RunQuery() { var snapshot = transaction.CreateSnapshot(_query.ForUpdate ? LockMode.Write : LockMode.Read, _collection, false); // no collection, no documents if (snapshot.CollectionPage == null && _source == null) { // if query use Source (*) need runs with empty data source if (_query.Select.UseSource) { yield return _query.Select.ExecuteScalar(_pragmas.Collation).AsDocument; } yield break; } // execute optimization before run query (will fill missing _query properties instance) var optimizer = new QueryOptimization(snapshot, _query, _source, _pragmas.Collation); var queryPlan = optimizer.ProcessQuery(); var plan = queryPlan.GetExecutionPlan(); // if execution is just to get explan plan, return as single document result if (executionPlan) { yield return queryPlan.GetExecutionPlan(); yield break; } // get node list from query - distinct by dataBlock (avoid duplicate) var nodes = queryPlan.Index.Run(snapshot.CollectionPage, new IndexService(snapshot, _pragmas.Collation, _disk.MAX_ITEMS_COUNT)); // get current query pipe: normal or groupby pipe var pipe = queryPlan.GetPipe(transaction, snapshot, _sortDisk, _pragmas, _disk.MAX_ITEMS_COUNT); // start cursor elapsed timer which stops on dispose using var _ = _cursor.Elapsed.StartDisposable(); using (var enumerator = pipe.Pipe(nodes, queryPlan).GetEnumerator()) { var read = false; try { read = enumerator.MoveNext(); } catch (Exception ex) { _state.Handle(ex); throw ex; } while (read) { _cursor.Fetched++; _cursor.Elapsed.Stop(); yield return enumerator.Current; if (transaction.State != TransactionState.Active) throw new LiteException(0, $"There is no more active transaction for this cursor: {_cursor.Query.ToSQL(_cursor.Collection)}"); _cursor.Elapsed.Start(); try { read = enumerator.MoveNext(); } catch (Exception ex) { _state.Handle(ex); throw ex; } } } }; } /// /// Execute query and insert result into another collection. Support external collections /// internal BsonDataReader ExecuteQueryInto(string into, BsonAutoId autoId) { IEnumerable GetResultset() { using (var reader = this.ExecuteQuery(false)) { while (reader.Read()) { yield return reader.Current.AsDocument; } } } int result; // if collection starts with $ it's system collection if (into.StartsWith("$")) { SqlParser.ParseCollection(new Tokenizer(into), out var name, out var options); var sys = _engine.GetSystemCollection(name); result = sys.Output(GetResultset(), options); } // otherwise insert as normal collection else { result = _engine.Insert(into, GetResultset(), autoId); } return new BsonDataReader(result); } } } ================================================ FILE: LiteDB/Engine/Query/QueryOptimization.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Class that optimize query transforming user "Query" into "QueryPlan" /// internal class QueryOptimization { private readonly Snapshot _snapshot; private readonly Query _query; private readonly Collation _collation; private readonly QueryPlan _queryPlan; private readonly List _terms = new List(); public QueryOptimization(Snapshot snapshot, Query query, IEnumerable source, Collation collation) { if (query.Select == null) throw new ArgumentNullException(nameof(query.Select)); _snapshot = snapshot; _query = query; _collation = collation; _queryPlan = new QueryPlan(snapshot.CollectionName) { // define index only if source are external collection Index = source != null ? new IndexVirtual(source) : null, Select = new Select(_query.Select, _query.Select.UseSource), ForUpdate = query.ForUpdate, Limit = query.Limit, Offset = query.Offset }; } /// /// Build QueryPlan instance based on QueryBuilder fields /// - Load used fields in all expressions /// - Select best index option /// - Fill includes /// - Define orderBy /// - Define groupBy /// public QueryPlan ProcessQuery() { // split where expressions into TERMs (splited by AND operator) this.SplitWherePredicateInTerms(); // do terms optimizations this.OptimizeTerms(); // define Fields this.DefineQueryFields(); // define Index, IndexCost, IndexExpression, IsIndexKeyOnly + Where (filters - index) this.DefineIndex(); // define OrderBy this.DefineOrderBy(); // define GroupBy this.DefineGroupBy(); // define IncludeBefore + IncludeAfter this.DefineIncludes(); return _queryPlan; } #region Split Where /// /// Fill terms from where predicate list /// private void SplitWherePredicateInTerms() { void add(BsonExpression predicate) { // do not accept source * in WHERE if (predicate.UseSource) { throw new LiteException(0, $"WHERE filter can not use `*` expression in `{predicate.Source}"); } // add expression in where list breaking AND statments if (predicate.IsPredicate || predicate.Type == BsonExpressionType.Or) { _terms.Add(predicate); } else if (predicate.Type == BsonExpressionType.And) { var left = predicate.Left; var right = predicate.Right; add(left); add(right); } else { throw LiteException.InvalidExpressionTypePredicate(predicate); } } // check all where predicate for AND operators foreach(var predicate in _query.Where) { add(predicate); } } /// /// Do some pre-defined optimization on terms to convert expensive filter in indexable filter /// private void OptimizeTerms() { // simple optimization for (var i = 0; i < _terms.Count; i++) { var term = _terms[i]; // convert: { [Enum] ANY = [Path] } to { [Path] IN ARRAY([Enum]) } // very used in LINQ expressions: `query.Where(x => ids.Contains(x.Id))` if (term.Left?.IsScalar == false && term.IsANY && term.Type == BsonExpressionType.Equal && term.Right?.Type == BsonExpressionType.Path) { _terms[i] = BsonExpression.Create(term.Right.Source + " IN ARRAY(" + term.Left.Source + ")", term.Parameters); } } } #endregion #region Document Fields /// /// Load all fields that must be deserialize from document. /// private void DefineQueryFields() { // load only query fields (null return all document) var fields = new HashSet(StringComparer.OrdinalIgnoreCase); // include all fields detected in all used expressions fields.AddRange(_query.Select.Fields); fields.AddRange(_terms.SelectMany(x => x.Fields)); fields.AddRange(_query.Includes.SelectMany(x => x.Fields)); fields.AddRange(_query.GroupBy?.Fields); fields.AddRange(_query.Having?.Fields); fields.AddRange(_query.OrderBy?.Fields); // if contains $, all fields must be deserialized if (fields.Contains("$")) { fields.Clear(); } _queryPlan.Fields = fields; } #endregion #region Index Definition private void DefineIndex() { // selected expression to be used as index (from _terms) BsonExpression selected = null; // if index are not defined yet, get index if (_queryPlan.Index == null) { // try select best index (if return null, there is no good choice) var indexCost = this.ChooseIndex(_queryPlan.Fields); // if found an index, use-it if (indexCost != null) { _queryPlan.Index = indexCost.Index; _queryPlan.IndexCost = indexCost.Cost; _queryPlan.IndexExpression = indexCost.IndexExpression; } else { // if has no index to use, use full scan over _id var pk = _snapshot.CollectionPage.PK; _queryPlan.Index = new IndexAll("_id", Query.Ascending); _queryPlan.IndexCost = _queryPlan.Index.GetCost(pk); _queryPlan.IndexExpression = "$._id"; } // get selected expression used as index selected = indexCost?.Expression; } else { ENSURE(_queryPlan.Index is IndexVirtual, "pre-defined index must be only for virtual collections"); _queryPlan.IndexCost = 0; } // if is only 1 field to deserialize and this field are same as index, use IndexKeyOnly = rue if (_queryPlan.Fields.Count == 1 && _queryPlan.IndexExpression == "$." + _queryPlan.Fields.First()) { // best choice - no need lookup for document (use only index) _queryPlan.IsIndexKeyOnly = true; } // fill filter using all expressions (remove selected term used in Index) _queryPlan.Filters.AddRange(_terms.Where(x => x != selected)); } /// /// Try select index based on lowest cost or GroupBy/OrderBy reuse - use this priority order: /// - Get lowest index cost used in WHERE expressions (will filter data) /// - If there is no candidate, try get: /// - Same of GroupBy /// - Same of OrderBy /// - Prefered single-field (when no lookup neeed) /// private IndexCost ChooseIndex(HashSet fields) { var indexes = _snapshot.CollectionPage.GetCollectionIndexes().ToArray(); // if query contains a single field used, give preferred if this index exists var preferred = fields.Count == 1 ? "$." + fields.First() : null; // otherwise, check for lowest index cost IndexCost lowest = null; // test all possible predicates in terms foreach (var expr in _terms.Where(x => x.IsPredicate)) { ENSURE(expr.Left != null && expr.Right != null, "predicate expression must has left/right expressions"); Tuple index = null; // check if expression is ANY if (expr.Left.IsScalar == false && expr.Right.IsScalar == true) { // ANY expression support only LEFT (Enum) -> RIGHT (Scalar) if (expr.IsANY) { index = indexes .Where(x => x.Expression == expr.Left.Source && expr.Right.IsValue) .Select(x => Tuple.Create(x, expr.Right)) .FirstOrDefault(); } // ALL are not supported in index } else { index = indexes .Where(x => x.Expression == expr.Left.Source && expr.Right.IsValue) .Select(x => Tuple.Create(x, expr.Right)) .Union(indexes .Where(x => x.Expression == expr.Right.Source && expr.Left.IsValue) .Select(x => Tuple.Create(x, expr.Left)) ).FirstOrDefault(); } // get index that match with expression left/right side if (index == null) continue; // calculate index score and store highest score var current = new IndexCost(index.Item1, expr, index.Item2, _collation); if (lowest == null || current.Cost < lowest.Cost) { lowest = current; } } // if no index found, try use same index in orderby/groupby/preferred if (lowest == null && (_query.OrderBy != null || _query.GroupBy != null || preferred != null)) { var index = indexes.FirstOrDefault(x => x.Expression == _query.GroupBy?.Source) ?? indexes.FirstOrDefault(x => x.Expression == _query.OrderBy?.Source) ?? indexes.FirstOrDefault(x => x.Expression == preferred); if (index != null) { lowest = new IndexCost(index); } } return lowest; } #endregion #region OrderBy / GroupBy Definition /// /// Define OrderBy optimization (try re-use index) /// private void DefineOrderBy() { // if has no order by, returns null if (_query.OrderBy == null) return; var orderBy = new OrderBy(_query.OrderBy, _query.Order); // if index expression are same as orderBy, use index to sort - just update index order if (orderBy.Expression.Source == _queryPlan.IndexExpression) { // re-use index order and no not run OrderBy // update index order to be same as required in OrderBy _queryPlan.Index.Order = orderBy.Order; // in this case "query.OrderBy" will be null orderBy = null; } // otherwise, query.OrderBy will be setted according user defined _queryPlan.OrderBy = orderBy; } /// /// Define GroupBy optimization (try re-use index) /// private void DefineGroupBy() { if (_query.GroupBy == null) return; if (_query.OrderBy != null) throw new NotSupportedException("GROUP BY expression do not support ORDER BY"); if (_query.Includes.Count > 0) throw new NotSupportedException("GROUP BY expression do not support INCLUDE"); var groupBy = new GroupBy(_query.GroupBy, _queryPlan.Select.Expression, _query.Having); var orderBy = (OrderBy)null; // if groupBy use same expression in index, set group by order to MaxValue to not run if (groupBy.Expression.Source == _queryPlan.IndexExpression) { // great - group by expression are same used in index - no changes here } else { // create orderBy expression orderBy = new OrderBy(groupBy.Expression, Query.Ascending); } _queryPlan.GroupBy = groupBy; _queryPlan.OrderBy = orderBy; } #endregion /// /// Will define each include to be run BEFORE where (worst) OR AFTER where (best) /// private void DefineIncludes() { foreach(var include in _query.Includes) { // includes always has one single field var field = include.Fields.Single(); // test if field are using in any filter or orderBy var used = _queryPlan.Filters.Any(x => x.Fields.Contains(field)) || (_queryPlan.OrderBy?.Expression.Fields.Contains(field) ?? false); if (used) { _queryPlan.IncludeBefore.Add(include); } // in case of using OrderBy this can eliminate IncludeBefre - this need be added in After if (!used || _queryPlan.OrderBy != null) { _queryPlan.IncludeAfter.Add(include); } } } } } ================================================ FILE: LiteDB/Engine/Query/Structures/GroupBy.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent an GroupBy definition (is based on OrderByDefinition) /// internal class GroupBy { public BsonExpression Expression { get; } public BsonExpression Select { get; } public BsonExpression Having { get; } public GroupBy(BsonExpression expression, BsonExpression select, BsonExpression having) { this.Expression = expression; this.Select = select; this.Having = having; } } } ================================================ FILE: LiteDB/Engine/Query/Structures/IndexCost.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Calculate index cost based on expression/collection index. /// Lower cost is better - lowest will be selected /// internal class IndexCost { public uint Cost { get; } /// /// Get filtered expression: "$._id = 10" /// public BsonExpression Expression { get; } /// /// Get index expression only: "$._id" /// public string IndexExpression { get; } /// /// Get created Index instance used on query /// public Index Index { get; } public IndexCost(CollectionIndex index, BsonExpression expr, BsonExpression value, Collation collation) { this.IndexExpression = index.Expression; this.Expression = expr; var exprType = expr.Type; // if the expression constant is in the left, invert expression type to "normalize" it if(expr.Left.IsValue) { switch (expr.Type) { case BsonExpressionType.GreaterThan: exprType = BsonExpressionType.LessThan; break; case BsonExpressionType.GreaterThanOrEqual: exprType = BsonExpressionType.LessThanOrEqual; break; case BsonExpressionType.LessThan: exprType = BsonExpressionType.GreaterThan; break; case BsonExpressionType.LessThanOrEqual: exprType = BsonExpressionType.GreaterThanOrEqual; break; default: break; } } // create index instance this.Index = value.Execute(collation).Select(x => this.CreateIndex(exprType, index.Name, x)).FirstOrDefault(); ENSURE(this.Index != null, "index must be not null"); // calcs index cost this.Cost = this.Index.GetCost(index); } // used when full index search public IndexCost(CollectionIndex index) { this.Expression = BsonExpression.Create(index.Expression); this.Index = new IndexAll(index.Name, Query.Ascending); this.Cost = this.Index.GetCost(index); this.IndexExpression = index.Expression; } /// /// Create index based on expression predicate /// private Index CreateIndex(BsonExpressionType type, string name, BsonValue value) { switch(type) { case BsonExpressionType.Equal: return new IndexEquals(name, value); case BsonExpressionType.Between: return new IndexRange(name, value.AsArray[0], value.AsArray[1], true, true, Query.Ascending); case BsonExpressionType.Like: return new IndexLike(name, value.AsString, Query.Ascending); case BsonExpressionType.GreaterThan: return new IndexRange(name, value, BsonValue.MaxValue, false, true, Query.Ascending); case BsonExpressionType.GreaterThanOrEqual: return new IndexRange(name, value, BsonValue.MaxValue, true, true, Query.Ascending); case BsonExpressionType.LessThan: return new IndexRange(name, BsonValue.MinValue, value, true, false, Query.Ascending); case BsonExpressionType.LessThanOrEqual: return new IndexRange(name, BsonValue.MinValue, value, true, true, Query.Ascending); case BsonExpressionType.NotEqual: return new IndexScan(name, x => x.CompareTo(value) != 0, Query.Ascending); case BsonExpressionType.In: return value.IsArray ? (Index)new IndexIn(name, value.AsArray, Query.Ascending) : (Index)new IndexEquals(name, value); default: return null; } } } } ================================================ FILE: LiteDB/Engine/Query/Structures/OrderBy.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent an OrderBy definition /// internal class OrderBy { public BsonExpression Expression { get; } public int Order { get; set; } public OrderBy(BsonExpression expression, int order) { this.Expression = expression; this.Order = order; } } } ================================================ FILE: LiteDB/Engine/Query/Structures/QueryPlan.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// This class are result from optimization from QueryBuild in QueryAnalyzer. Indicate how engine must run query - there is no more decisions to engine made, must only execute as query was defined /// Contains used index and estimate cost to run /// internal class QueryPlan { public QueryPlan(string collection) { this.Collection = collection; } /// /// Get collection name (required) /// public string Collection { get; set; } = null; /// /// Index used on query (required) /// public Index Index { get; set; } = null; /// /// Index expression that will be used in index (source only) /// public string IndexExpression { get; set; } = null; /// /// Get index cost (lower is best) /// public uint IndexCost { get; internal set; } = 0; // not calculated /// /// If true, gereate document result only with IndexNode.Key (avoid load all document) /// public bool IsIndexKeyOnly { get; set; } = false; /// /// List of filters of documents /// public List Filters { get; set; } = new List(); /// /// List of includes must be done BEFORE filter (it's not optimized but some filter will use this include) /// public List IncludeBefore { get; set; } = new List(); /// /// List of includes must be done AFTER filter (it's optimized because will include result only) /// public List IncludeAfter { get; set; } = new List(); /// /// Expression to order by resultset /// public OrderBy OrderBy { get; set; } = null; /// /// Expression to group by document results /// public GroupBy GroupBy { get; set; } = null; /// /// Transaformation data before return - if null there is no transform (return document) /// public Select Select { get; set; } /// /// Get fields name that will be deserialize from disk /// public HashSet Fields { get; set; } /// /// Limit resultset /// public int Limit { get; set; } = int.MaxValue; /// /// Skip documents before returns /// public int Offset { get; set; } /// /// Indicate this query is for update (lock mode = Write) /// public bool ForUpdate { get; set; } = false; #region Get Query Pipeline and document lookup implementation /// /// Select corrent pipe /// public BasePipe GetPipe(TransactionService transaction, Snapshot snapshot, SortDisk tempDisk, EnginePragmas pragmas, uint maxItemsCount) { if (this.GroupBy == null) { return new QueryPipe(transaction, this.GetLookup(snapshot, pragmas, maxItemsCount), tempDisk, pragmas, maxItemsCount); } else { return new GroupByPipe(transaction, this.GetLookup(snapshot, pragmas, maxItemsCount), tempDisk, pragmas, maxItemsCount); } } /// /// Get corrent IDocumentLookup /// public IDocumentLookup GetLookup(Snapshot snapshot, EnginePragmas pragmas, uint maxItemsCount) { var data = new DataService(snapshot, maxItemsCount); var indexer = new IndexService(snapshot, pragmas.Collation, maxItemsCount); // define document loader // if index are VirtualIndex - it's also lookup document if (!(this.Index is IDocumentLookup lookup)) { if (this.IsIndexKeyOnly) { lookup = new IndexLookup(indexer, this.Fields.Single()); } else { lookup = new DatafileLookup(data, pragmas.UtcDate, this.Fields); } } return lookup; } #endregion #region Execution Plan /// /// Get detail about execution plan for this query definition /// public BsonDocument GetExecutionPlan() { var doc = new BsonDocument { ["collection"] = this.Collection, ["snaphost"] = this.ForUpdate ? "write" : "read", ["pipe"] = this.GroupBy == null ? "queryPipe" : "groupByPipe" }; doc["index"] = new BsonDocument { ["name"] = this.Index.Name, ["expr"] = this.IndexExpression, ["order"] = this.Index.Order, ["mode"] = this.Index.ToString(), ["cost"] = (int)this.IndexCost // uint.MaxValue (-1) mean not analyzed }; doc["lookup"] = new BsonDocument { ["loader"] = this.Index is IndexVirtual ? "virtual" : (this.IsIndexKeyOnly ? "index" : "document"), ["fields"] = this.Fields.Count == 0 ? new BsonValue("$") : (BsonValue)new BsonArray(this.Fields.Select(x => new BsonValue(x))), }; if (this.IncludeBefore.Count > 0) { doc["includeBefore"] = new BsonArray(this.IncludeBefore.Select(x => new BsonValue(x.Source))); } if (this.Filters.Count > 0) { doc["filters"] = new BsonArray(this.Filters.Select(x => new BsonValue(x.Source))); } if (this.OrderBy != null) { doc["orderBy"] = new BsonDocument { ["expr"] = this.OrderBy.Expression.Source, ["order"] = this.OrderBy.Order, }; } if (this.Limit != int.MaxValue) { doc["limit"] = this.Limit; } if (this.Offset != 0) { doc["offset"] = this.Offset; } if (this.IncludeAfter.Count > 0) { doc["includeAfter"] = new BsonArray(this.IncludeAfter.Select(x => new BsonValue(x.Source))); } if (this.GroupBy != null) { doc["groupBy"] = new BsonDocument { ["expr"] = this.GroupBy.Expression.Source, ["having"] = this.GroupBy.Having?.Source, ["select"] = this.GroupBy.Select?.Source }; } else { doc["select"] = new BsonDocument { ["expr"] = this.Select.Expression.Source, ["all"] = this.Select.All }; } return doc; } #endregion } } ================================================ FILE: LiteDB/Engine/Query/Structures/Select.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent a Select expression /// internal class Select { public BsonExpression Expression { get; } public bool All { get; } public Select(BsonExpression expression, bool all) { this.Expression = expression; this.All = all; } } } ================================================ FILE: LiteDB/Engine/Services/CollectionService.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { internal class CollectionService { private readonly HeaderPage _header; private readonly DiskService _disk; private readonly Snapshot _snapshot; private readonly TransactionPages _transPages; public CollectionService(HeaderPage header, DiskService disk, Snapshot snapshot, TransactionPages transPages) { _header = header; _disk = disk; _snapshot = snapshot; _transPages = transPages; } /// /// Check collection name if is valid (and fit on header) /// Throw correct message error if not valid name or not fit on header page /// public static void CheckName(string name, HeaderPage header) { if (Encoding.UTF8.GetByteCount(name) > header.GetAvailableCollectionSpace()) throw LiteException.InvalidCollectionName(name, "There is no space in header this collection name"); if (!name.IsWord()) throw LiteException.InvalidCollectionName(name, "Use only [a-Z$_]"); if (name.StartsWith("$")) throw LiteException.InvalidCollectionName(name, "Collection can't starts with `$` (reserved for system collections)"); } /// /// Get collection page instance (or create a new one). Returns true if a new collection was created /// public bool Get(string name, bool addIfNotExists, ref CollectionPage collectionPage) { // get collection pageID from header var pageID = _header.GetCollectionPageID(name); if (pageID != uint.MaxValue) { collectionPage = _snapshot.GetPage(pageID); return false; } else if (addIfNotExists) { this.Add(name, ref collectionPage); return true; } return false; } /// /// Add a new collection. Check if name the not exists. Create only in transaction page - will update header only in commit /// private void Add(string name, ref CollectionPage collectionPage) { // checks for collection name/size CheckName(name, _header); // create new collection page collectionPage = _snapshot.NewPage(); var pageID = collectionPage.PageID; // insert collection name/pageID in header only in commit operation _transPages.Commit += (h) => h.InsertCollection(name, pageID); // create first index (_id pk) (must pass collectionPage because snapshot contains null in CollectionPage prop) var indexer = new IndexService(_snapshot, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); indexer.CreateIndex("_id", "$._id", true); } } } ================================================ FILE: LiteDB/Engine/Services/DataService.cs ================================================ using System; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { internal class DataService { /// /// Get maximum data bytes[] that fit in 1 page = 8150 /// public const int MAX_DATA_BYTES_PER_PAGE = PAGE_SIZE - // 8192 PAGE_HEADER_SIZE - // [32 bytes] BasePage.SLOT_SIZE - // [4 bytes] DataBlock.DATA_BLOCK_FIXED_SIZE; // [6 bytes]; private readonly Snapshot _snapshot; private readonly uint _maxItemsCount; public DataService(Snapshot snapshot, uint maxItemsCount) { _snapshot = snapshot; _maxItemsCount = maxItemsCount; } /// /// Insert BsonDocument into new data pages /// public PageAddress Insert(BsonDocument doc) { var bytesLeft = doc.GetBytesCount(true); if (bytesLeft > MAX_DOCUMENT_SIZE) throw new LiteException(0, "Document size exceed {0} limit", MAX_DOCUMENT_SIZE); var firstBlock = PageAddress.Empty; IEnumerable source() { var blockIndex = 0; DataBlock lastBlock = null; while (bytesLeft > 0) { var bytesToCopy = Math.Min(bytesLeft, MAX_DATA_BYTES_PER_PAGE); var dataPage = _snapshot.GetFreeDataPage(bytesToCopy + DataBlock.DATA_BLOCK_FIXED_SIZE); var dataBlock = dataPage.InsertBlock(bytesToCopy, blockIndex++ > 0); if (lastBlock != null) { lastBlock.SetNextBlock(dataBlock.Position); } if (firstBlock.IsEmpty) firstBlock = dataBlock.Position; _snapshot.AddOrRemoveFreeDataList(dataPage); yield return dataBlock.Buffer; lastBlock = dataBlock; bytesLeft -= bytesToCopy; } } // consume all source bytes to write BsonDocument direct into PageBuffer // must be fastest as possible using (var w = new BufferWriter(source())) { // already bytes count calculate at method start w.WriteDocument(doc, false); w.Consume(); } return firstBlock; } /// /// Update document using same page position as reference /// public void Update(CollectionPage col, PageAddress blockAddress, BsonDocument doc) { var bytesLeft = doc.GetBytesCount(true); if (bytesLeft > MAX_DOCUMENT_SIZE) throw new LiteException(0, "Document size exceed {0} limit", MAX_DOCUMENT_SIZE); DataBlock lastBlock = null; var updateAddress = blockAddress; IEnumerable source() { var bytesToCopy = 0; while (bytesLeft > 0) { // if last block contains new block sequence, continue updating if (updateAddress.IsEmpty == false) { var dataPage = _snapshot.GetPage(updateAddress.PageID); var currentBlock = dataPage.GetBlock(updateAddress.Index); // try get full page size content (do not add DATA_BLOCK_FIXED_SIZE because will be added in UpdateBlock) bytesToCopy = Math.Min(bytesLeft, dataPage.FreeBytes + currentBlock.Buffer.Count); var updateBlock = dataPage.UpdateBlock(currentBlock, bytesToCopy); _snapshot.AddOrRemoveFreeDataList(dataPage); yield return updateBlock.Buffer; lastBlock = updateBlock; // go to next address (if exists) updateAddress = updateBlock.NextBlock; } else { bytesToCopy = Math.Min(bytesLeft, MAX_DATA_BYTES_PER_PAGE); var dataPage = _snapshot.GetFreeDataPage(bytesToCopy + DataBlock.DATA_BLOCK_FIXED_SIZE); var insertBlock = dataPage.InsertBlock(bytesToCopy, true); if (lastBlock != null) { lastBlock.SetNextBlock(insertBlock.Position); } _snapshot.AddOrRemoveFreeDataList(dataPage); yield return insertBlock.Buffer; lastBlock = insertBlock; } bytesLeft -= bytesToCopy; } // old document was bigger than current, must delete extend blocks if (lastBlock.NextBlock.IsEmpty == false) { var nextBlockAddress = lastBlock.NextBlock; lastBlock.SetNextBlock(PageAddress.Empty); this.Delete(nextBlockAddress); } } // consume all source bytes to write BsonDocument direct into PageBuffer // must be fastest as possible using (var w = new BufferWriter(source())) { // already bytes count calculate at method start w.WriteDocument(doc, false); w.Consume(); } } /// /// Get all buffer slices that address block contains. Need use BufferReader to read document /// public IEnumerable Read(PageAddress address) { var counter = 0u; while (address != PageAddress.Empty) { ENSURE(counter++ < _maxItemsCount, "Detected loop in data Read({0})", address); var dataPage = _snapshot.GetPage(address.PageID); var block = dataPage.GetBlock(address.Index); yield return block.Buffer; address = block.NextBlock; } } /// /// Delete all datablock that contains a document (can use multiples data blocks) /// public void Delete(PageAddress blockAddress) { // delete all document blocks while(blockAddress != PageAddress.Empty) { var page = _snapshot.GetPage(blockAddress.PageID); var block = page.GetBlock(blockAddress.Index); // delete block inside page page.DeleteBlock(blockAddress.Index); // fix page empty list (or delete page) _snapshot.AddOrRemoveFreeDataList(page); blockAddress = block.NextBlock; } } } } ================================================ FILE: LiteDB/Engine/Services/IndexService.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement a Index service - Add/Remove index nodes on SkipList /// Based on: http://igoro.com/archive/skip-lists-are-fascinating/ /// internal class IndexService { private readonly Snapshot _snapshot; private readonly Collation _collation; private readonly uint _maxItemsCount; public IndexService(Snapshot snapshot, Collation collation, uint maxItemsCount) { _snapshot = snapshot; _collation = collation; _maxItemsCount = maxItemsCount; } public Collation Collation => _collation; /// /// Create a new index and returns head page address (skip list) /// public CollectionIndex CreateIndex(string name, string expr, bool unique) { // get how many bytes needed for each head/tail (both has same size) var bytesLength = IndexNode.GetNodeLength(MAX_LEVEL_LENGTH, BsonValue.MinValue, out var keyLength); // get a new empty page (each index contains its own linked nodes) var indexPage = _snapshot.NewPage(); // create index ref var index = _snapshot.CollectionPage.InsertCollectionIndex(name, expr, unique); // insert head/tail nodes var head = indexPage.InsertIndexNode(index.Slot, MAX_LEVEL_LENGTH, BsonValue.MinValue, PageAddress.Empty, bytesLength); var tail = indexPage.InsertIndexNode(index.Slot, MAX_LEVEL_LENGTH, BsonValue.MaxValue, PageAddress.Empty, bytesLength); // link head-to-tail with double link list in first level head.SetNext(0, tail.Position); tail.SetPrev(0, head.Position); // add this new page in free list (slot 0) index.FreeIndexPageList = indexPage.PageID; indexPage.PageListSlot = 0; index.Head = head.Position; index.Tail = tail.Position; return index; } /// /// Insert a new node index inside an collection index. Flip coin to know level /// public IndexNode AddNode(CollectionIndex index, BsonValue key, PageAddress dataBlock, IndexNode last) { // do not accept Min/Max value as index key (only head/tail can have this value) if (key.IsMaxValue || key.IsMinValue) { throw LiteException.InvalidIndexKey($"BsonValue MaxValue/MinValue are not supported as index key"); } // random level (flip coin mode) - return number between 1-32 var levels = this.Flip(); // call AddNode with key value return this.AddNode(index, key, dataBlock, levels, last); } /// /// Insert a new node index inside an collection index. /// private IndexNode AddNode( CollectionIndex index, BsonValue key, PageAddress dataBlock, byte insertLevels, IndexNode last) { // get a free index page for head note var bytesLength = IndexNode.GetNodeLength(insertLevels, key, out var keyLength); // test for index key maxlength if (keyLength > MAX_INDEX_KEY_LENGTH) throw LiteException.InvalidIndexKey($"Index key must be less than {MAX_INDEX_KEY_LENGTH} bytes."); var indexPage = _snapshot.GetFreeIndexPage(bytesLength, ref index.FreeIndexPageList); // create node in buffer var node = indexPage.InsertIndexNode(index.Slot, insertLevels, key, dataBlock, bytesLength); // now, let's link my index node on right place var leftNode = this.GetNode(index.Head); var counter = 0u; // scan from top left for (int currentLevel = MAX_LEVEL_LENGTH - 1; currentLevel >= 0; currentLevel--) { var right = leftNode.Next[currentLevel]; // while: scan from left to right while (right.IsEmpty == false && right != index.Tail) { ENSURE(counter++ < _maxItemsCount, "Detected loop in AddNode({0})", node.Position); var rightNode = this.GetNode(right); // read next node to compare var diff = rightNode.Key.CompareTo(key, _collation); if (diff == 0 && index.Unique) throw LiteException.IndexDuplicateKey(index.Name, key); if (diff == 1) break; // stop going right leftNode = rightNode; right = rightNode.Next[currentLevel]; } if (currentLevel <= (insertLevels - 1)) // level == length { // prev: immediately before new node // node: new inserted node // next: right node from prev (where left is pointing) var prev = leftNode.Position; var next = leftNode.Next[currentLevel]; // if next is empty, use tail (last key) if (next.IsEmpty) next = index.Tail; // set new node pointer links with current level sibling node.SetNext((byte)currentLevel, next); node.SetPrev((byte)currentLevel, prev); // fix sibling pointer to new node leftNode.SetNext((byte)currentLevel, node.Position); right = node.Next[currentLevel]; // next var rightNode = this.GetNode(right); // mark right page as dirty (after change PrevID) rightNode.SetPrev((byte)currentLevel, node.Position); } } // if last node exists, create a single link list if (last != null) { ENSURE(last.NextNode == PageAddress.Empty, "last index node must point to null"); // reload 'last' index node in case the IndexPage has gone through a defrag last = this.GetNode(last.Position); last.SetNextNode(node.Position); } // fix page position in free list slot _snapshot.AddOrRemoveFreeIndexList(node.Page, ref index.FreeIndexPageList); return node; } /// /// Flip coin (skipped list): returns how many levels the node will have (starts in 1, max of INDEX_MAX_LEVELS) /// public byte Flip() { byte levels = 1; for (int R = Randomizer.Next(); (R & 1) == 1; R >>= 1) { levels++; if (levels == MAX_LEVEL_LENGTH) break; } return levels; } /// /// Get a node inside a page using PageAddress - Returns null if address IsEmpty /// public IndexNode GetNode(PageAddress address) { if (address.PageID == uint.MaxValue) return null; var indexPage = _snapshot.GetPage(address.PageID); return indexPage.GetIndexNode(address.Index); } /// /// Gets all node list from passed nodeAddress (forward only) /// public IEnumerable GetNodeList(PageAddress nodeAddress) { var node = this.GetNode(nodeAddress); var counter = 0u; while (node != null) { ENSURE(counter++ < _maxItemsCount, "Detected loop in GetNodeList({0})", nodeAddress); yield return node; node = this.GetNode(node.NextNode); } } /// /// Deletes all indexes nodes from pkNode /// public void DeleteAll(PageAddress pkAddress) { var node = this.GetNode(pkAddress); var indexes = _snapshot.CollectionPage.GetCollectionIndexesSlots(); var counter = 0u; while (node != null) { ENSURE(counter++ < _maxItemsCount, "Detected loop in DeleteAll({0})", pkAddress); this.DeleteSingleNode(node, indexes[node.Slot]); // move to next node node = this.GetNode(node.NextNode); } } /// /// Deletes all list of nodes in toDelete - fix single linked-list and return last non-delete node /// public IndexNode DeleteList(PageAddress pkAddress, HashSet toDelete) { var last = this.GetNode(pkAddress); var node = this.GetNode(last.NextNode); // starts in first node after PK var indexes = _snapshot.CollectionPage.GetCollectionIndexesSlots(); var counter = 0u; while (node != null) { ENSURE(counter++ < _maxItemsCount, "Detected loop in DeleteList({0})", pkAddress); if (toDelete.Contains(node.Position)) { this.DeleteSingleNode(node, indexes[node.Slot]); // fix single-linked list from last non-delete delete last.SetNextNode(node.NextNode); } else { // last non-delete node to set "NextNode" last = node; } // move to next node node = this.GetNode(node.NextNode); } return last; } /// /// Delete a single index node - fix tree double-linked list levels /// private void DeleteSingleNode(IndexNode node, CollectionIndex index) { for (int i = node.Levels - 1; i >= 0; i--) { // get previous and next nodes (between my deleted node) var prevNode = this.GetNode(node.Prev[i]); var nextNode = this.GetNode(node.Next[i]); if (prevNode != null) { prevNode.SetNext((byte)i, node.Next[i]); } if (nextNode != null) { nextNode.SetPrev((byte)i, node.Prev[i]); } } node.Page.DeleteIndexNode(node.Position.Index); _snapshot.AddOrRemoveFreeIndexList(node.Page, ref index.FreeIndexPageList); } /// /// Delete all index nodes from a specific collection index. Scan over all PK nodes, read all nodes list and remove /// public void DropIndex(CollectionIndex index) { var slot = index.Slot; var pkIndex = _snapshot.CollectionPage.PK; foreach(var pkNode in this.FindAll(pkIndex, Query.Ascending)) { var next = pkNode.NextNode; var last = pkNode; while (next != PageAddress.Empty) { var node = this.GetNode(next); if (node.Slot == slot) { // delete node from page (mark as dirty) node.Page.DeleteIndexNode(node.Position.Index); last.SetNextNode(node.NextNode); } else { last = node; } next = node.NextNode; } } // removing head/tail index nodes this.GetNode(index.Head).Page.DeleteIndexNode(index.Head.Index); this.GetNode(index.Tail).Page.DeleteIndexNode(index.Tail.Index); } #region Find /// /// Return all index nodes from an index /// public IEnumerable FindAll(CollectionIndex index, int order) { var cur = order == Query.Ascending ? this.GetNode(index.Head) : this.GetNode(index.Tail); var counter = 0u; while (!cur.GetNextPrev(0, order).IsEmpty) { ENSURE(counter++ < _maxItemsCount, "Detected loop in FindAll({0})", index.Name); cur = this.GetNode(cur.GetNextPrev(0, order)); // stop if node is head/tail if (cur.Key.IsMinValue || cur.Key.IsMaxValue) yield break; yield return cur; } } /// /// Find first node that index match with value . /// If index are unique, return unique value - if index are not unique, return first found (can start, middle or end) /// If not found but sibling = true and key are not found, returns next value index node (if order = Asc) or prev node (if order = Desc) /// public IndexNode Find(CollectionIndex index, BsonValue value, bool sibling, int order) { var leftNode = order == Query.Ascending ? this.GetNode(index.Head) : this.GetNode(index.Tail); var counter = 0u; for (int level = MAX_LEVEL_LENGTH - 1; level >= 0; level--) { var right = leftNode.GetNextPrev((byte)level, order); while (right.IsEmpty == false) { ENSURE(counter++ < _maxItemsCount, "Detected loop in Find({0}, {1})", index.Name, value); var rightNode = this.GetNode(right); var diff = rightNode.Key.CompareTo(value, _collation); if (diff == order && (level > 0 || !sibling)) break; // go down one level if (diff == order && level == 0 && sibling) { // is head/tail? return (rightNode.Key.IsMinValue || rightNode.Key.IsMaxValue) ? null : rightNode; } // if equals, return index node if (diff == 0) { return rightNode; } leftNode = rightNode; right = rightNode.GetNextPrev((byte)level, order); } } return null; } #endregion } } ================================================ FILE: LiteDB/Engine/Services/LockService.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Lock service are collection-based locks. Lock will support any threads reading at same time. Writing operations will be locked /// based on collection. Eventualy, write operation can change header page that has an exclusive locker for. /// [ThreadSafe] /// internal class LockService : IDisposable { private readonly EnginePragmas _pragmas; private readonly ReaderWriterLockSlim _transaction = new ReaderWriterLockSlim(LockRecursionPolicy.NoRecursion); private readonly ConcurrentDictionary _collections = new ConcurrentDictionary(StringComparer.OrdinalIgnoreCase); internal LockService(EnginePragmas pragmas) { _pragmas = pragmas; } /// /// Return if current thread have open transaction /// public bool IsInTransaction => _transaction.IsReadLockHeld || _transaction.IsWriteLockHeld; /// /// Return how many transactions are opened /// public int TransactionsCount => _transaction.CurrentReadCount; /// /// Enter transaction read lock - should be called just before enter a new transaction /// public void EnterTransaction() { // if current thread already in exclusive mode, just exit if (_transaction.IsWriteLockHeld) return; if (_transaction.TryEnterReadLock(_pragmas.Timeout) == false) throw LiteException.LockTimeout("transaction", _pragmas.Timeout); } /// /// Exit transaction read lock /// public void ExitTransaction() { // if current thread are in reserved mode, do not exit transaction (will be exit from ExitExclusive) if (_transaction.IsWriteLockHeld) return; //This can be called when a lock has either been released by the slim or somewhere else therefore there is no lock to release from ExitReadLock() if (_transaction.IsReadLockHeld) { try { _transaction.ExitReadLock(); } catch { } } } /// /// Enter collection write lock mode (only 1 collection per time can have this lock) /// public void EnterLock(string collectionName) { ENSURE(_transaction.IsReadLockHeld || _transaction.IsWriteLockHeld, "Use EnterTransaction() before EnterLock(name)"); // get collection object lock from dictionary (or create new if doesnt exists) var collection = _collections.GetOrAdd(collectionName, (s) => new object()); if (Monitor.TryEnter(collection, _pragmas.Timeout) == false) throw LiteException.LockTimeout("write", collectionName, _pragmas.Timeout); } /// /// Exit collection in reserved lock /// public void ExitLock(string collectionName) { if (_collections.TryGetValue(collectionName, out var collection) == false) throw LiteException.CollectionLockerNotFound(collectionName); Monitor.Exit(collection); } /// /// Enter all database in exclusive lock. Wait for all transactions finish. In exclusive mode no one can enter in new transaction (for read/write) /// If current thread already in exclusive mode, returns false /// public bool EnterExclusive() { // if current thread already in exclusive mode if (_transaction.IsWriteLockHeld) return false; // wait finish all transactions before enter in reserved mode if (_transaction.TryEnterWriteLock(_pragmas.Timeout) == false) throw LiteException.LockTimeout("exclusive", _pragmas.Timeout); return true; } /// /// Try enter in exclusive mode - if not possible, just exit with false (do not wait and no exceptions) /// If mustExit returns true, must call ExitExclusive after use /// public bool TryEnterExclusive(out bool mustExit) { // if already in exclusive mode return true but "enter" indicator must be false (do not exit) if (_transaction.IsWriteLockHeld) { mustExit = false; return true; } // if there is any open transaction, exit with false if (_transaction.IsReadLockHeld || _transaction.CurrentReadCount > 0) { mustExit = false; return false; } // try enter in exclusive mode - but if not possible, just exit with false if (_transaction.TryEnterWriteLock(10) == false) { mustExit = false; return false; } ENSURE(_transaction.RecursiveReadCount == 0, "must have no other transaction here"); // now, current thread are in exclusive mode (must run ExitExclusive to exit) mustExit = true; return true; } /// /// Exit exclusive lock /// public void ExitExclusive() { _transaction.ExitWriteLock(); } public void Dispose() { try { _transaction.Dispose(); } catch (SynchronizationLockException) { } } } } ================================================ FILE: LiteDB/Engine/Services/RebuildService.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// [ThreadSafe] /// internal class RebuildService { private readonly EngineSettings _settings; private readonly int _fileVersion; public RebuildService(EngineSettings settings) { _settings = settings; // test for prior version var bufferV7 = this.ReadFirstBytes(false); if (FileReaderV7.IsVersion(bufferV7)) { _fileVersion = 7; return; } // open, read first 16kb, and close data file var buffer = this.ReadFirstBytes(); // test for valid reader to use _fileVersion = FileReaderV8.IsVersion(buffer) ? 8 : throw LiteException.InvalidDatabase(); } public long Rebuild(RebuildOptions options) { var backupFilename = FileHelper.GetSuffixFile(_settings.Filename, "-backup", true); var backupLogFilename = FileHelper.GetSuffixFile(FileHelper.GetLogFile(_settings.Filename), "-backup", true); var tempFilename = FileHelper.GetSuffixFile(_settings.Filename, "-temp", true); // open file reader using (var reader = _fileVersion == 7 ? new FileReaderV7(_settings) : (IFileReader)new FileReaderV8(_settings, options.Errors)) { // open file reader and ready to import to new temp engine instance reader.Open(); // open new engine to recive all data readed from FileReader using (var engine = new LiteEngine(new EngineSettings { Filename = tempFilename, Collation = options.Collation, Password = options.Password, })) { // copy all database to new Log file with NO checkpoint during all rebuild engine.Pragma(Pragmas.CHECKPOINT, 0); // rebuild all content from reader into new engine engine.RebuildContent(reader); // insert error report if (options.IncludeErrorReport && options.Errors.Count > 0) { var report = options.GetErrorReport(); engine.Insert("_rebuild_errors", report, BsonAutoId.Int32); } // update pragmas var pragmas = reader.GetPragmas(); engine.Pragma(Pragmas.CHECKPOINT, pragmas[Pragmas.CHECKPOINT]); engine.Pragma(Pragmas.TIMEOUT, pragmas[Pragmas.TIMEOUT]); engine.Pragma(Pragmas.LIMIT_SIZE, pragmas[Pragmas.LIMIT_SIZE]); engine.Pragma(Pragmas.UTC_DATE, pragmas[Pragmas.UTC_DATE]); engine.Pragma(Pragmas.USER_VERSION, pragmas[Pragmas.USER_VERSION]); // after rebuild, copy log bytes into data file engine.Checkpoint(); } } // if log file exists, rename as backup file var logFile = FileHelper.GetLogFile(_settings.Filename); if (File.Exists(logFile)) { File.Move(logFile, backupLogFilename); } // rename source filename to backup name FileHelper.Exec(5, () => { File.Move(_settings.Filename, backupFilename); }); // rename temp file into filename File.Move(tempFilename, _settings.Filename); // get difference size return new FileInfo(backupFilename).Length - new FileInfo(_settings.Filename).Length; } /// /// Read first 16kb (2 PAGES) in bytes /// private byte[] ReadFirstBytes(bool useAesStream = true) { var buffer = new byte[PAGE_SIZE * 2]; var factory = _settings.CreateDataFactory(useAesStream); using (var stream = factory.GetStream(false, true)) { stream.Position = 0; stream.Read(buffer, 0, buffer.Length); } return buffer; } } } ================================================ FILE: LiteDB/Engine/Services/SnapShot.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent a single snapshot /// internal class Snapshot : IDisposable { // instances from Engine private readonly HeaderPage _header; private readonly LockService _locker; private readonly DiskReader _reader; private readonly DiskService _disk; private readonly WalIndexService _walIndex; // instances from transaction private readonly uint _transactionID; private readonly TransactionPages _transPages; // snapshot controls private readonly int _readVersion; private readonly LockMode _mode; private readonly string _collectionName; private readonly CollectionPage _collectionPage; // local page cache - contains only pages about this collection (but do not contains CollectionPage - use this.CollectionPage) private readonly Dictionary _localPages = new Dictionary(); private bool _disposed; // expose public LockMode Mode => _mode; public string CollectionName => _collectionName; public CollectionPage CollectionPage => _collectionPage; public ICollection LocalPages => _localPages.Values; public int ReadVersion => _readVersion; public Snapshot( LockMode mode, string collectionName, HeaderPage header, uint transactionID, TransactionPages transPages, LockService locker, WalIndexService walIndex, DiskReader reader, DiskService disk, bool addIfNotExists) { _mode = mode; _collectionName = collectionName; _header = header; _transactionID = transactionID; _transPages = transPages; _locker = locker; _walIndex = walIndex; _reader = reader; _disk = disk; // enter in lock mode according initial mode if (mode == LockMode.Write) { _locker.EnterLock(_collectionName); } // get lastest read version from wal-index _readVersion = _walIndex.CurrentReadVersion; var srv = new CollectionService(_header, _disk, this, _transPages); // read collection (create if new - load virtual too) srv.Get(_collectionName, addIfNotExists, ref _collectionPage); // clear local pages (will clear _collectionPage link reference) if (_collectionPage != null) { // local pages contains only data/index pages _localPages.Remove(_collectionPage.PageID); } } /// /// Get all snapshot pages (can or not include collectionPage) - If included, will be last page /// public IEnumerable GetWritablePages(bool dirty, bool includeCollectionPage) { ENSURE(!_disposed, "the snapshot is disposed"); // if snapshot is read only, just exit if (_mode == LockMode.Read) yield break; foreach(var page in _localPages.Values.Where(x => x.IsDirty == dirty)) { ENSURE(page.PageType != PageType.Header && page.PageType != PageType.Collection, "local cache cann't contains this page type"); yield return page; } if (includeCollectionPage && _collectionPage != null && _collectionPage.IsDirty == dirty) { yield return _collectionPage; } } /// /// Clear all local pages and return page buffer to file reader. Do not release CollectionPage (only in Dispose method) /// public void Clear() { ENSURE(!_disposed, "the snapshot is disposed"); // release pages only if snapshot are read only if (_mode == LockMode.Read) { // release all read pages (except collection page) foreach (var page in _localPages.Values) { page.Buffer.Release(); } } _localPages.Clear(); } /// /// Dispose stream readers and exit collection lock /// public void Dispose() { if (_disposed) { return; } // release all data/index pages this.Clear(); _disposed = true; // release collection page (in read mode) if (_mode == LockMode.Read && _collectionPage != null) { _collectionPage.Buffer.Release(); } if(_mode == LockMode.Write) { _locker.ExitLock(_collectionName); } } #region Page Version functions /// /// Get a valid page for this snapshot (must consider local-index and wal-index) /// public T GetPage(uint pageID, bool useLatestVersion = false) where T : BasePage { return this.GetPage(pageID, out var origin, out var position, out var walVersion, useLatestVersion); } /// /// Get a valid page for this snapshot (must consider local-index and wal-index) /// public T GetPage(uint pageID, out FileOrigin origin, out long position, out int walVersion, bool useLatestVersion = false) where T : BasePage { ENSURE(!_disposed, "the snapshot is disposed"); ENSURE(pageID <= _header.LastPageID, "request page must be less or equals lastest page in data file"); // check for header page (return header single instance) //TODO: remove this if (pageID == 0) { origin = FileOrigin.None; position = 0; walVersion = 0; return (T)(object)_header; } // look for this page inside local pages if (_localPages.TryGetValue(pageID, out var page)) { origin = FileOrigin.None; position = 0; walVersion = 0; return (T)page; } // if page is not in local cache, get from disk (log/wal/data) page = this.ReadPage(pageID, out origin, out position, out walVersion, useLatestVersion); // add into local pages _localPages[pageID] = page; // increment transaction size counter _transPages.TransactionSize++; return (T)page; } /// /// Read page from disk (dirty, wal or data) /// private T ReadPage(uint pageID, out FileOrigin origin, out long position, out int walVersion, bool useLatestVersion = false) where T : BasePage { // if not inside local pages can be a dirty page saved in log file if (_transPages.DirtyPages.TryGetValue(pageID, out var walPosition)) { // read page from log file var buffer = _reader.ReadPage(walPosition.Position, _mode == LockMode.Write, FileOrigin.Log); var dirty = BasePage.ReadPage(buffer); origin = FileOrigin.Log; position = walPosition.Position; walVersion = _readVersion; ENSURE(dirty.TransactionID == _transactionID, "this page must came from same transaction"); return dirty; } // now, look inside wal-index var pos = _walIndex.GetPageIndex(pageID, useLatestVersion ? int.MaxValue : _readVersion, out walVersion); if (pos != long.MaxValue) { // read page from log file var buffer = _reader.ReadPage(pos, _mode == LockMode.Write, FileOrigin.Log); var logPage = BasePage.ReadPage(buffer); // clear some data inside this page (will be override when write on log file) logPage.TransactionID = 0; logPage.IsConfirmed = false; origin = FileOrigin.Log; position = pos; return logPage; } else { // for last chance, look inside original disk data file var pagePosition = BasePage.GetPagePosition(pageID); // read page from data file var buffer = _reader.ReadPage(pagePosition, _mode == LockMode.Write, FileOrigin.Data); var diskpage = BasePage.ReadPage(buffer); origin = FileOrigin.Data; position = pagePosition; ENSURE(diskpage.IsConfirmed == false || diskpage.TransactionID != 0, "page are not header-clear in data file"); return diskpage; } } /// /// Returns a page that contains space enough to data to insert new object - if one does not exit, creates a new page. /// Before return page, fix empty free list slot according with passed length /// public DataPage GetFreeDataPage(int bytesLength) { ENSURE(!_disposed, "the snapshot is disposed"); var length = bytesLength + BasePage.SLOT_SIZE; // add +4 bytes for footer slot // get minimum slot to check for free page. Returns -1 if need NewPage var startSlot = DataPage.GetMinimumIndexSlot(length); // check for available re-usable page for (int currentSlot = startSlot; currentSlot >= 0; currentSlot--) { var freePageID = _collectionPage.FreeDataPageList[currentSlot]; // there is no free page here, try find princess in another castle if (freePageID == uint.MaxValue) continue; var page = this.GetPage(freePageID); ENSURE(page.PageListSlot == currentSlot, "stored slot must be same as called"); ENSURE(page.FreeBytes >= length, "ensure selected page has space enough for this content"); // mark page page as dirty page.IsDirty = true; return page; } // if there is no re-usable page, create a new one return this.NewPage(); } /// /// Get a index page with space enouth for a new index node /// public IndexPage GetFreeIndexPage(int bytesLength, ref uint freeIndexPageList) { ENSURE(!_disposed, "the snapshot is disposed"); IndexPage page; // if there is not page in list pages, create new page if (freeIndexPageList == uint.MaxValue) { page = this.NewPage(); } else { // get first page of free list page = this.GetPage(freeIndexPageList); ENSURE(page.FreeBytes > bytesLength, "this page shout be space enouth for this new node"); ENSURE(page.PageListSlot == 0, "this page should be in slot #0"); } return page; } /// /// Get a new empty page from disk: can be a reused page (from header free list) or file extend /// Never re-use page from same transaction /// public T NewPage() where T : BasePage { ENSURE(!_disposed, "the snapshot is disposed"); ENSURE(_collectionPage == null, typeof(T) == typeof(CollectionPage), "if no collection page defined yet, must be first request"); ENSURE(typeof(T) == typeof(CollectionPage), _collectionPage == null, "there is no new collection page if page already exists"); var pageID = 0u; PageBuffer buffer; // lock header instance to get new page lock (_header) { // there is need for _header.Savepoint() because changes here will incremental and will be persist later // if any problem occurs here, rollback will catch this changes // try get page from Empty free list if (_header.FreeEmptyPageList != uint.MaxValue) { var free = this.GetPage(_header.FreeEmptyPageList, useLatestVersion: true); ENSURE(free.PageType == PageType.Empty, "empty page must be defined as empty type"); // set header free empty page to next free page _header.FreeEmptyPageList = free.NextPageID; // clear NextPageID free.NextPageID = uint.MaxValue; // get pageID from empty list pageID = free.PageID; // get buffer inside re-used page buffer = free.Buffer; } else { // checks if not exceeded data file limit size var newLength = (_header.LastPageID + 1) * PAGE_SIZE; if (newLength > _header.Pragmas.LimitSize) throw new LiteException(0, $"Maximum data file size has been reached: {FileHelper.FormatFileSize(_header.Pragmas.LimitSize)}"); var savepoint = _header.Savepoint(); try { // increase LastPageID from shared page pageID = ++_header.LastPageID; // request for a new buffer buffer = _reader.NewPage(); } catch { // must revert all header content if any error occurs during header change _header.Restore(savepoint); throw; } } // retain a list of created pages to, in a rollback situation, back pages to empty list _transPages.NewPages.Add(pageID); } var page = BasePage.CreatePage(buffer, pageID); // update local cache with new instance T page type if (page.PageType != PageType.Collection) { _localPages[pageID] = page; } // define ColID for this new page (if this.CollectionPage is null, so this is new collection page) page.ColID = _collectionPage?.PageID ?? page.PageID; // define as dirty to override pageType page.IsDirty = true; // increment transaction size _transPages.TransactionSize++; return page; } /// /// Add/Remove a data page from free list slots /// public void AddOrRemoveFreeDataList(DataPage page) { ENSURE(!_disposed, "the snapshot is disposed"); var newSlot = DataPage.FreeIndexSlot(page.FreeBytes); var initialSlot = page.PageListSlot; // there is no slot change - just exit (no need any change) [except if has no more items] if (newSlot == initialSlot && page.ItemsCount > 0) return; // remove from intial slot if (initialSlot != byte.MaxValue) { this.RemoveFreeList(page, ref _collectionPage.FreeDataPageList[initialSlot]); } // if there is no items, delete page if (page.ItemsCount == 0) { this.DeletePage(page); } else { // add into current slot this.AddFreeList(page, ref _collectionPage.FreeDataPageList[newSlot]); page.PageListSlot = newSlot; } } /// /// Add/Remove a index page from single free list /// public void AddOrRemoveFreeIndexList(IndexPage page, ref uint startPageID) { ENSURE(!_disposed, "the snapshot is disposed"); var newSlot = IndexPage.FreeIndexSlot(page.FreeBytes); var isOnList = page.PageListSlot == 0; var mustKeep = newSlot == 0; // first, test if page should be deleted if (page.ItemsCount == 0) { if (isOnList) { this.RemoveFreeList(page, ref startPageID); } this.DeletePage(page); } else { if (isOnList && !mustKeep) { this.RemoveFreeList(page, ref startPageID); } else if (!isOnList && mustKeep) { this.AddFreeList(page, ref startPageID); } page.PageListSlot = newSlot; page.IsDirty = true; // otherwise, nothing was changed } } /// /// Add page into double linked-list (always add as first element) /// private void AddFreeList(T page, ref uint startPageID) where T : BasePage { ENSURE(page.PrevPageID == uint.MaxValue && page.NextPageID == uint.MaxValue, "only non-linked page can be added in linked list"); // fix first/next page if (startPageID != uint.MaxValue) { var next = this.GetPage(startPageID); next.PrevPageID = page.PageID; next.IsDirty = true; } page.PrevPageID = uint.MaxValue; page.NextPageID = startPageID; page.IsDirty = true; ENSURE(page.PageType == PageType.Data || page.PageType == PageType.Index, "only data/index pages must be first on free stack"); startPageID = page.PageID; _collectionPage.IsDirty = true; } /// /// Remove a page from double linked list. /// private void RemoveFreeList(T page, ref uint startPageID) where T : BasePage { // fix prev page if (page.PrevPageID != uint.MaxValue) { var prev = this.GetPage(page.PrevPageID); prev.NextPageID = page.NextPageID; prev.IsDirty = true; } // fix next page if (page.NextPageID != uint.MaxValue) { var next = this.GetPage(page.NextPageID); next.PrevPageID = page.PrevPageID; next.IsDirty = true; } // if page is first of the list set firstPage as next page if (startPageID == page.PageID) { startPageID = page.NextPageID; ENSURE(page.NextPageID == uint.MaxValue || this.GetPage(page.NextPageID).PageType != PageType.Empty, "first page on free stack must be non empty page"); _collectionPage.IsDirty = true; } // clear page pointer (MaxValue = not used) page.PrevPageID = page.NextPageID = uint.MaxValue; page.IsDirty = true; } /// /// Delete a page - this page will be marked as Empty page /// There is no re-use deleted page in same transaction - deleted pages will be in another linked list and will /// be part of Header free list page only in commit /// private void DeletePage(T page) where T : BasePage { ENSURE(page.PrevPageID == uint.MaxValue && page.NextPageID == uint.MaxValue, "before delete a page, no linked list with any another page"); ENSURE(page.ItemsCount == 0 && page.UsedBytes == 0 && page.HighestIndex == byte.MaxValue && page.FragmentedBytes == 0, "no items on page when delete this page"); ENSURE(page.PageType == PageType.Data || page.PageType == PageType.Index, "only data/index page can be deleted"); DEBUG(!_collectionPage.FreeDataPageList.Any(x => x == page.PageID), "this page cann't be deleted because free data list page is linked o this page"); DEBUG(!_collectionPage.GetCollectionIndexes().Any(x => x.FreeIndexPageList == page.PageID), "this page cann't be deleted because free index list page is linked o this page"); DEBUG(page.Buffer.Slice(PAGE_HEADER_SIZE, PAGE_SIZE - PAGE_HEADER_SIZE - 1).All(0), "page content shloud be empty"); // mark page as empty and dirty page.MarkAsEmtpy(); // fix this page in free-link-list if (_transPages.FirstDeletedPageID == uint.MaxValue) { ENSURE(_transPages.DeletedPages == 0, "if has no firstDeletedPageID must has deleted pages"); // set first and last deleted page as current deleted page _transPages.FirstDeletedPageID = page.PageID; _transPages.LastDeletedPageID = page.PageID; } else { ENSURE(_transPages.DeletedPages > 0, "must have at least 1 deleted page"); // set next link from current deleted page to first deleted page page.NextPageID = _transPages.FirstDeletedPageID; // and then, set this current deleted page as first page making a linked list _transPages.FirstDeletedPageID = page.PageID; } _transPages.DeletedPages++; } #endregion #region DropCollection /// /// Delete current collection and all pages - this snapshot can't be used after this /// public void DropCollection(Action safePoint) { ENSURE(!_disposed, "the snapshot is disposed"); var indexer = new IndexService(this, _header.Pragmas.Collation, _disk.MAX_ITEMS_COUNT); // CollectionPage will be last deleted page (there is no NextPageID from CollectionPage) _transPages.FirstDeletedPageID = _collectionPage.PageID; _transPages.LastDeletedPageID = _collectionPage.PageID; // mark collection page as empty _collectionPage.MarkAsEmtpy(); _transPages.DeletedPages = 1; var indexPages = new HashSet(); // getting all indexes pages from all indexes foreach(var index in _collectionPage.GetCollectionIndexes()) { // add head/tail (same page) to be deleted indexPages.Add(index.Head.PageID); foreach (var node in indexer.FindAll(index, Query.Ascending)) { indexPages.Add(node.Page.PageID); safePoint(); } } // now, mark all pages as deleted foreach (var pageID in indexPages) { var page = this.GetPage(pageID); // mark page as delete and fix deleted page list page.MarkAsEmtpy(); page.NextPageID = _transPages.FirstDeletedPageID; _transPages.FirstDeletedPageID = page.PageID; _transPages.DeletedPages++; safePoint(); } // adding all data pages foreach (var startPageID in _collectionPage.FreeDataPageList) { var next = startPageID; while(next != uint.MaxValue) { var page = this.GetPage(next); next = page.NextPageID; // mark page as delete and fix deleted page list page.MarkAsEmtpy(); page.NextPageID = _transPages.FirstDeletedPageID; _transPages.FirstDeletedPageID = page.PageID; _transPages.DeletedPages++; safePoint(); } } // remove collection name (in header) at commit time _transPages.Commit += (h) => h.DeleteCollection(_collectionName); } #endregion public override string ToString() { return $"{_collectionName} (pages: {_localPages.Count})"; } } } ================================================ FILE: LiteDB/Engine/Services/TransactionMonitor.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// This class monitor all open transactions to manage memory usage for each transaction /// [Singleton - ThreadSafe] /// internal class TransactionMonitor : IDisposable { private readonly Dictionary _transactions = new Dictionary(); private readonly ThreadLocal _slot = new ThreadLocal(); private readonly HeaderPage _header; private readonly LockService _locker; private readonly DiskService _disk; private readonly WalIndexService _walIndex; private int _freePages; private readonly int _initialSize; // expose open transactions public ICollection Transactions => _transactions.Values; public int FreePages => _freePages; public int InitialSize => _initialSize; public TransactionMonitor(HeaderPage header, LockService locker, DiskService disk, WalIndexService walIndex) { _header = header; _locker = locker; _disk = disk; _walIndex = walIndex; // initialize free pages with all avaiable pages in memory _freePages = MAX_TRANSACTION_SIZE; // initial size _initialSize = MAX_TRANSACTION_SIZE / MAX_OPEN_TRANSACTIONS; } public TransactionService GetTransaction(bool create, bool queryOnly, out bool isNew) { var transaction = _slot.Value; if (create && transaction == null) { isNew = true; bool alreadyLock; // must lock _transaction before work with _transactions (GetInitialSize use _transactions) lock (_transactions) { if (_transactions.Count >= MAX_OPEN_TRANSACTIONS) throw new LiteException(0, "Maximum number of transactions reached"); var initialSize = this.GetInitialSize(); // check if current thread contains any transaction alreadyLock = _transactions.Values.Any(x => x.ThreadID == Environment.CurrentManagedThreadId); transaction = new TransactionService(_header, _locker, _disk, _walIndex, initialSize, this, queryOnly); // add transaction to execution transaction dict _transactions[transaction.TransactionID] = transaction; } // enter in lock transaction after release _transaction lock if (alreadyLock == false) { try { _locker.EnterTransaction(); } catch { transaction.Dispose(); lock (_transactions) { // return pages _freePages += transaction.MaxTransactionSize; _transactions.Remove(transaction.TransactionID); } throw; } } // do not store in thread query-only transaction if (queryOnly == false) { _slot.Value = transaction; } } else { isNew = false; } return transaction; } /// /// Release current thread transaction /// public void ReleaseTransaction(TransactionService transaction) { // dispose current transaction transaction.Dispose(); bool keepLocked; lock (_transactions) { // remove from "open transaction" list _transactions.Remove(transaction.TransactionID); // return freePages used area _freePages += transaction.MaxTransactionSize; // check if current thread contains more query transactions keepLocked = _transactions.Values.Any(x => x.ThreadID == Environment.CurrentManagedThreadId); } // unlock thread-transaction only if there is no more transactions if (keepLocked == false) { _locker.ExitTransaction(); } // remove transaction from thread if are no queryOnly transaction if (transaction.QueryOnly == false) { ENSURE(_slot.Value == transaction, "current thread must contains transaction parameter"); // clear thread slot for new transaction _slot.Value = null; } } /// /// Get transaction from current thread (from thread slot or from queryOnly) - do not created new transaction /// Used only in SystemCollections to get running query transaction /// public TransactionService GetThreadTransaction() { lock (_transactions) { return _slot.Value ?? _transactions.Values.FirstOrDefault(x => x.ThreadID == Environment.CurrentManagedThreadId); } } /// /// Get initial transaction size - get from free pages or reducing from all open transactions /// private int GetInitialSize() { if (_freePages >= _initialSize) { _freePages -= _initialSize; return _initialSize; } else { var sum = 0; // if there is no available pages, reduce all open transactions foreach (var trans in _transactions.Values) { //TODO: revisar estas contas, o reduce tem que fechar 1000 var reduce = (trans.MaxTransactionSize / _initialSize); trans.MaxTransactionSize -= reduce; sum += reduce; } return sum; } } /// /// Try extend max transaction size in passed transaction ONLY if contains free pages available /// private bool TryExtend(TransactionService trans) { lock(_transactions) { if (_freePages >= _initialSize) { trans.MaxTransactionSize += _initialSize; _freePages -= _initialSize; return true; } return false; } } /// /// Check if transaction size reach limit AND check if is possible extend this limit /// public bool CheckSafepoint(TransactionService trans) { return trans.Pages.TransactionSize >= trans.MaxTransactionSize && this.TryExtend(trans) == false; } /// /// Dispose all open transactions /// public void Dispose() { if (_transactions.Count > 0) { foreach (var transaction in _transactions.Values) { transaction.Dispose(); } _transactions.Clear(); } } } } ================================================ FILE: LiteDB/Engine/Services/TransactionService.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent a single transaction service. Need a new instance for each transaction. /// You must run each transaction in a different thread - no 2 transaction in same thread (locks as per-thread) /// internal class TransactionService : IDisposable { // instances from Engine private readonly HeaderPage _header; private readonly LockService _locker; private readonly DiskService _disk; private readonly DiskReader _reader; private readonly WalIndexService _walIndex; private readonly TransactionMonitor _monitor; // transaction controls private readonly Dictionary _snapshots = new Dictionary(StringComparer.OrdinalIgnoreCase); private readonly TransactionPages _transPages = new TransactionPages(); // transaction info private readonly int _threadID = Environment.CurrentManagedThreadId; private readonly uint _transactionID; private readonly DateTime _startTime; private LockMode _mode = LockMode.Read; private TransactionState _state = TransactionState.Active; // expose (as read only) public int ThreadID => _threadID; public uint TransactionID => _transactionID; public TransactionState State => _state; public LockMode Mode => _mode; public TransactionPages Pages => _transPages; public DateTime StartTime => _startTime; public IEnumerable Snapshots => _snapshots.Values; public bool QueryOnly { get; } // get/set public int MaxTransactionSize { get; set; } /// /// Get/Set how many open cursor this transaction are running /// public List OpenCursors { get; } = new List(); /// /// Get/Set if this transaction was opened by BeginTrans() method (not by AutoTransaction/Cursor) /// public bool ExplicitTransaction { get; set; } = false; public TransactionService(HeaderPage header, LockService locker, DiskService disk, WalIndexService walIndex, int maxTransactionSize, TransactionMonitor monitor, bool queryOnly) { // retain instances _header = header; _locker = locker; _disk = disk; _walIndex = walIndex; _monitor = monitor; this.QueryOnly = queryOnly; this.MaxTransactionSize = maxTransactionSize; // create new transactionID _transactionID = walIndex.NextTransactionID(); _startTime = DateTime.UtcNow; _reader = _disk.GetReader(); } /// /// Finalizer: Will be called once a thread is closed. The TransactionMonitor._slot releases the used TransactionService. /// ~TransactionService() { Dispose(false); } /// /// Create (or get from transaction-cache) snapshot and return /// public Snapshot CreateSnapshot(LockMode mode, string collection, bool addIfNotExists) { ENSURE(_state == TransactionState.Active, "transaction must be active to create new snapshot"); Snapshot create() => new Snapshot(mode, collection, _header, _transactionID, _transPages, _locker, _walIndex, _reader, _disk, addIfNotExists); if (_snapshots.TryGetValue(collection, out var snapshot)) { // if current snapshot are ReadOnly but request is about Write mode, dispose read and re-create new in WriteMode // or if a previous snapshot was opened with addIfNotExists=false if ((mode == LockMode.Write && snapshot.Mode == LockMode.Read) || (addIfNotExists && snapshot.CollectionPage == null)) { // dispose current read-only snapshot snapshot.Dispose(); // must remove before try add again - create() method can throw lock exception _snapshots.Remove(collection); // create new snapshot with write mode _snapshots[collection] = snapshot = create(); } } else { // if not exits, let's create here _snapshots[collection] = snapshot = create(); } // update transaction mode to write in first write snaphost request if (mode == LockMode.Write) _mode = LockMode.Write; return snapshot; } /// /// If current transaction contains too much pages, now is safe to remove clean pages from memory and flush to wal disk dirty pages /// public void Safepoint() { if (_state != TransactionState.Active) throw new LiteException(0, "This transaction are invalid state"); if (_monitor.CheckSafepoint(this)) { LOG($"safepoint flushing transaction pages: {_transPages.TransactionSize}", "TRANSACTION"); // if any snapshot are writable, persist pages if (_mode == LockMode.Write) { this.PersistDirtyPages(false); } // clear local pages in all snapshots (read/write snapshosts) foreach (var snapshot in _snapshots.Values) { snapshot.Clear(); } // there is no local pages in cache and all dirty pages are in log file _transPages.TransactionSize = 0; } } /// /// Persist all dirty in-memory pages (in all snapshots) and clear local pages list (even clean pages) /// private int PersistDirtyPages(bool commit) { var dirty = 0; // inner method to get all dirty pages IEnumerable source() { // get all dirty pages from all write snapshots // can include (or not) collection pages // update DirtyPagesLog inside transPage for all dirty pages was write on disk var pages = _snapshots.Values .Where(x => x.Mode == LockMode.Write) .SelectMany(x => x.GetWritablePages(true, commit)); // mark last dirty page as confirmed only if there is no header change in commit var markLastAsConfirmed = commit && _transPages.HeaderChanged == false; // neet use "IsLast" method to get when loop are last item foreach (var page in pages.IsLast()) { // update page transactionID page.Item.TransactionID = _transactionID; // if last page, mask as confirm (only if a real commit and no header changes) if (page.IsLast) { page.Item.IsConfirmed = markLastAsConfirmed; } // if current page is last deleted page, point this page to last free if (_transPages.LastDeletedPageID == page.Item.PageID && commit) { ENSURE(_transPages.HeaderChanged, "must header be in lock"); ENSURE(page.Item.PageType == PageType.Empty, "must be marked as deleted page"); // join existing free list pages into new list of deleted pages page.Item.NextPageID = _header.FreeEmptyPageList; // and now, set header free list page to this new list _header.FreeEmptyPageList = _transPages.FirstDeletedPageID; } var buffer = page.Item.UpdateBuffer(); // buffer position will be set at end of file (it´s always log file) yield return buffer; dirty++; _transPages.DirtyPages[page.Item.PageID] = new PagePosition(page.Item.PageID, buffer.Position); } // in commit with header page change, last page will be header if (commit && _transPages.HeaderChanged) { // update this confirm page with current transactionID _header.TransactionID = _transactionID; // this header page will be marked as confirmed page in log file _header.IsConfirmed = true; // invoke all header callbacks (new/drop collections) _transPages.OnCommit(_header); // clone header page var buffer = _header.UpdateBuffer(); var clone = _disk.NewPage(); // mem copy from current header to new header clone Buffer.BlockCopy(buffer.Array, buffer.Offset, clone.Array, clone.Offset, clone.Count); // persist header in log file yield return clone; } }; // write all dirty pages, in sequence on log-file and store references into log pages on transPages // (works only for Write snapshots) var count = _disk.WriteLogDisk(source()); // now, discard all clean pages (because those pages are writable and must be readable) // from write snapshots _disk.DiscardCleanPages(_snapshots.Values .Where(x => x.Mode == LockMode.Write) .SelectMany(x => x.GetWritablePages(false, commit)) .Select(x => x.Buffer)); return count; } /// /// Write pages into disk and confirm transaction in wal-index. Returns true if any dirty page was updated /// After commit, all snapshot are closed /// public void Commit() { ENSURE(_state == TransactionState.Active, "transaction must be active to commit (current state: {0})", _state); LOG($"commit transaction ({_transPages.TransactionSize} pages)", "TRANSACTION"); if (_mode == LockMode.Write || _transPages.HeaderChanged) { lock (_header) { // persist all dirty page as commit mode (mark last page as IsConfirm) var count = this.PersistDirtyPages(true); // update wal-index (if any page was added into log disk) if (count > 0) { _walIndex.ConfirmTransaction(_transactionID, _transPages.DirtyPages.Values); } } } // dispose all snapshots foreach (var snapshot in _snapshots.Values) { snapshot.Dispose(); } _state = TransactionState.Committed; } /// /// Rollback transaction operation - ignore all modified pages and return new pages into disk /// After rollback, all snapshot are closed /// public void Rollback() { ENSURE(_state == TransactionState.Active, "transaction must be active to rollback (current state: {0})", _state); LOG($"rollback transaction ({_transPages.TransactionSize} pages with {_transPages.NewPages.Count} returns)", "TRANSACTION"); // if transaction contains new pages, must return to database in another transaction if (_transPages.NewPages.Count > 0) { this.ReturnNewPages(); } // dispose all snapshots foreach (var snapshot in _snapshots.Values) { // but first, if writable, discard changes if (snapshot.Mode == LockMode.Write) { // discard all dirty pages _disk.DiscardDirtyPages(snapshot.GetWritablePages(true, true).Select(x => x.Buffer)); // discard all clean pages _disk.DiscardCleanPages(snapshot.GetWritablePages(false, true).Select(x => x.Buffer)); } // now, release pages snapshot.Dispose(); } _state = TransactionState.Aborted; } /// /// Return added pages when occurs an rollback transaction (run this only in rollback). Create new transactionID and add into /// Log file all new pages as EmptyPage in a linked order - also, update SharedPage before store /// private void ReturnNewPages() { // create new transaction ID var transactionID = _walIndex.NextTransactionID(); // now lock header to update LastTransactionID/FreePageList lock (_header) { // persist all empty pages into wal-file var pagePositions = new Dictionary(); IEnumerable source() { // create list of empty pages with forward link pointer for (var i = 0; i < _transPages.NewPages.Count; i++) { var pageID = _transPages.NewPages[i]; var next = i < _transPages.NewPages.Count - 1 ? _transPages.NewPages[i + 1] : _header.FreeEmptyPageList; var buffer = _disk.NewPage(); var page = new BasePage(buffer, pageID, PageType.Empty) { NextPageID = next, TransactionID = transactionID }; yield return page.UpdateBuffer(); // update wal pagePositions[pageID] = new PagePosition(pageID, buffer.Position); } // update header page with my new transaction ID _header.TransactionID = transactionID; _header.FreeEmptyPageList = _transPages.NewPages[0]; _header.IsConfirmed = true; // clone header buffer var buf = _header.UpdateBuffer(); var clone = _disk.NewPage(); Buffer.BlockCopy(buf.Array, buf.Offset, clone.Array, clone.Offset, clone.Count); yield return clone; }; // create a header save point before any change var safepoint = _header.Savepoint(); try { // write all pages (including new header) _disk.WriteLogDisk(source()); } catch { // must revert all header content if any error occurs during header change _header.Restore(safepoint); throw; } // now confirm this transaction to wal _walIndex.ConfirmTransaction(transactionID, pagePositions.Values); } } /// /// Public implementation of Dispose pattern. /// public void Dispose() { this.Dispose(true); GC.SuppressFinalize(this); } // Protected implementation of Dispose pattern. protected virtual void Dispose(bool dispose) { if (_state == TransactionState.Disposed) { return; } ENSURE(_state != TransactionState.Disposed, "transaction must be active before call Done"); // clean snapshots if there is no commit/rollback if (_state == TransactionState.Active && _snapshots.Count > 0) { // release writable snapshots foreach (var snapshot in _snapshots.Values.Where(x => x.Mode == LockMode.Write)) { // discard all dirty pages _disk.DiscardDirtyPages(snapshot.GetWritablePages(true, true).Select(x => x.Buffer)); // discard all clean pages _disk.DiscardCleanPages(snapshot.GetWritablePages(false, true).Select(x => x.Buffer)); } // release buffers in read-only snaphosts foreach (var snapshot in _snapshots.Values.Where(x => x.Mode == LockMode.Read)) { foreach (var page in snapshot.LocalPages) { page.Buffer.Release(); } snapshot.CollectionPage?.Buffer.Release(); } } _reader.Dispose(); _state = TransactionState.Disposed; if (!dispose) { // Remove transaction monitor's dictionary _monitor.ReleaseTransaction(this); } } } } ================================================ FILE: LiteDB/Engine/Services/WalIndexService.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Do all WAL index services based on LOG file - has only single instance per engine /// [Singleton - ThreadSafe] /// internal class WalIndexService { private readonly DiskService _disk; private readonly LockService _locker; private readonly Dictionary>> _index = new Dictionary>>(); private readonly ReaderWriterLockSlim _indexLock = new ReaderWriterLockSlim(); private readonly HashSet _confirmTransactions = new HashSet(); private int _currentReadVersion = 0; /// /// Store last used transaction ID /// private int _lastTransactionID = 0; public WalIndexService(DiskService disk, LockService locker) { _disk = disk; _locker = locker; } /// /// Get current read version for all new transactions /// public int CurrentReadVersion { get { _indexLock.TryEnterReadLock(-1); try { return _currentReadVersion; } finally { _indexLock.ExitReadLock(); } } } /// /// Get current counter for transaction ID /// public int LastTransactionID => _lastTransactionID; /// /// Clear WAL index links and cache memory. Used after checkpoint and rebuild rollback /// public void Clear() { _indexLock.TryEnterWriteLock(-1); try { // reset _confirmTransactions.Clear(); _index.Clear(); _lastTransactionID = 0; _currentReadVersion = 0; // clear cache _disk.Cache.Clear(); // clear log file (sync) _disk.SetLength(0, FileOrigin.Log); } finally { _indexLock.ExitWriteLock(); } } /// /// Get new transactionID in thread safe way /// public uint NextTransactionID() { return (uint)Interlocked.Increment(ref _lastTransactionID); } /// /// Checks if a Page/Version are in WAL-index memory. Consider version that are below parameter. Returns PagePosition of this page inside WAL-file or Empty if page doesn't found. /// public long GetPageIndex(uint pageID, int version, out int walVersion) { // wal-index versions must be greater than 0 (version 0 is datafile) if (version == 0) { walVersion = 0; return long.MaxValue; } // to get page position, enter _index in read mode _indexLock.TryEnterReadLock(-1); try { // get page slot in cache if (_index.TryGetValue(pageID, out var list)) { // list are sorted by version number var idx = list.Count; var position = long.MaxValue; walVersion = version; // get all page versions in wal-index // and then filter only equals-or-less then selected version while (idx > 0) { idx--; var v = list[idx]; if (v.Key <= version) { walVersion = v.Key; position = v.Value; break; } } return position; } walVersion = int.MaxValue; return long.MaxValue; } finally { _indexLock.ExitReadLock(); } } /// /// Add transactionID in confirmed list and update WAL index with all pages positions /// public void ConfirmTransaction(uint transactionID, ICollection pagePositions) { // must lock commit operation to update WAL-Index (memory only operation) _indexLock.TryEnterWriteLock(-1); try { // increment current version _currentReadVersion++; // update wal-index foreach (var pos in pagePositions) { if (_index.TryGetValue(pos.PageID, out var slot) == false) { slot = new List>(); _index.Add(pos.PageID, slot); } // add version/position into pageID slot slot.Add(new KeyValuePair(_currentReadVersion, pos.Position)); } // add transaction as confirmed _confirmTransactions.Add(transactionID); } finally { _indexLock.ExitWriteLock(); } } /// /// Load all confirmed transactions from log file (used only when open datafile) /// Don't need lock because it's called on ctor of LiteEngine /// public void RestoreIndex(ref HeaderPage header) { // get all page positions var positions = new Dictionary>(); var current = 0L; // read all pages to get confirmed transactions (do not read page content, only page header) foreach (var buffer in _disk.ReadFull(FileOrigin.Log)) { if(buffer.IsBlank()) { // this should not happen, but if it does, it means there's a zeroed page in the file // just skip it current += PAGE_SIZE; continue; } // read direct from buffer to avoid create BasePage structure var pageID = buffer.ReadUInt32(BasePage.P_PAGE_ID); var isConfirmed = buffer.ReadBool(BasePage.P_IS_CONFIRMED); var transactionID = buffer.ReadUInt32(BasePage.P_TRANSACTION_ID); var position = new PagePosition(pageID, current); if (positions.TryGetValue(transactionID, out var list)) { list.Add(position); } else { positions[transactionID] = new List { position }; } if (isConfirmed) { this.ConfirmTransaction(transactionID, positions[transactionID]); var pageType = (PageType)buffer.ReadByte(BasePage.P_PAGE_TYPE); // when a header is modified in transaction, must always be the last page inside log file (per transaction) if (pageType == PageType.Header) { // page buffer instance can't change var headerBuffer = header.Buffer; // copy this buffer block into original header block Buffer.BlockCopy(buffer.Array, buffer.Offset, headerBuffer.Array, headerBuffer.Offset, PAGE_SIZE); // re-load header (using new buffer data) header = new HeaderPage(headerBuffer); header.TransactionID = uint.MaxValue; header.IsConfirmed = false; } } // update last transaction ID _lastTransactionID = (int)transactionID; current += PAGE_SIZE; } } /// /// Do checkpoint operation to copy log pages into data file. Return how many transactions was commited inside data file /// Checkpoint requires exclusive lock database /// public int Checkpoint() { // no log file or no confirmed transaction, just exit if (_disk.GetFileLength(FileOrigin.Log) == 0 || _confirmTransactions.Count == 0) return 0; var mustExit = _locker.EnterExclusive(); try { return this.CheckpointInternal(); } finally { if (mustExit) { _locker.ExitExclusive(); } } } /// /// Run checkpoint only if there is no open transactions /// public int TryCheckpoint() { // no log file or no confirmed transaction, just exit if (_disk.GetFileLength(FileOrigin.Log) == 0 || _confirmTransactions.Count == 0) return 0; if (_locker.TryEnterExclusive(out var mustExit) == false) return 0; try { return this.CheckpointInternal(); } finally { if (mustExit) { _locker.ExitExclusive(); } } } /// /// Do checkpoint operation to copy log pages into data file. Return how many transactions was commited inside data file /// Checkpoint requires exclusive lock database /// If soft = true, just try enter in exclusive mode - if not possible, just exit (don't execute checkpoint) /// private int CheckpointInternal() { LOG($"checkpoint", "WAL"); var counter = 0; // getting all "good" pages from log file to be copied into data file IEnumerable source() { foreach (var buffer in _disk.ReadFull(FileOrigin.Log)) { if (buffer.IsBlank()) { // this should not happen, but if it does, it means there's a zeroed page in the file // just skip it continue; } // read direct from buffer to avoid create BasePage structure var transactionID = buffer.ReadUInt32(BasePage.P_TRANSACTION_ID); // only confied paged can be write on data disk if (_confirmTransactions.Contains(transactionID)) { var pageID = buffer.ReadUInt32(BasePage.P_PAGE_ID); // clear isConfirmed/transactionID buffer.Write(uint.MaxValue, BasePage.P_TRANSACTION_ID); buffer.Write(false, BasePage.P_IS_CONFIRMED); buffer.Position = BasePage.GetPagePosition(pageID); counter++; yield return buffer; } } } // write all log pages into data file (sync) _disk.WriteDataDisk(source()); // clear log file, clear wal index, memory cache, this.Clear(); return counter; } } } ================================================ FILE: LiteDB/Engine/Sort/SortContainer.cs ================================================ using System; using System.Buffers; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { internal class SortContainer : IDisposable { private readonly Collation _collation; private readonly int _size; private int _remaining = 0; private int _count = 0; private bool _isEOF = false; private int _readPosition = 0; private BufferReader _reader = null; private static readonly ArrayPool _bufferPool = ArrayPool.Shared; /// /// Returns if current container has no more items to read /// public bool IsEOF => _isEOF; /// /// Get current/last read value in container /// public KeyValuePair Current; /// /// Get container disk position /// public long Position { get; set; } = -1; /// /// Get how many keyValues this container contains /// public int Count => _count; public SortContainer(Collation collation, int size) { _collation = collation; _size = size; } public void Insert(IEnumerable> items, int order, BufferSlice buffer) { var query = order == Query.Ascending ? items.OrderBy(x => x.Key, _collation) : items.OrderByDescending(x => x.Key, _collation); var offset = 0; foreach(var item in query) { buffer.WriteIndexKey(item.Key, offset); var keyLength = IndexNode.GetKeyLength(item.Key, false); if (keyLength > MAX_INDEX_KEY_LENGTH) throw LiteException.InvalidIndexKey($"Sort key must be less than {MAX_INDEX_KEY_LENGTH} bytes."); offset += keyLength; buffer.Write(item.Value, offset); offset += PageAddress.SIZE; _remaining++; } _count = _remaining; } /// /// Initialize reader based on Stream (if data was persisted in disk) or Buffer (if all data fit in only 1 container) /// public void InitializeReader(Stream stream, BufferSlice buffer, bool utcDate) { if (stream != null) { _reader = new BufferReader(this.GetSourceFromStream(stream), utcDate); } else { _reader = new BufferReader(buffer, utcDate); } this.MoveNext(); } public bool MoveNext() { if (_remaining == 0) { _isEOF = true; return false; } var key = _reader.ReadIndexKey(); var value = _reader.ReadPageAddress(); this.Current = new KeyValuePair(key, value); _remaining--; return true; } /// /// Get 8k buffer slices inside file container /// private IEnumerable GetSourceFromStream(Stream stream) { var bytes = _bufferPool.Rent(PAGE_SIZE); var buffer = new BufferSlice(bytes, 0, PAGE_SIZE); while (_readPosition < _size) { stream.Position = this.Position + _readPosition; stream.Read(bytes, 0, PAGE_SIZE); _readPosition += PAGE_SIZE; yield return buffer; } _bufferPool.Return(bytes, true); } public void Dispose() { _reader?.Dispose(); } } } ================================================ FILE: LiteDB/Engine/Sort/SortDisk.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Single instance of TempDisk manage read/write access to temporary disk - used in merge sort /// [ThreadSafe] /// internal class SortDisk : IDisposable { private readonly IStreamFactory _factory; private readonly StreamPool _pool; private readonly ConcurrentBag _freePositions = new ConcurrentBag(); private long _lastContainerPosition = 0; private readonly int _containerSize; private readonly EnginePragmas _pragmas; public int ContainerSize => _containerSize; public SortDisk(IStreamFactory factory, int containerSize, EnginePragmas pragmas) { ENSURE(containerSize % PAGE_SIZE == 0, "size must be PAGE_SIZE multiple"); _factory = factory; _containerSize = containerSize; _pragmas = pragmas; _lastContainerPosition = -containerSize; _pool = new StreamPool(_factory, false); } /// /// Get a new reader stream from pool. Must return after use /// public Stream GetReader() { return _pool.Rent(); } /// /// Return used open reader stream to be reused in next sort /// public void Return(Stream stream) { _pool.Return(stream); } /// /// Return used disk container position to be reused in next sort /// public void Return(long position) { _freePositions.Add(position); } /// /// Get next avaiable disk position - can be a new extend file or reuse container slot /// Use thread safe classes to ensure multiple threads access at same time /// public long GetContainerPosition() { if (_freePositions.TryTake(out var position)) { return position; } position = Interlocked.Add(ref _lastContainerPosition, _containerSize); return position; } /// /// Write buffer container data into disk /// public void Write(long position, BufferSlice buffer) { var writer = _pool.Writer.Value; // there is only a single writer instance, must be lock to ensure only 1 single thread are writing lock(writer) { for (var i = 0; i < _containerSize / PAGE_SIZE; ++i) { writer.Position = position + i * PAGE_SIZE; writer.Write(buffer.Array, buffer.Offset + i * PAGE_SIZE, PAGE_SIZE); } } } public void Dispose() { _pool.Dispose(); _factory.Delete(); } } } ================================================ FILE: LiteDB/Engine/Sort/SortService.cs ================================================ using System; using System.Buffers; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Service to implement merge sort, in disk, to run ORDER BY command. /// [ThreadSafe] /// internal class SortService : IDisposable { private readonly SortDisk _disk; private readonly List _containers = new List(); private readonly int _containerSize; private readonly Done _done = new Done { Running = true }; private readonly int _order; private readonly EnginePragmas _pragmas; private readonly BufferSlice _buffer; private readonly Lazy _reader; private static readonly ArrayPool _bufferPool = ArrayPool.Shared; /// /// Get how many documents was inserted by Insert method /// public int Count => _done.Count; /// /// Expose used container in this sort operation /// public IReadOnlyCollection Containers => _containers; public SortService(SortDisk disk, int order, EnginePragmas pragmas) { _disk = disk; _order = order; _pragmas = pragmas; _containerSize = disk.ContainerSize; _reader = new Lazy(() => _disk.GetReader()); var bytes = new byte [disk.ContainerSize]; _buffer = new BufferSlice(bytes, 0, _containerSize); } public void Dispose() { // release all container positions foreach(var container in _containers) { container.Dispose(); // return only was used if (container.Position >= 0) { _disk.Return(container.Position); } } // return open strem into disk if (_reader.IsValueCreated) { _disk.Return(_reader.Value); } } /// /// Read all input items and store in temp disk ordered in each container /// public void Insert(IEnumerable> items) { // slit all items in sorted containers foreach (var containerItems in this.SliptValues(items, _done)) { var container = new SortContainer(_pragmas.Collation, _containerSize); // insert segmented items inside a container - reuse same buffer slice container.Insert(containerItems, _order, _buffer); _containers.Add(container); // initialize container readers: if single container, do not use Stream file... only buffer memory if (_done.Running == false && _containers.Count == 1) { container.InitializeReader(null, _buffer, _pragmas.UtcDate); } else { // store in disk container.Position = _disk.GetContainerPosition(); _disk.Write(container.Position, _buffer); container.InitializeReader(_reader.Value, null, _pragmas.UtcDate); } } } /// /// Slipt all items in big sorted containers - Do merge sort with all containers /// public IEnumerable> Sort() { if (_containers.Count == 0) yield break; // starts with first container as current var current = _containers[0]; // if single container, just return ordered data if (_containers.Count == 1) { do { yield return current.Current; } while (current.MoveNext()); current.Dispose(); } else { var diffOrder = _order * -1; // merge sort with all containers while (_containers.Any(x => !x.IsEOF)) { foreach (var container in _containers.Where(x => !x.IsEOF)) { var diff = container.Current.Key.CompareTo(current.Current.Key, _pragmas.Collation); if (diff == diffOrder) { current = container; } } yield return current.Current; var lastKey = current.Current.Key; if (current.MoveNext() == false) { // now, current container must any new container that still have values current = _containers.FirstOrDefault(x => !x.IsEOF); } // after run MoveNext(), if container contains same lastKey, can return now while (current?.Current.Key == lastKey) { yield return current.Current; if (current.MoveNext() == false) { current = _containers.FirstOrDefault(x => !x.IsEOF); } } } } } /// /// Split values in many IEnumerable. Each enumerable contains values to be insert in a single container /// private IEnumerable>> SliptValues(IEnumerable> source, Done done) { using (var enumerator = source.GetEnumerator()) { if (enumerator.MoveNext()) { done.Count = 1; while (done.Running) { yield return this.YieldValues(enumerator, done); } } } } /// /// Loop in values enumerator to return N values for a single container /// private IEnumerable> YieldValues(IEnumerator> source, Done done) { var size = IndexNode.GetKeyLength(source.Current.Key, false) + PageAddress.SIZE; yield return source.Current; while (source.MoveNext()) { var length = IndexNode.GetKeyLength(source.Current.Key, false) + PageAddress.SIZE; done.Count++; if (size + length > _containerSize) yield break; size += length; yield return source.Current; } done.Running = false; } } } ================================================ FILE: LiteDB/Engine/Structures/CollectionIndex.cs ================================================ using System; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB.Engine { internal class CollectionIndex { /// /// Slot index [0-255] used in all index nodes /// public byte Slot { get; } /// /// Indicate index type: 0 = SkipList (reserved for future use) /// public byte IndexType { get; } /// /// Index name /// public string Name { get; } /// /// Get index expression (path or expr) /// public string Expression { get; } /// /// Get BsonExpression from Expression /// public BsonExpression BsonExpr { get; } /// /// Indicate if this index has distinct values only /// public bool Unique { get; } /// /// Head page address for this index /// public PageAddress Head { get; set; } /// /// A link pointer to tail node /// public PageAddress Tail { get; set; } /// /// Reserved byte (old max level) /// public byte Reserved { get; set; } = 1; /// /// Free index page linked-list (all pages here must have at least 600 bytes) /// public uint FreeIndexPageList; /// /// Returns if this index slot is empty and can be used as new index /// public bool IsEmpty { get { return string.IsNullOrEmpty(this.Name); } } public CollectionIndex(byte slot, byte indexType, string name, string expr, bool unique) { this.Slot = slot; this.IndexType = indexType; this.Name = name; this.Expression = expr; this.Unique = unique; this.FreeIndexPageList = uint.MaxValue; this.BsonExpr = BsonExpression.Create(expr); } public CollectionIndex(BufferReader reader) { this.Slot = reader.ReadByte(); this.IndexType = reader.ReadByte(); this.Name = reader.ReadCString(); this.Expression = reader.ReadCString(); this.Unique = reader.ReadBoolean(); this.Head = reader.ReadPageAddress(); // 5 this.Tail = reader.ReadPageAddress(); // 5 this.Reserved = reader.ReadByte(); // 1 this.FreeIndexPageList = reader.ReadUInt32(); // 4 this.BsonExpr = BsonExpression.Create(this.Expression); } public void UpdateBuffer(BufferWriter writer) { writer.Write(this.Slot); writer.Write(this.IndexType); writer.WriteCString(this.Name); writer.WriteCString(this.Expression); writer.Write(this.Unique); writer.Write(this.Head); writer.Write(this.Tail); writer.Write(this.Reserved); writer.Write(this.FreeIndexPageList); } /// /// Get index collection size used in CollectionPage /// public static int GetLength(CollectionIndex index) { return GetLength(index.Name, index.Expression); } /// /// Get index collection size used in CollectionPage /// public static int GetLength(string name, string expr) { return 1 + // Slot 1 + // IndexType StringEncoding.UTF8.GetByteCount(name) + 1 + // Name + \0 StringEncoding.UTF8.GetByteCount(expr) + 1 + // Expression + \0 1 + // Unique PageAddress.SIZE + // Head PageAddress.SIZE + // Tail 1 + // MaxLevel 4; // FreeListPage } } } ================================================ FILE: LiteDB/Engine/Structures/CursorInfo.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent a single query featching data from engine /// internal class CursorInfo { public CursorInfo(string collection, Query query) { this.Collection = collection; this.Query = query; } public string Collection { get; } public Query Query { get; set; } public int Fetched { get; set; } public Stopwatch Elapsed { get; } = new Stopwatch(); } } ================================================ FILE: LiteDB/Engine/Structures/DataBlock.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB.Engine { internal class DataBlock { /// /// Get fixed part of DataBlock (6 bytes) /// public const int DATA_BLOCK_FIXED_SIZE = 1 + // Extend PageAddress.SIZE; // NextBlock public const int P_EXTEND = 0; // 00-00 [byte] public const int P_NEXT_BLOCK = 1; // 01-05 [pageAddress] public const int P_BUFFER = 6; // 06-EOF [byte[]] private readonly DataPage _page; private readonly BufferSlice _segment; /// /// Position block inside page /// public PageAddress Position { get; } /// /// Indicate if this data block is first block (false) or extend block (true) /// public bool Extend { get; } /// /// If document need more than 1 block, use this link to next block /// public PageAddress NextBlock { get; private set; } /// /// Document buffer slice /// public BufferSlice Buffer { get; } /// /// Read new DataBlock from filled page segment /// public DataBlock(DataPage page, byte index, BufferSlice segment) { _page = page; _segment = segment; this.Position = new PageAddress(page.PageID, index); // byte 00: Extend this.Extend = segment.ReadBool(P_EXTEND); // byte 01-05: NextBlock (PageID, Index) this.NextBlock = segment.ReadPageAddress(P_NEXT_BLOCK); // byte 06-EOL: Buffer this.Buffer = segment.Slice(P_BUFFER, segment.Count - P_BUFFER); } /// /// Create new DataBlock and fill into buffer /// public DataBlock(DataPage page, byte index, BufferSlice segment, bool extend, PageAddress nextBlock) { _page = page; _segment = segment; this.Position = new PageAddress(page.PageID, index); this.NextBlock = nextBlock; this.Extend = extend; // byte 00: Data Index segment.Write(extend, P_EXTEND); // byte 01-05 (can be updated in "UpdateNextBlock") segment.Write(nextBlock, P_NEXT_BLOCK); // byte 06-EOL: Buffer this.Buffer = segment.Slice(P_BUFFER, segment.Count - P_BUFFER); page.IsDirty = true; } public void SetNextBlock(PageAddress nextBlock) { this.NextBlock = nextBlock; // update segment buffer with NextBlock (uint + byte) _segment.Write(nextBlock, P_NEXT_BLOCK); _page.IsDirty = true; } public override string ToString() { return $"Pos: [{this.Position}] - Ext: [{this.Extend}] - Next: [{this.NextBlock}] - Buffer: [{this.Buffer}]"; } } } ================================================ FILE: LiteDB/Engine/Structures/Done.cs ================================================ using System; using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Simple parameter class to be passed into IEnumerable classes loop ("ref" do not works) /// internal class Done { public bool Running = false; public int Count = 0; } } ================================================ FILE: LiteDB/Engine/Structures/FileOrigin.cs ================================================ namespace LiteDB.Engine { public enum FileOrigin : byte { /// /// There is no origin (new page) /// None = 0, /// /// Data file /// Data = 1, /// /// Log file (-log) /// Log = 2 } } ================================================ FILE: LiteDB/Engine/Structures/IndexNode.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent a index node inside a Index Page /// internal class IndexNode { /// /// Fixed length of IndexNode (12 bytes) /// private const int INDEX_NODE_FIXED_SIZE = 1 + // Slot [1 byte] 1 + // Levels [1 byte] PageAddress.SIZE + // DataBlock (5 bytes) PageAddress.SIZE; // NextNode (5 bytes) private const int P_SLOT = 0; // 00-00 [byte] private const int P_LEVELS = 1; // 01-01 [byte] private const int P_DATA_BLOCK = 2; // 02-06 [PageAddress] private const int P_NEXT_NODE = 7; // 07-11 [PageAddress] private const int P_PREV_NEXT = 12; // 12-(_level * 5 [PageAddress] * 2 [prev-next]) private int P_KEY => P_PREV_NEXT + (this.Levels * PageAddress.SIZE * 2); // just after NEXT private readonly IndexPage _page; private readonly BufferSlice _segment; private static readonly byte[] arrayByteEmpty = new byte[0]; /// /// Position of this node inside a IndexPage (not persist) /// public PageAddress Position { get; } /// /// Index slot reference in CollectionIndex [1 byte] /// public byte Slot { get; } /// /// Skip-list levels (array-size) (1-32) - [1 byte] /// public byte Levels { get; } /// /// The object value that was indexed (max 255 bytes value) /// public BsonValue Key { get; } /// /// Reference for a datablock address /// public PageAddress DataBlock { get; } /// /// Single linked-list for all nodes from a single document [5 bytes] /// public PageAddress NextNode { get; private set; } /// /// Link to prev value (used in skip lists - Prev.Length = Next.Length) [5 bytes] /// public PageAddress[] Prev { get; private set; } /// /// Link to next value (used in skip lists - Prev.Length = Next.Length) /// public PageAddress[] Next { get; private set; } /// /// Get index page reference /// public IndexPage Page => _page; /// /// Calculate how many bytes this node will need on page segment /// public static int GetNodeLength(byte level, BsonValue key, out int keyLength) { keyLength = GetKeyLength(key, true); return INDEX_NODE_FIXED_SIZE + (level * 2 * PageAddress.SIZE) + // prev/next keyLength; // key } /// /// Get how many bytes will be used to store this value. Must consider: /// [1 byte] - BsonType /// [1 byte] - KeyLength (used only in String|Byte[]) /// [N bytes] - BsonValue in bytes (0-254) /// public static int GetKeyLength(BsonValue key, bool recalc) { return 1 + ((key.IsString || key.IsBinary) ? 1 : 0) + key.GetBytesCount(recalc); } /// /// Read index node from page segment (lazy-load) /// public IndexNode(IndexPage page, byte index, BufferSlice segment) { _page = page; _segment = segment; this.Position = new PageAddress(page.PageID, index); this.Slot = segment.ReadByte(P_SLOT); this.Levels = segment.ReadByte(P_LEVELS); this.DataBlock = segment.ReadPageAddress(P_DATA_BLOCK); this.NextNode = segment.ReadPageAddress(P_NEXT_NODE); this.Next = new PageAddress[this.Levels]; this.Prev = new PageAddress[this.Levels]; for (var i = 0; i < this.Levels; i++) { this.Prev[i] = segment.ReadPageAddress(P_PREV_NEXT + (i * PageAddress.SIZE * 2)); this.Next[i] = segment.ReadPageAddress(P_PREV_NEXT + (i * PageAddress.SIZE * 2) + PageAddress.SIZE); } this.Key = segment.ReadIndexKey(P_KEY); } /// /// Create new index node and persist into page segment /// public IndexNode(IndexPage page, byte index, BufferSlice segment, byte slot, byte levels, BsonValue key, PageAddress dataBlock) { _page = page; _segment = segment; this.Position = new PageAddress(page.PageID, index); this.Slot = slot; this.Levels = levels; this.DataBlock = dataBlock; this.NextNode = PageAddress.Empty; this.Next = new PageAddress[levels]; this.Prev = new PageAddress[levels]; this.Key = key; // persist in buffer read only data segment.Write(slot, P_SLOT); segment.Write(levels, P_LEVELS); segment.Write(dataBlock, P_DATA_BLOCK); segment.Write(this.NextNode, P_NEXT_NODE); for (var i = 0; i < levels; i++) { this.SetPrev((byte)i, PageAddress.Empty); this.SetNext((byte)i, PageAddress.Empty); } segment.WriteIndexKey(key, P_KEY); page.IsDirty = true; } /// /// Create a fake index node used only in Virtual Index runner /// public IndexNode(BsonDocument doc) { _page = null; _segment = new BufferSlice(arrayByteEmpty, 0, 0); this.Position = new PageAddress(0, 0); this.Slot = 0; this.Levels = 0; this.DataBlock = PageAddress.Empty; this.NextNode = PageAddress.Empty; this.Next = new PageAddress[0]; this.Prev = new PageAddress[0]; // index node key IS document this.Key = doc; } /// /// Update NextNode pointer (update in buffer too). Also, set page as dirty /// public void SetNextNode(PageAddress value) { this.NextNode = value; _segment.Write(value, P_NEXT_NODE); _page.IsDirty = true; } /// /// Update Prev[index] pointer (update in buffer too). Also, set page as dirty /// public void SetPrev(byte level, PageAddress value) { ENSURE(level <= this.Levels, "out of index in level"); this.Prev[level] = value; _segment.Write(value, P_PREV_NEXT + (level * PageAddress.SIZE * 2)); _page.IsDirty = true; } /// /// Update Next[index] pointer (update in buffer too). Also, set page as dirty /// public void SetNext(byte level, PageAddress value) { ENSURE(level <= this.Levels, "out of index in level"); this.Next[level] = value; _segment.Write(value, P_PREV_NEXT + (level * PageAddress.SIZE * 2) + PageAddress.SIZE); _page.IsDirty = true; } /// /// Returns Next (order == 1) OR Prev (order == -1) /// public PageAddress GetNextPrev(byte level, int order) { return order == Query.Ascending ? this.Next[level] : this.Prev[level]; } public override string ToString() { return $"Pos: [{this.Position}] - Key: {this.Key}"; } } } ================================================ FILE: LiteDB/Engine/Structures/LockMode.cs ================================================ namespace LiteDB.Engine { /// /// Represents a snapshot lock mode /// internal enum LockMode { /// /// Read only snap with read lock /// Read, /// /// Read/Write snapshot with reserved lock /// Write } } ================================================ FILE: LiteDB/Engine/Structures/PageAddress.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represents a page address inside a page structure - index could be byte offset position OR index in a list (6 bytes) /// [DebuggerStepThrough] internal struct PageAddress { public const int SIZE = 5; public static PageAddress Empty = new PageAddress(uint.MaxValue, byte.MaxValue); /// /// PageID (4 bytes) /// public readonly uint PageID; /// /// Page Segment index inside page (1 bytes) /// public readonly byte Index; /// /// Returns true if this PageAdress is empty value /// public bool IsEmpty => this.PageID == uint.MaxValue && this.Index == byte.MaxValue; public override bool Equals(object obj) { var other = (PageAddress)obj; return this.PageID == other.PageID && this.Index == other.Index; } public static bool operator ==(PageAddress lhs, PageAddress rhs) { return lhs.PageID == rhs.PageID && lhs.Index == rhs.Index; } public static bool operator !=(PageAddress lhs, PageAddress rhs) { return !(lhs == rhs); } public override int GetHashCode() { unchecked { int hash = 17; hash = hash * 23 + (int)this.PageID; hash = hash * 23 + this.Index; return hash; } } public PageAddress(uint pageID, byte index) { this.PageID = pageID; this.Index = index; } public override string ToString() { return this.IsEmpty ? "(empty)" : this.PageID.ToString().PadLeft(4, '0') + ":" + this.Index.ToString().PadLeft(2, '0'); } public BsonValue ToBsonValue() { if (this.IsEmpty) return BsonValue.Null; return new BsonDocument { ["pageID"] = (int)this.PageID, ["index"] = (int)this.Index }; } } } ================================================ FILE: LiteDB/Engine/Structures/PageBuffer.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent page buffer to be read/write using FileMemory /// internal class PageBuffer : BufferSlice { /// /// Get, on initialize, a unique ID in all database instance for this PageBufer. Is a simple global incremented counter /// public readonly int UniqueID; /// /// Get/Set page position. If page are writable, this postion CAN be MaxValue (has not defined position yet) /// public long Position; /// /// Get/Set page bytes origin (data/log) /// public FileOrigin Origin; /// /// Get/Set how many read-share threads are using this page. -1 means 1 thread are using as writable /// public int ShareCounter; /// /// Get/Set timestamp from last request /// public long Timestamp; public PageBuffer(byte[] buffer, int offset, int uniqueID) : base(buffer, offset, PAGE_SIZE) { this.UniqueID = uniqueID; this.Position = long.MaxValue; this.Origin = FileOrigin.None; this.ShareCounter = 0; this.Timestamp = 0; } /// /// Release this page - decrement ShareCounter /// public void Release() { ENSURE(this.ShareCounter > 0, "share counter must be > 0 in Release()"); Interlocked.Decrement(ref this.ShareCounter); } #if DEBUG ~PageBuffer() { ENSURE(this.ShareCounter == 0, $"share count must be 0 in destroy PageBuffer (current: {this.ShareCounter})"); } #endif public override string ToString() { var p = this.Position == long.MaxValue ? "" : this.Position.ToString(); var s = this.ShareCounter == BUFFER_WRITABLE ? "" : this.ShareCounter.ToString(); var pageID = this.ReadUInt32(0); var pageType = this[4]; return $"ID: {this.UniqueID} - Position: {p}/{this.Origin} - Shared: {s} - ({base.ToString()}) :: Content: [{pageID.ToString("0:0000")}/{(PageType)pageType}]"; } public unsafe bool IsBlank() { fixed (byte* arrayPtr = this.Array) { ulong* ptr = (ulong*)(arrayPtr + this.Offset); return *ptr == 0UL && *(ptr + 1) == 0UL; } } } } ================================================ FILE: LiteDB/Engine/Structures/PagePosition.cs ================================================ using System; using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represents a page position after save in disk. Used in WAL files where PageID do not match with PagePosition /// internal struct PagePosition { public static PagePosition Empty => new PagePosition(uint.MaxValue, long.MaxValue); /// /// PageID (4 bytes) /// public uint PageID; /// /// Position in disk /// public long Position; /// /// Checks if current PagePosition is empty value /// public bool IsEmpty => this.PageID == uint.MaxValue && this.Position == long.MaxValue; public override bool Equals(object obj) { var other = (PagePosition)obj; return this.PageID == other.PageID && this.Position == other.PageID; } public override int GetHashCode() { unchecked { int hash = 17; hash = hash * 23 + (int)this.PageID; hash = hash * 23 + (int)this.Position; return hash; } } public PagePosition(uint pageID, long position) { this.PageID = pageID; this.Position = position; } public override string ToString() { return this.IsEmpty ? "----:----" : (this.PageID == uint.MaxValue ? "----" : this.PageID.ToString()) + ":" + this.Position.ToString(); } } } ================================================ FILE: LiteDB/Engine/Structures/Pragma.cs ================================================ using System; using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent a single internal engine variable that user can read/change /// internal class Pragma { public string Name { get; set; } public Func Get { get; set; } public Action Set { get; set; } public Action Read { get; set; } public Action Validate { get; set; } public Action Write { get; set; } } } ================================================ FILE: LiteDB/Engine/Structures/RebuildOptions.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// public class RebuildOptions { /// /// A random BuildID identifier /// private string _buildId = Guid.NewGuid().ToString("d").ToLower().Substring(6); /// /// Rebuild database with a new password /// public string Password { get; set; } = null; /// /// Define a new collation when rebuild /// public Collation Collation { get; set; } = null; /// /// When set true, if any problem occurs in rebuild, a _rebuild_errors collection /// will contains all errors found /// public bool IncludeErrorReport { get; set; } = true; /// /// After run rebuild process, get a error report (empty if no error detected) /// internal IList Errors { get; } = new List(); /// /// Get a list of errors during rebuild process /// public IEnumerable GetErrorReport() { var docs = this.Errors.Select(x => new BsonDocument { ["buildId"] = _buildId, ["created"] = x.Created, ["pageID"] = (int)x.PageID, ["positionID"] = (long)x.Position, ["origin"] = x.Origin.ToString(), ["pageType"] = x.PageType.ToString(), ["message"] = x.Message, ["exception"] = new BsonDocument { ["code"] = (x.Exception is LiteException lex ? lex.ErrorCode : -1), ["hresult"] = x.Exception.HResult, ["type"] = x.Exception.GetType().FullName, ["inner"] = x.Exception.InnerException?.Message, ["stacktrace"] = x.Exception.StackTrace }, }); return docs; } } } ================================================ FILE: LiteDB/Engine/Structures/TransactionPages.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Represent a simple structure to store added/removed pages in a transaction. One instance per transaction /// [SingleThread] /// internal class TransactionPages { /// /// Get how many pages are involved in this transaction across all snapshots - Will be clear when get MAX_TRANSACTION_SIZE /// public int TransactionSize { get; set; } = 0; /// /// Contains all dirty pages already persist in LOG file (used in all snapshots). Store in [uint, PagePosition] to reuse same method in save pages into log and get saved page positions on log /// public Dictionary DirtyPages { get; } = new Dictionary(); /// /// Handle created pages during transaction (for rollback) - Is a list because order is important /// public List NewPages { get; } = new List(); /// /// First deleted pageID /// public uint FirstDeletedPageID { get; set; } = uint.MaxValue; /// /// Last deleted pageID /// public uint LastDeletedPageID { get; set; } = uint.MaxValue; /// /// Get deleted page count /// public int DeletedPages { get; set; } /// /// Callback function to modify header page on commit /// public event Action Commit; /// /// Run Commit event /// public void OnCommit(HeaderPage header) { this.Commit?.Invoke(header); } /// /// Detect if this transaction will need persist header page (has added/deleted pages or added/deleted collections) /// public bool HeaderChanged => this.NewPages.Count > 0 || this.DeletedPages > 0 || this.Commit != null; } } ================================================ FILE: LiteDB/Engine/Structures/TransactionState.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB.Engine { internal enum TransactionState { Active, Committed, Aborted, Disposed } } ================================================ FILE: LiteDB/Engine/SystemCollections/Register.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { /// /// Register all internal system collections avaiable by default /// private void InitializeSystemCollections() { this.RegisterSystemCollection("$database", () => this.SysDatabase()); this.RegisterSystemCollection("$cols", () => this.SysCols()); this.RegisterSystemCollection("$indexes", () => this.SysIndexes()); this.RegisterSystemCollection("$sequences", () => this.SysSequences()); this.RegisterSystemCollection("$transactions", () => this.SysTransactions()); this.RegisterSystemCollection("$snapshots", () => this.SysSnapshots()); this.RegisterSystemCollection("$open_cursors", () => this.SysOpenCursors()); this.RegisterSystemCollection(new SysFile()); // use single $file(?) for all file formats this.RegisterSystemCollection(new SysDump(_header, _monitor)); this.RegisterSystemCollection(new SysPageList(_header, _monitor)); this.RegisterSystemCollection(new SysQuery(this)); } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysCols.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private IEnumerable SysCols() { foreach (var col in _header.GetCollections()) { yield return new BsonDocument { ["name"] = col.Key, ["type"] = "user" }; } foreach (var item in _systemCollections) { yield return new BsonDocument { ["name"] = item.Key, ["type"] = "system" }; } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysDatabase.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private IEnumerable SysDatabase() { var version = typeof(LiteEngine).GetTypeInfo().Assembly.GetName().Version; yield return new BsonDocument { ["name"] = _disk.GetName(FileOrigin.Data), ["encrypted"] = _settings.Password != null, ["readOnly"] = _settings.ReadOnly, ["lastPageID"] = (int)_header.LastPageID, ["freeEmptyPageID"] = (int)_header.FreeEmptyPageList, ["creationTime"] = _header.CreationTime, ["dataFileSize"] = (int)_disk.GetFileLength(FileOrigin.Data), ["logFileSize"] = (int)_disk.GetFileLength(FileOrigin.Log), ["currentReadVersion"] = _walIndex.CurrentReadVersion, ["lastTransactionID"] = _walIndex.LastTransactionID, ["engine"] = $"litedb-ce-v{version.Major}.{version.Minor}.{version.Build}", ["pragmas"] = new BsonDocument(_header.Pragmas.Pragmas.ToDictionary(x => x.Name, x => x.Get())), ["cache"] = new BsonDocument { ["extendSegments"] = _disk.Cache.ExtendSegments, ["extendPages"] = _disk.Cache.ExtendPages, ["freePages"] = _disk.Cache.FreePages, ["readablePages"] = _disk.Cache.GetPages().Count, ["writablePages"] = _disk.Cache.WritablePages, ["pagesInUse"] = _disk.Cache.PagesInUse, }, ["transactions"] = new BsonDocument { ["open"] = _monitor.Transactions.Count, ["maxOpenTransactions"] = MAX_OPEN_TRANSACTIONS, ["initialTransactionSize"] = _monitor.InitialSize, ["availableSize"] = _monitor.FreePages } }; } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysDump.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { internal class SysDump : SystemCollection { private readonly HeaderPage _header; private readonly TransactionMonitor _monitor; public SysDump(HeaderPage header, TransactionMonitor monitor) : base("$dump") { _header = header; _monitor = monitor; } public override IEnumerable Input(BsonValue options) { var pageID = GetOption(options, "pageID"); return this.DumpPages(pageID == null ? null : (uint?)pageID.AsInt32); } private IEnumerable DumpPages(uint? pageID) { var collections = _header.GetCollections().ToDictionary(x => x.Value, x => x.Key); // get any transaction from current thread ID var transaction = _monitor.GetThreadTransaction(); var snapshot = transaction.CreateSnapshot(LockMode.Read, "$", false); var start = pageID.HasValue ? pageID.Value : 0; var end = pageID.HasValue ? pageID.Value : _header.LastPageID; for (uint i = start; i <= Math.Min(end, _header.LastPageID); i++) { var page = snapshot.GetPage(i, out var origin, out var position, out var walVersion); var doc = new BsonDocument { ["pageID"] = (int)page.PageID, ["pageType"] = page.PageType.ToString(), ["_position"] = position, ["_origin"] = origin.ToString(), ["_version"] = walVersion, ["prevPageID"] = (int)page.PrevPageID, ["nextPageID"] = (int)page.NextPageID, ["slot"] = (int)page.PageListSlot, ["collection"] = collections.GetOrDefault(page.ColID, "-"), ["itemsCount"] = (int)page.ItemsCount, ["freeBytes"] = page.FreeBytes, ["usedBytes"] = (int)page.UsedBytes, ["fragmentedBytes"] = (int)page.FragmentedBytes, ["nextFreePosition"] = (int)page.NextFreePosition, ["highestIndex"] = (int)page.HighestIndex }; if (page.PageType == PageType.Collection) { var collectionPage = new CollectionPage(page.Buffer); doc["dataPageList"] = new BsonArray(collectionPage.FreeDataPageList.Select(x => new BsonValue((int)x))); doc["indexes"] = new BsonArray(collectionPage.GetCollectionIndexes().Select(x => new BsonDocument { ["slot"] = (int)x.Slot, ["empty"] = x.IsEmpty, ["indexType"] = (int)x.IndexType, ["name"] = x.Name, ["expression"] = x.Expression, ["unique"] = x.Unique, ["head"] = x.Head.ToBsonValue(), ["tail"] = x.Tail.ToBsonValue(), ["freeIndexPageList"] = (int)x.FreeIndexPageList, })); } if (pageID.HasValue) doc["buffer"] = page.Buffer.ToArray(); yield return doc; transaction.Safepoint(); } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysFile.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { internal class SysFile : SystemCollection { private readonly Dictionary _formats = new Dictionary(StringComparer.OrdinalIgnoreCase) { ["json"] = new SysFileJson(), ["csv"] = new SysFileCsv() }; public SysFile() : base("$file") { } public override IEnumerable Input(BsonValue options) { var format = this.GetFormat(options); if (_formats.TryGetValue(format, out var factory)) { return factory.Input(options); } throw new LiteException(0, $"Unknow file format in $file: `{format}`"); } public override int Output(IEnumerable source, BsonValue options) { var format = this.GetFormat(options); if (_formats.TryGetValue(format, out var factory)) { return factory.Output(source, options); } throw new LiteException(0, $"Unknow file format in $file: `{format}`"); } private string GetFormat(BsonValue options) { var filename = GetOption(options, "filename")?.AsString ?? throw new LiteException(0, $"Collection $file requires string as 'filename' or a document field 'filename'"); var format = GetOption(options, "format", Path.GetExtension(filename)).AsString; return format.StartsWith(".") ? format.Substring(1) : format; } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysFileCsv.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { internal class SysFileCsv : SystemCollection { private readonly static IFormatProvider _numberFormat = CultureInfo.InvariantCulture.NumberFormat; public SysFileCsv() : base("$file_csv") { } public override IEnumerable Input(BsonValue options) { var filename = GetOption(options, "filename")?.AsString ?? throw new LiteException(0, $"Collection ${this.Name} requires string as 'filename' or a document field 'filename'"); var encoding = GetOption(options, "encoding", "utf-8").AsString; var delimiter = GetOption(options, "delimiter", ",").AsString[0]; // read header (or first line as header) var header = new List(); if (options.IsDocument && options["header"].IsArray) { header.AddRange(options["header"].AsArray.Select(x => x.AsString)); } using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (var reader = new StreamReader(fs, Encoding.GetEncoding(encoding))) { // if not header declared, use first line as header fields if (header.Count == 0) { while (true) { var key = this.ReadString(reader, delimiter, out var newLine); if (key == null) break; header.Add(key); if (newLine) break; } } // read all results var index = 0; var doc = new BsonDocument(); while(true) { var value = this.ReadString(reader, delimiter, out var newLine); if (value == null) yield break; if (index < header.Count) { var key = header[index++]; doc[key] = value; } if (newLine) { yield return doc; doc = new BsonDocument(); index = 0; } } } } } public override int Output(IEnumerable source, BsonValue options) { var filename = GetOption(options, "filename")?.AsString ?? throw new LiteException(0, "Collection $file_json requires string as 'filename' or a document field 'filename'"); var overwritten = GetOption(options, "overwritten", false).AsBoolean; var encoding = GetOption(options, "encoding", "utf-8").AsString; var delimiter = GetOption(options, "delimiter", ",").AsString[0]; var header = GetOption(options, "header", true).AsBoolean; var index = 0; IList headerFields = null; FileStream fs = null; StreamWriter writer = null; try { foreach (var doc in source) { if (index++ == 0) { fs = new FileStream(filename, overwritten ? FileMode.OpenOrCreate : FileMode.CreateNew); writer = new StreamWriter(fs, Encoding.GetEncoding(encoding)); headerFields = doc.Keys.ToList(); // print file header if (header) { var idxHeader = 0; foreach (var elem in doc) { if (idxHeader++ > 0) writer.Write(delimiter); writer.Write(elem.Key); } writer.WriteLine(); } } else { writer.WriteLine(); } var idxValue = 0; foreach(var field in headerFields) { var value = doc[field]; if (idxValue++ > 0) writer.Write(delimiter); this.WriteValue(value, writer); } } if (index > 0) { writer.Flush(); } } finally { if (writer != null) writer.Dispose(); if (fs != null) fs.Dispose(); } return index; } private void WriteValue(BsonValue value, StreamWriter writer) { switch (value.Type) { case BsonType.MinValue: case BsonType.Null: case BsonType.Document: case BsonType.Array: case BsonType.MaxValue: writer.Write("null"); break; case BsonType.Int64: writer.Write(value.AsInt64.ToString(CultureInfo.InvariantCulture.NumberFormat)); break; case BsonType.Decimal: writer.Write(value.AsDecimal.ToString(CultureInfo.InvariantCulture.NumberFormat)); break; case BsonType.Binary: writer.Write($"\"{Convert.ToBase64String(value.AsBinary)}\""); break; case BsonType.ObjectId: writer.Write($"\"{value.AsObjectId.ToString()}\""); break; case BsonType.Guid: writer.Write($"\"{value.AsGuid.ToString()}\""); break; case BsonType.DateTime: writer.Write($"\"{value.AsDateTime.ToUniversalTime().ToString("o")}\""); break; default: writer.Write(value.ToString()); break; } } private string ReadString(TextReader reader, char delimiter, out bool newLine) { var sb = new StringBuilder(); var c = reader.Read(); // eat possible new line before read string while(c == '\n' || c == '\r') { c = reader.Read(); } if (c == -1) { newLine = true; return null; } // read " string if(c == '"') { var last = c; while(c != -1) { c = reader.Read(); if (c == '"') { var next = reader.Read(); if (next == '"') { sb.Append('"'); continue; } else { c = next; break; } } sb.Append((char)c); last = c; } } else { while(!(c == '\n' || c == '\r' || c == delimiter || c == -1)) { sb.Append((char)c); c = reader.Read(); } } newLine = (c == '\n' || c == '\r'); return sb.ToString(); } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysFileJson.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { internal class SysFileJson : SystemCollection { public SysFileJson() : base("$file_json") { } public override IEnumerable Input(BsonValue options) { var filename = GetOption(options, "filename")?.AsString ?? throw new LiteException(0, $"Collection ${this.Name} requires string as 'filename' or a document field 'filename'"); var encoding = GetOption(options, "encoding", "utf-8").AsString; using (var fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { using (var reader = new StreamReader(fs, Encoding.GetEncoding(encoding))) { var json = new JsonReader(reader); var source = json.DeserializeArray() .Select(x => x.AsDocument); // read documents inside file and return one-by-one foreach (var doc in source) { yield return doc; } } } } public override int Output(IEnumerable source, BsonValue options) { var filename = GetOption(options, "filename")?.AsString ?? throw new LiteException(0, "Collection $file_json requires string as filename or a document field 'filename'"); var pretty = GetOption(options, "pretty", false).AsBoolean; var indent = GetOption(options, "indent", 4).AsInt32; var encoding = GetOption(options, "encoding", "utf-8").AsString; var overwritten = GetOption(options, "overwritten", false).AsBoolean; var index = 0; FileStream fs = null; StreamWriter writer = null; JsonWriter json = null; try { foreach (var doc in source) { if (index++ == 0) { fs = new FileStream(filename, overwritten ? FileMode.OpenOrCreate : FileMode.CreateNew); writer = new StreamWriter(fs, Encoding.GetEncoding(encoding)); json = new JsonWriter(writer) { Pretty = pretty, Indent = indent }; writer.WriteLine("["); } else { writer.WriteLine(","); } json.Serialize(doc); } if (index > 0) { writer.WriteLine(); writer.Write("]"); writer.Flush(); } } finally { if (writer != null) writer.Dispose(); if (fs != null) fs.Dispose(); } return index; } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysIndexes.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private IEnumerable SysIndexes() { // get any transaction from current thread ID var transaction = _monitor.GetThreadTransaction(); foreach (var collection in _header.GetCollections()) { var snapshot = transaction.CreateSnapshot(LockMode.Read, collection.Key, false); foreach(var index in snapshot.CollectionPage.GetCollectionIndexes()) { yield return new BsonDocument { ["collection"] = collection.Key, ["name"] = index.Name, ["expression"] = index.Expression, ["unique"] = index.Unique, }; } } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysOpenCursors.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private IEnumerable SysOpenCursors() { foreach (var transaction in _monitor.Transactions) { foreach(var cursor in transaction.OpenCursors) { yield return new BsonDocument { ["threadID"] = transaction.ThreadID, ["transactionID"] = (int)transaction.TransactionID, ["elapsedMS"] = (int)cursor.Elapsed.ElapsedMilliseconds, ["collection"] = cursor.Collection, ["mode"] = cursor.Query.ForUpdate ? "write" : "read", ["sql"] = cursor.Query.ToSQL(cursor.Collection).Replace(Environment.NewLine, " "), ["running"] = cursor.Elapsed.IsRunning, ["fetched"] = cursor.Fetched }; } } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysPageList.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { internal class SysPageList : SystemCollection { private readonly HeaderPage _header; private readonly TransactionMonitor _monitor; private Dictionary _collections; public SysPageList(HeaderPage header, TransactionMonitor monitor) : base("$page_list") { _header = header; _monitor = monitor; } public override IEnumerable Input(BsonValue options) { var pageID = GetOption(options, "pageID"); // get any transaction from current thread ID var transaction = _monitor.GetThreadTransaction(); var snapshot = transaction.CreateSnapshot(LockMode.Read, "$", false); _collections = _header.GetCollections().ToDictionary(x => x.Value, x => x.Key); var result = pageID != null ? this.GetList((uint)pageID.AsInt32, null, transaction, snapshot) : this.GetAllList(transaction, snapshot); foreach (var page in result) { yield return page; } } private IEnumerable GetAllList(TransactionService transaction, Snapshot snapshot) { // get empty page list, from header foreach (var page in this.GetList(_header.FreeEmptyPageList, null, transaction, snapshot)) { yield return page; } // get lists from data pages/index list foreach (var collection in _collections) { var snap = transaction.CreateSnapshot(LockMode.Read, collection.Value, false); for (var slot = 0; slot < PAGE_FREE_LIST_SLOTS; slot++) { var result = this.GetList(snap.CollectionPage.FreeDataPageList[slot], null, transaction, snap); foreach (var page in result) { yield return page; } } var indexes = snap.CollectionPage.GetCollectionIndexes().ToArray(); foreach (var index in indexes) { var result = this.GetList(index.FreeIndexPageList, index.Name, transaction, snap); foreach (var page in result) { yield return page; } } } } private IEnumerable GetList(uint pageID, string indexName, TransactionService transaction, Snapshot snapshot) { if (pageID == uint.MaxValue) yield break; var page = snapshot.GetPage(pageID); while (page != null) { _collections.TryGetValue(page.ColID, out var collection); yield return new BsonDocument { ["pageID"] = (int)page.PageID, ["pageType"] = page.PageType.ToString(), ["slot"] = (int)page.PageListSlot, ["collection"] = collection, ["index"] = indexName, ["freeBytes"] = page.FreeBytes, ["itemsCount"] = (int)page.ItemsCount }; if (page.NextPageID == uint.MaxValue) break; transaction.Safepoint(); page = snapshot.GetPage(page.NextPageID); } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysQuery.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// This class implement $query experimental system function to run sub-queries. It's experimental only - possible not be present in final release /// internal class SysQuery : SystemCollection { private readonly ILiteEngine _engine; public SysQuery(ILiteEngine engine) : base("$query") { _engine = engine; } public override IEnumerable Input(BsonValue options) { var query = options?.AsString ?? throw new LiteException(0, $"Collection $query(sql) requires `sql` string parameter"); var sql = new SqlParser(_engine, new Tokenizer(query), null); using (var reader = sql.Execute()) { while(reader.Read()) { var value = reader.Current; yield return value.IsDocument ? value.AsDocument : new BsonDocument { ["expr"] = value }; } } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysSequences.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private IEnumerable SysSequences() { var values = _sequences.ToArray(); foreach(var value in values) { yield return new BsonDocument { ["collection"] = value.Key, ["value"] = value.Value }; } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysSnapshots.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private IEnumerable SysSnapshots() { foreach (var transaction in _monitor.Transactions) { foreach (var snapshot in transaction.Snapshots) { yield return new BsonDocument { ["transactionID"] = (int)transaction.TransactionID, ["collection"] = snapshot.CollectionName, ["mode"] = snapshot.Mode.ToString(), ["readVersion"] = snapshot.ReadVersion, ["pagesInMemory"] = snapshot.LocalPages.Count, ["collectionDirty"] = snapshot.CollectionPage?.IsDirty ?? false }; } } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SysTransactions.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Engine { public partial class LiteEngine { private IEnumerable SysTransactions() { foreach (var transaction in _monitor.Transactions) { yield return new BsonDocument { ["threadID"] = transaction.ThreadID, ["transactionID"] = (int)transaction.TransactionID, ["startTime"] = transaction.StartTime, ["mode"] = transaction.Mode.ToString(), ["transactionSize"] = transaction.Pages.TransactionSize, ["maxTransactionSize"] = transaction.MaxTransactionSize, ["pagesInLogFile"] = transaction.Pages.DirtyPages.Count, ["newPages"] = transaction.Pages.NewPages.Count, ["deletedPages"] = transaction.Pages.DeletedPages, ["modifiedPages"] = transaction.Snapshots.Select(x => x.GetWritablePages(true, true).Count()).Sum() }; } } } } ================================================ FILE: LiteDB/Engine/SystemCollections/SystemCollection.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB.Engine { /// /// Implement a simple system collection with input data only (to use Output must inherit this class) /// internal class SystemCollection { private readonly string _name; private readonly Func> _input = null; public SystemCollection(string name) { if (!name.StartsWith("$")) throw new ArgumentException("System collection name must starts with $"); _name = name; } public SystemCollection(string name, Func> input) : this(name) { _input = input; } /// /// Get system collection name (must starts with $) /// public string Name => _name; /// /// Get input data source factory /// public virtual IEnumerable Input(BsonValue options) => _input(); /// /// Get output data source factory (must implement in inherit class) /// public virtual int Output(IEnumerable source, BsonValue options) => throw new LiteException(0, $"{_name} do not support as output collection"); /// /// Static helper to read options arg as plain value or as document fields /// protected static BsonValue GetOption(BsonValue options, string key) { return GetOption(options, key, null); } /// /// Static helper to read options arg as plain value or as document fields /// protected static BsonValue GetOption(BsonValue options, string key, BsonValue defaultValue) { if (options != null && options.IsDocument) { if (options.AsDocument.TryGetValue(key, out var value)) { if (defaultValue == null || value.Type == defaultValue.Type) { return value; } else { throw new LiteException(0, $"Parameter `{key}` expect {defaultValue.Type} value type"); } } else { return defaultValue; } } else { return defaultValue == null ? options : defaultValue; } } } } ================================================ FILE: LiteDB/LiteDB.csproj ================================================  net4.5;netstandard1.3;netstandard2.0 5.0.21 5.0.21 5.0.21 5.0.21 Maurício David LiteDB LiteDB - A lightweight embedded .NET NoSQL document store in a single datafile MIT en-US LiteDB LiteDB database nosql embedded icon_64x64.png MIT https://www.litedb.org https://github.com/mbdavid/LiteDB git LiteDB LiteDB true 1.6.1 1701;1702;1705;1591;0618 bin\$(Configuration)\$(TargetFramework)\LiteDB.xml true LiteDB.snk true latest TRACE;DEBUG HAVE_SHA1_MANAGED;HAVE_APP_DOMAIN;HAVE_PROCESS;HAVE_ENVIRONMENT HAVE_SHA1_MANAGED ================================================ FILE: LiteDB/Utils/AsyncManualResetEvent.cs ================================================ using System.Threading; using System.Threading.Tasks; namespace LiteDB { /// /// Async implementation of ManualResetEvent /// https://devblogs.microsoft.com/pfxteam/building-async-coordination-primitives-part-1-asyncmanualresetevent/ /// internal class AsyncManualResetEvent { private volatile TaskCompletionSource _tcs = new TaskCompletionSource(); public Task WaitAsync() { return _tcs.Task; } public void Set() { _tcs.TrySetResult(true); } public void Reset() { while (true) { var tcs = _tcs; if (!tcs.Task.IsCompleted || Interlocked.CompareExchange(ref _tcs, new TaskCompletionSource(), tcs) == tcs) return; } } } } ================================================ FILE: LiteDB/Utils/BufferSlice.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using System.Threading; using static LiteDB.Constants; namespace LiteDB { /// /// Internal class that implement same idea from ArraySegment[byte] but use a class (not a struct). Works for byte[] only /// internal class BufferSlice { public int Offset { get; } public int Count { get; } public byte[] Array { get; } public BufferSlice(byte[] array, int offset, int count) { this.Array = array; this.Offset = offset; this.Count = count; } public byte this[int index] { get => this.Array[this.Offset + index]; set => this.Array[this.Offset + index] = value; } /// /// Clear all page content byte array (not controls) /// public void Clear() { System.Array.Clear(this.Array, this.Offset, this.Count); } /// /// Clear page content byte array /// public void Clear(int offset, int count) { ENSURE(offset + count <= this.Count, "must fit in this page"); System.Array.Clear(this.Array, this.Offset + offset, count); } /// /// Fill all content with value. Used for DEBUG propost /// public void Fill(byte value) { for (var i = 0; i < this.Count; i++) { this.Array[this.Offset + i] = value; } } /// /// Checks if all values contains only value parameter (used for DEBUG) /// public bool All(byte value) { for (var i = 0; i < this.Count; i++) { if (this.Array[this.Offset + i] != value) return false; } return true; } /// /// Return byte[] slice into hex digits /// public string ToHex() { var output = new StringBuilder(); var position = 0L; while(position < this.Count) { //output.Append(position.ToString("X3") + " "); for (var i = 0; i < 32 && position < this.Count; i++) { output.Append(this.Array[this.Offset + position].ToString("X2") + " "); position++; } output.AppendLine(); } return output.ToString(); } /// /// Slice this buffer into new BufferSlice according new offset and new count /// public BufferSlice Slice(int offset, int count) { return new BufferSlice(this.Array, this.Offset + offset, count); } /// /// Convert this buffer slice into new byte[] /// public byte[] ToArray() { var buffer = new byte[this.Count]; Buffer.BlockCopy(this.Array, this.Offset, buffer, 0, this.Count); return buffer; } public override string ToString() { return $"Offset: {this.Offset} - Count: {this.Count}"; } } } ================================================ FILE: LiteDB/Utils/Collation.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Threading; using static LiteDB.Constants; namespace LiteDB { /// /// Implement how database will compare to order by/find strings according defined culture/compare options /// If not set, default is CurrentCulture with IgnoreCase /// public class Collation : IComparer, IComparer, IEqualityComparer { private readonly CompareInfo _compareInfo; public Collation(string collation) { var parts = collation.Split('/'); var culture = parts[0]; var sortOptions = parts.Length > 1 ? (CompareOptions)Enum.Parse(typeof(CompareOptions), parts[1]) : CompareOptions.None; this.LCID = LiteDB.LCID.GetLCID(culture); this.SortOptions = sortOptions; this.Culture = new CultureInfo(culture); _compareInfo = this.Culture.CompareInfo; } public Collation(int lcid, CompareOptions sortOptions) { this.LCID = lcid; this.SortOptions = sortOptions; this.Culture = LiteDB.LCID.GetCulture(lcid); _compareInfo = this.Culture.CompareInfo; } public static Collation Default = new Collation(LiteDB.LCID.Current, CompareOptions.IgnoreCase); public static Collation Binary = new Collation(127 /* Invariant */, CompareOptions.Ordinal); /// /// Get LCID code from culture /// public int LCID { get; } /// /// Get database language culture /// public CultureInfo Culture { get; } /// /// Get options to how string should be compared in sort /// public CompareOptions SortOptions { get; } /// /// Compare 2 string values using current culture/compare options /// public int Compare(string left, string right) { var result = _compareInfo.Compare(left, right, this.SortOptions); return result < 0 ? -1 : result > 0 ? +1 : 0; } public int Compare(BsonValue left, BsonValue rigth) { return left.CompareTo(rigth, this); } public bool Equals(BsonValue x, BsonValue y) { return this.Compare(x, y) == 0; } public int GetHashCode(BsonValue obj) { return obj.GetHashCode(); } public override string ToString() { return this.Culture.Name + "/" + this.SortOptions.ToString(); } } } ================================================ FILE: LiteDB/Utils/Constants.cs ================================================ using LiteDB.Engine; using System; using System.Diagnostics; using System.Runtime.CompilerServices; using System.Threading; [assembly: InternalsVisibleTo("LiteDB.Tests, PublicKey=002400000480000094000000060200000024000052534131000400000100010029e66990e22110ce40a7197e37f8f82df3332c399e696df7f27d09e14ee590ac2dda735d4777fe554c427540bde93b14d3d26c04731c963383dcaa18859c8cbcd4a1a9c394d1204f474c2ab6f23a2eaadf81eb8a7a3d3cc73658868b0302163b92a2614ca050ab703be33c3e1d76f55b11f4f87cb73558f3aa69c1ce726d9ee8")] #if DEBUG [assembly: InternalsVisibleTo("ConsoleApp1")] #endif namespace LiteDB { using System.Globalization; /// /// Class with all constants used in LiteDB + Debbuger HELPER /// internal class Constants { /// /// The size of each page in disk - use 8192 as all major databases /// public const int PAGE_SIZE = 8192; /// /// Header page size /// public const int PAGE_HEADER_SIZE = 32; /// /// Bytes used in encryption salt /// public const int ENCRYPTION_SALT_SIZE = 16; /// /// Define ShareCounter buffer as writable /// public static int BUFFER_WRITABLE = -1; /// /// Define index name max length /// public static int INDEX_NAME_MAX_LENGTH = 32; /// /// Max level used on skip list (index). /// public const int MAX_LEVEL_LENGTH = 32; /// /// Max size of a index entry - usde for string, binary, array and documents. Need fit in 1 byte length /// public const int MAX_INDEX_KEY_LENGTH = 1023; /// /// Get max length of 1 single index node /// public const int MAX_INDEX_LENGTH = 1400; /// /// Get how many slots collection pages will have for free list page (data/index) /// public const int PAGE_FREE_LIST_SLOTS = 5; /// /// Document limit size - 2048 data pages limit (about 16Mb - same size as MongoDB) /// Using 2047 because first/last page can contain less than 8150 bytes. /// public const int MAX_DOCUMENT_SIZE = 2047 * DataService.MAX_DATA_BYTES_PER_PAGE; /// /// Define how many transactions can be open simultaneously /// public const int MAX_OPEN_TRANSACTIONS = 100; /// /// Define how many pages all transaction will consume, in memory, before persist in disk. This amount are shared across all open transactions /// 100,000 ~= 1Gb memory /// public const int MAX_TRANSACTION_SIZE = 100_000; // 100_000 (default) - 1000 (for tests) /// /// Size, in PAGES, for each buffer array (used in MemoryStore) /// It's an array to increase after each extend - limited in highest value /// Each byte array will be created with this size * PAGE_SIZE /// Use minimal 12 to allocate at least 85Kb per segment (will use LOH) /// public static int[] MEMORY_SEGMENT_SIZES = new int[] { 12, 50, 100, 500, 1000 }; // 8Mb per extend /// /// Define how many documents will be keep in memory until clear cache and remove support to orderby/groupby /// public const int VIRTUAL_INDEX_MAX_CACHE = 2000; /// /// Define how many bytes each merge sort container will be created /// public const int CONTAINER_SORT_SIZE = 100 * PAGE_SIZE; /// /// Initial seed for Random /// #if DEBUG public const int RANDOMIZER_SEED = 3131; #else public const int RANDOMIZER_SEED = 0; #endif /// /// Log a message using Debug.WriteLine /// [DebuggerHidden] [Conditional("DEBUG")] public static void LOG(string message, string category) { //Debug.WriteLine is too slow in multi-threads //var threadID = Environment.CurrentManagedThreadId; //Debug.WriteLine(message, threadID + "|" + category); } /// /// Log a message using Debug.WriteLine only if conditional = true /// [DebuggerHidden] [Conditional("DEBUG")] public static void LOG(bool conditional, string message, string category) { if (conditional) LOG(message, category); } /// /// Ensure condition is true, otherwise throw exception (check contract) /// [DebuggerHidden] public static void ENSURE(bool conditional, string message = null) { if (conditional == false) { if (Debugger.IsAttached) { Debugger.Break(); } throw LiteException.InvalidDatafileState(message); } } [DebuggerHidden] public static void ENSURE(bool conditional, string format, params object[] args) { if (conditional == false) { if (Debugger.IsAttached) { Debugger.Break(); } var message = string.Format(CultureInfo.InvariantCulture, format, args); throw LiteException.InvalidDatafileState(format); } } /// /// If ifTest are true, ensure condition is true, otherwise throw ensure exception (check contract) /// [DebuggerHidden] public static void ENSURE(bool ifTest, bool conditional, string message = null) { if (ifTest && conditional == false) { if (Debugger.IsAttached) { Debugger.Break(); } throw LiteException.InvalidDatafileState(message); } } /// /// Ensure condition is true, otherwise throw exception (runs only in DEBUG mode) /// [DebuggerHidden] [Conditional("DEBUG")] public static void DEBUG(bool conditional, string message = null) { if (conditional == false) { if (Debugger.IsAttached) { Debugger.Break(); } throw LiteException.InvalidDatafileState(message); } } } } ================================================ FILE: LiteDB/Utils/Encoding.cs ================================================ using System.Text; namespace LiteDB { internal class StringEncoding { // Original Encoding.UTF8 will replace unpaired surrogate with U+FFFD, which is not suitable for database // so, we need to use new UTF8Encoding(false, true) to make throw exception when unpaired surrogate is found //public static System.Text.Encoding UTF8 = new UTF8Encoding(false, true); public static Encoding UTF8 = new UTF8Encoding(false, true); } } ================================================ FILE: LiteDB/Utils/ExtendedLengthHelper.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { /// /// Class to help extend IndexNode key up to 1023 bytes length (for string/byte[]) using 2 first bits in BsonType /// internal static class ExtendedLengthHelper { /// /// Read BsonType and UShort length from 2 bytes /// public static void ReadLength(byte typeByte, byte lengthByte, out BsonType type, out ushort length) { var bsonType = (byte)(typeByte & 0b0011_1111); var lengthLSByte = lengthByte; var lengthMSByte = (byte)(typeByte & 0b1100_0000); type = (BsonType)bsonType; length = (ushort)((lengthMSByte << 2) | (lengthLSByte)); } /// /// Write BsonType and UShort length in 2 bytes /// public static void WriteLength(BsonType type, ushort length, out byte typeByte, out byte lengthByte) { if (length > 1023) throw new ArgumentOutOfRangeException(nameof(length)); var bsonType = (byte)type; var lengthLSByte = unchecked((byte)length); var lengthMSByte = (byte)((length & 0b11_0000_0000) >> 2); typeByte = (byte)(lengthMSByte | bsonType); lengthByte = lengthLSByte; } } } ================================================ FILE: LiteDB/Utils/Extensions/BufferExtensions.cs ================================================ using System; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal static class BufferExtensions { // https://code.google.com/p/freshbooks-api/source/browse/depend/NClassify.Generator/content/ByteArray.cs?r=bbb6c13ec7a01eae082796550f1ddc05f61694b8 public static int BinaryCompareTo(this byte[] lh, byte[] rh) { if (lh == null) return rh == null ? 0 : -1; if (rh == null) return 1; var result = 0; var i = 0; var stop = Math.Min(lh.Length, rh.Length); for (; 0 == result && i < stop; i++) result = lh[i].CompareTo(rh[i]); if (result != 0) return result < 0 ? -1 : 1; if (i == lh.Length) return i == rh.Length ? 0 : -1; return 1; } /// /// Very fast way to check if all byte array is full of zero /// public static unsafe bool IsFullZero(this byte[] data) { fixed (byte* bytes = data) { int len = data.Length; int rem = len % (sizeof(long) * 16); long* b = (long*)bytes; long* e = (long*)(bytes + len - rem); while (b < e) { if ((*(b) | *(b + 1) | *(b + 2) | *(b + 3) | *(b + 4) | *(b + 5) | *(b + 6) | *(b + 7) | *(b + 8) | *(b + 9) | *(b + 10) | *(b + 11) | *(b + 12) | *(b + 13) | *(b + 14) | *(b + 15)) != 0) return false; b += 16; } for (int i = 0; i < rem; i++) if (data[len - 1 - i] != 0) return false; return true; } } /// /// Fill all array with defined value /// public static byte[] Fill(this byte[] array, byte value, int offset, int count) { for(var i = 0; i < count; i++) { array[i + offset] = value; } return array; } /// /// Read UTF8 string until found \0 /// public static string ReadCString(this byte[] bytes, int startIndex, out int bytesCount) { var position = Array.IndexOf(bytes, (byte)0x00, startIndex); if (position > 0) { bytesCount = position - startIndex; var str = Encoding.UTF8.GetString(bytes, startIndex, bytesCount); return str; } bytesCount = 0; return null; } #region ToBytes BitConverter helper /// /// Copy Int16 bytes direct into buffer /// public static unsafe void ToBytes(this Int16 value, byte[] array, int startIndex) { fixed (byte* ptr = &array[startIndex]) { *(Int16*)ptr = value; } } /// /// Copy Int32 bytes direct into buffer /// public static unsafe void ToBytes(this Int32 value, byte[] array, int startIndex) { fixed (byte* ptr = &array[startIndex]) { *(Int32*)ptr = value; } } /// /// Copy Int64 bytes direct into buffer /// public static unsafe void ToBytes(this Int64 value, byte[] array, int startIndex) { fixed (byte* ptr = &array[startIndex]) { *(Int64*)ptr = value; } } /// /// Copy UInt16 bytes direct into buffer /// public static unsafe void ToBytes(this UInt16 value, byte[] array, int startIndex) { fixed (byte* ptr = &array[startIndex]) { *(UInt16*)ptr = value; } } /// /// Copy UInt32 bytes direct into buffer /// public static unsafe void ToBytes(this UInt32 value, byte[] array, int startIndex) { fixed (byte* ptr = &array[startIndex]) { *(UInt32*)ptr = value; } } /// /// Copy Int64 bytes direct into buffer /// public static unsafe void ToBytes(this UInt64 value, byte[] array, int startIndex) { fixed (byte* ptr = &array[startIndex]) { *(UInt64*)ptr = value; } } /// /// Copy Single bytes direct into buffer /// public static unsafe void ToBytes(this Single value, byte[] array, int startIndex) { ToBytes(*(UInt32*)(&value), array, startIndex); //fixed (byte* ptr = &array[startIndex]) //{ // *(Single*)ptr = value; //} } /// /// Copy Double bytes direct into buffer /// public static unsafe void ToBytes(this Double value, byte[] array, int startIndex) { ToBytes(*(UInt64*)(&value), array, startIndex); //fixed (byte* ptr = &array[startIndex]) //{ // *(Double*)ptr = value; //} } #endregion } } ================================================ FILE: LiteDB/Utils/Extensions/BufferSliceExtensions.cs ================================================ using LiteDB.Engine; using System; using System.Linq; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal static class BufferSliceExtensions { #region Read Extensions public static bool ReadBool(this BufferSlice buffer, int offset) { return buffer.Array[buffer.Offset + offset] != 0; } public static byte ReadByte(this BufferSlice buffer, int offset) { return buffer.Array[buffer.Offset + offset]; } public static Int16 ReadInt16(this BufferSlice buffer, int offset) { return BitConverter.ToInt16(buffer.Array, buffer.Offset + offset); } public static UInt16 ReadUInt16(this BufferSlice buffer, int offset) { return BitConverter.ToUInt16(buffer.Array, buffer.Offset + offset); } public static Int32 ReadInt32(this BufferSlice buffer, int offset) { return BitConverter.ToInt32(buffer.Array, buffer.Offset + offset); } public static UInt32 ReadUInt32(this BufferSlice buffer, int offset) { return BitConverter.ToUInt32(buffer.Array, buffer.Offset + offset); } public static Int64 ReadInt64(this BufferSlice buffer, int offset) { return BitConverter.ToInt64(buffer.Array, buffer.Offset + offset); } public static double ReadDouble(this BufferSlice buffer, int offset) { return BitConverter.ToDouble(buffer.Array, buffer.Offset + offset); } public static Decimal ReadDecimal(this BufferSlice buffer, int offset) { var a = buffer.ReadInt32(offset); var b = buffer.ReadInt32(offset + 4); var c = buffer.ReadInt32(offset + 8); var d = buffer.ReadInt32(offset + 12); return new Decimal(new int[] { a, b, c, d }); } public static ObjectId ReadObjectId(this BufferSlice buffer, int offset) { return new ObjectId(buffer.Array, buffer.Offset + offset); } public static Guid ReadGuid(this BufferSlice buffer, int offset) { return new Guid(buffer.ReadBytes(offset, 16)); } public static byte[] ReadBytes(this BufferSlice buffer, int offset, int count) { var bytes = new byte[count]; Buffer.BlockCopy(buffer.Array, buffer.Offset + offset, bytes, 0, count); return bytes; } public static DateTime ReadDateTime(this BufferSlice buffer, int offset) { var ticks = buffer.ReadInt64(offset); if (ticks == 0) return DateTime.MinValue; if (ticks == 3155378975999999999) return DateTime.MaxValue; return new DateTime(ticks, DateTimeKind.Utc); } public static PageAddress ReadPageAddress(this BufferSlice buffer, int offset) { return new PageAddress(buffer.ReadUInt32(offset), buffer[offset + 4]); } public static string ReadString(this BufferSlice buffer, int offset, int count) { return Encoding.UTF8.GetString(buffer.Array, buffer.Offset + offset, count); } /// /// Read string with \0 on end. Returns full string length (including \0 char) /// public static string ReadCString(this BufferSlice buffer, int offset, out int length) { length = buffer.Count - buffer.Offset - offset; for (var i = offset + buffer.Offset; i < buffer.Count; i++) { if (buffer[i] == '\0') { length = i - buffer.Offset - offset + 1; // +1 for \0 break; } } return Encoding.UTF8.GetString(buffer.Array, buffer.Offset + offset, length - 1); } /// /// Read any BsonValue. Use 1 byte for data type, 1 byte for length (optional), 0-255 bytes to value. /// For document or array, use BufferReader /// public static BsonValue ReadIndexKey(this BufferSlice buffer, int offset) { ExtendedLengthHelper.ReadLength(buffer[offset++], buffer[offset], out var type, out var len); switch (type) { case BsonType.Null: return BsonValue.Null; case BsonType.Int32: return buffer.ReadInt32(offset); case BsonType.Int64: return buffer.ReadInt64(offset); case BsonType.Double: return buffer.ReadDouble(offset); case BsonType.Decimal: return buffer.ReadDecimal(offset); case BsonType.String: offset++; // for byte length return buffer.ReadString(offset, len); case BsonType.Document: using (var r = new BufferReader(buffer)) { r.Skip(offset); // skip first byte for value.Type return r.ReadDocument().GetValue(); } case BsonType.Array: using (var r = new BufferReader(buffer)) { r.Skip(offset); // skip first byte for value.Type return r.ReadArray().GetValue(); } case BsonType.Binary: offset++; // for byte length return buffer.ReadBytes(offset, len); case BsonType.ObjectId: return buffer.ReadObjectId(offset); case BsonType.Guid: return buffer.ReadGuid(offset); case BsonType.Boolean: return buffer[offset] != 0; case BsonType.DateTime: return buffer.ReadDateTime(offset); case BsonType.MinValue: return BsonValue.MinValue; case BsonType.MaxValue: return BsonValue.MaxValue; default: throw new NotImplementedException(); } } #endregion #region Write Extensions public static void Write(this BufferSlice buffer, bool value, int offset) { buffer.Array[buffer.Offset + offset] = value ? (byte)1 : (byte)0; } public static void Write(this BufferSlice buffer, byte value, int offset) { buffer.Array[buffer.Offset + offset] = value; } public static void Write(this BufferSlice buffer, Int16 value, int offset) { value.ToBytes(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, UInt16 value, int offset) { value.ToBytes(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, Int32 value, int offset) { value.ToBytes(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, UInt32 value, int offset) { value.ToBytes(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, Int64 value, int offset) { value.ToBytes(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, Double value, int offset) { value.ToBytes(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, Decimal value, int offset) { var bits = Decimal.GetBits(value); buffer.Write(bits[0], offset); buffer.Write(bits[1], offset + 4); buffer.Write(bits[2], offset + 8); buffer.Write(bits[3], offset + 12); } public static void Write(this BufferSlice buffer, DateTime value, int offset) { value.ToUniversalTime().Ticks.ToBytes(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, PageAddress value, int offset) { value.PageID.ToBytes(buffer.Array, buffer.Offset + offset); buffer[offset + 4] = value.Index; } public static void Write(this BufferSlice buffer, Guid value, int offset) { buffer.Write(value.ToByteArray(), offset); } public static void Write(this BufferSlice buffer, ObjectId value, int offset) { value.ToByteArray(buffer.Array, buffer.Offset + offset); } public static void Write(this BufferSlice buffer, byte[] value, int offset) { Buffer.BlockCopy(value, 0, buffer.Array, buffer.Offset + offset, value.Length); } public static void Write(this BufferSlice buffer, string value, int offset) { Encoding.UTF8.GetBytes(value, 0, value.Length, buffer.Array, buffer.Offset + offset); } /// /// Wrtie any BsonValue. Use 1 byte for data type, 1 byte for length (optional), 0-255 bytes to value. /// For document or array, use BufferWriter /// public static void WriteIndexKey(this BufferSlice buffer, BsonValue value, int offset) { DEBUG(IndexNode.GetKeyLength(value, true) <= MAX_INDEX_KEY_LENGTH, $"index key must have less than {MAX_INDEX_KEY_LENGTH} bytes"); if (value.IsString) { var str = value.AsString; var strLength = (ushort)Encoding.UTF8.GetByteCount(str); ExtendedLengthHelper.WriteLength(BsonType.String, strLength, out var typeByte, out var lengthByte); buffer[offset++] = typeByte; buffer[offset++] = lengthByte; buffer.Write(str, offset); } else if(value.IsBinary) { var arr = value.AsBinary; ExtendedLengthHelper.WriteLength(BsonType.Binary, (ushort)arr.Length, out var typeByte, out var lengthByte); buffer[offset++] = typeByte; buffer[offset++] = lengthByte; buffer.Write(arr, offset); } else { buffer[offset++] = (byte)value.Type; switch (value.Type) { case BsonType.Null: case BsonType.MinValue: case BsonType.MaxValue: break; case BsonType.Int32: buffer.Write(value.AsInt32, offset); break; case BsonType.Int64: buffer.Write(value.AsInt64, offset); break; case BsonType.Double: buffer.Write(value.AsDouble, offset); break; case BsonType.Decimal: buffer.Write(value.AsDecimal, offset); break; case BsonType.Document: using (var w = new BufferWriter(buffer)) { w.Skip(offset); // skip offset from buffer w.WriteDocument(value.AsDocument, true); } break; case BsonType.Array: using (var w = new BufferWriter(buffer)) { w.Skip(offset); // skip offset from buffer w.WriteArray(value.AsArray, true); } break; case BsonType.ObjectId: buffer.Write(value.AsObjectId, offset); break; case BsonType.Guid: buffer.Write(value.AsGuid, offset); break; case BsonType.Boolean: buffer[offset] = (value.AsBoolean) ? (byte)1 : (byte)0; break; case BsonType.DateTime: buffer.Write(value.AsDateTime, offset); break; default: throw new NotImplementedException(); } } } #endregion } } ================================================ FILE: LiteDB/Utils/Extensions/DateExtensions.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB { internal static class DateExtensions { /// /// Truncate DateTime in milliseconds /// public static DateTime Truncate(this DateTime dt) { if (dt == DateTime.MaxValue || dt == DateTime.MinValue) { return dt; } return new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond, dt.Kind); } public static int MonthDifference(this DateTime startDate, DateTime endDate) { // https://stackoverflow.com/a/1526116/3286260 int compMonth = (endDate.Month + endDate.Year * 12) - (startDate.Month + startDate.Year * 12); double daysInEndMonth = (endDate - endDate.AddMonths(1)).Days; double months = compMonth + (startDate.Day - endDate.Day) / daysInEndMonth; return Convert.ToInt32(Math.Truncate(months)); } public static int YearDifference(this DateTime startDate, DateTime endDate) { // https://stackoverflow.com/a/28444291/3286260 //Excel documentation says "COMPLETE calendar years in between dates" int years = endDate.Year - startDate.Year; if (startDate.Month == endDate.Month &&// if the start month and the end month are the same endDate.Day < startDate.Day)// BUT the end day is less than the start day { years--; } else if (endDate.Month < startDate.Month)// if the end month is less than the start month { years--; } return years; } } } ================================================ FILE: LiteDB/Utils/Extensions/DictionaryExtensions.cs ================================================ using System; using System.Collections.Generic; using System.Reflection; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal static class DictionaryExtensions { public static T GetOrDefault(this IDictionary dict, K key, T defaultValue = default(T)) { if (dict.TryGetValue(key, out T result)) { return result; } return defaultValue; } public static T GetOrAdd(this IDictionary dict, K key, Func valueFactoy) { if (dict.TryGetValue(key, out var value) == false) { value = valueFactoy(key); dict.Add(key, value); } return value; } public static void ParseKeyValue(this IDictionary dict, string connectionString) { var position = 0; while(position < connectionString.Length) { EatWhitespace(); var key = ReadKey(); EatWhitespace(); var value = ReadValue(); dict[key] = value; } string ReadKey() { var sb = new StringBuilder(); while (position < connectionString.Length) { var current = connectionString[position]; if (current == '=') { position++; return sb.ToString().Trim(); } sb.Append(current); position++; } return sb.ToString().Trim(); } string ReadValue() { var sb = new StringBuilder(); var quote = connectionString[position] == '"' ? '"' : connectionString[position] == '\'' ? '\'' : ' '; if (quote != ' ') position++; while (position < connectionString.Length) { var current = connectionString[position]; if (quote == ' ') { if (current == ';') { position++; return sb.ToString().Trim(); } } else if (quote != ' ' && current == quote) { if (connectionString[position - 1] == '\\') { sb.Length--; } else { position++; EatWhitespace(); if (position < connectionString.Length && connectionString[position] == ';') position++; return sb.ToString(); } } sb.Append(current); position++; } return sb.ToString().Trim(); } void EatWhitespace() { while (position < connectionString.Length) { if(connectionString[position] == ' ' || connectionString[position] == '\t' || connectionString[position] == '\f') { position++; continue; } break; } } } /// /// Get value from dictionary converting datatype T /// public static T GetValue(this Dictionary dict, string key, T defaultValue = default(T)) { try { if (dict.TryGetValue(key, out var value) == false) return defaultValue; if (typeof(T) == typeof(TimeSpan)) { // if timespan are numbers only, convert as seconds if (Regex.IsMatch(value, @"^\d+$", RegexOptions.Compiled)) { return (T)(object)TimeSpan.FromSeconds(Convert.ToInt32(value)); } else { return (T)(object)TimeSpan.Parse(value); } } else if (typeof(T).GetTypeInfo().IsEnum) { return (T)Enum.Parse(typeof(T), value, true); } else { return (T)Convert.ChangeType(value, typeof(T)); } } catch (Exception) { //TODO: fix string connection parser throw new LiteException(0, $"Invalid connection string value type for `{key}`"); } } /// /// Get a value from a key converted in file size format: "1gb", "10 mb", "80000" /// public static long GetFileSize(this Dictionary dict, string key, long defaultValue) { var size = dict.GetValue(key, null); if (size == null) return defaultValue; var match = Regex.Match(size, @"^(\d+)\s*([tgmk])?(b|byte|bytes)?$", RegexOptions.IgnoreCase); if (!match.Success) return 0; var num = Convert.ToInt64(match.Groups[1].Value); switch (match.Groups[2].Value.ToLower()) { case "t": return num * 1024L * 1024L * 1024L * 1024L; case "g": return num * 1024L * 1024L * 1024L; case "m": return num * 1024L * 1024L; case "k": return num * 1024L; case "": return num; } return 0; } } } ================================================ FILE: LiteDB/Utils/Extensions/EnumerableExtensions.cs ================================================ using System; using System.Collections.Generic; namespace LiteDB.Utils.Extensions { internal static class EnumerableExtensions { // calls method on dispose public static IEnumerable OnDispose(this IEnumerable source, Action onDispose) { try { foreach (var item in source) { yield return item; } } finally { onDispose(); } } } } ================================================ FILE: LiteDB/Utils/Extensions/ExpressionExtensions.cs ================================================ using System; using System.Linq.Expressions; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal static class ExpressionExtensions { // more dirty as possible: removing ".Select(x => x." sentence private static readonly Regex _removeSelect = new Regex(@"\.Select\s*\(\s*\w+\s*=>\s*\w+\.", RegexOptions.Compiled); private static readonly Regex _removeList = new Regex(@"\.get_Item\(\d+\)", RegexOptions.Compiled); private static readonly Regex _removeArray = new Regex(@"\[\d+\]", RegexOptions.Compiled); /// /// Get Path (better ToString) from an Expression. /// Support multi levels: x => x.Customer.Address /// Support list levels: x => x.Addresses.Select(z => z.StreetName) /// public static string GetPath(this Expression expr) { // quick and dirty solution to support x.Name.SubName // http://stackoverflow.com/questions/671968/retrieving-property-name-from-lambda-expression // enum properties seem to get compiled with Convert(prop, Int32) wrapper calls on Mono 5.0+ // this causes path extraction code below to fail, since a clean "x.y.z" string is expected // thus we strip out any Converts found, using a loop in case there are nested Convert expressions while (expr.NodeType == ExpressionType.Convert || expr.NodeType == ExpressionType.ConvertChecked) { expr = ((UnaryExpression)expr).Operand; } // if is a method call, get first while(expr.NodeType == ExpressionType.Lambda) { if (((LambdaExpression)expr).Body is UnaryExpression unary) { expr = unary.Operand; } else { break; } } var str = expr.ToString(); // gives you: "o => o.Whatever" var firstDelim = str.IndexOf('.'); // make sure there is a beginning property indicator; the "." in "o.Whatever" -- this may not be necessary? var path = firstDelim < 0 ? str : str.Substring(firstDelim + 1).TrimEnd(')'); path = _removeList.Replace(path, ""); path = _removeArray.Replace(path, ""); path = _removeSelect.Replace(path, ".") .Replace(")", ""); return path; } } } ================================================ FILE: LiteDB/Utils/Extensions/HashSetExtensions.cs ================================================ using System; using System.Collections.Generic; using System.Reflection; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { internal static class HashSetExtensions { public static HashSet AddRange(this HashSet hash, IEnumerable items) { if (items == null) return hash; foreach(var item in items) { hash.Add(item); } return hash; } } } ================================================ FILE: LiteDB/Utils/Extensions/IOExceptionExtensions.cs ================================================ using System.IO; using System.Runtime.InteropServices; using static LiteDB.Constants; namespace LiteDB { internal static class IOExceptionExtensions { private const int ERROR_SHARING_VIOLATION = 32; private const int ERROR_LOCK_VIOLATION = 33; /// /// Detect if exception is an Locked exception /// public static bool IsLocked(this IOException ex) { var errorCode = Marshal.GetHRForException(ex) & ((1 << 16) - 1); return errorCode == ERROR_SHARING_VIOLATION || errorCode == ERROR_LOCK_VIOLATION; } /// /// Wait current thread for N milliseconds if exception is about Locking /// public static void WaitIfLocked(this IOException ex, int timerInMilliseconds) { if (ex.IsLocked()) { if (timerInMilliseconds > 0) { System.Threading.Tasks.Task.Delay(timerInMilliseconds).Wait(); } } else { throw ex; } } } } ================================================ FILE: LiteDB/Utils/Extensions/LinqExtensions.cs ================================================ using System; using System.Collections.Generic; using static LiteDB.Constants; namespace LiteDB { internal static class LinqExtensions { public static IEnumerable> Batch(this IEnumerable source, int batchSize) { using (var enumerator = source.GetEnumerator()) { while (enumerator.MoveNext()) { yield return YieldBatchElements(enumerator, batchSize - 1); } } } private static IEnumerable YieldBatchElements(IEnumerator source, int batchSize) { yield return source.Current; for (int i = 0; i < batchSize && source.MoveNext(); i++) { yield return source.Current; } } public static IEnumerable DistinctBy(this IEnumerable source, Func keySelector, IEqualityComparer comparer) { if (source == null) throw new ArgumentNullException(nameof(source)); if (keySelector == null) throw new ArgumentNullException(nameof(keySelector)); return _(); IEnumerable _() { var knownKeys = new HashSet(comparer); foreach (var element in source) { if (knownKeys.Add(keySelector(element))) { yield return element; } } } } /// /// Return same IEnumerable but indicate if item last item in enumerable /// public static IEnumerable> IsLast(this IEnumerable source) where T : class { T last = null; foreach(var item in source) { if (last != default(T)) { yield return new LastItem { Item = last, IsLast = false }; } last = item; } if (last != null) { yield return new LastItem { Item = last, IsLast = true }; } } } internal struct LastItem { public T Item { get; set; } public bool IsLast { get; set; } } } ================================================ FILE: LiteDB/Utils/Extensions/StopWatchExtensions.cs ================================================ using System; using System.Diagnostics; namespace LiteDB.Utils.Extensions { public static class StopWatchExtensions { // Start the stopwatch and returns an IDisposable that will stop the stopwatch when disposed public static IDisposable StartDisposable(this Stopwatch stopwatch) { stopwatch.Start(); return new DisposableAction(stopwatch.Stop); } private class DisposableAction : IDisposable { private readonly Action _action; public DisposableAction(Action action) { _action = action; } public void Dispose() { _action(); } } } } ================================================ FILE: LiteDB/Utils/Extensions/StreamExtensions.cs ================================================ using System; using System.IO; using static LiteDB.Constants; namespace LiteDB { internal static class StreamExtensions { /// /// If Stream are FileStream, flush content direct to disk (avoid OS cache) /// public static void FlushToDisk(this Stream stream) { if (stream is FileStream fstream) { fstream.Flush(true); } else { stream.Flush(); } } } } ================================================ FILE: LiteDB/Utils/Extensions/StringExtensions.cs ================================================ using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Security.Cryptography; using System.Text; using static LiteDB.Constants; namespace LiteDB { internal static class StringExtensions { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsNullOrWhiteSpace(this string str) { return string.IsNullOrWhiteSpace(str); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool IsNullOrEmpty(this string str) { return string.IsNullOrEmpty(str); } /// /// Test if string is simple word pattern ([a-Z$_]) /// public static bool IsWord(this string str) { if (string.IsNullOrWhiteSpace(str)) return false; for (var i = 0; i < str.Length; i++) { if (!Tokenizer.IsWordChar(str[i], i == 0)) return false; } return true; } public static string Sha1(this string value) { var data = Encoding.UTF8.GetBytes(value); using (var sha = SHA1.Create()) { var hashData = sha.ComputeHash(data); var hash = new StringBuilder(); foreach (var b in hashData) { hash.Append(b.ToString("X2")); } return hash.ToString(); } } /// /// Implement SqlLike in C# string - based on /// https://stackoverflow.com/a/8583383/3286260 /// I remove support for [ and ] to avoid missing close brackets /// public static bool SqlLike(this string str, string pattern, Collation collation) { var isMatch = true; var isWildCardOn = false; var isCharWildCardOn = false; var isCharSetOn = false; var isNotCharSetOn = false; var endOfPattern = false; var lastWildCard = -1; var patternIndex = 0; var p = '\0'; for (var i = 0; i < str.Length; i++) { var c = str[i]; endOfPattern = (patternIndex >= pattern.Length); if (!endOfPattern) { p = pattern[patternIndex]; if (!isWildCardOn && p == '%') { lastWildCard = patternIndex; isWildCardOn = true; while (patternIndex < pattern.Length && pattern[patternIndex] == '%') { patternIndex++; } if (patternIndex >= pattern.Length) { p = '\0'; } else { p = pattern[patternIndex]; } } else if (p == '_') { isCharWildCardOn = true; patternIndex++; } } if (isWildCardOn) { if (collation.Compare(c.ToString(), p.ToString()) == 0) { isWildCardOn = false; patternIndex++; } } else if (isCharWildCardOn) { isCharWildCardOn = false; } else if (isCharSetOn || isNotCharSetOn) { //var charMatch = (set.Contains(char.ToUpper(c))); // -- always "false" - remove [abc] support //if ((isNotCharSetOn && charMatch) || (isCharSetOn && !charMatch)) if (isCharSetOn) { if (lastWildCard >= 0) { patternIndex = lastWildCard; } else { isMatch = false; break; } } isNotCharSetOn = isCharSetOn = false; } else { if (collation.Compare(c.ToString(), p.ToString()) == 0) { patternIndex++; } else { if (lastWildCard >= 0) { int back = patternIndex - lastWildCard - 1; i -= back; patternIndex = lastWildCard; } else { isMatch = false; break; } } } } endOfPattern = (patternIndex >= pattern.Length); if (isMatch && !endOfPattern) { var isOnlyWildCards = true; for (var i = patternIndex; i < pattern.Length; i++) { if (pattern[i] != '%') { isOnlyWildCards = false; break; } } if (isOnlyWildCards) endOfPattern = true; } return isMatch && endOfPattern; } /// /// Get first string before any `%` or `_` ... used to index startswith - out if has more string pattern after found wildcard /// public static string SqlLikeStartsWith(this string str, out bool hasMore) { var i = 0; var len = str.Length; var c = '\0'; while (i < len) { c = str[i]; if (c == '%' || c == '_') { break; } i++; } hasMore = !(i == len || i == len - 1); return str.Substring(0, i); } } } ================================================ FILE: LiteDB/Utils/Extensions/TypeInfoExtensions.cs ================================================ using System; using System.Linq; using System.Text; using System.Reflection; using System.Runtime.CompilerServices; using System.Collections; using static LiteDB.Constants; namespace LiteDB { internal static class TypeInfoExtensions { public static bool IsAnonymousType(this Type type) { bool isAnonymousType = type.FullName.Contains("AnonymousType") && type.GetTypeInfo().GetCustomAttributes(typeof(CompilerGeneratedAttribute), false).Any(); return isAnonymousType; } public static bool IsEnumerable(this Type type) { return type != typeof(String) && typeof(IEnumerable).IsAssignableFrom(type); } } } ================================================ FILE: LiteDB/Utils/FileHelper.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using static LiteDB.Constants; namespace LiteDB { /// /// A simple file helper tool with static methods /// internal static class FileHelper { /// /// Create a temp filename based on original filename - checks if file exists (if exists, append counter number) /// public static string GetSuffixFile(string filename, string suffix = "-temp", bool checkIfExists = true) { var count = 0; var temp = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + suffix + Path.GetExtension(filename)); while(checkIfExists && File.Exists(temp)) { temp = Path.Combine(Path.GetDirectoryName(filename), Path.GetFileNameWithoutExtension(filename) + suffix + "-" + (++count) + Path.GetExtension(filename)); } return temp; } /// /// Get LOG file based on data file /// public static string GetLogFile(string filename) => GetSuffixFile(filename, "-log", false); /// /// Get TEMP file based on data file /// public static string GetTempFile(string filename) => GetSuffixFile(filename, "-tmp", false); /// /// Test if file are used by any process /// public static bool IsFileLocked(string filename) { FileStream stream = null; var file = new FileInfo(filename); try { stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); } catch (IOException ex) { return ex.IsLocked(); } finally { stream?.Dispose(); } //file is not locked return false; } /// /// Try execute some action while has lock exception /// public static bool TryExec(int timeout, Action action) { var timer = DateTime.UtcNow.AddSeconds(timeout); do { try { action(); return true; } catch (IOException ex) { ex.WaitIfLocked(25); } } while (DateTime.UtcNow < timer); return false; } /// /// Try execute some action while has lock exception. If timeout occurs, throw last exception /// public static void Exec(int timeout, Action action) { var timer = DateTime.UtcNow.AddSeconds(timeout); IOException exception; do { try { action(); return; } catch (IOException ex) { exception = ex; ex.WaitIfLocked(25); } } while (DateTime.UtcNow < timer); throw exception; } /// /// Convert storage unit string "1gb", "10 mb", "80000" to long bytes /// public static long ParseFileSize(string size) { var match = Regex.Match(size, @"^(\d+)\s*([tgmk])?(b|byte|bytes)?$", RegexOptions.IgnoreCase); if (!match.Success) return 0; var num = Convert.ToInt64(match.Groups[1].Value); switch (match.Groups[2].Value.ToLower()) { case "t": return num * 1024L * 1024L * 1024L * 1024L; case "g": return num * 1024L * 1024L * 1024L; case "m": return num * 1024L * 1024L; case "k": return num * 1024L; case "": return num; } return 0; } /// /// Format a long file length to pretty file unit /// public static string FormatFileSize(long byteCount) { var suf = new[] { "B", "KB", "MB", "GB", "TB" }; //Longs run out around EB if (byteCount == 0) return "0" + suf[0]; var bytes = Math.Abs(byteCount); var place = Convert.ToInt64(Math.Floor(Math.Log(bytes, 1024))); var num = Math.Round(bytes / Math.Pow(1024, place), 1); return (Math.Sign(byteCount) * num).ToString() + suf[place]; } } } ================================================ FILE: LiteDB/Utils/LCID.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using static LiteDB.Constants; namespace LiteDB { /// /// Get CultureInfo object from LCID code (not avaiable in .net standard 1.3) /// internal class LCID { private static readonly IDictionary _mappings = new Dictionary() { #region Big freaking list LCID [1] = "ar", [2] = "bg", [3] = "ca", [4] = "zh-Hans", [5] = "cs", [6] = "da", [7] = "de", [8] = "el", [9] = "en", [10] = "es", [11] = "fi", [12] = "fr", [13] = "he", [14] = "hu", [15] = "is", [16] = "it", [17] = "ja", [18] = "ko", [19] = "nl", [20] = "no", [21] = "pl", [22] = "pt", [23] = "rm", [24] = "ro", [25] = "ru", [26] = "hr", [27] = "sk", [28] = "sq", [29] = "sv", [30] = "th", [31] = "tr", [32] = "ur", [33] = "id", [34] = "uk", [35] = "be", [36] = "sl", [37] = "et", [38] = "lv", [39] = "lt", [40] = "tg", [41] = "fa", [42] = "vi", [43] = "hy", [44] = "az", [45] = "eu", [46] = "hsb", [47] = "mk", [48] = "st", [49] = "ts", [50] = "tn", [51] = "ve", [52] = "xh", [53] = "zu", [54] = "af", [55] = "ka", [56] = "fo", [57] = "hi", [58] = "mt", [59] = "se", [60] = "ga", [61] = "yi", [62] = "ms", [63] = "kk", [64] = "ky", [65] = "sw", [66] = "tk", [67] = "uz", [68] = "tt", [69] = "bn", [70] = "pa", [71] = "gu", [72] = "or", [73] = "ta", [74] = "te", [75] = "kn", [76] = "ml", [77] = "as", [78] = "mr", [79] = "sa", [80] = "mn", [81] = "bo", [82] = "cy", [83] = "km", [84] = "lo", [85] = "my", [86] = "gl", [87] = "kok", [88] = "mni", [89] = "sd", [90] = "syr", [91] = "si", [92] = "chr", [93] = "iu", [94] = "am", [95] = "tzm", [96] = "ks", [97] = "ne", [98] = "fy", [99] = "ps", [100] = "fil", [101] = "dv", [102] = "bin", [103] = "ff", [104] = "ha", [105] = "ibb", [106] = "yo", [107] = "quz", [108] = "nso", [109] = "ba", [110] = "lb", [111] = "kl", [112] = "ig", [113] = "kr", [114] = "om", [115] = "ti", [116] = "gn", [117] = "haw", [118] = "la", [119] = "so", [120] = "ii", [121] = "pap", [122] = "arn", [124] = "moh", [126] = "br", [127] = "", [128] = "ug", [129] = "mi", [130] = "oc", [131] = "co", [132] = "gsw", [133] = "sah", [134] = "quc", [135] = "rw", [136] = "wo", [140] = "prs", [145] = "gd", [146] = "ku", [1025] = "ar-SA", [1026] = "bg-BG", [1027] = "ca-ES", [1028] = "zh-TW", [1029] = "cs-CZ", [1030] = "da-DK", [1031] = "de-DE", [1032] = "el-GR", [1033] = "en-US", [1035] = "fi-FI", [1036] = "fr-FR", [1037] = "he-IL", [1038] = "hu-HU", [1039] = "is-IS", [1040] = "it-IT", [1041] = "ja-JP", [1042] = "ko-KR", [1043] = "nl-NL", [1044] = "nb-NO", [1045] = "pl-PL", [1046] = "pt-BR", [1047] = "rm-CH", [1048] = "ro-RO", [1049] = "ru-RU", [1050] = "hr-HR", [1051] = "sk-SK", [1052] = "sq-AL", [1053] = "sv-SE", [1054] = "th-TH", [1055] = "tr-TR", [1056] = "ur-PK", [1057] = "id-ID", [1058] = "uk-UA", [1059] = "be-BY", [1060] = "sl-SI", [1061] = "et-EE", [1062] = "lv-LV", [1063] = "lt-LT", [1064] = "tg-Cyrl-TJ", [1065] = "fa-IR", [1066] = "vi-VN", [1067] = "hy-AM", [1068] = "az-Latn-AZ", [1069] = "eu-ES", [1070] = "hsb-DE", [1071] = "mk-MK", [1072] = "st-ZA", [1073] = "ts-ZA", [1074] = "tn-ZA", [1075] = "ve-ZA", [1076] = "xh-ZA", [1077] = "zu-ZA", [1078] = "af-ZA", [1079] = "ka-GE", [1080] = "fo-FO", [1081] = "hi-IN", [1082] = "mt-MT", [1083] = "se-NO", [1085] = "yi-001", [1086] = "ms-MY", [1087] = "kk-KZ", [1088] = "ky-KG", [1089] = "sw-KE", [1090] = "tk-TM", [1091] = "uz-Latn-UZ", [1092] = "tt-RU", [1093] = "bn-IN", [1094] = "pa-IN", [1095] = "gu-IN", [1096] = "or-IN", [1097] = "ta-IN", [1098] = "te-IN", [1099] = "kn-IN", [1100] = "ml-IN", [1101] = "as-IN", [1102] = "mr-IN", [1103] = "sa-IN", [1104] = "mn-MN", [1105] = "bo-CN", [1106] = "cy-GB", [1107] = "km-KH", [1108] = "lo-LA", [1109] = "my-MM", [1110] = "gl-ES", [1111] = "kok-IN", [1112] = "mni-IN", [1113] = "sd-Deva-IN", [1114] = "syr-SY", [1115] = "si-LK", [1116] = "chr-Cher-US", [1117] = "iu-Cans-CA", [1118] = "am-ET", [1119] = "tzm-Arab-MA", [1120] = "ks-Arab", [1121] = "ne-NP", [1122] = "fy-NL", [1123] = "ps-AF", [1124] = "fil-PH", [1125] = "dv-MV", [1126] = "bin-NG", [1127] = "ff-NG", [1128] = "ha-Latn-NG", [1129] = "ibb-NG", [1130] = "yo-NG", [1131] = "quz-BO", [1132] = "nso-ZA", [1133] = "ba-RU", [1134] = "lb-LU", [1135] = "kl-GL", [1136] = "ig-NG", [1137] = "kr-NG", [1138] = "om-ET", [1139] = "ti-ET", [1140] = "gn-PY", [1141] = "haw-US", [1142] = "la-001", [1143] = "so-SO", [1144] = "ii-CN", [1145] = "pap-029", [1146] = "arn-CL", [1148] = "moh-CA", [1150] = "br-FR", [1152] = "ug-CN", [1153] = "mi-NZ", [1154] = "oc-FR", [1155] = "co-FR", [1156] = "gsw-FR", [1157] = "sah-RU", [1158] = "quc-Latn-GT", [1159] = "rw-RW", [1160] = "wo-SN", [1164] = "prs-AF", [1169] = "gd-GB", [1170] = "ku-Arab-IQ", [2049] = "ar-IQ", [2051] = "ca-ES-valencia", [2052] = "zh-CN", [2055] = "de-CH", [2057] = "en-GB", [2058] = "es-MX", [2060] = "fr-BE", [2064] = "it-CH", [2067] = "nl-BE", [2068] = "nn-NO", [2070] = "pt-PT", [2072] = "ro-MD", [2073] = "ru-MD", [2077] = "sv-FI", [2080] = "ur-IN", [2092] = "az-Cyrl-AZ", [2094] = "dsb-DE", [2098] = "tn-BW", [2107] = "se-SE", [2108] = "ga-IE", [2110] = "ms-BN", [2115] = "uz-Cyrl-UZ", [2117] = "bn-BD", [2118] = "pa-Arab-PK", [2121] = "ta-LK", [2128] = "mn-Mong-CN", [2137] = "sd-Arab-PK", [2141] = "iu-Latn-CA", [2143] = "tzm-Latn-DZ", [2144] = "ks-Deva-IN", [2145] = "ne-IN", [2151] = "ff-Latn-SN", [2155] = "quz-EC", [2163] = "ti-ER", [3073] = "ar-EG", [3076] = "zh-HK", [3079] = "de-AT", [3081] = "en-AU", [3082] = "es-ES", [3084] = "fr-CA", [3131] = "se-FI", [3152] = "mn-Mong-MN", [3153] = "dz-BT", [3179] = "quz-PE", [4097] = "ar-LY", [4100] = "zh-SG", [4103] = "de-LU", [4105] = "en-CA", [4106] = "es-GT", [4108] = "fr-CH", [4122] = "hr-BA", [4155] = "smj-NO", [4191] = "tzm-Tfng-MA", [5121] = "ar-DZ", [5124] = "zh-MO", [5127] = "de-LI", [5129] = "en-NZ", [5130] = "es-CR", [5132] = "fr-LU", [5146] = "bs-Latn-BA", [5179] = "smj-SE", [6145] = "ar-MA", [6153] = "en-IE", [6154] = "es-PA", [6156] = "fr-MC", [6170] = "sr-Latn-BA", [6203] = "sma-NO", [7169] = "ar-TN", [7177] = "en-ZA", [7178] = "es-DO", [7180] = "fr-029", [7194] = "sr-Cyrl-BA", [7227] = "sma-SE", [8193] = "ar-OM", [8201] = "en-JM", [8202] = "es-VE", [8204] = "fr-RE", [8218] = "bs-Cyrl-BA", [8251] = "sms-FI", [9217] = "ar-YE", [9225] = "en-029", [9226] = "es-CO", [9228] = "fr-CD", [9242] = "sr-Latn-RS", [9275] = "smn-FI", [10241] = "ar-SY", [10249] = "en-BZ", [10250] = "es-PE", [10252] = "fr-SN", [10266] = "sr-Cyrl-RS", [11265] = "ar-JO", [11273] = "en-TT", [11274] = "es-AR", [11276] = "fr-CM", [11290] = "sr-Latn-ME", [12289] = "ar-LB", [12297] = "en-ZW", [12298] = "es-EC", [12300] = "fr-CI", [12314] = "sr-Cyrl-ME", [13313] = "ar-KW", [13321] = "en-PH", [13322] = "es-CL", [13324] = "fr-ML", [14337] = "ar-AE", [14345] = "en-ID", [14346] = "es-UY", [14348] = "fr-MA", [15361] = "ar-BH", [15369] = "en-HK", [15370] = "es-PY", [15372] = "fr-HT", [16385] = "ar-QA", [16393] = "en-IN", [16394] = "es-BO", [17417] = "en-MY", [17418] = "es-SV", [18441] = "en-SG", [18442] = "es-HN", [19466] = "es-NI", [20490] = "es-PR", [21514] = "es-US", [22538] = "es-419", [23562] = "es-CU", [25626] = "bs-Cyrl", [26650] = "bs-Latn", [27674] = "sr-Cyrl", [28698] = "sr-Latn", [28731] = "smn", [29740] = "az-Cyrl", [29755] = "sms", [30724] = "zh", [30740] = "nn", [30746] = "bs", [30764] = "az-Latn", [30779] = "sma", [30787] = "uz-Cyrl", [30800] = "mn-Cyrl", [30813] = "iu-Cans", [30815] = "tzm-Tfng", [31748] = "zh-Hant", [31764] = "nb", [31770] = "sr", [31784] = "tg-Cyrl", [31790] = "dsb", [31803] = "smj", [31811] = "uz-Latn", [31814] = "pa-Arab", [31824] = "mn-Mong", [31833] = "sd-Arab", [31836] = "chr-Cher", [31837] = "iu-Latn", [31839] = "tzm-Latn", [31847] = "ff-Latn", [31848] = "ha-Latn", [31878] = "quc-Latn", [31890] = "ku-Arab" #endregion }; public static CultureInfo GetCulture(int lcid) { if (_mappings.TryGetValue(lcid, out var name)) { return new CultureInfo(name); } else { throw new ArgumentException("Invalid LCID code"); } } public static int GetLCID(string culture) { foreach(var item in _mappings) { if (item.Value == culture) { return item.Key; } } throw new LiteException(0, $"Invalid culture name"); } /// /// Get current system operation LCID culture /// public static int Current { get { var current = CultureInfo.CurrentCulture.Name; var lcid = _mappings.FirstOrDefault(x => x.Value == current); // for 4096 culture LCID, returns 127 (invariant culture) if (lcid.Key == 0) { return 127; } return lcid.Key; } } } } ================================================ FILE: LiteDB/Utils/LiteException.cs ================================================ using LiteDB.Engine; using System; using System.Reflection; using System.Text; using System.Threading.Tasks; using static LiteDB.Constants; namespace LiteDB { /// /// The main exception for LiteDB /// public class LiteException : Exception { #region Errors code public const int FILE_NOT_FOUND = 101; public const int DATABASE_SHUTDOWN = 102; public const int INVALID_DATABASE = 103; public const int FILE_SIZE_EXCEEDED = 105; public const int COLLECTION_LIMIT_EXCEEDED = 106; public const int INDEX_DROP_ID = 108; public const int INDEX_DUPLICATE_KEY = 110; public const int INVALID_INDEX_KEY = 111; public const int INDEX_NOT_FOUND = 112; public const int INVALID_DBREF = 113; public const int LOCK_TIMEOUT = 120; public const int INVALID_COMMAND = 121; public const int ALREADY_EXISTS_COLLECTION_NAME = 122; public const int ALREADY_OPEN_DATAFILE = 124; public const int INVALID_TRANSACTION_STATE = 126; public const int INDEX_NAME_LIMIT_EXCEEDED = 128; public const int INVALID_INDEX_NAME = 129; public const int INVALID_COLLECTION_NAME = 130; public const int TEMP_ENGINE_ALREADY_DEFINED = 131; public const int INVALID_EXPRESSION_TYPE = 132; public const int COLLECTION_NOT_FOUND = 133; public const int COLLECTION_ALREADY_EXIST = 134; public const int INDEX_ALREADY_EXIST = 135; public const int INVALID_UPDATE_FIELD = 136; public const int ENGINE_DISPOSED = 137; public const int INVALID_FORMAT = 200; public const int DOCUMENT_MAX_DEPTH = 201; public const int INVALID_CTOR = 202; public const int UNEXPECTED_TOKEN = 203; public const int INVALID_DATA_TYPE = 204; public const int PROPERTY_NOT_MAPPED = 206; public const int INVALID_TYPED_NAME = 207; public const int PROPERTY_READ_WRITE = 209; public const int INITIALSIZE_CRYPTO_NOT_SUPPORTED = 210; public const int INVALID_INITIALSIZE = 211; public const int INVALID_NULL_CHAR_STRING = 212; public const int INVALID_FREE_SPACE_PAGE = 213; public const int DATA_TYPE_NOT_ASSIGNABLE = 214; public const int AVOID_USE_OF_PROCESS = 215; public const int NOT_ENCRYPTED = 216; public const int INVALID_PASSWORD = 217; public const int ILLEGAL_DESERIALIZATION_TYPE = 218; public const int ENTITY_INITIALIZATION_FAILED = 219; public const int MAPPER_NOT_FOUND = 220; public const int MAPPING_ERROR = 221; public const int INVALID_DATAFILE_STATE = 999; #endregion #region Ctor public int ErrorCode { get; private set; } public long Position { get; private set; } public LiteException(int code, string message) : base(message) { this.ErrorCode = code; } internal LiteException(int code, string message, params object[] args) : base(string.Format(message, args)) { this.ErrorCode = code; } internal LiteException (int code, Exception inner, string message, params object[] args) : base (string.Format (message, args), inner) { this.ErrorCode = code; } /// /// Critical error should be stop engine and release data files and all memory allocation /// public bool IsCritical => this.ErrorCode >= 900; #endregion #region Method Errors internal static LiteException FileNotFound(object fileId) { return new LiteException(FILE_NOT_FOUND, "File '{0}' not found.", fileId); } internal static LiteException DatabaseShutdown() { return new LiteException(DATABASE_SHUTDOWN, "Database is in shutdown process."); } internal static LiteException InvalidDatabase() { return new LiteException(INVALID_DATABASE, "File is not a valid LiteDB database format or contains a invalid password."); } internal static LiteException FileSizeExceeded(long limit) { return new LiteException(FILE_SIZE_EXCEEDED, "Database size exceeds limit of {0}.", FileHelper.FormatFileSize(limit)); } internal static LiteException CollectionLimitExceeded(int limit) { return new LiteException(COLLECTION_LIMIT_EXCEEDED, "This database exceeded the maximum limit of collection names size: {0} bytes", limit); } internal static LiteException IndexNameLimitExceeded(int limit) { return new LiteException(INDEX_NAME_LIMIT_EXCEEDED, "This collection exceeded the maximum limit of indexes names/expression size: {0} bytes", limit); } internal static LiteException InvalidIndexName(string name, string collection, string reason) { return new LiteException(INVALID_INDEX_NAME, "Invalid index name '{0}' on collection '{1}': {2}", name, collection, reason); } internal static LiteException InvalidCollectionName(string name, string reason) { return new LiteException(INVALID_COLLECTION_NAME, "Invalid collection name '{0}': {1}", name, reason); } internal static LiteException IndexDropId() { return new LiteException(INDEX_DROP_ID, "Primary key index '_id' can't be dropped."); } internal static LiteException TempEngineAlreadyDefined() { return new LiteException(TEMP_ENGINE_ALREADY_DEFINED, "Temporary engine already defined or auto created."); } internal static LiteException CollectionNotFound(string key) { return new LiteException(COLLECTION_NOT_FOUND, "Collection not found: '{0}'", key); } internal static LiteException InvalidExpressionType(BsonExpression expr, BsonExpressionType type) { return new LiteException(INVALID_EXPRESSION_TYPE, "Expression '{0}' must be a {1} type.", expr.Source, type); } internal static LiteException InvalidExpressionTypePredicate(BsonExpression expr) { return new LiteException(INVALID_EXPRESSION_TYPE, "Expression '{0}' are not supported as predicate expression.", expr.Source); } internal static LiteException CollectionAlreadyExist(string key) { return new LiteException(COLLECTION_ALREADY_EXIST, "Collection already exist: '{0}'", key); } internal static LiteException IndexAlreadyExist(string name) { return new LiteException(INDEX_ALREADY_EXIST, "Index name '{0}' already exist with a differnt expression. Try drop index first.", name); } internal static LiteException InvalidUpdateField(string field) { return new LiteException(INVALID_UPDATE_FIELD, "'{0}' can't be modified in UPDATE command.", field); } internal static LiteException IndexDuplicateKey(string field, BsonValue key) { return new LiteException(INDEX_DUPLICATE_KEY, "Cannot insert duplicate key in unique index '{0}'. The duplicate value is '{1}'.", field, key); } internal static LiteException InvalidIndexKey(string text) { return new LiteException(INVALID_INDEX_KEY, text); } internal static LiteException IndexNotFound(string name) { return new LiteException(INDEX_NOT_FOUND, "Index not found '{0}'.", name); } internal static LiteException LockTimeout(string mode, TimeSpan ts) { return new LiteException(LOCK_TIMEOUT, "Database lock timeout when entering in {0} mode after {1}", mode, ts.ToString()); } internal static LiteException LockTimeout(string mode, string collection, TimeSpan ts) { return new LiteException(LOCK_TIMEOUT, "Collection '{0}' lock timeout when entering in {1} mode after {2}", collection, mode, ts.ToString()); } internal static LiteException InvalidCommand(string command) { return new LiteException(INVALID_COMMAND, "Command '{0}' is not a valid shell command.", command); } internal static LiteException AlreadyExistsCollectionName(string newName) { return new LiteException(ALREADY_EXISTS_COLLECTION_NAME, "New collection name '{0}' already exists.", newName); } internal static LiteException AlreadyOpenDatafile(string filename) { return new LiteException(ALREADY_OPEN_DATAFILE, "Your datafile '{0}' is open in another process.", filename); } internal static LiteException InvalidDbRef(string path) { return new LiteException(INVALID_DBREF, "Invalid value for DbRef in path '{0}'. Value must be document like {{ $ref: \"?\", $id: ? }}", path); } internal static LiteException AlreadyExistsTransaction() { return new LiteException(INVALID_TRANSACTION_STATE, "The current thread already contains an open transaction. Use the Commit/Rollback method to release the previous transaction."); } internal static LiteException CollectionLockerNotFound(string collection) { return new LiteException(INVALID_TRANSACTION_STATE, "Collection locker '{0}' was not found inside dictionary.", collection); } internal static LiteException InvalidFormat(string field) { return new LiteException(INVALID_FORMAT, "Invalid format: {0}", field); } internal static LiteException DocumentMaxDepth(int depth, Type type) { return new LiteException(DOCUMENT_MAX_DEPTH, "Document has more than {0} nested documents in '{1}'. Check for circular references (use DbRef).", depth, type == null ? "-" : type.Name); } internal static LiteException InvalidCtor(Type type, Exception inner) { return new LiteException(INVALID_CTOR, inner, "Failed to create instance for type '{0}' from assembly '{1}'. Checks if the class has a public constructor with no parameters.", type.FullName, type.AssemblyQualifiedName); } internal static LiteException UnexpectedToken(Token token, string expected = null) { var position = (token?.Position - (token?.Value?.Length ?? 0)) ?? 0; var str = token?.Type == TokenType.EOF ? "[EOF]" : token?.Value ?? ""; var exp = expected == null ? "" : $" Expected `{expected}`."; return new LiteException(UNEXPECTED_TOKEN, $"Unexpected token `{str}` in position {position}.{exp}") { Position = position }; } internal static LiteException UnexpectedToken(string message, Token token) { var position = (token?.Position - (token?.Value?.Length ?? 0)) ?? 0; return new LiteException(UNEXPECTED_TOKEN, message) { Position = position }; } internal static LiteException InvalidDataType(string field, BsonValue value) { return new LiteException(INVALID_DATA_TYPE, "Invalid BSON data type '{0}' on field '{1}'.", value.Type, field); } internal static LiteException PropertyReadWrite(PropertyInfo prop) { return new LiteException(PROPERTY_READ_WRITE, "'{0}' property must have public getter and setter.", prop.Name); } internal static LiteException PropertyNotMapped(string name) { return new LiteException(PROPERTY_NOT_MAPPED, "Property '{0}' was not mapped into BsonDocument.", name); } internal static LiteException InvalidTypedName(string type) { return new LiteException(INVALID_TYPED_NAME, "Type '{0}' not found in current domain (_type format is 'Type.FullName, AssemblyName').", type); } internal static LiteException InitialSizeCryptoNotSupported() { return new LiteException(INITIALSIZE_CRYPTO_NOT_SUPPORTED, "Initial Size option is not supported for encrypted datafiles."); } internal static LiteException InvalidInitialSize() { return new LiteException(INVALID_INITIALSIZE, "Initial Size must be a multiple of page size ({0} bytes).", PAGE_SIZE); } internal static LiteException EngineDisposed() { return new LiteException(ENGINE_DISPOSED, "This engine instance already disposed."); } internal static LiteException InvalidNullCharInString() { return new LiteException(INVALID_NULL_CHAR_STRING, "Invalid null character (\\0) was found in the string"); } internal static LiteException InvalidPageType(PageType pageType, BasePage page) { var sb = new StringBuilder($"Invalid {pageType} on {page.PageID}. "); sb.Append($"Full zero: {page.Buffer.All(0)}. "); sb.Append($"Page Type: {page.PageType}. "); sb.Append($"Prev/Next: {page.PrevPageID}/{page.NextPageID}. "); sb.Append($"UniqueID: {page.Buffer.UniqueID}. "); sb.Append($"ShareCounter: {page.Buffer.ShareCounter}. "); return new LiteException(0, sb.ToString()); } internal static LiteException InvalidFreeSpacePage(uint pageID, int freeBytes, int length) { return new LiteException(INVALID_FREE_SPACE_PAGE, $"An operation that would corrupt page {pageID} was prevented. The operation required {length} free bytes, but the page had only {freeBytes} available."); } internal static LiteException DataTypeNotAssignable(string type1, string type2) { return new LiteException(DATA_TYPE_NOT_ASSIGNABLE, $"Data type {type1} is not assignable from data type {type2}"); } internal static LiteException FileNotEncrypted() { return new LiteException(NOT_ENCRYPTED, "File is not encrypted."); } internal static LiteException InvalidPassword() { return new LiteException(INVALID_PASSWORD, "Invalid password."); } internal static LiteException IllegalDeserializationType(string typeName) { return new LiteException(ILLEGAL_DESERIALIZATION_TYPE, $"Illegal deserialization type: {typeName}"); } internal static LiteException InvalidDatafileState(string message) { return new LiteException(INVALID_DATAFILE_STATE, message); } #endregion } } ================================================ FILE: LiteDB/Utils/MimeTypeConverter.cs ================================================ using System; using System.Collections.Generic; using System.IO; using static LiteDB.Constants; namespace LiteDB { /// /// Convert filename to mimetype (http://stackoverflow.com/questions/1029740/get-mime-type-from-filename-extension) /// internal class MimeTypeConverter { private static readonly IDictionary _mappings = new Dictionary(StringComparer.OrdinalIgnoreCase) { #region Big freaking list of mime types // combination of values from Windows 7 Registry and // from C:\Windows\System32\inetsrv\config\applicationHost.config // some added, including .7z and .dat {".323", "text/h323"}, {".3g2", "video/3gpp2"}, {".3gp", "video/3gpp"}, {".3gp2", "video/3gpp2"}, {".3gpp", "video/3gpp"}, {".7z", "application/x-7z-compressed"}, {".aa", "audio/audible"}, {".AAC", "audio/aac"}, {".aaf", "application/octet-stream"}, {".aax", "audio/vnd.audible.aax"}, {".ac3", "audio/ac3"}, {".aca", "application/octet-stream"}, {".accda", "application/msaccess.addin"}, {".accdb", "application/msaccess"}, {".accdc", "application/msaccess.cab"}, {".accde", "application/msaccess"}, {".accdr", "application/msaccess.runtime"}, {".accdt", "application/msaccess"}, {".accdw", "application/msaccess.webapplication"}, {".accft", "application/msaccess.ftemplate"}, {".acx", "application/internet-property-stream"}, {".AddIn", "text/xml"}, {".ade", "application/msaccess"}, {".adobebridge", "application/x-bridge-url"}, {".adp", "application/msaccess"}, {".ADT", "audio/vnd.dlna.adts"}, {".ADTS", "audio/aac"}, {".afm", "application/octet-stream"}, {".ai", "application/postscript"}, {".aif", "audio/x-aiff"}, {".aifc", "audio/aiff"}, {".aiff", "audio/aiff"}, {".air", "application/vnd.adobe.air-application-installer-package+zip"}, {".amc", "application/x-mpeg"}, {".application", "application/x-ms-application"}, {".art", "image/x-jg"}, {".asa", "application/xml"}, {".asax", "application/xml"}, {".ascx", "application/xml"}, {".asd", "application/octet-stream"}, {".asf", "video/x-ms-asf"}, {".ashx", "application/xml"}, {".asi", "application/octet-stream"}, {".asm", "text/plain"}, {".asmx", "application/xml"}, {".aspx", "application/xml"}, {".asr", "video/x-ms-asf"}, {".asx", "video/x-ms-asf"}, {".atom", "application/atom+xml"}, {".au", "audio/basic"}, {".avi", "video/x-msvideo"}, {".axs", "application/olescript"}, {".bas", "text/plain"}, {".bcpio", "application/x-bcpio"}, {".bin", "application/octet-stream"}, {".bmp", "image/bmp"}, {".c", "text/plain"}, {".cab", "application/octet-stream"}, {".caf", "audio/x-caf"}, {".calx", "application/vnd.ms-office.calx"}, {".cat", "application/vnd.ms-pki.seccat"}, {".cc", "text/plain"}, {".cd", "text/plain"}, {".cdda", "audio/aiff"}, {".cdf", "application/x-cdf"}, {".cer", "application/x-x509-ca-cert"}, {".chm", "application/octet-stream"}, {".class", "application/x-java-applet"}, {".clp", "application/x-msclip"}, {".cmx", "image/x-cmx"}, {".cnf", "text/plain"}, {".cod", "image/cis-cod"}, {".config", "application/xml"}, {".contact", "text/x-ms-contact"}, {".coverage", "application/xml"}, {".cpio", "application/x-cpio"}, {".cpp", "text/plain"}, {".crd", "application/x-mscardfile"}, {".crl", "application/pkix-crl"}, {".crt", "application/x-x509-ca-cert"}, {".cs", "text/plain"}, {".csdproj", "text/plain"}, {".csh", "application/x-csh"}, {".csproj", "text/plain"}, {".css", "text/css"}, {".csv", "text/csv"}, {".cur", "application/octet-stream"}, {".cxx", "text/plain"}, {".dat", "application/octet-stream"}, {".datasource", "application/xml"}, {".dbproj", "text/plain"}, {".dcr", "application/x-director"}, {".def", "text/plain"}, {".deploy", "application/octet-stream"}, {".der", "application/x-x509-ca-cert"}, {".dgml", "application/xml"}, {".dib", "image/bmp"}, {".dif", "video/x-dv"}, {".dir", "application/x-director"}, {".disco", "text/xml"}, {".dll", "application/x-msdownload"}, {".dll.config", "text/xml"}, {".dlm", "text/dlm"}, {".doc", "application/msword"}, {".docm", "application/vnd.ms-word.document.macroEnabled.12"}, {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {".dot", "application/msword"}, {".dotm", "application/vnd.ms-word.template.macroEnabled.12"}, {".dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"}, {".dsp", "application/octet-stream"}, {".dsw", "text/plain"}, {".dtd", "text/xml"}, {".dtsConfig", "text/xml"}, {".dv", "video/x-dv"}, {".dvi", "application/x-dvi"}, {".dwf", "drawing/x-dwf"}, {".dwp", "application/octet-stream"}, {".dxr", "application/x-director"}, {".eml", "message/rfc822"}, {".emz", "application/octet-stream"}, {".eot", "application/octet-stream"}, {".eps", "application/postscript"}, {".etl", "application/etl"}, {".etx", "text/x-setext"}, {".evy", "application/envoy"}, {".exe", "application/octet-stream"}, {".exe.config", "text/xml"}, {".fdf", "application/vnd.fdf"}, {".fif", "application/fractals"}, {".filters", "Application/xml"}, {".fla", "application/octet-stream"}, {".flr", "x-world/x-vrml"}, {".flv", "video/x-flv"}, {".fsscript", "application/fsharp-script"}, {".fsx", "application/fsharp-script"}, {".generictest", "application/xml"}, {".gif", "image/gif"}, {".group", "text/x-ms-group"}, {".gsm", "audio/x-gsm"}, {".gtar", "application/x-gtar"}, {".gz", "application/x-gzip"}, {".h", "text/plain"}, {".hdf", "application/x-hdf"}, {".hdml", "text/x-hdml"}, {".hhc", "application/x-oleobject"}, {".hhk", "application/octet-stream"}, {".hhp", "application/octet-stream"}, {".hlp", "application/winhlp"}, {".hpp", "text/plain"}, {".hqx", "application/mac-binhex40"}, {".hta", "application/hta"}, {".htc", "text/x-component"}, {".htm", "text/html"}, {".html", "text/html"}, {".htt", "text/webviewhtml"}, {".hxa", "application/xml"}, {".hxc", "application/xml"}, {".hxd", "application/octet-stream"}, {".hxe", "application/xml"}, {".hxf", "application/xml"}, {".hxh", "application/octet-stream"}, {".hxi", "application/octet-stream"}, {".hxk", "application/xml"}, {".hxq", "application/octet-stream"}, {".hxr", "application/octet-stream"}, {".hxs", "application/octet-stream"}, {".hxt", "text/html"}, {".hxv", "application/xml"}, {".hxw", "application/octet-stream"}, {".hxx", "text/plain"}, {".i", "text/plain"}, {".ico", "image/x-icon"}, {".ics", "application/octet-stream"}, {".idl", "text/plain"}, {".ief", "image/ief"}, {".iii", "application/x-iphone"}, {".inc", "text/plain"}, {".inf", "application/octet-stream"}, {".inl", "text/plain"}, {".ins", "application/x-internet-signup"}, {".ipa", "application/x-itunes-ipa"}, {".ipg", "application/x-itunes-ipg"}, {".ipproj", "text/plain"}, {".ipsw", "application/x-itunes-ipsw"}, {".iqy", "text/x-ms-iqy"}, {".isp", "application/x-internet-signup"}, {".ite", "application/x-itunes-ite"}, {".itlp", "application/x-itunes-itlp"}, {".itms", "application/x-itunes-itms"}, {".itpc", "application/x-itunes-itpc"}, {".IVF", "video/x-ivf"}, {".jar", "application/java-archive"}, {".java", "application/octet-stream"}, {".jck", "application/liquidmotion"}, {".jcz", "application/liquidmotion"}, {".jfif", "image/pjpeg"}, {".jnlp", "application/x-java-jnlp-file"}, {".jpb", "application/octet-stream"}, {".jpe", "image/jpeg"}, {".jpeg", "image/jpeg"}, {".jpg", "image/jpeg"}, {".js", "application/x-javascript"}, {".jsx", "text/jscript"}, {".jsxbin", "text/plain"}, {".latex", "application/x-latex"}, {".library-ms", "application/windows-library+xml"}, {".lit", "application/x-ms-reader"}, {".loadtest", "application/xml"}, {".lpk", "application/octet-stream"}, {".lsf", "video/x-la-asf"}, {".lst", "text/plain"}, {".lsx", "video/x-la-asf"}, {".lzh", "application/octet-stream"}, {".m13", "application/x-msmediaview"}, {".m14", "application/x-msmediaview"}, {".m1v", "video/mpeg"}, {".m2t", "video/vnd.dlna.mpeg-tts"}, {".m2ts", "video/vnd.dlna.mpeg-tts"}, {".m2v", "video/mpeg"}, {".m3u", "audio/x-mpegurl"}, {".m3u8", "audio/x-mpegurl"}, {".m4a", "audio/m4a"}, {".m4b", "audio/m4b"}, {".m4p", "audio/m4p"}, {".m4r", "audio/x-m4r"}, {".m4v", "video/x-m4v"}, {".mac", "image/x-macpaint"}, {".mak", "text/plain"}, {".man", "application/x-troff-man"}, {".manifest", "application/x-ms-manifest"}, {".map", "text/plain"}, {".master", "application/xml"}, {".mda", "application/msaccess"}, {".mdb", "application/x-msaccess"}, {".mde", "application/msaccess"}, {".mdp", "application/octet-stream"}, {".me", "application/x-troff-me"}, {".mfp", "application/x-shockwave-flash"}, {".mht", "message/rfc822"}, {".mhtml", "message/rfc822"}, {".mid", "audio/mid"}, {".midi", "audio/mid"}, {".mix", "application/octet-stream"}, {".mk", "text/plain"}, {".mmf", "application/x-smaf"}, {".mno", "text/xml"}, {".mny", "application/x-msmoney"}, {".mod", "video/mpeg"}, {".mov", "video/quicktime"}, {".movie", "video/x-sgi-movie"}, {".mp2", "video/mpeg"}, {".mp2v", "video/mpeg"}, {".mp3", "audio/mpeg"}, {".mp4", "video/mp4"}, {".mp4v", "video/mp4"}, {".mpa", "video/mpeg"}, {".mpe", "video/mpeg"}, {".mpeg", "video/mpeg"}, {".mpf", "application/vnd.ms-mediapackage"}, {".mpg", "video/mpeg"}, {".mpp", "application/vnd.ms-project"}, {".mpv2", "video/mpeg"}, {".mqv", "video/quicktime"}, {".ms", "application/x-troff-ms"}, {".msi", "application/octet-stream"}, {".mso", "application/octet-stream"}, {".mts", "video/vnd.dlna.mpeg-tts"}, {".mtx", "application/xml"}, {".mvb", "application/x-msmediaview"}, {".mvc", "application/x-miva-compiled"}, {".mxp", "application/x-mmxp"}, {".nc", "application/x-netcdf"}, {".nsc", "video/x-ms-asf"}, {".nws", "message/rfc822"}, {".ocx", "application/octet-stream"}, {".oda", "application/oda"}, {".odc", "text/x-ms-odc"}, {".odh", "text/plain"}, {".odl", "text/plain"}, {".odp", "application/vnd.oasis.opendocument.presentation"}, {".ods", "application/oleobject"}, {".odt", "application/vnd.oasis.opendocument.text"}, {".one", "application/onenote"}, {".onea", "application/onenote"}, {".onepkg", "application/onenote"}, {".onetmp", "application/onenote"}, {".onetoc", "application/onenote"}, {".onetoc2", "application/onenote"}, {".orderedtest", "application/xml"}, {".osdx", "application/opensearchdescription+xml"}, {".p10", "application/pkcs10"}, {".p12", "application/x-pkcs12"}, {".p7b", "application/x-pkcs7-certificates"}, {".p7c", "application/pkcs7-mime"}, {".p7m", "application/pkcs7-mime"}, {".p7r", "application/x-pkcs7-certreqresp"}, {".p7s", "application/pkcs7-signature"}, {".pbm", "image/x-portable-bitmap"}, {".pcast", "application/x-podcast"}, {".pct", "image/pict"}, {".pcx", "application/octet-stream"}, {".pcz", "application/octet-stream"}, {".pdf", "application/pdf"}, {".pfb", "application/octet-stream"}, {".pfm", "application/octet-stream"}, {".pfx", "application/x-pkcs12"}, {".pgm", "image/x-portable-graymap"}, {".pic", "image/pict"}, {".pict", "image/pict"}, {".pkgdef", "text/plain"}, {".pkgundef", "text/plain"}, {".pko", "application/vnd.ms-pki.pko"}, {".pls", "audio/scpls"}, {".pma", "application/x-perfmon"}, {".pmc", "application/x-perfmon"}, {".pml", "application/x-perfmon"}, {".pmr", "application/x-perfmon"}, {".pmw", "application/x-perfmon"}, {".png", "image/png"}, {".pnm", "image/x-portable-anymap"}, {".pnt", "image/x-macpaint"}, {".pntg", "image/x-macpaint"}, {".pnz", "image/png"}, {".pot", "application/vnd.ms-powerpoint"}, {".potm", "application/vnd.ms-powerpoint.template.macroEnabled.12"}, {".potx", "application/vnd.openxmlformats-officedocument.presentationml.template"}, {".ppa", "application/vnd.ms-powerpoint"}, {".ppam", "application/vnd.ms-powerpoint.addin.macroEnabled.12"}, {".ppm", "image/x-portable-pixmap"}, {".pps", "application/vnd.ms-powerpoint"}, {".ppsm", "application/vnd.ms-powerpoint.slideshow.macroEnabled.12"}, {".ppsx", "application/vnd.openxmlformats-officedocument.presentationml.slideshow"}, {".ppt", "application/vnd.ms-powerpoint"}, {".pptm", "application/vnd.ms-powerpoint.presentation.macroEnabled.12"}, {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"}, {".prf", "application/pics-rules"}, {".prm", "application/octet-stream"}, {".prx", "application/octet-stream"}, {".ps", "application/postscript"}, {".psc1", "application/PowerShell"}, {".psd", "application/octet-stream"}, {".psess", "application/xml"}, {".psm", "application/octet-stream"}, {".psp", "application/octet-stream"}, {".pub", "application/x-mspublisher"}, {".pwz", "application/vnd.ms-powerpoint"}, {".qht", "text/x-html-insertion"}, {".qhtm", "text/x-html-insertion"}, {".qt", "video/quicktime"}, {".qti", "image/x-quicktime"}, {".qtif", "image/x-quicktime"}, {".qtl", "application/x-quicktimeplayer"}, {".qxd", "application/octet-stream"}, {".ra", "audio/x-pn-realaudio"}, {".ram", "audio/x-pn-realaudio"}, {".rar", "application/octet-stream"}, {".ras", "image/x-cmu-raster"}, {".rat", "application/rat-file"}, {".rc", "text/plain"}, {".rc2", "text/plain"}, {".rct", "text/plain"}, {".rdlc", "application/xml"}, {".resx", "application/xml"}, {".rf", "image/vnd.rn-realflash"}, {".rgb", "image/x-rgb"}, {".rgs", "text/plain"}, {".rm", "application/vnd.rn-realmedia"}, {".rmi", "audio/mid"}, {".rmp", "application/vnd.rn-rn_music_package"}, {".roff", "application/x-troff"}, {".rpm", "audio/x-pn-realaudio-plugin"}, {".rqy", "text/x-ms-rqy"}, {".rtf", "application/rtf"}, {".rtx", "text/richtext"}, {".ruleset", "application/xml"}, {".s", "text/plain"}, {".safariextz", "application/x-safari-safariextz"}, {".scd", "application/x-msschedule"}, {".sct", "text/scriptlet"}, {".sd2", "audio/x-sd2"}, {".sdp", "application/sdp"}, {".sea", "application/octet-stream"}, {".searchConnector-ms", "application/windows-search-connector+xml"}, {".setpay", "application/set-payment-initiation"}, {".setreg", "application/set-registration-initiation"}, {".settings", "application/xml"}, {".sgimb", "application/x-sgimb"}, {".sgml", "text/sgml"}, {".sh", "application/x-sh"}, {".shar", "application/x-shar"}, {".shtml", "text/html"}, {".sit", "application/x-stuffit"}, {".sitemap", "application/xml"}, {".skin", "application/xml"}, {".sldm", "application/vnd.ms-powerpoint.slide.macroEnabled.12"}, {".sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide"}, {".slk", "application/vnd.ms-excel"}, {".sln", "text/plain"}, {".slupkg-ms", "application/x-ms-license"}, {".smd", "audio/x-smd"}, {".smi", "application/octet-stream"}, {".smx", "audio/x-smd"}, {".smz", "audio/x-smd"}, {".snd", "audio/basic"}, {".snippet", "application/xml"}, {".snp", "application/octet-stream"}, {".sol", "text/plain"}, {".sor", "text/plain"}, {".spc", "application/x-pkcs7-certificates"}, {".spl", "application/futuresplash"}, {".src", "application/x-wais-source"}, {".srf", "text/plain"}, {".SSISDeploymentManifest", "text/xml"}, {".ssm", "application/streamingmedia"}, {".sst", "application/vnd.ms-pki.certstore"}, {".stl", "application/vnd.ms-pki.stl"}, {".sv4cpio", "application/x-sv4cpio"}, {".sv4crc", "application/x-sv4crc"}, {".svc", "application/xml"}, {".swf", "application/x-shockwave-flash"}, {".t", "application/x-troff"}, {".tar", "application/x-tar"}, {".tcl", "application/x-tcl"}, {".testrunconfig", "application/xml"}, {".testsettings", "application/xml"}, {".tex", "application/x-tex"}, {".texi", "application/x-texinfo"}, {".texinfo", "application/x-texinfo"}, {".tgz", "application/x-compressed"}, {".thmx", "application/vnd.ms-officetheme"}, {".thn", "application/octet-stream"}, {".tif", "image/tiff"}, {".tiff", "image/tiff"}, {".tlh", "text/plain"}, {".tli", "text/plain"}, {".toc", "application/octet-stream"}, {".tr", "application/x-troff"}, {".trm", "application/x-msterminal"}, {".trx", "application/xml"}, {".ts", "video/vnd.dlna.mpeg-tts"}, {".tsv", "text/tab-separated-values"}, {".ttf", "application/octet-stream"}, {".tts", "video/vnd.dlna.mpeg-tts"}, {".txt", "text/plain"}, {".u32", "application/octet-stream"}, {".uls", "text/iuls"}, {".user", "text/plain"}, {".ustar", "application/x-ustar"}, {".vb", "text/plain"}, {".vbdproj", "text/plain"}, {".vbk", "video/mpeg"}, {".vbproj", "text/plain"}, {".vbs", "text/vbscript"}, {".vcf", "text/x-vcard"}, {".vcproj", "Application/xml"}, {".vcs", "text/plain"}, {".vcxproj", "Application/xml"}, {".vddproj", "text/plain"}, {".vdp", "text/plain"}, {".vdproj", "text/plain"}, {".vdx", "application/vnd.ms-visio.viewer"}, {".vml", "text/xml"}, {".vscontent", "application/xml"}, {".vsct", "text/xml"}, {".vsd", "application/vnd.visio"}, {".vsi", "application/ms-vsi"}, {".vsix", "application/vsix"}, {".vsixlangpack", "text/xml"}, {".vsixmanifest", "text/xml"}, {".vsmdi", "application/xml"}, {".vspscc", "text/plain"}, {".vss", "application/vnd.visio"}, {".vsscc", "text/plain"}, {".vssettings", "text/xml"}, {".vssscc", "text/plain"}, {".vst", "application/vnd.visio"}, {".vstemplate", "text/xml"}, {".vsto", "application/x-ms-vsto"}, {".vsw", "application/vnd.visio"}, {".vsx", "application/vnd.visio"}, {".vtx", "application/vnd.visio"}, {".wav", "audio/wav"}, {".wave", "audio/wav"}, {".wax", "audio/x-ms-wax"}, {".wbk", "application/msword"}, {".wbmp", "image/vnd.wap.wbmp"}, {".wcm", "application/vnd.ms-works"}, {".wdb", "application/vnd.ms-works"}, {".wdp", "image/vnd.ms-photo"}, {".webarchive", "application/x-safari-webarchive"}, {".webp", "image/webp"}, {".webtest", "application/xml"}, {".wiq", "application/xml"}, {".wiz", "application/msword"}, {".wks", "application/vnd.ms-works"}, {".WLMP", "application/wlmoviemaker"}, {".wlpginstall", "application/x-wlpg-detect"}, {".wlpginstall3", "application/x-wlpg3-detect"}, {".wm", "video/x-ms-wm"}, {".wma", "audio/x-ms-wma"}, {".wmd", "application/x-ms-wmd"}, {".wmf", "application/x-msmetafile"}, {".wml", "text/vnd.wap.wml"}, {".wmlc", "application/vnd.wap.wmlc"}, {".wmls", "text/vnd.wap.wmlscript"}, {".wmlsc", "application/vnd.wap.wmlscriptc"}, {".wmp", "video/x-ms-wmp"}, {".wmv", "video/x-ms-wmv"}, {".wmx", "video/x-ms-wmx"}, {".wmz", "application/x-ms-wmz"}, {".wpl", "application/vnd.ms-wpl"}, {".wps", "application/vnd.ms-works"}, {".wri", "application/x-mswrite"}, {".wrl", "x-world/x-vrml"}, {".wrz", "x-world/x-vrml"}, {".wsc", "text/scriptlet"}, {".wsdl", "text/xml"}, {".wvx", "video/x-ms-wvx"}, {".x", "application/directx"}, {".xaf", "x-world/x-vrml"}, {".xaml", "application/xaml+xml"}, {".xap", "application/x-silverlight-app"}, {".xbap", "application/x-ms-xbap"}, {".xbm", "image/x-xbitmap"}, {".xdr", "text/plain"}, {".xht", "application/xhtml+xml"}, {".xhtml", "application/xhtml+xml"}, {".xla", "application/vnd.ms-excel"}, {".xlam", "application/vnd.ms-excel.addin.macroEnabled.12"}, {".xlc", "application/vnd.ms-excel"}, {".xld", "application/vnd.ms-excel"}, {".xlk", "application/vnd.ms-excel"}, {".xll", "application/vnd.ms-excel"}, {".xlm", "application/vnd.ms-excel"}, {".xls", "application/vnd.ms-excel"}, {".xlsb", "application/vnd.ms-excel.sheet.binary.macroEnabled.12"}, {".xlsm", "application/vnd.ms-excel.sheet.macroEnabled.12"}, {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".xlt", "application/vnd.ms-excel"}, {".xltm", "application/vnd.ms-excel.template.macroEnabled.12"}, {".xltx", "application/vnd.openxmlformats-officedocument.spreadsheetml.template"}, {".xlw", "application/vnd.ms-excel"}, {".xml", "text/xml"}, {".xmta", "application/xml"}, {".xof", "x-world/x-vrml"}, {".XOML", "text/plain"}, {".xpm", "image/x-xpixmap"}, {".xps", "application/vnd.ms-xpsdocument"}, {".xrm-ms", "text/xml"}, {".xsc", "application/xml"}, {".xsd", "text/xml"}, {".xsf", "text/xml"}, {".xsl", "text/xml"}, {".xslt", "text/xml"}, {".xsn", "application/octet-stream"}, {".xss", "application/xml"}, {".xtp", "application/octet-stream"}, {".xwd", "image/x-xwindowdump"}, {".z", "application/x-compress"}, {".zip", "application/x-zip-compressed"}, #endregion }; public static string GetMimeType(string filename) { if (string.IsNullOrEmpty(filename)) throw new ArgumentNullException(nameof(filename)); var extension = Path.GetExtension(filename); if (!extension.StartsWith(".")) { extension = "." + extension; } string mime; return _mappings.TryGetValue(extension, out mime) ? mime : "application/octet-stream"; } } } ================================================ FILE: LiteDB/Utils/Pool/BucketHelper.cs ================================================ using System.Runtime.CompilerServices; using static LiteDB.Constants; namespace LiteDB { internal static class BucketHelper { public const int BucketCount = 17; private static readonly int[] _bucketSize; static BucketHelper() { _bucketSize = new int[BucketCount]; for (var i = 0; i < BucketCount; ++i) { _bucketSize[i] = GetMaxSizeForBucket(i); } } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static int GetBucketIndex(int bufferSize) { for (var i = 0; i < _bucketSize.Length; i++) { if (_bucketSize[i] >= bufferSize) { return i; } } return -1; } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static int GetMaxSizeForBucket(int binIndex) { return 16 << binIndex; } } } ================================================ FILE: LiteDB/Utils/Randomizer.cs ================================================ using System; using static LiteDB.Constants; namespace LiteDB { /// /// A singleton shared randomizer class /// internal static class Randomizer { private static readonly Random _random = new Random(RANDOMIZER_SEED); public static int Next() { lock (_random) { return _random.Next(); } } public static int Next(int minValue, int maxValue) { lock (_random) { return _random.Next(minValue, maxValue); } } } } ================================================ FILE: LiteDB/Utils/Result.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text; using static LiteDB.Constants; namespace LiteDB { /// /// Implement a generic result structure with value and exception. This value can be partial value (like BsonDocument/Array) /// internal struct Result where T : class { public T Value; public Exception Exception; public bool Ok => this.Exception == null; public bool Fail => this.Exception != null; /// /// Get array result or throw exception if there is any error on read result /// public T GetValue() => this.Ok ? this.Value : throw this.Exception; public Result(T value, Exception ex = null) { this.Value = value; this.Exception = ex; } public static implicit operator T(Result value) { return value.Value; } public static implicit operator Result(T value) { return new Result(value, null); } } } ================================================ FILE: LiteDB/Utils/Tokenizer.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text; using static LiteDB.Constants; namespace LiteDB { #region TokenType definition /// /// ASCII char names: https://www.ascii.cl/htmlcodes.htm /// internal enum TokenType { /// { OpenBrace, /// } CloseBrace, /// [ OpenBracket, /// ] CloseBracket, /// ( OpenParenthesis, /// ) CloseParenthesis, /// , Comma, /// : Colon, /// ; SemiColon, /// @ At, /// # Hashtag, /// ~ Til, /// . Period, /// & Ampersand, /// $ Dollar, /// ! Exclamation, /// != NotEquals, /// = Equals, /// > Greater, /// >= GreaterOrEquals, /// < Less, /// <= LessOrEquals, /// - Minus, /// + Plus, /// * Asterisk, /// / Slash, /// \ Backslash, /// % Percent, /// "..." or '...' String, /// [0-9]+ Int, /// [0-9]+.[0-9] Double, /// \n\r\t \u0032 Whitespace, /// [a-Z_$]+[a-Z0-9_$] Word, EOF, Unknown } #endregion #region Token definition /// /// Represent a single string token /// internal class Token { private static readonly HashSet _keywords = new HashSet(StringComparer.OrdinalIgnoreCase) { "BETWEEN", "LIKE", "IN", "AND", "OR" }; public Token(TokenType tokenType, string value, long position) { this.Position = position; this.Value = value; this.Type = tokenType; } public TokenType Type { get; private set; } public string Value { get; private set; } public long Position { get; private set; } /// /// Expect if token is type (if not, throw UnexpectedToken) /// public Token Expect(TokenType type) { if (this.Type != type) { throw LiteException.UnexpectedToken(this); } return this; } /// /// Expect for type1 OR type2 (if not, throw UnexpectedToken) /// public Token Expect(TokenType type1, TokenType type2) { if (this.Type != type1 && this.Type != type2) { throw LiteException.UnexpectedToken(this); } return this; } /// /// Expect for type1 OR type2 OR type3 (if not, throw UnexpectedToken) /// public Token Expect(TokenType type1, TokenType type2, TokenType type3) { if (this.Type != type1 && this.Type != type2 && this.Type != type3) { throw LiteException.UnexpectedToken(this); } return this; } public Token Expect(string value, bool ignoreCase = true) { if (!this.Is(value, ignoreCase)) { throw LiteException.UnexpectedToken(this, value); } return this; } public bool Is(string value, bool ignoreCase = true) { return this.Type == TokenType.Word && value.Equals(this.Value, ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal); } public bool IsOperand { get { switch (this.Type) { case TokenType.Percent: case TokenType.Slash: case TokenType.Asterisk: case TokenType.Plus: case TokenType.Minus: case TokenType.Equals: case TokenType.Greater: case TokenType.GreaterOrEquals: case TokenType.Less: case TokenType.LessOrEquals: case TokenType.NotEquals: return true; case TokenType.Word: return _keywords.Contains(Value); default: return false; } } } public override string ToString() { return this.Value + " (" + this.Type + ")"; } } #endregion /// /// Class to tokenize TextReader input used in JsonRead/BsonExpressions /// This class are not thread safe /// internal class Tokenizer { private readonly TextReader _reader; private char _char = '\0'; private Token _ahead = null; private bool _eof = false; public bool EOF => _eof && _ahead == null; public long Position { get; private set; } public Token Current { get; private set; } /// /// If EOF throw an invalid token exception (used in while()) otherwise return "false" (not EOF) /// public bool CheckEOF() { if (_eof) throw LiteException.UnexpectedToken(this.Current); return false; } public Tokenizer(string source) : this(new StringReader(source)) { } public Tokenizer(TextReader reader) { _reader = reader; this.Position = 0; this.ReadChar(); } /// /// Checks if char is an valid part of a word [a-Z_]+[a-Z0-9_$]* /// public static bool IsWordChar(char c, bool first) { if (first) { return char.IsLetter(c) || c == '_' || c == '$'; } return char.IsLetterOrDigit(c) || c == '_' || c == '$'; } /// /// Read next char in stream and set in _current /// private char ReadChar() { if (_eof) return '\0'; var c = _reader.Read(); this.Position++; if (c == -1) { _char = '\0'; _eof = true; } else { _char = (char)c; } return _char; } /// /// Look for next token but keeps in buffer when run "ReadToken()" again. /// public Token LookAhead(bool eatWhitespace = true) { if (_ahead != null) { if (eatWhitespace && _ahead.Type == TokenType.Whitespace) { _ahead = this.ReadNext(eatWhitespace); } return _ahead; } return _ahead = this.ReadNext(eatWhitespace); } /// /// Read next token (or from ahead buffer). /// public Token ReadToken(bool eatWhitespace = true) { if (_ahead == null) { return this.Current = this.ReadNext(eatWhitespace); } if (eatWhitespace && _ahead.Type == TokenType.Whitespace) { _ahead = this.ReadNext(eatWhitespace); } this.Current = _ahead; _ahead = null; return this.Current; } /// /// Read next token from reader /// private Token ReadNext(bool eatWhitespace) { // remove whitespace before get next token if (eatWhitespace) this.EatWhitespace(); if (_eof) { return new Token(TokenType.EOF, null, this.Position); } Token token = null; switch (_char) { case '{': token = new Token(TokenType.OpenBrace, "{", this.Position); this.ReadChar(); break; case '}': token = new Token(TokenType.CloseBrace, "}", this.Position); this.ReadChar(); break; case '[': token = new Token(TokenType.OpenBracket, "[", this.Position); this.ReadChar(); break; case ']': token = new Token(TokenType.CloseBracket, "]", this.Position); this.ReadChar(); break; case '(': token = new Token(TokenType.OpenParenthesis, "(", this.Position); this.ReadChar(); break; case ')': token = new Token(TokenType.CloseParenthesis, ")", this.Position); this.ReadChar(); break; case ',': token = new Token(TokenType.Comma, ",", this.Position); this.ReadChar(); break; case ':': token = new Token(TokenType.Colon, ":", this.Position); this.ReadChar(); break; case ';': token = new Token(TokenType.SemiColon, ";", this.Position); this.ReadChar(); break; case '@': token = new Token(TokenType.At, "@", this.Position); this.ReadChar(); break; case '#': token = new Token(TokenType.Hashtag, "#", this.Position); this.ReadChar(); break; case '~': token = new Token(TokenType.Til, "~", this.Position); this.ReadChar(); break; case '.': token = new Token(TokenType.Period, ".", this.Position); this.ReadChar(); break; case '&': token = new Token(TokenType.Ampersand, "&", this.Position); this.ReadChar(); break; case '$': this.ReadChar(); if (IsWordChar(_char, true)) { token = new Token(TokenType.Word, "$" + this.ReadWord(), this.Position); } else { token = new Token(TokenType.Dollar, "$", this.Position); } break; case '!': this.ReadChar(); if (_char == '=') { token = new Token(TokenType.NotEquals, "!=", this.Position); this.ReadChar(); } else { token = new Token(TokenType.Exclamation, "!", this.Position); } break; case '=': token = new Token(TokenType.Equals, "=", this.Position); this.ReadChar(); break; case '>': this.ReadChar(); if (_char == '=') { token = new Token(TokenType.GreaterOrEquals, ">=", this.Position); this.ReadChar(); } else { token = new Token(TokenType.Greater, ">", this.Position); } break; case '<': this.ReadChar(); if (_char == '=') { token = new Token(TokenType.LessOrEquals, "<=", this.Position); this.ReadChar(); } else { token = new Token(TokenType.Less, "<", this.Position); } break; case '-': this.ReadChar(); if (_char == '-') { this.ReadLine(); token = this.ReadNext(eatWhitespace); } else { token = new Token(TokenType.Minus, "-", this.Position); } break; case '+': token = new Token(TokenType.Plus, "+", this.Position); this.ReadChar(); break; case '*': token = new Token(TokenType.Asterisk, "*", this.Position); this.ReadChar(); break; case '/': token = new Token(TokenType.Slash, "/", this.Position); this.ReadChar(); break; case '\\': token = new Token(TokenType.Backslash, @"\", this.Position); this.ReadChar(); break; case '%': token = new Token(TokenType.Percent, "%", this.Position); this.ReadChar(); break; case '\"': case '\'': token = new Token(TokenType.String, this.ReadString(_char), this.Position); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': var dbl = false; var number = this.ReadNumber(ref dbl); token = new Token(dbl ? TokenType.Double : TokenType.Int, number, this.Position); break; case ' ': case '\n': case '\r': case '\t': var sb = new StringBuilder(); while(char.IsWhiteSpace(_char) && !_eof) { sb.Append(_char); this.ReadChar(); } token = new Token(TokenType.Whitespace, sb.ToString(), this.Position); break; default: // test if first char is an word if (IsWordChar(_char, true)) { token = new Token(TokenType.Word, this.ReadWord(), this.Position); } else { this.ReadChar(); } break; } return token ?? new Token(TokenType.Unknown, _char.ToString(), this.Position); } /// /// Eat all whitespace - used before a valid token /// private void EatWhitespace() { while (char.IsWhiteSpace(_char) && !_eof) { this.ReadChar(); } } /// /// Read a word (word = [\w$]+) /// private string ReadWord() { var sb = new StringBuilder(); sb.Append(_char); this.ReadChar(); while (!_eof && IsWordChar(_char, false)) { sb.Append(_char); this.ReadChar(); } return sb.ToString(); } /// /// Read a number - it's accepts all number char, but not validate. When run Convert, .NET will check if number is correct /// private string ReadNumber(ref bool dbl) { var sb = new StringBuilder(); sb.Append(_char); var canDot = true; var canE = true; var canSign = false; this.ReadChar(); while (!_eof && (char.IsDigit(_char) || _char == '+' || _char == '-' || _char == '.' || _char == 'e' || _char == 'E')) { if (_char == '.') { if (canDot == false) break; dbl = true; canDot = false; } else if (_char == 'e' || _char == 'E') { if (canE == false) break; canE = false; canSign = true; dbl = true; } else if (_char == '-' || _char == '+') { if (canSign == false) break; canSign = false; } sb.Append(_char); this.ReadChar(); } return sb.ToString(); } /// /// Read a string removing open and close " or ' /// private string ReadString(char quote) { var sb = new StringBuilder(); this.ReadChar(); // remove first " or ' while (_char != quote && !_eof) { if (_char == '\\') { this.ReadChar(); if (_char == quote) sb.Append(quote); switch (_char) { case '\\': sb.Append('\\'); break; case '/': sb.Append('/'); break; case 'b': sb.Append('\b'); break; case 'f': sb.Append('\f'); break; case 'n': sb.Append('\n'); break; case 'r': sb.Append('\r'); break; case 't': sb.Append('\t'); break; case 'u': var codePoint = ParseUnicode(this.ReadChar(), this.ReadChar(), this.ReadChar(), this.ReadChar()); sb.Append((char)codePoint); break; } } else { sb.Append(_char); } this.ReadChar(); } this.ReadChar(); // read last " or ' return sb.ToString(); } /// /// Read all chars to end of LINE /// private void ReadLine() { // remove all char until new line while (_char != '\n' && !_eof) { this.ReadChar(); } if (_char == '\n') this.ReadChar(); } public static uint ParseUnicode(char c1, char c2, char c3, char c4) { uint p1 = ParseSingleChar(c1, 0x1000); uint p2 = ParseSingleChar(c2, 0x100); uint p3 = ParseSingleChar(c3, 0x10); uint p4 = ParseSingleChar(c4, 1); return p1 + p2 + p3 + p4; } public static uint ParseSingleChar(char c1, uint multiplier) { uint p1 = 0; if (c1 >= '0' && c1 <= '9') p1 = (uint)(c1 - '0') * multiplier; else if (c1 >= 'A' && c1 <= 'F') p1 = (uint)((c1 - 'A') + 10) * multiplier; else if (c1 >= 'a' && c1 <= 'f') p1 = (uint)((c1 - 'a') + 10) * multiplier; return p1; } public override string ToString() { return this.Current?.ToString() + " [ahead: " + _ahead?.ToString() + "] - position: " + this.Position; } } } ================================================ FILE: LiteDB/Utils/TryCatch.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace LiteDB.Utils { internal class TryCatch { public readonly List Exceptions = new List(); public TryCatch() { } public TryCatch(Exception initial) { this.Exceptions.Add(initial); } public bool InvalidDatafileState => this.Exceptions.Any(ex => ex is LiteException liteEx && liteEx.ErrorCode == LiteException.INVALID_DATAFILE_STATE); [DebuggerHidden] public void Catch(Action action) { try { action(); } catch (Exception ex) { this.Exceptions.Add(ex); } } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/BenchmarkBase.cs ================================================ using BenchmarkDotNet.Attributes; namespace LiteDB.Benchmarks.Benchmarks { public abstract class BenchmarkBase { // Insertion data size [Params(10, 50, 100, 500, 1000, 5000, 10000)] public int DatasetSize; public virtual string DatabasePath { get => Constants.DATABASE_NAME; set => throw new System.NotImplementedException(); } [Params(ConnectionType.Direct)] public ConnectionType ConnectionType; [Params(null, "SecurePassword")] public string Password; public ConnectionString ConnectionString() => new ConnectionString(DatabasePath) { Connection = ConnectionType, Password = Password }; protected ILiteDatabase DatabaseInstance { get; set; } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Constants.cs ================================================ namespace LiteDB.Benchmarks.Benchmarks { internal static class Constants { internal const string DATABASE_NAME = "Lite.db"; internal static class Categories { internal const string DATA_GEN = nameof(DATA_GEN); internal const string QUERIES = nameof(QUERIES); internal const string INSERTION = nameof(INSERTION); internal const string DELETION = nameof(DELETION); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Deletion/DeletionBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Deletion { [BenchmarkCategory(Constants.Categories.DELETION)] public class DeletionBenchmark : BenchmarkBase { private List _data; private ILiteCollection _fileMetaCollection; [GlobalSetup] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(file => file.IsFavorite); _fileMetaCollection.EnsureIndex(file => file.ShouldBeShown); _data = FileMetaGenerator.GenerateList(DatasetSize); } [IterationSetup] public void IterationSetup() { _fileMetaCollection.Insert(_data); DatabaseInstance.Checkpoint(); } [Benchmark(Baseline = true)] public int DeleteAllExpression() { var count = _fileMetaCollection.DeleteMany(_ => true); DatabaseInstance.Checkpoint(); return count; } [Benchmark] public int DeleteAllBsonExpression() { var count = _fileMetaCollection.DeleteMany("1 = 1"); DatabaseInstance.Checkpoint(); return count; } [Benchmark] public void DropCollectionAndRecreate() { const string collectionName = nameof(FileMetaBase); var indexesCollection = DatabaseInstance.GetCollection("$indexes"); var droppedCollectionIndexes = indexesCollection.Query().Where(x => x["collection"] == collectionName && x["name"] != "_id").ToDocuments().ToList(); DatabaseInstance.DropCollection(collectionName); foreach (var indexInfo in droppedCollectionIndexes) { DatabaseInstance.GetCollection(collectionName) .EnsureIndex(indexInfo["name"], BsonExpression.Create(indexInfo["expression"]), indexInfo["unique"]); } DatabaseInstance.Checkpoint(); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Generator/FileMetaDataGenerationDatabaseBenchmark.cs ================================================ using System.Collections.Generic; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Generator { /// /// This benchmark is used purely for the sake of providing information /// about how long and how many resources it takes to generate the test data. /// [BenchmarkCategory(Constants.Categories.DATA_GEN)] public class FileMetaDataGenerationDatabaseBenchmark { // Benchmark params [Params(10, 50, 100, 500, 1000, 5000, 10000)] public int N; [Benchmark] public List DataGeneration() { return FileMetaGenerator.GenerateList(N); } [Benchmark] public List DataWithExclusionsGeneration() { return FileMetaGenerator.GenerateList(N); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Insertion/InsertionBasicBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Insertion { [BenchmarkCategory(Constants.Categories.INSERTION)] public class InsertionBasicBenchmark : BenchmarkBase { private List _data; private ILiteCollection _fileMetaCollection; [GlobalSetup] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _data = FileMetaGenerator.GenerateList(DatasetSize); // executed once per each N value } [Benchmark(Baseline = true)] public int Insertion() { var count = _fileMetaCollection.Insert(_data); DatabaseInstance.Checkpoint(); return count; } [Benchmark] public void InsertionWithLoop() { // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < _data.Count; i++) { _fileMetaCollection.Insert(_data[i]); } DatabaseInstance.Checkpoint(); } [Benchmark] public int Upsertion() { var count = _fileMetaCollection.Upsert(_data); DatabaseInstance.Checkpoint(); return count; } [Benchmark] public void UpsertionWithLoop() { // ReSharper disable once ForCanBeConvertedToForeach for (var i = 0; i < _data.Count; i++) { _fileMetaCollection.Upsert(_data[i]); } DatabaseInstance.Checkpoint(); } [IterationCleanup] public void IterationCleanup() { const string collectionName = nameof(FileMetaBase); DatabaseInstance.DropCollection(collectionName); DatabaseInstance.Checkpoint(); DatabaseInstance.Rebuild(); } [GlobalCleanup] public void GlobalCleanup() { DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Insertion/InsertionIgnoreExpressionPropertyBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Insertion { [BenchmarkCategory(Constants.Categories.INSERTION)] public class InsertionIgnoreExpressionPropertyBenchmark : BenchmarkBase { private List _baseData; private List _baseDataWithBsonIgnore; private ILiteCollection _fileMetaCollection; private ILiteCollection _fileMetaExclusionCollection; [GlobalSetup(Target = nameof(Insertion))] public void GlobalBsonIgnoreSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _baseData = FileMetaGenerator.GenerateList(DatasetSize); // executed once per each N value } [GlobalSetup(Target = nameof(InsertionWithBsonIgnore))] public void GlobalIgnorePropertySetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaExclusionCollection = DatabaseInstance.GetCollection(); _fileMetaExclusionCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _baseDataWithBsonIgnore = FileMetaGenerator.GenerateList(DatasetSize); // executed once per each N value } [Benchmark(Baseline = true)] public int Insertion() { var count = _fileMetaCollection.Insert(_baseData); DatabaseInstance.Checkpoint(); return count; } [Benchmark] public int InsertionWithBsonIgnore() { var count = _fileMetaExclusionCollection.Insert(_baseDataWithBsonIgnore); DatabaseInstance.Checkpoint(); return count; } [IterationCleanup] public void IterationCleanup() { var indexesCollection = DatabaseInstance.GetCollection("$indexes"); var droppedCollectionIndexes = indexesCollection.Query().Where(x => x["name"] != "_id").ToDocuments().ToList(); var collectionNames = DatabaseInstance.GetCollectionNames(); foreach (var name in collectionNames) { DatabaseInstance.DropCollection(name); } foreach (var indexInfo in droppedCollectionIndexes) { DatabaseInstance.GetCollection(indexInfo["collection"]) .EnsureIndex(indexInfo["name"], BsonExpression.Create(indexInfo["expression"]), indexInfo["unique"]); } DatabaseInstance.Checkpoint(); DatabaseInstance.Rebuild(); } [GlobalCleanup] public void GlobalCleanup() { _baseData?.Clear(); _baseData = null; _baseDataWithBsonIgnore?.Clear(); _baseDataWithBsonIgnore = null; DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Insertion/InsertionInMemoryBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Insertion { [BenchmarkCategory(Constants.Categories.INSERTION)] public class InsertionInMemoryBenchmark : BenchmarkBase { private List _data; private ILiteDatabase _databaseInstanceNormal; private ILiteDatabase _databaseInstanceInMemory; private ILiteCollection _fileMetaNormalCollection; private ILiteCollection _fileMetaInMemoryCollection; [GlobalSetup(Target = nameof(InsertionNormal))] public void GlobalSetupNormal() { File.Delete(DatabasePath); _data = FileMetaGenerator.GenerateList(DatasetSize); // executed once per each N value _databaseInstanceNormal = new LiteDatabase(ConnectionString()); _fileMetaNormalCollection = _databaseInstanceNormal.GetCollection(); } [GlobalSetup(Target = nameof(InsertionInMemory))] public void GlobalSetupInMemory() { _data = FileMetaGenerator.GenerateList(DatasetSize); // executed once per each N value _databaseInstanceInMemory = new LiteDatabase(new MemoryStream()); _fileMetaInMemoryCollection = _databaseInstanceInMemory.GetCollection(); } [Benchmark(Baseline = true)] public int InsertionNormal() { var count = _fileMetaNormalCollection.Insert(_data); _databaseInstanceNormal.Checkpoint(); return count; } [Benchmark] public int InsertionInMemory() { var count = _fileMetaInMemoryCollection.Insert(_data); _databaseInstanceNormal.Checkpoint(); return count; } [IterationCleanup(Target = nameof(InsertionNormal))] public void CleanUpNormal() { const string collectionName = nameof(FileMetaBase); var indexesCollection = _databaseInstanceNormal.GetCollection("$indexes"); var droppedCollectionIndexes = indexesCollection.Query().Where(x => x["collection"] == collectionName && x["name"] != "_id").ToDocuments().ToList(); _databaseInstanceNormal.DropCollection(collectionName); foreach (var indexInfo in droppedCollectionIndexes) { _databaseInstanceNormal.GetCollection(collectionName) .EnsureIndex(indexInfo["name"], BsonExpression.Create(indexInfo["expression"]), indexInfo["unique"]); } _databaseInstanceNormal.Checkpoint(); _databaseInstanceNormal.Rebuild(); } [IterationCleanup(Target = nameof(InsertionInMemory))] public void CleanUpInMemory() { const string collectionName = nameof(FileMetaBase); var indexesCollection = _databaseInstanceInMemory.GetCollection("$indexes"); var droppedCollectionIndexes = indexesCollection.Query().Where(x => x["collection"] == collectionName && x["name"] != "_id").ToDocuments().ToList(); _databaseInstanceInMemory.DropCollection(collectionName); foreach (var indexInfo in droppedCollectionIndexes) { _databaseInstanceInMemory.GetCollection(collectionName) .EnsureIndex(indexInfo["name"], BsonExpression.Create(indexInfo["expression"]), indexInfo["unique"]); } _databaseInstanceInMemory.Checkpoint(); _databaseInstanceInMemory.Rebuild(); } [GlobalCleanup(Target = nameof(InsertionNormal))] public void GlobalCleanupNormal() { _fileMetaNormalCollection = null; _databaseInstanceNormal?.Checkpoint(); _databaseInstanceNormal?.Dispose(); _databaseInstanceNormal = null; File.Delete(DatabasePath); } [GlobalCleanup(Target = nameof(InsertionInMemory))] public void GlobalCleanupInMemory() { _fileMetaInMemoryCollection = null; _databaseInstanceInMemory?.Checkpoint(); _databaseInstanceInMemory?.Dispose(); _databaseInstanceInMemory = null; } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Queries/QueryAllBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Queries { [BenchmarkCategory(Constants.Categories.QUERIES)] public class QueryAllBenchmark : BenchmarkBase { private ILiteCollection _fileMetaCollection; [GlobalSetup] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [Benchmark(Baseline = true)] public List FindAll() { return _fileMetaCollection.FindAll().ToList(); } [Benchmark] public List FindAllWithExpression() { return _fileMetaCollection.Find(_ => true).ToList(); } [Benchmark] public List FindAllWithQuery() { return _fileMetaCollection.Find(Query.All()).ToList(); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Queries/QueryCompoundIndexBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Queries { [BenchmarkCategory(Constants.Categories.QUERIES)] public class QueryCompoundIndexBenchmark : BenchmarkBase { private const string COMPOUND_INDEX_NAME = "CompoundIndex1"; private ILiteCollection _fileMetaCollection; [GlobalSetup(Target = nameof(Query_SimpleIndex_Baseline))] public void GlobalSetupSimpleIndexBaseline() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.IsFavorite); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [GlobalSetup(Target = nameof(Query_CompoundIndexVariant))] public void GlobalSetupCompoundIndexVariant() { DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(COMPOUND_INDEX_NAME, $"$.{nameof(FileMetaBase.IsFavorite)};$.{nameof(FileMetaBase.ShouldBeShown)}"); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [Benchmark(Baseline = true)] public List Query_SimpleIndex_Baseline() { return _fileMetaCollection.Find(Query.And( Query.EQ(nameof(FileMetaBase.IsFavorite), false), Query.EQ(nameof(FileMetaBase.ShouldBeShown), true))) .ToList(); } [Benchmark] public List Query_CompoundIndexVariant() { return _fileMetaCollection.Find(Query.EQ(COMPOUND_INDEX_NAME, $"{false};{true}")).ToList(); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Queries/QueryCountBenchmark.cs ================================================ using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Queries { [BenchmarkCategory(Constants.Categories.QUERIES)] public class QueryCountBenchmark : BenchmarkBase { private ILiteCollection _fileMetaCollection; [GlobalSetup] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [Benchmark(Baseline = true)] public int CountWithLinq() { return _fileMetaCollection.Find(Query.EQ(nameof(FileMetaBase.ShouldBeShown), true)).Count(); } [Benchmark] public int CountWithExpression() { return _fileMetaCollection.Count(fileMeta => fileMeta.ShouldBeShown); } [Benchmark] public int CountWithQuery() { return _fileMetaCollection.Count(Query.EQ(nameof(FileMetaBase.ShouldBeShown), true)); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance.DropCollection(nameof(FileMetaBase)); DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Queries/QueryIgnoreExpressionPropertiesBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Queries { [BenchmarkCategory(Constants.Categories.QUERIES)] public class QueryIgnoreExpressionPropertiesBenchmark : BenchmarkBase { private ILiteCollection _fileMetaCollection; private ILiteCollection _fileMetaExclusionCollection; [GlobalSetup(Target = nameof(DeserializeBaseline))] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [GlobalSetup(Target = nameof(DeserializeWithIgnore))] public void GlobalIndexSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaExclusionCollection = DatabaseInstance.GetCollection(); _fileMetaExclusionCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _fileMetaExclusionCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [Benchmark(Baseline = true)] public List DeserializeBaseline() { return _fileMetaCollection.Find(fileMeta => fileMeta.ShouldBeShown).ToList(); } [Benchmark] public List DeserializeWithIgnore() { return _fileMetaExclusionCollection.Find(fileMeta => fileMeta.ShouldBeShown).ToList(); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance.DropCollection(nameof(FileMetaBase)); _fileMetaCollection = null; DatabaseInstance.DropCollection(nameof(FileMetaWithExclusion)); _fileMetaExclusionCollection = null; DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Queries/QueryMultipleParametersBenchmark.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Queries { [BenchmarkCategory(Constants.Categories.QUERIES)] public class QueryMultipleParametersBenchmark : BenchmarkBase { private ILiteCollection _fileMetaCollection; [GlobalSetup] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.IsFavorite); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [Benchmark(Baseline = true)] public List Expression_Normal_Baseline() { return _fileMetaCollection.Find(fileMeta => fileMeta.IsFavorite && fileMeta.ShouldBeShown).ToList(); } [Benchmark] public List Query_Normal() { return _fileMetaCollection.Find(Query.And( Query.EQ(nameof(FileMetaBase.IsFavorite), true), Query.EQ(nameof(FileMetaBase.ShouldBeShown), true))) .ToList(); } [Benchmark] public List Expression_ParametersSwitched() { return _fileMetaCollection.Find(fileMeta => fileMeta.ShouldBeShown && fileMeta.IsFavorite).ToList(); } [Benchmark] public List Query_ParametersSwitched() { return _fileMetaCollection.Find(Query.And( Query.EQ(nameof(FileMetaBase.ShouldBeShown), true), Query.EQ(nameof(FileMetaBase.IsFavorite), true))) .ToList(); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Queries/QuerySimpleIndexBenchmarks.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Queries { [BenchmarkCategory(Constants.Categories.QUERIES)] public class QuerySimpleIndexBenchmarks : BenchmarkBase { private ILiteCollection _fileMetaCollection; [GlobalSetup(Targets = new[] {nameof(FindWithExpression), nameof(FindWithQuery)})] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value } [GlobalSetup(Targets = new[] {nameof(FindWithIndexExpression), nameof(FindWithIndexQuery)})] public void GlobalIndexSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.IsFavorite); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); } [Benchmark(Baseline = true)] public List FindWithExpression() { return _fileMetaCollection.Find(fileMeta => fileMeta.IsFavorite).ToList(); } [Benchmark] public List FindWithQuery() { return _fileMetaCollection.Find(Query.EQ(nameof(FileMetaBase.IsFavorite), true)).ToList(); } [Benchmark] public List FindWithIndexExpression() { return _fileMetaCollection.Find(fileMeta => fileMeta.IsFavorite).ToList(); } [Benchmark] public List FindWithIndexQuery() { return _fileMetaCollection.Find(Query.EQ(nameof(FileMetaBase.IsFavorite), true)).ToList(); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/Benchmarks/Queries/QueryWithDateTimeOffsetBenchmark.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using BenchmarkDotNet.Attributes; using LiteDB.Benchmarks.Models; using LiteDB.Benchmarks.Models.Generators; namespace LiteDB.Benchmarks.Benchmarks.Queries { [BenchmarkCategory(Constants.Categories.QUERIES)] public class QueryWithDateTimeOffsetBenchmark : BenchmarkBase { private DateTime _dateTimeConstraint; private BsonValue _dateTimeConstraintBsonValue; private ILiteCollection _fileMetaCollection; [GlobalSetup] public void GlobalSetup() { File.Delete(DatabasePath); DatabaseInstance = new LiteDatabase(ConnectionString()); _fileMetaCollection = DatabaseInstance.GetCollection(); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ValidFrom); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ValidTo); _fileMetaCollection.EnsureIndex(fileMeta => fileMeta.ShouldBeShown); _fileMetaCollection.Insert(FileMetaGenerator.GenerateList(DatasetSize)); // executed once per each N value DatabaseInstance.Checkpoint(); _dateTimeConstraint = DateTime.Now; _dateTimeConstraintBsonValue = new BsonValue(_dateTimeConstraint); } [Benchmark(Baseline = true)] public List Expression_Normal_Baseline() { return _fileMetaCollection.Find(fileMeta => (fileMeta.ValidFrom > _dateTimeConstraint || fileMeta.ValidTo < _dateTimeConstraint) && fileMeta.ShouldBeShown).ToList(); } [Benchmark] public List Query_Normal() { return _fileMetaCollection.Find(Query.And( Query.Or( Query.GT(nameof(FileMetaBase.ValidFrom), _dateTimeConstraintBsonValue), Query.LT(nameof(FileMetaBase.ValidTo), _dateTimeConstraintBsonValue)), Query.EQ(nameof(FileMetaBase.ShouldBeShown), true))) .ToList(); } [Benchmark] public List Expression_ParametersSwitched() { return _fileMetaCollection.Find(fileMeta => fileMeta.ShouldBeShown && (fileMeta.ValidFrom > _dateTimeConstraint || fileMeta.ValidTo < _dateTimeConstraint)).ToList(); } [Benchmark] public List Query_ParametersSwitched() { return _fileMetaCollection.Find(Query.And( Query.EQ(nameof(FileMetaBase.ShouldBeShown), true), Query.Or( Query.GT(nameof(FileMetaBase.ValidFrom), _dateTimeConstraintBsonValue), Query.LT(nameof(FileMetaBase.ValidTo), _dateTimeConstraintBsonValue)))) .ToList(); } [GlobalCleanup] public void GlobalCleanup() { // Disposing logic DatabaseInstance?.Checkpoint(); DatabaseInstance?.Dispose(); DatabaseInstance = null; File.Delete(DatabasePath); } } } ================================================ FILE: LiteDB.Benchmarks/LiteDB.Benchmarks.csproj ================================================  Exe net472;net6 8 ================================================ FILE: LiteDB.Benchmarks/Models/FileMetaBase.cs ================================================ using System; namespace LiteDB.Benchmarks.Models { public class FileMetaBase { [BsonIgnore] public const string BsonIdPropertyKey = "_id"; [BsonId] public virtual string Id => $"{FileId}_{Version}"; public Guid FileId { get; set; } public string ParentId { get; set; } public string Title { get; set; } public string MimeType { get; set; } public int Version { get; set; } public DateTimeOffset? ValidFrom { get; set; } public DateTimeOffset? ValidTo { get; set; } public bool IsFavorite { get; set; } public bool ShouldBeShown { get; set; } public virtual bool IsValid => ValidFrom == null || ValidFrom <= DateTimeOffset.UtcNow && ValidTo == null || ValidTo > DateTimeOffset.UtcNow; } } ================================================ FILE: LiteDB.Benchmarks/Models/FileMetaWithExclusion.cs ================================================ namespace LiteDB.Benchmarks.Models { public class FileMetaWithExclusion : FileMetaBase { public FileMetaWithExclusion() { } public FileMetaWithExclusion(FileMetaBase fileMetaBase) { FileId = fileMetaBase.FileId; ParentId = fileMetaBase.ParentId; Title = fileMetaBase.Title; MimeType = fileMetaBase.MimeType; Version = fileMetaBase.Version; ValidFrom = fileMetaBase.ValidFrom; ValidTo = fileMetaBase.ValidTo; IsFavorite = fileMetaBase.IsFavorite; ShouldBeShown = fileMetaBase.ShouldBeShown; } [BsonIgnore] public override bool IsValid => base.IsValid; } } ================================================ FILE: LiteDB.Benchmarks/Models/Generators/FileMetaGenerator.cs ================================================ using System; using System.Collections.Generic; namespace LiteDB.Benchmarks.Models.Generators { public static class FileMetaGenerator where T : FileMetaBase, new() { private static Random _random; private static T Generate() { var docGuid = Guid.NewGuid(); var generatedFileMeta = new T { FileId = docGuid, Version = _random.Next(5), Title = $"Document-{docGuid}", MimeType = "application/pdf", IsFavorite = _random.Next(10) >= 9, ShouldBeShown = _random.Next(10) >= 7 }; if (_random.Next(10) >= 5) { generatedFileMeta.ValidFrom = DateTimeOffset.Now.AddDays(-20 + _random.Next(40)); generatedFileMeta.ValidFrom = DateTimeOffset.UtcNow.AddDays(-10 + _random.Next(40)); } return generatedFileMeta; } public static List GenerateList(int amountToGenerate) { _random = new Random(0); var generatedList = new List(); for (var i = 0; i < amountToGenerate; i++) generatedList.Add(Generate()); foreach (var fileMeta in generatedList) { if (_random.Next(100) <= 1) { continue; } fileMeta.ParentId = generatedList[_random.Next(amountToGenerate)].Id; } return generatedList; } } } ================================================ FILE: LiteDB.Benchmarks/Program.cs ================================================ using BenchmarkDotNet.Configs; using BenchmarkDotNet.Diagnosers; using BenchmarkDotNet.Environments; using BenchmarkDotNet.Exporters; using BenchmarkDotNet.Jobs; using BenchmarkDotNet.Running; using BenchmarkDotNet.Toolchains.CsProj; namespace LiteDB.Benchmarks { class Program { static void Main(string[] args) { BenchmarkRunner.Run(typeof(Program).Assembly, DefaultConfig.Instance //.With(new BenchmarkDotNet.Filters.AnyCategoriesFilter(new[] { Benchmarks.Constants.Categories.GENERAL })) //.AddFilter(new BenchmarkDotNet.Filters.AnyCategoriesFilter([Benchmarks.Constants.Categories.GENERAL])) .AddJob(Job.Default.WithRuntime(CoreRuntime.Core80) .WithJit(Jit.RyuJit) .WithToolchain(CsProjCoreToolchain.NetCoreApp80) .WithGcForce(true)) /*.With(Job.Default.With(MonoRuntime.Default) .With(Jit.Llvm) .With(new[] {new MonoArgument("--optimize=inline")}) .WithGcForce(true))*/ .AddDiagnoser(MemoryDiagnoser.Default) .AddExporter(BenchmarkReportExporter.Default, HtmlExporter.Default, MarkdownExporter.GitHub) .KeepBenchmarkFiles()); } } } ================================================ FILE: LiteDB.Shell/Commands/Close.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace LiteDB.Shell.Commands { [Help( Name = "close", Syntax = "close", Description = "Close current datafile" )] internal class Close : IShellCommand { public bool IsCommand(StringScanner s) { return s.Scan(@"close$").Length > 0; } public void Execute(StringScanner s, Env env) { if (env.Database != null) { env.Database.Dispose(); env.Database = null; } } } } ================================================ FILE: LiteDB.Shell/Commands/Ed.cs ================================================ using System; using System.Diagnostics; using System.IO; namespace LiteDB.Shell.Commands { [Help( Name = "ed", Syntax = "ed", Description = "Open your last command in notepad." )] internal class Ed : IShellCommand { public bool IsCommand(StringScanner s) { return s.Match(@"ed$"); } public void Execute(StringScanner s, Env env) { var temp = Path.GetTempPath() + "LiteDB.Shell.txt"; // remove "ed" command from history env.Input.History.RemoveAt(env.Input.History.Count - 1); var last = env.Input.History.Count > 0 ? env.Input.History[env.Input.History.Count - 1] : ""; File.WriteAllText(temp, last.Replace("\n", Environment.NewLine)); Process.Start("notepad.exe", temp).WaitForExit(); var text = File.ReadAllText(temp); if (text == last) return; env.Input.Queue.Enqueue(text); } } } ================================================ FILE: LiteDB.Shell/Commands/Help.cs ================================================ using System; using System.Linq; using System.Reflection; using System.Text; namespace LiteDB.Shell.Commands { internal class HelpAttribute : Attribute { public string Name { get; set; } public string Syntax { get; set; } public string Description { get; set; } public string[] Examples { get; set; } = new string[0]; } internal class Help : IShellCommand { public bool IsCommand(StringScanner s) { return s.Scan(@"help\s*").Length > 0; } public void Execute(StringScanner s, Env env) { var param = s.Scan(".*"); var d = env.Display; // getting all HelpAttributes inside assemblies var helps = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(x => x.GetTypes()) .Select(x => CustomAttributeExtensions.GetCustomAttributes(x, typeof(HelpAttribute), true).FirstOrDefault()) .Where(x => x != null) .Select(x => x as HelpAttribute) .ToArray(); d.WriteLine(ConsoleColor.White, "# LiteDB Shell Command Reference"); foreach (var help in helps) { d.WriteLine(""); d.WriteLine(ConsoleColor.Cyan, "> " + help.Syntax); d.WriteLine(ConsoleColor.DarkCyan, " " + help.Description); // show examples only when named help command foreach (var example in help.Examples) { d.WriteLine(ConsoleColor.Gray, " > " + example); } } } } } ================================================ FILE: LiteDB.Shell/Commands/IShellCommand.cs ================================================ using System; using System.Collections.Generic; using System.Linq; namespace LiteDB.Shell { internal interface IShellCommand { bool IsCommand(StringScanner s); void Execute(StringScanner s, Env env); } } ================================================ FILE: LiteDB.Shell/Commands/Open.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; namespace LiteDB.Shell.Commands { [Help( Name = "open", Syntax = "open ", Description = "Open (or create) a new datafile. Can be used a single filename or a connection string with all supported parameters.", Examples = new string[] { "open mydb.db", "open filename=mydb.db; password=johndoe; initial=100Mb" } )] internal class Open : IShellCommand { public bool IsCommand(StringScanner s) { return s.Scan(@"open\s+").Length > 0; } public void Execute(StringScanner s, Env env) { var connectionString = new ConnectionString(s.Scan(@".+").TrimToNull()); if (env.Database != null) { env.Database.Dispose(); env.Database = null; } env.Database = new LiteDatabase(connectionString); } } } ================================================ FILE: LiteDB.Shell/Commands/Pretty.cs ================================================ using System; namespace LiteDB.Shell.Commands { [Help( Name = "pretty", Syntax = "pretty [on|off]", Description = "Print all json results with identation/break lines", Examples = new string[] { "pretty" } )] internal class Pretty : IShellCommand { public bool IsCommand(StringScanner s) { return s.Scan(@"pretty\s*").Length > 0; } public void Execute(StringScanner s, Env env) { env.Display.Pretty = !(s.Scan(@"off\s*").Length > 0); } } } ================================================ FILE: LiteDB.Shell/Commands/Quit.cs ================================================ using System; namespace LiteDB.Shell.Commands { [Help( Name = "quit", Syntax = "quit|exit", Description = "Close shell application" )] internal class Quit : IShellCommand { public bool IsCommand(StringScanner s) { return s.Match(@"(quit|exit)$"); } public void Execute(StringScanner s, Env env) { env.Database?.Dispose(); env.Input.Running = false; } } } ================================================ FILE: LiteDB.Shell/Commands/Run.cs ================================================ using System; using System.IO; namespace LiteDB.Shell.Commands { [Help( Name = "run", Syntax = "run ", Description = "Queue shell commands inside filename to be run in order.", Examples = new string[] { "run scripts.txt" } )] internal class Run : IShellCommand { public bool IsCommand(StringScanner s) { return s.Scan(@"run\s+").Length > 0; } public void Execute(StringScanner s, Env env) { if (env.Database == null) throw new Exception("Database not connected"); var filename = s.Scan(@".+").Trim(); foreach (var line in File.ReadAllLines(filename)) { env.Input.Queue.Enqueue(line); } } } } ================================================ FILE: LiteDB.Shell/Commands/ShowCollections.cs ================================================ using System; using System.Linq; namespace LiteDB.Shell.Commands { [Help( Name = "show collections", Syntax = "show collections", Description = "List all collections inside datafile." )] internal class ShowCollections : IShellCommand { public bool IsCommand(StringScanner s) { return s.Match(@"show\scollections$"); } public void Execute(StringScanner s, Env env) { if (env.Database == null) throw new Exception("Database not connected"); var cols = env.Database.GetCollectionNames().OrderBy(x => x).ToArray(); if (cols.Length > 0) { env.Display.WriteLine(ConsoleColor.Cyan, string.Join(Environment.NewLine, cols)); } } } } ================================================ FILE: LiteDB.Shell/Commands/Version.cs ================================================ using System; namespace LiteDB.Shell.Commands { [Help( Name = "version", Syntax = "ver", Description = "Show LiteDB version" )] internal class Version : IShellCommand { public bool IsCommand(StringScanner s) { return s.Scan(@"ver(sion)?$").Length > 0; } public void Execute(StringScanner s, Env env) { var assembly = typeof(ILiteDatabase).Assembly.GetName(); env.Display.WriteLine(assembly.FullName); } } } ================================================ FILE: LiteDB.Shell/LiteDB.Shell.csproj ================================================  net6 LiteDB.Shell LiteDB.Shell Exe LiteDB.Shell 5.0.6.0 5.0.6 5.0.6 Maurício David MIT en-US false 1701;1702;1705;1591 ================================================ FILE: LiteDB.Shell/Program.cs ================================================ namespace LiteDB.Shell { internal class Program { /// /// Opens console shell app. Usage: /// LiteDB.Shell [myfile.db] --param1 value1 --params2 "value 2" /// Parameters: /// --exec "command" : Execute an shell command (can be multiples --exec) /// --run script.txt : Run script commands file /// --pretty : Show JSON in multiline + idented /// --exit : Exit after last command /// private static void Main(string[] args) { var input = new InputCommand(); var display = new Display(); var o = new OptionSet(); // default arg o.Register((v) => input.Queue.Enqueue("open " + v)); o.Register("pretty", () => display.Pretty = true); o.Register("exit", () => input.AutoExit = true); o.Register("run", (v) => input.Queue.Enqueue("run " + v)); o.Register("exec", (v) => input.Queue.Enqueue(v)); // parse command line calling register parameters o.Parse(args); ShellProgram.Start(input, display); } } } ================================================ FILE: LiteDB.Shell/Properties/launchSettings.json ================================================ { "profiles": { "LiteDB.Shell": { "commandName": "Project", "commandLineArgs": "app.db" } } } ================================================ FILE: LiteDB.Shell/Shell/Display.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text.RegularExpressions; namespace LiteDB.Shell { internal class Display { public bool Pretty { get; set; } public Display() { this.Pretty = false; } public void WriteWelcome() { this.WriteInfo("Welcome to LiteDB Shell"); this.WriteInfo(""); this.WriteInfo("Getting started with `help`"); this.WriteInfo(""); } public void WritePrompt(string text) { this.Write(ConsoleColor.White, text); } public void WriteInfo(string text) { this.WriteLine(ConsoleColor.Gray, text); } public void WriteError(Exception ex) { this.WriteLine(ConsoleColor.Red, ex.Message); if (ex is LiteException && (ex as LiteException).ErrorCode == LiteException.UNEXPECTED_TOKEN) { var err = ex as LiteException; this.WriteLine(ConsoleColor.DarkYellow, "> " + "^".PadLeft((int)err.Position + 1, ' ')); } } public void WriteResult(IBsonDataReader result, Env env) { var index = 0; var writer = new JsonWriter(Console.Out) { Pretty = this.Pretty, Indent = 2 }; foreach (var item in result.ToEnumerable()) { if (env.Running == false) return; this.Write(ConsoleColor.Cyan, string.Format("[{0}]: ", ++index)); if (this.Pretty) Console.WriteLine(); Console.ForegroundColor = ConsoleColor.DarkCyan; writer.Serialize(item); Console.WriteLine(); } } #region Print public methods public void Write(string text) { this.Write(Console.ForegroundColor, text); } public void WriteLine(string text) { this.WriteLine(Console.ForegroundColor, text); } public void WriteLine(ConsoleColor color, string text) { this.Write(color, text + Environment.NewLine); } public void Write(ConsoleColor color, string text) { Console.ForegroundColor = color; Console.Write(text); } #endregion } } ================================================ FILE: LiteDB.Shell/Shell/Env.cs ================================================ using System; using System.Collections.Generic; using System.IO; using LiteDB; namespace LiteDB.Shell { internal class Env { public Display Display { get; set; } public InputCommand Input { get; set; } public ILiteDatabase Database { get; set; } public bool Running { get; set; } = false; } } ================================================ FILE: LiteDB.Shell/Shell/InputCommand.cs ================================================ using System; using System.Collections.Generic; namespace LiteDB.Shell { public class InputCommand { public Queue Queue { get; set; } public List History { get; set; } public bool Running { get; set; } public bool AutoExit { get; set; } public InputCommand() { this.Queue = new Queue(); this.History = new List(); this.Running = true; this.AutoExit = false; // run "exit" command when there is not more command in queue } public string ReadCommand() { Console.ForegroundColor = ConsoleColor.White; Console.Write("> "); var cmd = this.ReadLine(); if (cmd == null) { this.AutoExit = true; this.Running = false; return ""; } cmd = cmd.Trim(); // single line only for shell commands if (ShellProgram.GetCommand(cmd) == null) { while (!cmd.EndsWith(";")) { Console.ForegroundColor = ConsoleColor.White; Console.Write("| "); var line = this.ReadLine(); cmd += Environment.NewLine + line; } } cmd = cmd.Trim(); this.History.Add(cmd); return cmd.Trim(); } /// /// Read a line from queue or user /// private string ReadLine() { Console.ForegroundColor = ConsoleColor.Gray; if (this.Queue.Count > 0) { var cmd = this.Queue.Dequeue(); Console.Write(cmd + Environment.NewLine); return cmd; } else { if (this.AutoExit) return "exit"; return Console.ReadLine(); } } } } ================================================ FILE: LiteDB.Shell/Shell/ShellProgram.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Threading.Tasks; using LiteDB.Shell.Commands; namespace LiteDB.Shell { internal class ShellProgram { public static void Start(InputCommand input, Display display) { var env = new Env { Input = input, Display = display }; // show welcome message display.WriteWelcome(); Console.CancelKeyPress += (o, e) => { e.Cancel = true; env.Running = false; }; while (input.Running) { // read next command from user or queue var cmd = input.ReadCommand(); if (string.IsNullOrEmpty(cmd)) continue; try { var scmd = GetCommand(cmd); if (scmd != null) { scmd(env); continue; } // if string is not a shell command, try execute as sql command if (env.Database == null) throw new Exception("Database not connected"); env.Running = true; display.WriteResult(env.Database.Execute(cmd), env); } catch (Exception ex) { display.WriteError(ex); } } } #region Shell Commands private static readonly List _commands = new List(); static ShellProgram() { var type = typeof(IShellCommand); var types = typeof(ShellProgram).Assembly .GetTypes() .Where(p => type.IsAssignableFrom(p) && p.IsClass); foreach (var cmd in types) { _commands.Add(Activator.CreateInstance(cmd) as IShellCommand); } } public static Action GetCommand(string cmd) { var s = new StringScanner(cmd); // first test all shell app commands foreach (var command in _commands) { if (!command.IsCommand(s)) continue; return (env) => command.Execute(s, env); } return null; } #endregion } } ================================================ FILE: LiteDB.Shell/Utils/OptionSet.cs ================================================ using System; using System.Collections.Generic; using System.Text.RegularExpressions; namespace LiteDB.Shell { /// /// Very simple class that parse command line arguments /// internal class OptionSet { private readonly Dictionary _options = new Dictionary(StringComparer.OrdinalIgnoreCase); /// /// Register all extra non parameter (without -- or /) /// public void Register(Action action) { _options.Add("_extra_", new OptionsParam { Action = (value) => action((string)value) }); } /// /// Register a parameter with value and data type (like --path "C:\temp\times.txt") /// public void Register(string key, Action action) { _options.Add(key, new OptionsParam { Action = (value) => action((T)value), Type = typeof(T) }); } /// /// Register a parameter without any value (like --help) /// public void Register(string key, Action action) { _options.Add(key, new OptionsParam { Action = (value) => action() }); } /// /// Parse command line args calling register parameters /// public void Parse(string[] args) { var expr = new Regex(@"^(--|-|\/)(\w+)([=:]?)"); for (var i = 0; i < args.Length; i++) { var arg = args[i]; if (arg == ">" || arg == "|") break; var match = expr.Match(arg); OptionsParam param; if (match.Success) { var key = match.Groups[2].Value; var equals = match.Groups[3].Value; // get OptionsItem match key (if not found, ignore param) if (!_options.TryGetValue(key, out param)) continue; // parameterless if (param.Type == null) { param.Action(null); continue; } // when value is on same arg (like --param=value) if (equals.Length > 0) { var value = arg.Substring(match.Value.Length); var val = (object)Convert.ChangeType(value, param.Type); param.Action(val); } else { // when value are on next arg (like --param value) if (i < args.Length - 1) { var value = args[++i]; var val = (object)Convert.ChangeType(value, param.Type); param.Action(val); } else { param.Action(null); } } } else { // call extra if (_options.TryGetValue("_extra_", out param)) { param.Action(arg); } } } } } internal class OptionsParam { public Type Type { get; set; } public Action Action { get; set; } } } ================================================ FILE: LiteDB.Shell/Utils/StringExtensions.cs ================================================ using System; namespace LiteDB.Shell { internal static class StringExtensions { public static string ThrowIfEmpty(this string str, string message) { if (string.IsNullOrEmpty(str) || str.Trim().Length == 0) { throw new ArgumentException(message); } return str; } public static string TrimToNull(this string str) { var v = str.Trim(); return v.Length == 0 ? null : v; } public static string MaxLength(this string str, int len) { return len == 0 || str.Length < len ? str : str.Substring(0, len - 3) + "..."; } } } ================================================ FILE: LiteDB.Shell/Utils/StringScanner.cs ================================================ using System; using System.Text; using System.Text.RegularExpressions; namespace LiteDB.Shell { /// /// A StringScanner is state machine used in text parsers based on regular expressions /// public class StringScanner { public string Source { get; private set; } public int Index { get; set; } /// /// Initialize scanner with a string to be parsed /// public StringScanner(string source) { this.Source = source; this.Index = 0; } public override string ToString() { return this.HasTerminated ? "" : this.Source.Substring(this.Index); } /// /// Reset cursor position /// public void Reset() { this.Index = 0; } /// /// Skip cursor position in string source /// public void Seek(int length) { this.Index += length; } /// /// Indicate that cursor is EOF /// public bool HasTerminated { get { return this.Index >= this.Source.Length; } } /// /// Scan in current cursor position for this patterns. If found, returns string and run with cursor /// public string Scan(string pattern) { return this.Scan(new Regex((pattern.StartsWith("^") ? "" : "^") + pattern, RegexOptions.IgnorePatternWhitespace)); } /// /// Scan in current cursor position for this patterns. If found, returns string and run with cursor /// public string Scan(Regex regex) { var match = regex.Match(this.Source, this.Index, this.Source.Length - this.Index); if (match.Success) { this.Index += match.Length; return match.Value; } else { return string.Empty; } } /// /// Scan pattern and returns group string index 1 based /// public string Scan(string pattern, int group) { return this.Scan(new Regex((pattern.StartsWith("^") ? "" : "^") + pattern, RegexOptions.IgnorePatternWhitespace), group); } public string Scan(Regex regex, int group) { var match = regex.Match(this.Source, this.Index, this.Source.Length - this.Index); if (match.Success) { this.Index += match.Length; return group >= match.Groups.Count ? "" : match.Groups[group].Value; } else { return string.Empty; } } /// /// Match if pattern is true in current cursor position. Do not change cursor position /// public bool Match(string pattern) { return this.Match(new Regex((pattern.StartsWith("^") ? "" : "^") + pattern, RegexOptions.IgnorePatternWhitespace)); } /// /// Match if pattern is true in current cursor position. Do not change cursor position /// public bool Match(Regex regex) { var match = regex.Match(this.Source, this.Index, this.Source.Length - this.Index); return match.Success; } /// /// Throw syntax exception if not terminate string /// public void ThrowIfNotFinish() { this.Scan(@"\s*"); if (!this.HasTerminated) throw new Exception("Unknow token after command"); } } } ================================================ FILE: LiteDB.Stress/Examples/test-01.xml ================================================ { myItem: 'abc', array: [1, 2, 3] } UPDATE col1 SET name = UPPER(name), large=LPAD(name, RANDOM(50, 3000), 'x') DELETE col1 WHERE 1 = 1 CHECKPOINT SELECT COUNT(*) FROM col1 SELECT { data: FORMAT(dataFileSize, 'n0'), log: FORMAT(logFileSize, 'n0') } FROM $database ================================================ FILE: LiteDB.Stress/Examples/test-02.xml ================================================ ================================================ FILE: LiteDB.Stress/LiteDB.Stress.csproj ================================================  Exe net8 ================================================ FILE: LiteDB.Stress/Program.cs ================================================ using LiteDB; using LiteDB.Engine; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Threading; using System.Threading.Tasks; namespace LiteDB.Stress { public class Program { static void Main(string[] args) { var filename = args.Length >= 1 ? args[0] : ""; var duration = TimeSpanEx.Parse(args.Length >= 2 ? args[1] : "60s"); var e = new TestExecution(filename, duration); e.Execute(); Console.ReadKey(); } } } ================================================ FILE: LiteDB.Stress/Properties/launchSettings.json ================================================ { "profiles": { "LiteDB.Stress": { "commandName": "Project", "commandLineArgs": "../../../Examples/test-01.xml" } } } ================================================ FILE: LiteDB.Stress/Test/ITaskItem.cs ================================================ using System; using System.Collections.Generic; using System.Text; using System.Xml; namespace LiteDB.Stress { public interface ITestItem { string Name { get; } int TaskCount { get; } TimeSpan Sleep { get; } BsonValue Execute(LiteDatabase db); } } ================================================ FILE: LiteDB.Stress/Test/InsertField.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace LiteDB.Stress { public enum InsertFieldType { Name, Int, Guid, Bool, Now, Binary, Date, Json } public class InsertField { private readonly Random _rnd = new Random(); #region Names private static readonly string[] _firstNames = new string[] { "Blaze", "Zenia", "Malik", "Palmer", "Valentine", "Quinn", "Preston", "John", "Ferdinand", "Cassidy", "Kai", "Alma", "Cullen", "Colorado", "Sean", "Kadeem", "Faith", "Dexter", "Olympia", "Alden", "Gloria", "Dahlia", "Melissa", "Fiona", "Oliver", "Daryl", "Jillian", "Adrienne", "Hayes", "Aphrodite", "Noel", "Martha", "Dennis", "Grace", "Veronica", "Caesar", "Keane", "Kamal", "Eagan", "Shana", "Knox", "Amaya", "Carson", "Zeph", "Mara", "Tanner", "Echo", "Simon", "Edan", "Ralph", "Heidi", "David", "Leigh", "Adam", "Connor", "Walter", "Caesar", "Leo", "Plato", "Molly", "James", "Bevis", "Aaron", "Igor", "Addison", "Octavius", "Breanna", "Kermit", "Melyssa", "Nathaniel", "Graham", "Benedict", "Kessie", "Alfreda", "Kyla", "Fritz", "Barclay", "Jarrod", "Alexa", "Grady", "Tatiana", "Andrew", "Lesley", "Nero", "Cooper", "Kellie", "Nasim", "Elizabeth", "Colette", "Serina", "Skyler", "Eugenia", "Dacey", "Karyn", "Roth", "Steel", "Gage", "Athena", "Ryan", "Jemima", "Duncan", "Jason", "Shelby", "Mallory", "Isabelle", "Danielle", "Nicole", "Imelda", "Colleen", "Paki", "Lucas", "Micah", "Halee", "Russell", "Lee", "Haley", "Ifeoma", "Imogene", "McKenzie", "Neil", "Alexa", "Oren", "Alea", "Francis", "Victoria", "Veda", "Gregory", "Georgia", "Alfreda", "Xanthus", "Dai", "Harlan", "Wing", "Janna", "Linus", "Ebony", "Angelica", "Emerald", "Vivian", "Kerry", "Oren", "Ashton", "Alana", "Cade", "Louis", "Melinda", "Angelica", "Jesse", "Anastasia", "Carson", "Pascale", "Price", "Mannix", "Maisie", "Ian", "Rae", "Graham", "Yasir", "Baxter", "Callie", "David", "Kirk", "Gabriel", "Micah", "Penelope", "Amal", "Yvonne", "Aaron", "Laith", "Cathleen", "Sebastian", "Madonna", "Orlando", "Carla", "Jacob", "Medge", "Jin", "Patrick", "Vielka", "Tanya", "Kiayada", "Nyssa", "Devin", "Aline", "Hayden", "Ariana", "Lucius", "Aiko", "Dieter", "Amity", "Rhiannon", "Samantha", "Patience", "Mechelle", "Christopher", "Grady", "Gillian", "Galvin", "Simon", "Nina", "Kalia", "Jane", "Kay", "Ishmael", "Garrison", "Chloe", "Sasha", "Cade", "Glenna", "Chava", "Jackson", "Althea", "Gary", "Galvin", "Martena", "Candice", "Quinn", "Norman", "Howard", "Alden", "Cain", "Whitney", "Judah", "Hammett", "Mallory", "Len", "Cally", "Zorita", "Rahim", "Carter", "Dean", "Amal", "Abbot", "Slade", "Cara", "Ignacia", "Zenaida", "Holly", "Nell", "Amethyst", "Hiroko", "Kibo", "Kasimir", "Grace", "Graiden", "Lana", "Bert", "Vincent", "Ashton", "Upton", "Tate", "Rajah", "Tyler", "Tarik", "Zachery", "Petra", "Callum", "Kaseem", "Kelly", "Hayley", "Wynne", "Belle", "Stewart", "Oprah", "Tyler", "Coby", "Ingrid", "Hiram", "Brennan", "Velma", "Emery", "Dorian", "Elmo", "Conan", "Caldwell", "Margaret", "Alan", "Chava", "Oprah", "Curran", "Jordan", "Jescie", "Vanna", "Leila", "Drew", "Acton", "Hannah", "Patrick", "Sierra", "Vaughan", "Maxwell", "Maxine", "Colleen", "Aphrodite", "Brady", "Caleb", "Price", "Brody", "Donovan", "Daphne", "Quinn", "Stone", "Wang", "Orlando", "Emery", "Uta", "Todd", "Kelsie", "Gary", "Dane", "Hayfa", "Madison", "Daquan", "Orson", "Alisa", "Unity", "Amaya", "Serina", "Montana", "Vielka", "Vincent", "Kaseem", "Janna", "Dillon", "Evelyn", "Sharon", "Zena", "Logan", "Venus", "Ariana", "Shafira", "Alika", "Delilah", "Harding", "Dieter", "Barclay", "Jasper", "Lara", "Genevieve", "Germaine", "August", "Joel", "Tatum", "Olympia", "Rebekah", "Cally", "Cullen", "Janna", "Ruth", "Quyn", "Kelsie", "Brett", "Aphrodite", "Rigel", "Lani", "Clare", "Timothy", "Angela", "Victor", "Emi", "Eric", "Lillian", "Wade", "Marah", "Rebekah", "Dustin", "Amal", "Acton", "Leilani", "Daniel", "Jermaine", "Reece", "Ishmael", "Bernard", "Ina", "Mariko", "Zachary", "Deanna", "Natalie", "Dorian", "Tyrone", "Jorden", "Galvin", "Wyatt", "Caleb", "Mercedes", "Lev", "Honorato", "Dane", "Kane", "Nasim", "Tarik", "Lev", "Jane", "Adrian", "Karina", "Garrison", "Brittany", "Sophia", "Walker", "Anne", "Brent", "Rebekah", "Hedwig", "Brittany", "Rebecca", "Baker", "Rhea", "Brock", "Unity", "Christine", "Rose", "Heather", "Quail", "Ezekiel", "Cairo", "Haviva", "Bernard", "Nolan", "Jordan", "Prescott", "Zahir", "Aphrodite", "Hiram", "Marvin", "Roanna", "Ann", "Nehru", "Winter", "Beau", "Zane", "Vera", "Reuben", "Josiah", "Ira", "Ann", "Stone", "Mannix", "Deanna", "Cruz", "Reece", "Gray", "Chancellor", "Oren", "Hakeem", "Echo", "Ivor", "Joseph", "Karleigh", "Rooney", "Aileen", "Ezra", "Eleanor", "Walker", "Kirestin", "Rafael", "Keefe", "Clinton", "Avye", "Josephine", "Kristen", "Nash", "Carly", "Ezekiel", "Abbot", "Keiko", "Jasper", "Flynn", "Gray", "Urielle", "Eleanor", "Joshua", "Neville", "Cleo", "Ava", "Joshua", "Elizabeth", "Noel", "Ezekiel", "Melvin", "Steel", "Helen", "Genevieve", "Valentine", "Graham", "Grady", "Brielle", "Amos", "Brian", "Amos", "Ramona", "Leonard", "Imogene", "Hyatt", "Gay", "Hermione", "Raymond", "Meghan", "Francesca", "Brent", "Zachery", "Marvin", "Devin", "Aristotle", "Ian", "Herrod", "Angela", "Cally", "Kirby", "Faith", "Brynn", "Honorato", "Octavius", "Latifah", "Camden", "Zeus", "Buffy", "Teegan", "Victor", "Basia", "Amelia", "Robin", "Vincent", "Xander", "Hamish", "Fallon", "Jenna", "Aphrodite", "Genevieve", "Thor", "Rhonda", "Jonah", "Shoshana", "Bianca", "John", "Nolan", "Anika", "Kai", "Claudia", "Ira", "Yoshi", "Rashad", "Gay", "Josiah", "Yoshio", "Yuri", "Russell", "Amir", "Mariko", "Mallory", "Risa", "Kai", "Merritt", "Leo", "Phelan", "Guy", "Cheryl", "Jolene", "Jerry", "Florence", "Kelly", "Deborah", "Pascale", "Lilah", "Fiona", "Forrest", "Blake", "Deborah", "Hu", "Kerry", "Hilel", "Kane", "Michelle", "Adria", "Fitzgerald", "Winter", "Ella", "Kirk", "Olga", "Tallulah", "Odette", "Ali", "Deacon", "Jarrod", "Mariko", "Hasad", "Abdul", "Stella", "Lilah", "Burke", "Bert", "Mona", "Lewis", "Cameron", "Ezra", "Sacha", "Fitzgerald", "Cedric", "Martin", "Deborah", "Shana", "Shafira", "Nissim", "Athena", "Leandra", "Stewart", "Todd", "Leandra", "Josephine", "Ariel", "Mannix", "Gregory", "Montana", "Steven", "Allegra", "Bree", "Bevis", "Barbara", "Cole", "Katelyn", "Rinah", "Carolyn", "Perry", "Brooke", "Addison", "Rigel", "Erica", "Regina", "Amy", "Cassady", "Alyssa", "Fritz", "Emi", "Kiona", "Cailin", "Adele", "Matthew", "Samson", "Nicole", "Thane", "Hasad", "Jeanette", "Michelle", "Trevor", "Shaeleigh", "Doris", "Galvin", "Uma", "Linda", "Noble", "Howard", "Alexandra", "Raymond", "Jessamine", "Cassandra", "Cheryl", "Norman", "McKenzie", "Daquan", "MacKenzie", "Isaiah", "Dante", "Keaton", "Lucian", "Ann", "Latifah", "Ryder", "Ferris", "Catherine", "Illana", "Ashely", "Iola", "Charlotte", "Orson", "Jeremy", "Theodore", "Maisie", "Ashely", "Upton", "Ashton", "Victor", "Riley", "Ray", "Odette", "Mariko", "Celeste", "Ali", "Patrick", "Nell", "Dahlia", "Martha", "Piper", "Rooney", "Colin", "Elliott", "Winifred", "Todd", "Charissa", "Deirdre", "Gage", "Amery", "Oscar", "Joan", "Maris", "Francis", "Madaline", "Susan", "Jamalia", "Ralph", "Lacota", "Alika", "Lucian", "Evangeline", "Alea", "Wyatt", "Vera", "Cameran", "Chandler", "Fiona", "Bethany", "Samuel", "Herman", "Mia", "Hiroko", "Bevis", "Karina", "Xander", "Alec", "Philip", "Nomlanga", "Owen", "Gail", "Basil", "Isaiah", "Tanisha", "Robin", "Reuben", "Brett", "Stacey", "Stephen", "Jaime", "Winifred", "Unity", "Marah", "Ethan", "Emery", "Harper", "Ursa", "Zia", "Avye", "Keely", "Athena", "Herman", "Conan", "Ivy", "Karly", "Pascale", "Echo", "Zoe", "Ray", "Tyler", "Lamar", "Scott", "Sade", "Fletcher", "Blaze", "Jescie", "Judah", "Yvonne", "Mason", "Garrison", "Melodie", "Solomon", "Tashya", "Thaddeus", "Axel", "Raymond", "Maya", "Iola", "Jordan", "Sage", "Lev", "Jamalia", "Darius", "Justin", "Kamal", "Shelby", "Demetrius", "Jackson", "Nadine", "Porter", "Herrod", "Quynn", "Burton", "Ella", "Channing", "Serina", "Lucian", "Nadine", "Desirae", "Moses", "Vance", "Zachary", "Gavin", "Phyllis", "Malcolm", "Joshua", "Mia", "Kirby", "Christopher", "Walker", "Prescott", "Barbara", "Katelyn", "Byron", "Jarrod", "Dalton", "Damon", "Ella", "Erich", "Yen", "Octavia", "Hamilton", "Adele", "Gail", "Slade", "Piper", "Summer", "Cain", "Fiona", "Gabriel", "Stuart", "Dane", "Tatyana", "Stone", "Astra", "Byron", "Damian", "Aaron", "Kennan", "Brendan", "Germaine", "Kane", "Adam", "Elliott", "Clark", "Simon", "Lamar", "Oprah", "Randall", "Leandra", "Hayden", "Haley", "Cameran", "Christian", "Diana", "Fritz", "Signe", "Camilla", "Jena", "Grace", "Garrett", "Jescie", "Camilla", "David", "Orlando", "Veda", "MacKensie", "Darius", "Quamar", "Arthur", "Leandra", "Ryder", "Rebekah", "Malcolm", "Hedy", "Aphrodite", "Palmer", "Knox", "Byron", "Armand", "Brooke", "Carlos", "Tara", "Bell", "Karina", "Vera", "Irene", "Calista", "Liberty", "Imelda", "Plato", "Fleur", "Ifeoma", "Olga", "Rogan", "Jescie", "Amaya", "Cheryl", "Stewart", "Hedwig", "Ignacia", "Solomon", "Abel", "Vivian", "Constance", "Renee", "Judah", "Leandra", "Donna", "Chadwick", "Fatima", "Travis", "Malik", "Edan", "Devin", "Tasha", "Walter", "Kitra", "Mona", "Maya", "Haley", "Talon", "Hollee", "Cedric", "Ann", "Raymond", "Rachel", "Celeste", "Raja", "Teegan", "Sylvia", "Scott", "Gloria", "Tiger", "Nigel", "Denise", "Velma", "Akeem", "Neville", "Aristotle", "Darius", "Hamilton", "Armand", "Nathaniel", "Asher", "Shelly", "Bianca", "Gary", "Elijah", "Mia", "Quinn", "Quentin", "Dane", "Shoshana", "Lenore", "Gwendolyn", "Brenden", "Deacon", "Davis", "Ulric", "Bruno", "Hanna", "Tashya", "Kennan", "Nomlanga", "Quyn", "Uriel", "Donna", "Ariel", "Carl", "Gray", "Louis", "Daphne", "Amir", "Illiana", "Ryan", "Brenden", "Cathleen", "Arden", "Olga", "Axel", "Tanek", "Bell", "Beau", "Mira", "Audra", "Hall", "Perry", "Jason", "Levi", "Deacon", "Reese", "Arsenio", "Molly", "Cade", "Mufutau", "Cole", "Tamara", "Ann" }; private static readonly string[] _lastNames = new string[] { "Hakeem", "Jena", "Donna", "Cameron", "Ramona", "Guy", "Frances", "Price", "Sydnee", "Miriam", "Quinlan", "Margaret", "Mikayla", "Chester", "Dean", "Priscilla", "Astra", "Debra", "Kasimir", "Kane", "Amelia", "Phoebe", "Justina", "Brady", "Sybil", "Zeus", "Amethyst", "Dante", "Katell", "Keegan", "Olympia", "Rhona", "Quinn", "Lamar", "Aidan", "Alea", "John", "Nathan", "Kirk", "Brenden", "Kato", "Olympia", "Zeus", "Cadman", "Dalton", "Maisie", "Curran", "Jelani", "Xyla", "Andrew", "Nissim", "Florence", "Kasimir", "Daphne", "Joseph", "Seth", "Nerea", "Peter", "Emi", "Beau", "Ima", "Victoria", "Adena", "Vernon", "Yasir", "Piper", "Sylvia", "Hedy", "Aidan", "Bruce", "May", "Zelenia", "Logan", "Hillary", "Pamela", "Christine", "Ira", "Cain", "Lucius", "Troy", "Ori", "Simon", "Tatum", "Orson", "Seth", "Perry", "Eagan", "Mollie", "Olympia", "Rhiannon", "Imelda", "Shaeleigh", "Octavius", "Ulysses", "Sade", "Maia", "Lacy", "Anthony", "Beatrice", "Igor", "Rhiannon", "Kirby", "Walker", "Dominic", "Hamish", "Georgia", "Rose", "Emma", "Francis", "Kerry", "Marsden", "Haviva", "Palmer", "Hermione", "Omar", "Lana", "Susan", "Yuli", "Ray", "Basia", "Blake", "Keefe", "Dennis", "Sasha", "Sara", "Dylan", "Elliott", "Alden", "Daryl", "Samson", "Emily", "Gage", "Pandora", "Fallon", "Yolanda", "Courtney", "Ori", "Eve", "Patience", "Jameson", "Lionel", "Zephr", "Zahir", "Ray", "Kennedy", "Stacey", "Zephania", "Yuri", "Cassady", "Ingrid", "Colt", "Cain", "Frances", "Sean", "Travis", "Stuart", "Kimberly", "Risa", "Guy", "Fleur", "Hedda", "Duncan", "Skyler", "Leah", "Rhiannon", "Jack", "Dale", "Wesley", "Halee", "Lance", "Lionel", "Gwendolyn", "Marshall", "Elizabeth", "Kessie", "Marsden", "McKenzie", "Cheyenne", "Shafira", "Bernard", "Lana", "Sydnee", "MacKenzie", "Cade", "Georgia", "Emma", "Hiram", "Mara", "Indira", "Len", "Desiree", "Glenna", "Hadley", "Caldwell", "Emerson", "Teegan", "Jack", "Kane", "Demetrius", "Hilel", "Hilel", "Joan", "Malik", "Derek", "Flynn", "Berk", "Ishmael", "Stuart", "Brett", "Lani", "Uriah", "Samantha", "Yeo", "Chava", "Joel", "Candace", "Jasmine", "Stuart", "Reuben", "Asher", "Thomas", "Mufutau", "Xavier", "Sybill", "Heather", "Jameson", "Slade", "Xenos", "Aurelia", "Darius", "Oscar", "Cullen", "Fay", "Violet", "Lenore", "Alfreda", "Sara", "TaShya", "Forrest", "Kellie", "Hu", "Robin", "Lawrence", "Isadora", "Kimberly", "Marcia", "Sandra", "Fuller", "Rana", "Reuben", "Louis", "Hector", "Davis", "Germane", "Arthur", "Erica", "Marah", "Maite", "Keiko", "Jade", "Zelda", "Xyla", "Cheryl", "Price", "Yardley", "Alexis", "Portia", "MacKensie", "Rae", "Beverly", "Sopoline", "Kiayada", "Shea", "Rafael", "Nissim", "Geoffrey", "Nash", "Germane", "Walter", "Uta", "Fiona", "Illana", "Timothy", "Lacy", "Rajah", "Lance", "Yvonne", "Holmes", "Connor", "Nathaniel", "Inez", "Prescott", "Avye", "Igor", "Yvonne", "Ishmael", "Urielle", "Sigourney", "Gisela", "Idona", "John", "Channing", "Quyn", "Sylvester", "Shana", "Damian", "Darius", "Libby", "Sybill", "Cameron", "Jermaine", "Alan", "Aileen", "Stella", "Griffin", "Indigo", "Stephen", "Drake", "Ariana", "Berk", "Jelani", "Lucius", "Erich", "Mona", "Howard", "Abbot", "Uma", "Wade", "Rashad", "Ginger", "Victoria", "John", "Leigh", "Hilel", "Kimberly", "Porter", "Ann", "Zelenia", "Ruby", "Allistair", "Octavia", "Nissim", "Dacey", "Sylvia", "Judah", "Matthew", "Gregory", "Elton", "Xena", "MacKensie", "Aaron", "Farrah", "Kiara", "Dexter", "Ulla", "Zia", "Jenette", "Inez", "Finn", "Neil", "Iola", "Courtney", "Preston", "Mechelle", "August", "Wilma", "Chaim", "Willow", "Allen", "Kibo", "Jena", "Ayanna", "Hayden", "Jerome", "Colorado", "Shana", "Kato", "Thomas", "Christopher", "Lucas", "Moana", "Dane", "Justina", "Nell", "Signe", "Maryam", "Halla", "Mohammad", "Louis", "Amethyst", "Berk", "Julie", "Pascale", "Ezekiel", "Lana", "Fleur", "Elaine", "Tanek", "Ashton", "Ryan", "Leigh", "Blythe", "Mannix", "Quinn", "Hector", "Lael", "Ignatius", "Julie", "Wade", "Bruno", "Declan", "Jana", "Clementine", "Lara", "Heather", "Jerome", "Graham", "Kamal", "Rhoda", "Kelly", "Oprah", "Odysseus", "Montana", "Petra", "Nehru", "Amelia", "Louis", "Finn", "Erich", "Irma", "Hadley", "Keelie", "Melissa", "Neve", "Dexter", "Erasmus", "Theodore", "Camden", "Wesley", "Kiara", "Patience", "Ocean", "Petra", "Brody", "Caleb", "Emerald", "Hedwig", "Amy", "Hop", "Nigel", "Indigo", "Hashim", "Hedda", "Andrew", "Devin", "Rashad", "Demetria", "Fritz", "Katell", "Jelani", "Ingrid", "Claire", "Cailin", "Priscilla", "Flynn", "Rhonda", "Yolanda", "Belle", "Harlan", "Neville", "Yael", "Jocelyn", "Fritz", "Yuri", "Caldwell", "Nissim", "Timothy", "Darius", "Michael", "Patrick", "Claire", "Hadassah", "Eugenia", "Jeanette", "Hoyt", "Aretha", "Reed", "Constance", "Wyatt", "Zia", "Sigourney", "Jenna", "Daniel", "Yolanda", "Edan", "Winifred", "Sebastian", "Peter", "Kiona", "Stuart", "Ivor", "Zelda", "Whoopi", "Rae", "Naida", "Adele", "Kaseem", "Jesse", "Chiquita", "Mufutau", "Randall", "Beau", "Devin", "Laith", "Tashya", "Althea", "Kevyn", "Dominique", "Erasmus", "Nayda", "Medge", "Driscoll", "Kennan", "Raya", "Cooper", "Kadeem", "Dominic", "Ebony", "Octavius", "Eric", "Ruby", "Allen", "Unity", "Clark", "Kaseem", "Brooke", "Preston", "Vivian", "Lila", "Ila", "Blaze", "Miranda", "Hall", "Wyoming", "Eagan", "Caesar", "Ruby", "Price", "Jasmine", "Mannix", "Stone", "Yoshio", "Hayfa", "Dieter", "Karen", "Melanie", "Rhona", "Jin", "Graiden", "Logan", "Sophia", "Zahir", "Kaitlin", "Cullen", "Ivory", "Cooper", "Addison", "Dustin", "Ann", "Grant", "Samuel", "Ezra", "Shaine", "Lois", "Ciaran", "Myra", "Signe", "Aquila", "Nell", "Tanisha", "Reese", "Sylvester", "Delilah", "Guy", "Cyrus", "Ebony", "Norman", "Cain", "Silas", "Urielle", "Neve", "Dillon", "Francesca", "Brynn", "Laura", "Montana", "Ila", "Jessamine", "Nell", "April", "Ulysses", "Zoe", "Nathaniel", "Caryn", "Jada", "Blaze", "Maya", "Thomas", "Chaim", "Carl", "Doris", "Orson", "Joan", "Kuame", "Noelani", "Dana", "Aileen", "Aurelia", "Brynne", "Oleg", "Chancellor", "Genevieve", "Sonya", "Jakeem", "Velma", "Ariel", "Seth", "Althea", "Hollee", "Addison", "Lael", "Gary", "Gavin", "Halee", "Cruz", "Laurel", "Talon", "Avye", "David", "Nevada", "Driscoll", "Martin", "Gloria", "Amos", "Minerva", "Sawyer", "George", "Linus", "Quemby", "Doris", "Vance", "Ariana", "Derek", "Keane", "Lavinia", "Henry", "Rigel", "Sade", "Elaine", "Gloria", "Brady", "Mark", "Timothy", "Sylvia", "Leroy", "Shellie", "Lucian", "Stewart", "Barbara", "Jared", "Zeph", "Kaitlin", "Andrew", "Dara", "Carol", "Cynthia", "Roth", "Tanner", "Edward", "Anjolie", "Iola", "Castor", "Hamish", "Heather", "Beau", "Hyatt", "Lavinia", "Oren", "Charde", "Jack", "Jaquelyn", "Audrey", "Lev", "Ella", "Tanner", "Paki", "Melodie", "Marshall", "Tanek", "Chandler", "Malcolm", "Kessie", "Eleanor", "India", "Cade", "Nehru", "Ryan", "Lana", "Ella", "Jada", "Florence", "Brent", "Nolan", "Lacy", "Merritt", "Hall", "Dana", "Bruce", "Upton", "Jakeem", "Cameron", "Ginger", "Iola", "Christian", "Oscar", "Troy", "Delilah", "Katell", "Maxwell", "Rhiannon", "Adrienne", "Angelica", "Uriel", "Kiayada", "Neil", "Remedios", "Jordan", "Tyrone", "Caesar", "Craig", "Dante", "Hector", "Sylvia", "Samuel", "Aurora", "Wade", "Julian", "Steven", "Bruce", "Barry", "Carly", "Hiram", "Desirae", "Tyrone", "Lionel", "Hammett", "Driscoll", "Jenna", "Hayden", "Althea", "Raymond", "Genevieve", "Tanya", "Quentin", "Blossom", "Joshua", "Justin", "Adrian", "Ronan", "Nevada", "Dylan", "Ursa", "Beck", "Barry", "Reese", "Xaviera", "Brittany", "Daniel", "Rajah", "Jada", "Stacy", "Indigo", "Colt", "Daryl", "Cadman", "Wynter", "Lee", "Wang", "Elizabeth", "Hall", "Jonah", "Armando", "Wilma", "Caleb", "Coby", "Gage", "Mary", "Grady", "Travis", "Daquan", "Cain", "Cara", "Hammett", "Zenia", "Claire", "Graiden", "Nolan", "Price", "Sacha", "Quinlan", "Doris", "Doris", "Ocean", "Alexis", "Valentine", "Chloe", "Omar", "Raja", "Porter", "Allistair", "Madeline", "Ruth", "Amy", "MacKensie", "Rhonda", "Nomlanga", "Zachery", "Stuart", "Evangeline", "Brianna", "Kyla", "Odessa", "Joel", "Fatima", "Jasmine", "Keane", "Lewis", "Cora", "Amos", "Kyra", "Kasimir", "Zachery", "Bethany", "Macey", "Gregory", "Cedric", "Christopher", "Branden", "Elijah", "Suki", "Nelle", "Alice", "Cathleen", "Darrel", "Eugenia", "Hayfa", "Benedict", "Cally", "TaShya", "Chadwick", "Walker", "Tucker", "Cruz", "Abbot", "Harriet", "Ivan", "Tanek", "Quinn", "Denise", "Sybill", "Rae", "Logan", "Lane", "Kaseem", "Hammett", "Jena", "Althea", "Jayme", "Andrew", "Aspen", "Noelle", "Audrey", "Yael", "Nathaniel", "Inez", "Carl", "Sacha", "Ayanna", "Mona", "Britanney", "Amery", "Ashton", "Suki", "Kyle", "Zachary", "Ursa", "Katell", "Cathleen", "Zeus", "Aileen", "Carol", "Martina", "Blythe", "Yardley", "Ira", "Virginia", "Gisela", "Erich", "MacKensie", "Ira", "Amy", "Damian", "Ian", "Herrod", "Wendy", "Michael", "Basil", "Sandra", "Hanae", "Laura", "Raya", "Katelyn", "Yoko", "Hayley", "Lester", "Damon", "Brian", "Kennan", "Zenia", "Karleigh", "Zorita", "Tamekah", "Christian", "Halla", "Dante", "Bernard", "Colin", "Aphrodite", "Cheyenne", "Stone", "Jada", "Beck", "Adrian", "Sylvester", "Ila", "Rhiannon", "Ryan", "Sierra", "Kelly", "Gavin", "Jesse", "Vincent", "Paula", "Velma", "Illiana", "Emmanuel", "Fletcher", "Kyla", "Lawrence", "Gage", "Micah", "Jordan", "Clayton", "Aphrodite", "Gil", "Amir", "Levi", "Chadwick", "Porter", "Ivor", "Rhonda", "Kay", "Chandler", "Diana", "Ainsley", "Jolie", "Indira", "Victor", "Cassady", "Wynter", "Sean", "Candice", "Zelenia", "Demetrius", "Nissim", "Martha", "Christian", "Dahlia", "Tyler", "Barry", "Griffith", "Quyn", "Cairo", "Xaviera", "Joseph", "Desirae", "Kasimir", "Rylee", "Larissa", "Sandra" }; #endregion public string Name { get; } public InsertFieldType Type { get; } public int StartIntRange { get; } public int EndIntRange { get; } public DateTime StartDateRange { get; } public int DaysDateRange { get; } public BsonValue Value { get; } public InsertField(XmlElement el) { this.Name = el.Name; this.Type = el.GetAttribute("type").ToLower() switch { "name" => InsertFieldType.Name, "int" => InsertFieldType.Int, "guid" => InsertFieldType.Guid, "bool" => InsertFieldType.Bool, "now" => InsertFieldType.Now, "binary" => InsertFieldType.Binary, "date" => InsertFieldType.Date, _ => InsertFieldType.Json }; var range = el.GetAttribute("range"); if (this.Type == InsertFieldType.Int || this.Type == InsertFieldType.Binary) { this.StartIntRange = int.Parse(range.Split('~').First()); this.EndIntRange = int.Parse(range.Split('~').Last()); } else if (this.Type == InsertFieldType.Date) { this.StartDateRange = DateTime.Parse(range.Split('~').First()); var endDateRange = DateTime.Parse(range.Split('~').Last()); this.DaysDateRange = (int)endDateRange.Subtract(this.StartDateRange).TotalDays; } this.Value = this.Type == InsertFieldType.Json ? JsonSerializer.Deserialize(el.InnerText) : null; } public BsonValue GetValue() { switch(this.Type) { case InsertFieldType.Name: return _firstNames[_rnd.Next(0, _firstNames.Length - 1)] + " " + _lastNames[_rnd.Next(0, _lastNames.Length - 1)]; case InsertFieldType.Int: return _rnd.Next(this.StartIntRange, this.EndIntRange); case InsertFieldType.Guid: return Guid.NewGuid(); case InsertFieldType.Bool: return _rnd.NextDouble() > .5; case InsertFieldType.Now: return DateTime.Now; case InsertFieldType.Binary: return new byte[_rnd.Next(this.StartIntRange, this.EndIntRange)]; case InsertFieldType.Date: return this.StartDateRange.AddDays(_rnd.Next(this.DaysDateRange)); default: return this.Value; } } } } ================================================ FILE: LiteDB.Stress/Test/InsertTaskItem.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace LiteDB.Stress { public class InsertTaskItem : ITestItem { private readonly Random _rnd = new Random(); private ILiteCollection _collection; public string Name { get; } public int TaskCount { get; } public TimeSpan Sleep { get; } public string Collection { get; } public BsonAutoId AutoId { get; } public int MinRange { get; } public int MaxRange { get; } public List Fields { get; } public InsertTaskItem(XmlElement el) { this.Name = string.IsNullOrEmpty(el.GetAttribute("name")) ? "INSERT_" + el.GetAttribute("collection").ToUpper() : el.GetAttribute("name"); this.Sleep = string.IsNullOrEmpty(el.GetAttribute("sleep")) ? TimeSpan.FromSeconds(1) : TimeSpanEx.Parse(el.GetAttribute("sleep")); this.AutoId = string.IsNullOrEmpty(el.GetAttribute("autoId")) ? BsonAutoId.ObjectId : (BsonAutoId)Enum.Parse(typeof(BsonAutoId), el.GetAttribute("autoId"), true); this.Collection = el.GetAttribute("collection"); this.TaskCount = string.IsNullOrEmpty(el.GetAttribute("tasks")) ? 1 : int.Parse(el.GetAttribute("tasks")); this.MinRange = string.IsNullOrEmpty(el.GetAttribute("docs")) ? 1 : int.Parse(el.GetAttribute("docs").Split('~').First()); this.MaxRange = string.IsNullOrEmpty(el.GetAttribute("docs")) ? 1 : int.Parse(el.GetAttribute("docs").Split('~').Last()); this.Fields = new List(); foreach (XmlElement child in el.SelectNodes("*")) { this.Fields.Add(new InsertField(child)); } } public BsonValue Execute(LiteDatabase db) { _collection ??= db.GetCollection(this.Collection, this.AutoId); var count = _rnd.Next(this.MinRange, this.MaxRange); for(var i = 0; i < count; i++) { var doc = new BsonDocument(); foreach(var field in this.Fields) { doc[field.Name] = field.GetValue(); } _collection.Insert(doc); } return count; } } } ================================================ FILE: LiteDB.Stress/Test/SqlTaskItem.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; namespace LiteDB.Stress { public class SqlTaskItem : ITestItem { public string Name { get; } public int TaskCount { get; } public TimeSpan Sleep { get; } public string Sql { get; } public SqlTaskItem(XmlElement el) { this.Name = string.IsNullOrEmpty(el.GetAttribute("name")) ? el.InnerText.Split(' ').First() : el.GetAttribute("name"); this.TaskCount = string.IsNullOrEmpty(el.GetAttribute("tasks")) ? 1 : int.Parse(el.GetAttribute("tasks")); this.Sleep = TimeSpanEx.Parse(el.GetAttribute("sleep")); this.Sql = el.InnerText; } public BsonValue Execute(LiteDatabase db) { using (var reader = db.Execute(this.Sql)) { return reader.FirstOrDefault(); } } } } ================================================ FILE: LiteDB.Stress/Test/TestExecution.cs ================================================ using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Xml; namespace LiteDB.Stress { public class TestExecution { public TimeSpan Duration { get; } public Stopwatch Timer { get; } = new Stopwatch(); private readonly TestFile _file; private LiteDatabase _db; private bool _running = true; private long _maxRam = 0; private readonly ConcurrentDictionary _threads = new ConcurrentDictionary(); public TestExecution(string filename, TimeSpan duration) { this.Duration = duration; _file = new TestFile(filename); } public void Execute() { if (_file.Delete) { this.DeleteFiles(); } _db = new LiteDatabase(_file.Filename); _db.Pragma("TIMEOUT", (int)_file.Timeout.TotalSeconds); foreach(var setup in _file.Setup) { _db.Execute(setup); } // create all threads this.CreateThreads(); // start report thread var t = new Thread(() => this.ReportThread()); t.Name = "REPORT"; t.Start(); } private void DeleteFiles() { var searchPattern = Path.GetFileNameWithoutExtension(_file.Filename); var filesToDelete = Directory.GetFiles(".", $"{searchPattern}*" + Path.GetExtension(_file.Filename)); foreach (var deleteFile in filesToDelete) { File.Delete(deleteFile); } File.Delete(_file.Output); } private void CreateThreads() { foreach (var task in _file.Tasks) { for (var i = 0; i < task.TaskCount; i++) { var thread = new Thread(() => { while (true) { var info = _threads[Thread.CurrentThread.ManagedThreadId]; info.CancellationTokenSource.Token.WaitHandle.WaitOne(task.Sleep); if (info.CancellationTokenSource.Token.IsCancellationRequested) break; info.Elapsed.Restart(); info.Running = true; try { info.Result = task.Execute(_db); } catch (Exception ex) { info.Exception = ex; _running = false; break; } info.Running = false; info.Elapsed.Stop(); info.TotalRun += info.Elapsed.Elapsed; if (info.Result.IsInt32) info.ResultSum += (long)info.Result.AsInt32; info.Counter++; info.LastRun = DateTime.Now; } }); _threads[thread.ManagedThreadId] = new ThreadInfo { Task = task, Thread = thread }; thread.Name = task.Name; thread.Start(); } } } private void ReportThread() { this.Timer.Start(); var output = new StringBuilder(); while(this.Timer.Elapsed < this.Duration && _running) { Thread.Sleep(Math.Min(1000, (int)this.Duration.Subtract(this.Timer.Elapsed).TotalMilliseconds)); this.ReportPrint(output); Console.Clear(); Console.WriteLine(output.ToString()); } this.StopRunning(); this.Timer.Stop(); _db.Dispose(); this.ReportPrint(output); this.ReportSummary(output); Console.Clear(); Console.WriteLine(output.ToString()); File.AppendAllText(_file.Output, output.ToString()); } private void ReportPrint(StringBuilder output) { output.Clear(); var process = Process.GetCurrentProcess(); var ram = process.WorkingSet64 / 1024 / 1024; _maxRam = Math.Max(_maxRam, ram); output.AppendLine($"LiteDB Multithreaded: {_threads.Count}, running for {this.Timer.Elapsed}"); output.AppendLine($"Garbage Collector: gen0: {GC.CollectionCount(0)}, gen1: {GC.CollectionCount(1)}, gen2: {GC.CollectionCount(2)}"); output.AppendLine($"Memory usage: {ram.ToString("n0")} Mb (max: {_maxRam.ToString("n0")} Mb)"); output.AppendLine(); foreach (var thread in _threads) { var howLong = DateTime.Now - thread.Value.LastRun; var id = thread.Key.ToString("00"); var name = (thread.Value.Task.Name + (thread.Value.Running ? "*" : "")).PadRight(15, ' '); var counter = thread.Value.Counter.ToString().PadRight(5, ' '); var timer = howLong.TotalSeconds > 60 ? ((int)howLong.TotalMinutes).ToString().PadLeft(2, ' ') + " minutes" : ((int)howLong.TotalSeconds).ToString().PadLeft(2, ' ') + " seconds"; var result = thread.Value.Result != null ? $"[{thread.Value.Result.ToString()}]" : ""; var running = thread.Value.Elapsed.Elapsed.TotalSeconds > 1 ? $" " : ""; var ex = thread.Value.Exception != null ? " ERROR: " + thread.Value.Exception.Message : ""; output.AppendLine($"{id}. {name} :: {counter} >> {timer} {running}{result}{ex}"); } } private void ReportSummary(StringBuilder output) { output.AppendLine("\n=====\n"); output.AppendLine("Summary Report"); output.AppendLine(); foreach(var task in _file.Tasks) { var name = task.Name.PadRight(15, ' '); var count = _threads.Values.Where(x => x.Task == task).Sum(x => (long)x.Counter).ToString().PadLeft(5, ' '); var sum = _threads.Values.Where(x => x.Task == task).Sum(x => x.ResultSum); var ssum = sum == 0 ? "" : $"[{sum.ToString("n0")}] - "; var meanRuntime = TimeSpan.FromMilliseconds(_threads.Values .Where(x => x.Task == task) .Select(x => x.TotalRun.TotalMilliseconds) .Average()); output.AppendLine($"{name} :: {count} executions >> {ssum}Runtime: {meanRuntime}"); } } private void StopRunning() { foreach (var t in _threads.Values) { t.CancellationTokenSource.Cancel(); t.Thread.Join(); } } } } ================================================ FILE: LiteDB.Stress/Test/TestFile.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Xml; namespace LiteDB.Stress { public class TestFile { public TimeSpan Timeout { get; } public string Filename { get; } public string Output { get; } public bool Delete { get; } public List Setup { get; } public List Tasks { get; } public TestFile(string filename) { var doc = new XmlDocument(); doc.Load(filename); var root = doc.DocumentElement; var children = root.SelectNodes("*"); this.Timeout = TimeSpanEx.Parse(root.GetAttribute("timeout")); this.Filename = root.GetAttribute("filename"); this.Delete = bool.Parse(root.GetAttribute("delete")); this.Output = Path.Combine(Path.GetDirectoryName(this.Filename), Path.GetFileNameWithoutExtension(this.Filename) + ".log"); this.Setup = new List(); this.Tasks = new List(); foreach(XmlElement el in children) { if (el.Name == "setup") { this.Setup.Add(el.InnerText); } else { var item = el.Name == "insert" ? (ITestItem)new InsertTaskItem(el) : (ITestItem)new SqlTaskItem(el); this.Tasks.Add(item); } } } } } ================================================ FILE: LiteDB.Stress/Test/ThreadInfo.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Text; using System.Threading; using System.Xml; namespace LiteDB.Stress { public class ThreadInfo { public ITestItem Task { get; set; } public int Counter { get; set; } = 0; public bool Running { get; set; } = false; public Stopwatch Elapsed { get; } = new Stopwatch(); public DateTime LastRun { get; set; } = DateTime.Now; public BsonValue Result { get; set; } = null; public long ResultSum { get; set; } public TimeSpan TotalRun { get; set; } = TimeSpan.Zero; public Exception Exception { get; set; } public Thread Thread { get; set; } public CancellationTokenSource CancellationTokenSource { get; } = new CancellationTokenSource(); } } ================================================ FILE: LiteDB.Stress/Test/TimeSpanEx.cs ================================================ using System; using System.Collections.Generic; using System.Globalization; using System.Text; using System.Text.RegularExpressions; using System.Xml; namespace LiteDB.Stress { public class TimeSpanEx { public static TimeSpan Parse(string duration) { var re = new Regex(@"(?\d+)\s*(?ms|s|m|h)?"); var match = re.Match(duration); if (match.Success) { var num = double.Parse(match.Groups["num"].Value, CultureInfo.InvariantCulture.NumberFormat); var unit = match.Groups["unit"].Value.ToLower(); switch(unit) { case "": case "ms": return TimeSpan.FromMilliseconds(num); case "s": return TimeSpan.FromSeconds(num); case "m": return TimeSpan.FromMinutes(num); case "h": return TimeSpan.FromHours(num); } } throw new ArgumentException("Duration must be in format: number + unit (ms, s, m, h)"); } } } ================================================ FILE: LiteDB.Tests/Database/AutoId_Tests.cs ================================================ using System; using System.IO; using System.Linq; using LiteDB; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class AutoId_Tests { #region Model public class EntityInt { public int Id { get; set; } public string Name { get; set; } } public class EntityLong { public long Id { get; set; } public string Name { get; set; } } public class EntityGuid { public Guid Id { get; set; } public string Name { get; set; } } public class EntityOid { public ObjectId Id { get; set; } public string Name { get; set; } } public class EntityString { public string Id { get; set; } public string Name { get; set; } } #endregion [Fact] public void AutoId_Strong_Typed() { var mapper = new BsonMapper(); using (var db = new LiteDatabase(new MemoryStream(), mapper, new MemoryStream())) { var cs_int = db.GetCollection("int"); var cs_long = db.GetCollection("long"); var cs_guid = db.GetCollection("guid"); var cs_oid = db.GetCollection("oid"); var cs_str = db.GetCollection("str"); // int32 var cint_1 = new EntityInt() { Name = "R1" }; var cint_2 = new EntityInt() { Name = "R2" }; var cint_3 = new EntityInt() { Name = "R3" }; var cint_4 = new EntityInt() { Name = "R4" }; // long var clong_1 = new EntityLong() { Name = "R1" }; var clong_2 = new EntityLong() { Name = "R2" }; var clong_3 = new EntityLong() { Name = "R3" }; var clong_4 = new EntityLong() { Name = "R4" }; // guid var cguid_1 = new EntityGuid() { Name = "R1" }; var cguid_2 = new EntityGuid() { Name = "R2" }; var cguid_3 = new EntityGuid() { Name = "R3" }; var cguid_4 = new EntityGuid() { Name = "R4" }; // oid var coid_1 = new EntityOid() { Name = "R1" }; var coid_2 = new EntityOid() { Name = "R2" }; var coid_3 = new EntityOid() { Name = "R3" }; var coid_4 = new EntityOid() { Name = "R4" }; // string - there is no AutoId for string var cstr_1 = new EntityString() { Id = "a", Name = "R1" }; var cstr_2 = new EntityString() { Id = "b", Name = "R2" }; var cstr_3 = new EntityString() { Id = "c", Name = "R3" }; var cstr_4 = new EntityString() { Id = "d", Name = "R4" }; // insert first 3 documents cs_int.Insert(new[] { cint_1, cint_2, cint_3 }); cs_long.Insert(new[] { clong_1, clong_2, clong_3 }); cs_guid.Insert(new[] { cguid_1, cguid_2, cguid_3 }); cs_oid.Insert(new[] { coid_1, coid_2, coid_3 }); cs_str.Insert(new[] { cstr_1, cstr_2, cstr_3 }); // change document 2 cint_2.Name = "Changed 2"; clong_2.Name = "Changed 2"; cguid_2.Name = "Changed 2"; coid_2.Name = "Changed 2"; cstr_2.Name = "Changed 2"; // update document 2 var nu_int = cs_int.Update(cint_2); var nu_long = cs_long.Update(clong_2); var nu_guid = cs_guid.Update(cguid_2); var nu_oid = cs_oid.Update(coid_2); var nu_str = cs_str.Update(cstr_2); nu_int.Should().BeTrue(); nu_long.Should().BeTrue(); nu_guid.Should().BeTrue(); nu_oid.Should().BeTrue(); nu_str.Should().BeTrue(); // change document 3 cint_3.Name = "Changed 3"; clong_3.Name = "Changed 3"; cguid_3.Name = "Changed 3"; coid_3.Name = "Changed 3"; cstr_3.Name = "Changed 3"; // upsert (update) document 3 var fu_int = cs_int.Upsert(cint_3); var fu_long = cs_long.Upsert(clong_3); var fu_guid = cs_guid.Upsert(cguid_3); var fu_oid = cs_oid.Upsert(coid_3); var fu_str = cs_str.Upsert(cstr_3); fu_int.Should().BeFalse(); fu_long.Should().BeFalse(); fu_guid.Should().BeFalse(); fu_oid.Should().BeFalse(); fu_str.Should().BeFalse(); // test if was changed cs_int.FindOne(x => x.Id == cint_3.Id).Name.Should().Be(cint_3.Name); cs_long.FindOne(x => x.Id == clong_3.Id).Name.Should().Be(clong_3.Name); cs_guid.FindOne(x => x.Id == cguid_3.Id).Name.Should().Be(cguid_3.Name); cs_oid.FindOne(x => x.Id == coid_3.Id).Name.Should().Be(coid_3.Name); cs_str.FindOne(x => x.Id == cstr_3.Id).Name.Should().Be(cstr_3.Name); // upsert (insert) document 4 var tu_int = cs_int.Upsert(cint_4); var tu_long = cs_long.Upsert(clong_4); var tu_guid = cs_guid.Upsert(cguid_4); var tu_oid = cs_oid.Upsert(coid_4); var tu_str = cs_str.Upsert(cstr_4); tu_int.Should().BeTrue(); tu_long.Should().BeTrue(); tu_guid.Should().BeTrue(); tu_oid.Should().BeTrue(); tu_str.Should().BeTrue(); // test if was included cs_int.FindOne(x => x.Id == cint_4.Id).Name.Should().Be(cint_4.Name); cs_long.FindOne(x => x.Id == clong_4.Id).Name.Should().Be(clong_4.Name); cs_guid.FindOne(x => x.Id == cguid_4.Id).Name.Should().Be(cguid_4.Name); cs_oid.FindOne(x => x.Id == coid_4.Id).Name.Should().Be(coid_4.Name); cs_str.FindOne(x => x.Id == cstr_4.Id).Name.Should().Be(cstr_4.Name); // count must be 4 cs_int.Count(Query.All()).Should().Be(4); cs_long.Count(Query.All()).Should().Be(4); cs_guid.Count(Query.All()).Should().Be(4); cs_oid.Count(Query.All()).Should().Be(4); cs_str.Count(Query.All()).Should().Be(4); // for Int32 (or Int64) - add "bouble" on sequence var cint_10 = new EntityInt { Id = 10, Name = "R10" }; var cint_11 = new EntityInt { Name = "R11" }; var cint_7 = new EntityInt { Id = 7, Name = "R7" }; var cint_12 = new EntityInt { Name = "R12" }; cs_int.Insert(cint_10); // "loose" sequente between 5-9 cs_int.Insert(cint_11); // insert as 11 cs_int.Insert(cint_7); // insert as 7 cs_int.Insert(cint_12); // insert as 12 cint_10.Id.Should().Be(10); cint_11.Id.Should().Be(11); cint_7.Id.Should().Be(7); cint_12.Id.Should().Be(12); } } [Fact] public void AutoId_BsonDocument() { using (var db = new LiteDatabase(new MemoryStream())) { var col = db.GetCollection("Writers"); col.Insert(new BsonDocument { ["Name"] = "Mark Twain" }); col.Insert(new BsonDocument { ["Name"] = "Jack London", ["_id"] = 1 }); // create an index in name field col.EnsureIndex("LowerName", "LOWER($.Name)"); var mark = col.FindOne(Query.EQ("LOWER($.Name)", "mark twain")); var jack = col.FindOne(Query.EQ("LOWER($.Name)", "jack london")); // checks if auto-id is a ObjectId mark["_id"].IsObjectId.Should().BeTrue(); jack["_id"].IsInt32.Should().BeTrue(); // jack do not use AutoId (fixed in int32) } } [Fact] public void AutoId_No_Duplicate_After_Delete() { // using strong type using (var db = new LiteDatabase(new MemoryStream())) { var col = db.GetCollection("col1"); var one = new EntityInt { Name = "One" }; var two = new EntityInt { Name = "Two" }; var three = new EntityInt { Name = "Three" }; var four = new EntityInt { Name = "Four" }; // insert col.Insert(one); col.Insert(two); one.Id.Should().Be(1); two.Id.Should().Be(2); // now delete first 2 rows col.Delete(one.Id); col.Delete(two.Id); // and insert new documents col.Insert(new EntityInt[] { three, four }); three.Id.Should().Be(3); four.Id.Should().Be(4); } // using bsondocument/engine using (var db = new LiteDatabase(new MemoryStream())) { var one = new BsonDocument { ["Name"] = "One" }; var two = new BsonDocument { ["Name"] = "Two" }; var three = new BsonDocument { ["Name"] = "Three" }; var four = new BsonDocument { ["Name"] = "Four" }; var col = db.GetCollection("col", BsonAutoId.Int32); col.Insert(one); col.Insert(two); one["_id"].AsInt32.Should().Be(1); two["_id"].AsInt32.Should().Be(2); // now delete first 2 rows col.Delete(one["_id"].AsInt32); col.Delete(two["_id"].AsInt32); // and insert new documents col.Insert(new BsonDocument[] { three, four }); three["_id"].AsInt32.Should().Be(3); four["_id"].AsInt32.Should().Be(4); } } [Fact] public void AutoId_Zero_Int() { using (var db = new LiteDatabase(":memory:")) { var test = db.GetCollection("Test", BsonAutoId.Int32); var doc = new BsonDocument() { ["_id"] = 0, ["p1"] = 1 }; test.Insert(doc); // -> NullReferenceException } } [Fact] public void AutoId_property() { using (var db = new LiteDatabase(new MemoryStream())) { // default auto id var col1 = db.GetCollection("Col1"); col1.AutoId.Should().Be(BsonAutoId.ObjectId); // specified auto id var col2 = db.GetCollection("Col2", BsonAutoId.Int32); col2.AutoId.Should().Be(BsonAutoId.Int32); } } } } ================================================ FILE: LiteDB.Tests/Database/ConnectionString_Tests.cs ================================================ using System; using System.IO; using System.Linq; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class ConnectionString_Tests { [Fact] public void ConnectionString_Parser() { // only filename var onlyfile = new ConnectionString(@"demo.db"); onlyfile.Filename.Should().Be(@"demo.db"); // file with spaces without " var normal = new ConnectionString(@"filename=c:\only file\demo.db"); normal.Filename.Should().Be(@"c:\only file\demo.db"); // filename with timeout // file with spaces with " and ; var full = new ConnectionString( @"filename=""c:\only;file\""d\""emo.db""; password = ""john-doe "" ; initial size = 10 MB ; readONLY = TRUE;"); full.Filename.Should().Be(@"c:\only;file""d""emo.db"); full.Password.Should().Be("john-doe "); full.ReadOnly.Should().BeTrue(); full.InitialSize.Should().Be(10 * 1024 * 1024); } [Fact] public void ConnectionString_Very_Long() { var cn = new ConnectionString(@"Filename=C:\Users\yup\AppData\Roaming\corex\storecore.file;Password='1495c305c5312dd1a9a18d9502daa0369216763ca7a6f537ddbe290241cf8aad1ca326313adec74bb98d1955747347cf0e3f087899d8bb2e0aa002ff825e1c0f25eaa79e5dfbf1c0e2daf6746a3a3f140244b764204c20c0ccede3521eaf8537ae32d4b13a04f1c387f56a8d6fa095bc53451c1892a46b8182afd94559cd7377aebc8d4a2b4883c637a359e6e67e1d8c2d789721351ebb000409329b2e875d21278b7c76724c68729e53dac50168564b8c3432018212a111c952e593829b42c296458cc0020174aaef9ca6b5661ca965004404c2bbb256bc41a8aa5c5349c615e40328a3263c45e5f96e61048149e98aa8b6f2afb59d73379e1dce5429752d8d'"); cn.Filename.Length.Should().Be(49); cn.Password.Length.Should().Be(512); } } } ================================================ FILE: LiteDB.Tests/Database/Contains_Tests.cs ================================================ using LiteDB; using FluentAssertions; using Xunit; using System.IO; using System.Linq; using System.Collections.Generic; using System; namespace LiteDB.Tests.Database { public class Contains_Tests { [Fact] public void ArrayContains_ShouldHaveCount1() { var random = new Random(); var randomValue = random.Next(); using(var database = new LiteDatabase(new MemoryStream())) { var collection = database.GetCollection(); collection.Insert(new ItemWithEnumerable { Array = new int[] { randomValue } }); var result = collection.Find(i => i.Array.Contains(randomValue)).ToList(); result.Should().HaveCount(1); } } [Fact] public void EnumerableAssignedArrayContains_ShouldHaveCount1() { var random = new Random(); var randomValue = random.Next(); using(var database = new LiteDatabase(new MemoryStream())) { var collection = database.GetCollection(); collection.Insert(new ItemWithEnumerable { Enumerable = new int[] { randomValue } }); var result = collection.Find(i => i.Enumerable.Contains(randomValue)).ToList(); result.Should().HaveCount(1); } } [Fact] public void EnumerableAssignedListContains_ShouldHaveCount1() { var random = new Random(); var randomValue = random.Next(); using(var database = new LiteDatabase(new MemoryStream())) { var collection = database.GetCollection(); collection.Insert(new ItemWithEnumerable { Enumerable = new List { randomValue } }); var result = collection.Find(i => i.Enumerable.Contains(randomValue)).ToList(); result.Should().HaveCount(1); } } [Fact] public void ListContains_ShouldHaveCount1() { var random = new Random(); var randomValue = random.Next(); using(var database = new LiteDatabase(new MemoryStream())) { var collection = database.GetCollection(); collection.Insert(new ItemWithEnumerable { List = new List { randomValue } }); var result = collection.Find(i => i.List.Contains(randomValue)).ToList(); result.Should().HaveCount(1); } } public class ItemWithEnumerable { public int[] Array { get; set; } public IEnumerable Enumerable { get; set; } public IList List { get; set; } } } } ================================================ FILE: LiteDB.Tests/Database/Create_Database_Tests.cs ================================================ using System; using System.IO; using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Database { public class Create_Database_Tests { [Fact] public void Create_Database_With_Initial_Size() { var initial = 10 * 8192; // initial size: 80kb //var minimal = 8192 * 5; // 1 header + 1 collection + 1 data + 1 index = 4 pages minimal using (var file = new TempFile()) { using (var db = new LiteDatabase("filename=" + file.Filename + ";initial size=" + initial)) { var col = db.GetCollection("col"); // just ensure open datafile col.FindAll().ToArray(); // test if file has 40kb file.Size.Should().Be(initial); // simple insert to test if datafile still with 40kb col.Insert(new BsonDocument { ["_id"] = 1 }); // use 3 pages to this file.Size.Should().Be(initial); // ok, now shrink and test if file are minimal size //** db.Shrink(); //** //** file.Size.Should().Be(minimal); } } } } } ================================================ FILE: LiteDB.Tests/Database/Crud_Tests.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class Crud_Tests { #region Model public class User { public int Id { get; set; } public string Name { get; set; } } #endregion [Fact] public void Insert_With_AutoId() { using (var db = new LiteDatabase(new MemoryStream())) { var users = db.GetCollection("users"); var u1 = new User { Name = "John" }; var u2 = new User { Name = "Zarlos" }; var u3 = new User { Name = "Ana" }; // insert ienumerable users.Insert(new User[] { u1, u2 }); users.Insert(u3); // test auto-id u1.Id.Should().Be(1); u2.Id.Should().Be(2); u3.Id.Should().Be(3); // adding without autoId var u4 = new User { Id = 20, Name = "Marco" }; users.Insert(u4); // adding more auto id after fixed id var u5 = new User { Name = "Julio" }; users.Insert(u5); u5.Id.Should().Be(21); } } [Fact] public void Delete_Many() { using (var db = new LiteDatabase(new MemoryStream())) { var users = db.GetCollection("users"); var u1 = new User { Id = 1, Name = "John" }; var u2 = new User { Id = 2, Name = "Zarlos" }; var u3 = new User { Id = 3, Name = "Ana" }; users.Insert(new User[] { u1, u2, u3 }); var ids = new int[] { 1, 2, 3 }; var docs = users.Query().Where(x => ids.Contains(x.Id)).ToArray(); users.DeleteMany(x => ids.Contains(x.Id)); users.Count().Should().Be(0); } } } } ================================================ FILE: LiteDB.Tests/Database/Database_Pragmas_Tests.cs ================================================ using System; using System.IO; using System.Linq; using LiteDB; using FluentAssertions; using Xunit; using System.Globalization; namespace LiteDB.Tests.Database { public class Database_Pragmas_Tests { [Fact] public void Database_Pragmas_Get_Set() { using (var db = new LiteDatabase(":memory:")) { db.Timeout.TotalSeconds.Should().Be(60.0); db.UtcDate.Should().Be(false); db.Collation.SortOptions.Should().Be(CompareOptions.IgnoreCase); db.LimitSize.Should().Be(long.MaxValue); db.UserVersion.Should().Be(0); db.CheckpointSize.Should().Be(1000); // changing values db.Timeout = TimeSpan.FromSeconds(30); db.UtcDate = true; db.LimitSize = 1024 * 1024; db.UserVersion = 99; db.CheckpointSize = 0; // testing again db.Timeout.TotalSeconds.Should().Be(30); db.UtcDate.Should().Be(true); db.LimitSize.Should().Be(1024 * 1024); db.UserVersion.Should().Be(99); db.CheckpointSize.Should().Be(0); } } } } ================================================ FILE: LiteDB.Tests/Database/DbRef_Include_Tests.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using LiteDB; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class DbRef_Include_Tests { #region Model public class Order { public ObjectId Id { get; set; } public Customer Customer { get; set; } public Customer CustomerNull { get; set; } public List Products { get; set; } public Product[] ProductArray { get; set; } public ICollection ProductColl { get; set; } public List ProductEmpty { get; set; } public List ProductsNull { get; set; } } public class Customer { public int Id { get; set; } public string Name { get; set; } public Address MainAddress { get; set; } } public class Address { public int Id { get; set; } public string StreetName { get; set; } } public class Product { public int ProductId { get; set; } public string Name { get; set; } public decimal Price { get; set; } public Address SupplierAddress { get; set; } } #endregion /* insert into Address values { _id:1, StreetName: '3600 S Las Vegas' }; insert into Customer values { _id:1, Name: 'John Doe', MainAddress: { $id:1, $ref:'Address' } }; insert into Product values { _id: 1, Name: 'TV', Price: 800, SupplierAddress: { $id:1, $ref:'Address' } }; insert into Product values { _id: 2, Name: 'DVD', Price: 200 }; insert into Order values { _id:1, Customer: {$id:1, $ref: 'Customer'}, CustomerNull: null, Products:[{$id:1, $ref:'Product'}, {$id:2, $ref:'Product'}], ProductArray:[{$id:1, $ref:'Product'}], ProductEmpty: [], ProductNull: null}; select $ from order include customer, products */ [Fact] public void DbRef_Include() { var mapper = new BsonMapper(); mapper.Entity() .DbRef(x => x.Products, "products") .DbRef(x => x.ProductArray, "products") .DbRef(x => x.ProductColl, "products") .DbRef(x => x.ProductEmpty, "products") .DbRef(x => x.ProductsNull, "products") .DbRef(x => x.Customer, "customers") .DbRef(x => x.CustomerNull, "customers"); mapper.Entity() .DbRef(x => x.MainAddress, "addresses"); mapper.Entity() .DbRef(x => x.SupplierAddress, "addresses"); using (var db = new LiteDatabase(new MemoryStream(), mapper, new MemoryStream())) { var address = new Address { StreetName = "3600 S Las Vegas Blvd" }; var customer = new Customer { Name = "John Doe", MainAddress = address }; var product1 = new Product { Name = "TV", Price = 800, SupplierAddress = address }; var product2 = new Product { Name = "DVD", Price = 200 }; var customers = db.GetCollection("customers"); var addresses = db.GetCollection
("addresses"); var products = db.GetCollection("products"); var orders = db.GetCollection("orders"); // insert ref documents addresses.Insert(address); customers.Insert(customer); products.Insert(new Product[] { product1, product2 }); var order = new Order { Customer = customer, CustomerNull = null, Products = new List() { product1, product2 }, ProductArray = new Product[] { product1 }, ProductColl = new List() { product2 }, ProductEmpty = new List(), ProductsNull = null }; mapper.SerializeNullValues = true; var dOrder = mapper.ToDocument(order); orders.Insert(order); //orders.EnsureIndex(x => x.Customer.Id); // query orders using customer $id // include customer data and customer address var r1 = orders .Include(x => x.Customer) .Include(x => x.Customer.MainAddress) .Find(x => x.Customer.Id == 1) .FirstOrDefault(); r1.Id.Should().Be(order.Id); r1.Customer.Name.Should().Be(order.Customer.Name); r1.Customer.MainAddress.StreetName.Should().Be(order.Customer.MainAddress.StreetName); // include all var result = orders .Include(x => x.Customer) .Include("Customer.MainAddress") .Include(x => x.CustomerNull) .Include(x => x.Products) .Include(x => x.Products.Select(p => p.SupplierAddress)) .Include(x => x.ProductArray) .Include(x => x.ProductColl) .Include(x => x.ProductsNull) .FindAll() .FirstOrDefault(); result.Customer.Name.Should().Be(customer.Name); result.Customer.MainAddress.StreetName.Should().Be(customer.MainAddress.StreetName); result.Products[0].Price.Should().Be(product1.Price); result.Products[1].Name.Should().Be(product2.Name); result.Products[0].SupplierAddress.StreetName.Should().Be(product1.SupplierAddress.StreetName); result.ProductArray[0].Name.Should().Be(product1.Name); result.ProductColl.ElementAt(0).Price.Should().Be(product2.Price); result.ProductsNull.Should().BeNull(); result.ProductEmpty.Count.Should().Be(0); //TODO: v5 are not removing references after delete. There is no BsonValue#Destroy - must fix/discuss better this // now, delete reference 1x1 and 1xN customers.Delete(customer.Id); products.Delete(product1.ProductId); var result2 = orders .Include(x => x.Customer) .Include(x => x.Products) .FindAll() .FirstOrDefault(); // must missing customer and has only 1 product result2.Customer.Should().BeNull(); result2.Products.Count.Should().Be(1); // property ProductArray contains only deleted "product1", but has no include on query, so must returns deleted result2.ProductArray.Length.Should().Be(1); } } } } ================================================ FILE: LiteDB.Tests/Database/DbRef_Index_Tests.cs ================================================ using System.IO; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class DbRef_Index_Tests { #region Model public class Customer { public string Login { get; set; } public string Name { get; set; } } public class Order { public int OrderNumber { get; set; } public Customer Customer { get; set; } } #endregion [Fact] public void DbRef_Index() { var mapper = new BsonMapper(); mapper.Entity() .Id(x => x.Login) .Field(x => x.Name, "customer_name"); mapper.Entity() .Id(x => x.OrderNumber) .Field(x => x.Customer, "cust") .DbRef(x => x.Customer, "customers"); using (var db = new LiteDatabase(new MemoryStream(), mapper, new MemoryStream())) { var customer = new Customer { Login = "jd", Name = "John Doe" }; var order = new Order { Customer = customer }; var customers = db.GetCollection("Customers"); var orders = db.GetCollection("Orders"); customers.Insert(customer); orders.Insert(order); // create an index in Customer.Id ref // x.Customer.Login == "Customer.$id" orders.EnsureIndex(x => x.Customer.Login); var query = orders .Include(x => x.Customer) .FindOne(x => x.Customer.Login == "jd"); query.Customer.Name.Should().Be(customer.Name); } } } } ================================================ FILE: LiteDB.Tests/Database/DbRef_Interface_Tests.cs ================================================ //using System.IO; //using FluentAssertions; //using Xunit; //namespace LiteDB.Tests.Database //{ // public class DbRef_Interface_Tests // { // #region Model // public class UserConfigObject : IUserConfig // { // [BsonId] // public int ID { get; set; } // [BsonRef("userInfo")] // public IUserInfo UserInfo { get; set; } // public string AssignedJob { get; set; } // public string[] QueueItems { get; set; } // } // public class UserInfoObject : IUserInfo // { // [BsonId] // public int ID { get; set; } // public string Name { get; set; } // public string Username { get; set; } // public string IPAddress { get; set; } // [BsonRef("userConfig")] // public IUserConfig UserConfig { get; set; } // } // public interface IUserInfo // { // } // public interface IUserConfig // { // } // #endregion // [Fact] // public void DbRef_With_Interface() // { // using (var db = new LiteDatabase(new MemoryStream())) // { // var uc = db.GetCollection("userConfig"); // var ui = db.GetCollection("userInfo"); // var user = new UserInfoObject // { // ID = 1, // UserConfig = new UserConfigObject() // { // ID = 99, // AssignedJob = "manager" // } // }; // // let's insert and serialize // uc.Insert(user.UserConfig); // ui.Insert(user); // // let's find (and deserialize) // var userConfig = uc.FindById(99); // var userInfo = ui.FindById(1); // userConfig.Should().NotBeNull(); // userInfo.Should().NotBeNull(); // } // } // } //} ================================================ FILE: LiteDB.Tests/Database/DeleteMany_Tests.cs ================================================ using System; using System.IO; using System.Linq; using LiteDB; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class DeleteMany_Tests { [Fact] public void DeleteMany_With_Arguments() { using (var db = new LiteDatabase(":memory:")) { var c1 = db.GetCollection("Test"); var d1 = new BsonDocument() { ["_id"] = 1, ["p1"] = 1 }; c1.Insert(d1); c1.Count().Should().Be(1); // try BsonExpression predicate with argument - not deleted var e1 = BsonExpression.Create("$._id = @0", 1); var r1 = c1.DeleteMany(e1); r1.Should().Be(1); // the same BsonExpression predicate works fine in FindOne var r = c1.FindOne(e1); } } } } ================================================ FILE: LiteDB.Tests/Database/Delete_By_Name_Tests.cs ================================================ using System; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class Delete_By_Name_Tests { #region Model public class Person { public int Id { get; set; } public string Fullname { get; set; } } #endregion [Fact] public void Delete_By_Name() { using (var f = new TempFile()) using (var db = new LiteDatabase(f.Filename)) { var col = db.GetCollection("Person"); col.Insert(new Person { Fullname = "John" }); col.Insert(new Person { Fullname = "Doe" }); col.Insert(new Person { Fullname = "Joana" }); col.Insert(new Person { Fullname = "Marcus" }); // lets auto-create index in FullName and delete from a non-pk node var del = col.DeleteMany(x => x.Fullname.StartsWith("J")); del.Should().Be(2); } } } } ================================================ FILE: LiteDB.Tests/Database/DocumentUpgrade_Tests.cs ================================================ using FluentAssertions; using LiteDB.Engine; using System.IO; using Xunit; namespace LiteDB.Tests.Database; public class DocumentUpgrade_Tests { [Fact] public void DocumentUpgrade_Test() { var ms = new MemoryStream(); using (var db = new LiteDatabase(ms)) { var col = db.GetCollection("col"); col.Insert(new BsonDocument { ["version"] = 1, ["_id"] = 1, ["name"] = "John" }); } ms.Position = 0; using (var db = new LiteDatabase(ms)) { var col = db.GetCollection("col"); col.Count().Should().Be(1); var doc = col.FindById(1); doc["version"].AsInt32.Should().Be(1); doc["name"].AsString.Should().Be("John"); doc["age"].AsInt32.Should().Be(0); } ms.Position = 0; using var engine = new LiteEngine(new EngineSettings { DataStream = ms, ReadTransform = (collectionName, val) => { if (val is not BsonDocument doc) { return val; } if (doc.TryGetValue("version", out var version) && version.AsInt32 == 1) { doc["version"] = 2; doc["age"] = 30; } return val; } }); using (var db = new LiteDatabase(engine)) { var col = db.GetCollection("col"); col.Count().Should().Be(1); var doc = col.FindById(1); doc["version"].AsInt32.Should().Be(2); doc["name"].AsString.Should().Be("John"); doc["age"].AsInt32.Should().Be(30); } } [Fact] public void DocumentUpgrade_BsonMapper_Test() { var ms = new MemoryStream(); using (var db = new LiteDatabase(ms)) { var col = db.GetCollection("col"); col.Insert(new BsonDocument { ["version"] = 1, ["_id"] = 1, ["name"] = "John" }); } ms.Position = 0; using (var db = new LiteDatabase(ms)) { var col = db.GetCollection("col"); col.Count().Should().Be(1); var doc = col.FindById(1); doc["version"].AsInt32.Should().Be(1); doc["name"].AsString.Should().Be("John"); doc["age"].AsInt32.Should().Be(0); } ms.Position = 0; var mapper = new BsonMapper(); mapper.OnDeserialization = (sender, type, val) => { if (val is not BsonDocument doc) { return val; } if (doc.TryGetValue("version", out var version) && version.AsInt32 == 1) { doc["version"] = 2; doc["age"] = 30; } return doc; }; using (var db = new LiteDatabase(ms, mapper)) { var col = db.GetCollection("col"); col.Count().Should().Be(1); var doc = col.FindById(1); doc["version"].AsInt32.Should().Be(2); doc["name"].AsString.Should().Be("John"); doc["age"].AsInt32.Should().Be(30); } } } ================================================ FILE: LiteDB.Tests/Database/Document_Size_Tests.cs ================================================ using System; using System.Diagnostics; using System.IO; using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Database { public class Document_Size_Tests { const int ARRAY_SIZE = 10 * 1024 * 1024; [Fact] public void Very_Large_Single_Document_Support_With_Partial_Load_Memory_Usage() { using (var file = new TempFile()) using (var db = new LiteDatabase(file.Filename)) { var col = db.GetCollection("col"); // insert 10 mb document col.Insert(new BsonDocument { ["_id"] = 1, ["name"] = "John", ["data"] = new byte[ARRAY_SIZE] }); GC.Collect(); GC.WaitForPendingFinalizers(); var initialMemory = Process.GetCurrentProcess().WorkingSet64; // get name only document var d0 = col.Query().Select("{ _id, name }").First(); d0["name"].Should().Be("John"); var memoryForNameOnly = Process.GetCurrentProcess().WorkingSet64; // getting full document var d1 = col.Query().First(); var memoryFullDocument = Process.GetCurrentProcess().WorkingSet64; // memory after full document must be at least 10Mb more than with name only //memoryFullDocument.Should().BeGreaterOrEqualTo(memoryForNameOnly + (ARRAY_SIZE / 2)); } } } } ================================================ FILE: LiteDB.Tests/Database/FindAll_Tests.cs ================================================ using System; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class FindAll_Tests { #region Model public class Person { public int Id { get; set; } public string Fullname { get; set; } } #endregion [Fact] public void FindAll() { using (var f = new TempFile()) { using (var db = new LiteDatabase(f.Filename)) { var col = db.GetCollection("Person"); col.Insert(new Person { Fullname = "John" }); col.Insert(new Person { Fullname = "Doe" }); col.Insert(new Person { Fullname = "Joana" }); col.Insert(new Person { Fullname = "Marcus" }); } // close datafile using (var db = new LiteDatabase(f.Filename)) { var p = db.GetCollection("Person").Find(Query.All("Fullname", Query.Ascending)); p.Count().Should().Be(4); } } } } } ================================================ FILE: LiteDB.Tests/Database/IndexMultiKeyLinq_Tests.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class IndexMultiKeyIndex { #region Model public class User { public int Id { get; set; } public string Name { get; set; } public int[] Phones { get; set; } public List
Addresses { get; set; } } public class Address { public string Street { get; set; } } #endregion [Fact] public void Index_Multikey_Using_Linq() { using (var db = new LiteDatabase(new MemoryStream())) { var col = db.GetCollection(); col.Insert(new User { Name = "John Doe", Phones = new int[] { 1, 3, 5 }, Addresses = new List
{ new Address { Street = "Av.1" }, new Address { Street = "Av.3" } } }); col.Insert(new User { Name = "Joana Mark", Phones = new int[] { 1, 4 }, Addresses = new List
{ new Address { Street = "Av.3" } } }); // create indexes col.EnsureIndex(x => x.Phones); col.EnsureIndex(x => x.Addresses.Select(z => z.Street)); // testing indexes expressions var indexes = db.GetCollection("$indexes").FindAll().ToArray(); indexes[1]["expression"].AsString.Should().Be("$.Phones[*]"); indexes[2]["expression"].AsString.Should().Be("MAP($.Addresses[*]=>@.Street)"); // doing Phone query var queryPhone = col.Query() .Where(x => x.Phones.Contains(3)); var planPhone = queryPhone.GetPlan(); planPhone["index"]["expr"].AsString.Should().Be("$.Phones[*]"); var docsPhone = queryPhone.ToArray(); docsPhone.Length.Should().Be(1); // doing query over Address var queryAddress = col.Query() .Where(x => x.Addresses.Select(a => a.Street).Any(s => s == "Av.3")); var planAddress = queryAddress.GetPlan(); planAddress["index"]["expr"].AsString.Should().Be("MAP($.Addresses[*]=>@.Street)"); var docsAddress = queryAddress.ToArray(); docsAddress.Length.Should().Be(2); // now, using ALL (do not use INDEX) var queryPhoneAll = col.Query() .Where(x => x.Phones.All(p => p == 3)); var planPhoneAll = queryPhoneAll.GetPlan(); planPhoneAll["index"]["expr"].AsString.Should().Be("$._id"); var docsPhoneAll = queryPhoneAll.ToArray(); docsPhoneAll.Length.Should().Be(0); } } } } ================================================ FILE: LiteDB.Tests/Database/IndexSortAndFilter_Tests.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class IndexSortAndFilterTest : IDisposable { #region Model public class Item { public string Id { get; set; } public string Value { get; set; } } #endregion private readonly ILiteCollection _collection; private readonly TempFile _tempFile; private readonly ILiteDatabase _database; public IndexSortAndFilterTest() { _tempFile = new TempFile(); _database = new LiteDatabase(_tempFile.Filename); _collection = _database.GetCollection("items"); _collection.Upsert(new Item() { Id = "C", Value = "Value 1" }); _collection.Upsert(new Item() { Id = "A", Value = "Value 2" }); _collection.Upsert(new Item() { Id = "B", Value = "Value 1" }); _collection.EnsureIndex("idx_value", x => x.Value); } public void Dispose() { _database.Dispose(); _tempFile.Dispose(); } [Fact] public void FilterAndSortAscending() { var result = _collection.Query() .Where(x => x.Value == "Value 1") .OrderBy(x => x.Id, Query.Ascending) .ToList(); result[0].Id.Should().Be("B"); result[1].Id.Should().Be("C"); } [Fact] public void FilterAndSortDescending() { var result = _collection.Query() .Where(x => x.Value == "Value 1") .OrderBy(x => x.Id, Query.Descending) .ToList(); result[0].Id.Should().Be("C"); result[1].Id.Should().Be("B"); } [Fact] public void FilterAndSortAscendingWithoutIndex() { _collection.DropIndex("idx_value"); var result = _collection.Query() .Where(x => x.Value == "Value 1") .OrderBy(x => x.Id, Query.Ascending) .ToList(); result[0].Id.Should().Be("B"); result[1].Id.Should().Be("C"); } } } ================================================ FILE: LiteDB.Tests/Database/MultiKey_Mapper_Tests.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class MultiKey_Mapper_Tests { #region Model public class MultiKeyDoc { public int Id { get; set; } public int[] Keys { get; set; } public List Customers { get; set; } } public class Customer { public string Login { get; set; } public string Name { get; set; } } #endregion [Fact] public void MultiKey_Mapper() { using (var db = new LiteDatabase(":memory:")) { var col = db.GetCollection("col"); col.Insert(new MultiKeyDoc { Id = 1, Keys = new int[] { 1, 2, 3 }, Customers = new List() { new Customer { Name = "John" }, new Customer { Name = "Ana" }, new Customer { Name = "Doe" }, new Customer { Name = "Dante" } } }); col.Insert(new MultiKeyDoc { Id = 2, Keys = new int[] { 2 }, Customers = new List() { new Customer { Name = "Ana" } } }); col.EnsureIndex(x => x.Keys); col.EnsureIndex(x => x.Customers.Select(z => z.Name)); // Query.EQ("Keys", 2) col.Count(Query.Any().EQ("Keys", 2)).Should().Be(2); col.Count(x => x.Keys.Contains(2)).Should().Be(2); col.Count(Query.Any().StartsWith("Customers[*].Name", "Ana")).Should().Be(2); col.Count(x => x.Customers.Select(z => z.Name).Any(z => z.StartsWith("Ana"))).Should().Be(2); col.Count(Query.Any().StartsWith("Customers[*].Name", "D")).Should().Be(1); col.Count(x => x.Customers.Select(z => z.Name).Any(z => z.StartsWith("D"))).Should().Be(1); } } } } ================================================ FILE: LiteDB.Tests/Database/NonIdPoco_Tests.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class MissingIdDocTest { #region Model public class MissingIdDoc { public string Name { get; set; } public int Age { get; set; } } #endregion [Fact] public void MissingIdDoc_Test() { using (var file = new TempFile()) using (var db = new LiteDatabase(file.Filename)) { var col = db.GetCollection("col"); var p = new MissingIdDoc { Name = "John", Age = 39 }; // ObjectID will be generated var id = col.Insert(p); p.Age = 41; col.Update(id, p); var r = col.FindById(id); r.Name.Should().Be(p.Name); } } } } ================================================ FILE: LiteDB.Tests/Database/PredicateBuilder_Tests.cs ================================================ using System; using System.IO; using System.Linq; using System.Collections.Generic; using System.Linq.Expressions; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class PredicateBuilder_Tests { #region Model public class User { public int Id { get; set; } public string Name { get; set; } public bool Active { get; set; } public int Age { get; set; } } #endregion [Fact(Skip = "Need review")] public void Usage_PredicateBuilder() { var p = PredicateBuilder.True(); p = p.And(x => x.Active); p = p.And(x => x.Age > 10); using (var db = new LiteDatabase(new MemoryStream())) { var col = db.GetCollection("user"); col.Insert(new User { Active = true, Age = 11, Name = "user" }); // using direct Expression var r1 = col.FindOne(x => x.Active && x.Age > 10); r1.Name.Should().Be("user"); // using same expression but now with PredicateBuilder var r2 = col.FindOne(p); r2.Name.Should().Be("user"); } } } // from http://www.albahari.com/nutshell/predicatebuilder.aspx public static class PredicateBuilder { public static Expression> True() { return f => true; } public static Expression> False() { return f => false; } public static Expression> Or(this Expression> expr1, Expression> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast()); return Expression.Lambda> (Expression.OrElse(expr1.Body, invokedExpr), expr1.Parameters); } public static Expression> And(this Expression> expr1, Expression> expr2) { var invokedExpr = Expression.Invoke(expr2, expr1.Parameters.Cast()); return Expression.Lambda> (Expression.AndAlso(expr1.Body, invokedExpr), expr1.Parameters); } } } ================================================ FILE: LiteDB.Tests/Database/Query_Min_Max_Tests.cs ================================================ using System; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class Query_Min_Max_Tests { #region Model public class EntityMinMax { public int Id { get; set; } public byte ByteValue { get; set; } public int IntValue { get; set; } public uint UintValue { get; set; } public long LongValue { get; set; } } #endregion [Fact] public void Query_Min_Max() { using (var f = new TempFile()) using (var db = new LiteDatabase(f.Filename)) { var c = db.GetCollection("col"); c.Insert(new EntityMinMax { }); c.Insert(new EntityMinMax { ByteValue = 200, IntValue = 443500, LongValue = 443500, UintValue = 443500 }); c.EnsureIndex(x => x.ByteValue); c.EnsureIndex(x => x.IntValue); c.EnsureIndex(x => x.LongValue); c.EnsureIndex(x => x.UintValue); c.Max(x => x.ByteValue).Should().Be(200); c.Max(x => x.IntValue).Should().Be(443500); c.Max(x => x.LongValue).Should().Be(443500); c.Max(x => x.UintValue).Should().Be(443500); } } } } ================================================ FILE: LiteDB.Tests/Database/Site_Tests.cs ================================================ using System; using System.IO; using System.Linq; using System.Security.Cryptography; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class Site_Tests { [Fact] public void Home_Example() { using (var f = new TempFile()) using (var db = new LiteDatabase(f.Filename)) { // Get customer collection var customers = db.GetCollection("customers"); // Create your new customer instance var customer = new Customer { Name = "John Doe", Phones = new string[] { "8000-0000", "9000-0000" }, IsActive = true }; // Insert new customer document (Id will be auto-incremented) customers.Insert(customer); // Update a document inside a collection customer.Name = "Joana Doe"; customers.Update(customer); // Index document using a document property customers.EnsureIndex(x => x.Name); // Now, let's create a simple query var results = customers.Find(x => x.Name.StartsWith("Jo")).ToList(); results.Count.Should().Be(1); // Or you can query using new Query() syntax var results2 = customers.Query() .Where(x => x.Phones.Any(p => p.StartsWith("8000"))) .OrderBy(x => x.Name) .Select(x => new { x.Id, x.Name }) .Limit(10) .ToList(); // Or using SQL var reader = db.Execute( @"SELECT _id, Name FROM customers WHERE Phones ANY LIKE '8000%' ORDER BY Name LIMIT 10"); results2.Count.Should().Be(1); reader.ToList().Count.Should().Be(1); } } public class Customer { public int Id { get; set; } public string Name { get; set; } public string[] Phones { get; set; } public bool IsActive { get; set; } } } } ================================================ FILE: LiteDB.Tests/Database/Snapshot_Upgrade_Tests.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class Snapshot_Upgrade_Tests { [Fact] public void Transaction_Update_Upsert() { using var db = new LiteDatabase(":memory:"); var col = db.GetCollection("test"); bool transactionCreated = db.BeginTrans(); Assert.True(transactionCreated); int updatedDocs = col.UpdateMany("{name: \"xxx\"}", BsonExpression.Create("_id = 1")); Assert.Equal(0, updatedDocs); col.Upsert(new BsonDocument() { ["_id"] = 1, ["name"] = "xxx" }); var result = col.FindById(1); Assert.NotNull(result); } } } ================================================ FILE: LiteDB.Tests/Database/Storage_Tests.cs ================================================ using System; using System.IO; using System.Linq; using System.Security.Cryptography; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Database { public class Storage_Tests { private readonly Random _rnd = new Random(); private readonly byte[] _smallFile; private readonly byte[] _bigFile; private readonly string _smallHash; private readonly string _bigHash; public Storage_Tests() { _smallFile = new byte[_rnd.Next(100000, 200000)]; _bigFile = new byte[_rnd.Next(400000, 600000)]; _rnd.NextBytes(_smallFile); _rnd.NextBytes(_bigFile); _smallHash = this.HashFile(_smallFile); _bigHash = this.HashFile(_bigFile); } [Fact] public void Storage_Upload_Download() { using (var f = new TempFile()) using (var db = new LiteDatabase(f.Filename)) //using (var db = new LiteDatabase(@"c:\temp\file.db")) { var fs = db.GetStorage("_files", "_chunks"); var small = fs.Upload(10, "photo_small.png", new MemoryStream(_smallFile)); var big = fs.Upload(100, "photo_big.png", new MemoryStream(_bigFile)); _smallFile.Length.Should().Be((int) small.Length); _bigFile.Length.Should().Be((int) big.Length); var f0 = fs.Find(x => x.Filename == "photo_small.png").First(); var f1 = fs.Find(x => x.Filename == "photo_big.png").First(); this.HashFile(f0.OpenRead()).Should().Be(_smallHash); this.HashFile(f1.OpenRead()).Should().Be(_bigHash); // now replace small content with big-content var repl = fs.Upload(10, "new_photo.jpg", new MemoryStream(_bigFile)); fs.Exists(10).Should().BeTrue(); var nrepl = fs.FindById(10); nrepl.Chunks.Should().Be(repl.Chunks); // update metadata fs.SetMetadata(100, new BsonDocument {["x"] = 100, ["y"] = 99}); // find using metadata var md = fs.Find(x => x.Metadata["x"] == 100).FirstOrDefault(); md.Metadata["y"].AsInt32.Should().Be(99); } } private string HashFile(Stream stream) { var m = new MemoryStream(); stream.CopyTo(m); return this.HashFile(m.ToArray()); } private string HashFile(byte[] input) { using (var md5 = MD5.Create()) { var bytes = md5.ComputeHash(input); return Convert.ToBase64String(bytes); } } } } ================================================ FILE: LiteDB.Tests/Database/Upgrade_Tests.cs ================================================ using System; using System.IO; using System.Linq; using LiteDB; using FluentAssertions; using Xunit; using Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.ObjectModel; namespace LiteDB.Tests.Database { public class Upgrade_Tests { [Fact] public void Migrage_From_V4() { // v5 upgrades only from v4! using(var tempFile = new TempFile("../../../Resources/v4.db")) { using (var db = new LiteDatabase($"filename={tempFile};upgrade=true")) { // convert and open database var col1 = db.GetCollection("col1"); col1.Count().Should().Be(3); } using (var db = new LiteDatabase($"filename={tempFile};upgrade=true")) { // database already converted var col1 = db.GetCollection("col1"); col1.Count().Should().Be(3); } } } [Fact] public void Migrage_From_V4_No_FileExtension() { // v5 upgrades only from v4! using (var tempFile = new TempFile("../../../Resources/v4.db")) { using (var db = new LiteDatabase($"filename={tempFile};upgrade=true")) { // convert and open database var col1 = db.GetCollection("col1"); col1.Count().Should().Be(3); } using (var db = new LiteDatabase($"filename={tempFile};upgrade=true")) { // database already converted var col1 = db.GetCollection("col1"); col1.Count().Should().Be(3); } } } } } ================================================ FILE: LiteDB.Tests/Database/Writing_While_Reading_Test.cs ================================================ using System.IO; using Xunit; namespace LiteDB.Tests.Database; public class Writing_While_Reading_Test { [Fact] public void Test() { using var f = new TempFile(); using (var db = new LiteDatabase(f.Filename)) { var col = db.GetCollection("col"); col.Insert(new MyClass { Name = "John", Description = "Doe" }); col.Insert(new MyClass { Name = "Joana", Description = "Doe" }); col.Insert(new MyClass { Name = "Doe", Description = "Doe" }); } using (var db = new LiteDatabase(f.Filename)) { var col = db.GetCollection("col"); foreach (var item in col.FindAll()) { item.Description += " Changed"; col.Update(item); } db.Commit(); } using (var db = new LiteDatabase(f.Filename)) { var col = db.GetCollection("col"); foreach (var item in col.FindAll()) { Assert.EndsWith("Changed", item.Description); } } } class MyClass { public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } } } ================================================ FILE: LiteDB.Tests/Document/Bson_Tests.cs ================================================ using System; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Document { public class Bson_Tests { private BsonDocument CreateDoc() { // create same object, but using BsonDocument var doc = new BsonDocument(); doc["_id"] = 123; doc["Address"] = new BsonDocument {["city"] = "Atlanta", ["state"] = "XY"}; doc["FirstString"] = "BEGIN this string \" has \" \t and this \f \n\r END"; doc["CustomerId"] = Guid.NewGuid(); doc["Phone"] = new BsonDocument {["Mobile"] = "999", ["LandLine"] = "777"}; doc["Date"] = DateTime.Now; doc["MyNull"] = null; doc["EmptyObj"] = new BsonDocument(); doc["EmptyString"] = ""; doc["maxDate"] = DateTime.MaxValue; doc["minDate"] = DateTime.MinValue; doc["Items"] = new BsonArray(); doc["Items"].AsArray.Add(new BsonDocument()); doc["Items"].AsArray[0].AsDocument["Qtd"] = 3; doc["Items"].AsArray[0].AsDocument["Description"] = "Big beer package"; doc["Items"].AsArray[0].AsDocument["Unit"] = (double) 10 / (double) 3; doc["Items"].AsArray.Add("string-one"); doc["Items"].AsArray.Add(null); doc["Items"].AsArray.Add(true); doc["Items"].AsArray.Add(DateTime.Now); doc["Last"] = 999; return doc; } [Fact] public void Convert_To_Json_Bson() { var o = CreateDoc(); var bson = BsonSerializer.Serialize(o); var json = JsonSerializer.Serialize(o); var doc = BsonSerializer.Deserialize(bson); doc["_id"].AsInt32.Should().Be(123); doc["_id"].AsInt64.Should().Be(o["_id"].AsInt64); doc["FirstString"].AsString.Should().Be(o["FirstString"].AsString); doc["Date"].AsDateTime.ToString().Should().Be(o["Date"].AsDateTime.ToString()); doc["CustomerId"].AsGuid.Should().Be(o["CustomerId"].AsGuid); doc["EmptyString"].AsString.Should().Be(o["EmptyString"].AsString); doc["maxDate"].AsDateTime.Should().Be(DateTime.MaxValue); doc["minDate"].AsDateTime.Should().Be(DateTime.MinValue); doc["Items"].AsArray.Count.Should().Be(o["Items"].AsArray.Count); doc["Items"].AsArray[0].AsDocument["Unit"].AsDouble.Should().Be(o["Items"].AsArray[0].AsDocument["Unit"].AsDouble); doc["Items"].AsArray[4].AsDateTime.ToString().Should().Be(o["Items"].AsArray[4].AsDateTime.ToString()); } [Fact] public void Bson_Using_UTC_Local_Dates() { var doc = new BsonDocument {["now"] = DateTime.Now, ["min"] = DateTime.MinValue, ["max"] = DateTime.MaxValue}; var bytes = BsonSerializer.Serialize(doc); var local = BsonSerializer.Deserialize(bytes, false); var utc = BsonSerializer.Deserialize(bytes, true); // local test local["min"].AsDateTime.Should().Be(DateTime.MinValue); local["max"].AsDateTime.Should().Be(DateTime.MaxValue); local["now"].AsDateTime.Kind.Should().Be(DateTimeKind.Local); // utc test utc["min"].AsDateTime.Should().Be(DateTime.MinValue); utc["max"].AsDateTime.Should().Be(DateTime.MaxValue); utc["now"].AsDateTime.Kind.Should().Be(DateTimeKind.Utc); } [Fact] public void Bson_Partial_Deserialize() { var src = this.CreateDoc(); var bson = BsonSerializer.Serialize(src); // read only _id and string var doc1 = BsonSerializer.Deserialize(bson, false, new HashSet(new string[] {"_id", "FirstString"})); doc1["_id"].AsInt32.Should().Be(src["_id"].AsInt32); doc1["FirstString"].AsString.Should().Be(src["FirstString"].AsString); // read only 2 sub documents var doc2 = BsonSerializer.Deserialize(bson, false, new HashSet(new string[] {"Address", "Date"})); doc2["Address"].AsDocument.ToString().Should().Be(src["Address"].AsDocument.ToString()); doc2["Date"].AsDateTime.Should().Be(src["Date"].AsDateTime); // read only last field var doc3 = BsonSerializer.Deserialize(bson, false, new HashSet(new string[] {"Last"})); doc3["Last"].AsInt32.Should().Be(src["Last"].AsInt32); // read all document var doc4 = BsonSerializer.Deserialize(bson, false); doc4.ToString().Should().Be(src.ToString()); } [Fact] public void BsonMapper_AnonymousType() { var mapper = new BsonMapper(); var obj = new { Id = 1, Name = "John" }; var doc = mapper.ToDocument(obj); var obj2 = DeserializeAnonymous(mapper, doc, obj); Assert.Equal(obj.Id, obj2.Id); Assert.Equal(obj.Name, obj2.Name); static T DeserializeAnonymous(BsonMapper mapper, BsonDocument doc, T obj) { return mapper.Deserialize(doc); } } } } ================================================ FILE: LiteDB.Tests/Document/Case_Insensitive_Tests.cs ================================================ using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Document { public class Case_Insensitive_Tests { [Fact] public void Get_Document_Fields_Case_Insensitive() { var doc = new BsonDocument { ["_id"] = 10, ["name"] = "John", ["Last Job This Year"] = "admin" }; doc["_id"].AsInt32.Should().Be(10); doc["_ID"].AsInt32.Should().Be(10); doc["_Id"].AsInt32.Should().Be(10); doc["name"].AsString.Should().Be("John"); doc["Name"].AsString.Should().Be("John"); doc["NamE"].AsString.Should().Be("John"); doc["Last Job This Year"].AsString.Should().Be("admin"); doc["last JOB this YEAR"].AsString.Should().Be("admin"); // using expr BsonExpression.Create("$.['Last Job This Year']").Execute(doc).First().AsString.Should().Be("admin"); BsonExpression.Create("$.['Last JOB THIS Year']").Execute(doc).First().AsString.Should().Be("admin"); } } } ================================================ FILE: LiteDB.Tests/Document/Decimal_Tests.cs ================================================ using FluentAssertions; using Xunit; namespace LiteDB.Tests.Document { public class Decimal_Tests { [Fact] public void BsonValue_New_Decimal_Type() { var d0 = 0m; var d1 = 1m; var dmin = new BsonValue(decimal.MinValue); var dmax = new BsonValue(decimal.MaxValue); JsonSerializer.Serialize(d0).Should().Be("{\"$numberDecimal\":\"0\"}"); JsonSerializer.Serialize(d1).Should().Be("{\"$numberDecimal\":\"1\"}"); JsonSerializer.Serialize(dmin).Should().Be("{\"$numberDecimal\":\"-79228162514264337593543950335\"}"); JsonSerializer.Serialize(dmax).Should().Be("{\"$numberDecimal\":\"79228162514264337593543950335\"}"); var b0 = BsonSerializer.Serialize(new BsonDocument {{"A", d0}}); var b1 = BsonSerializer.Serialize(new BsonDocument {{"A", d1}}); var bmin = BsonSerializer.Serialize(new BsonDocument {{"A", dmin}}); var bmax = BsonSerializer.Serialize(new BsonDocument {{"A", dmax}}); var x0 = BsonSerializer.Deserialize(b0); var x1 = BsonSerializer.Deserialize(b1); var xmin = BsonSerializer.Deserialize(bmin); var xmax = BsonSerializer.Deserialize(bmax); x0["A"].AsDecimal.Should().Be(d0); x1["A"].AsDecimal.Should().Be(d1); xmin["A"].AsDecimal.Should().Be(dmin.AsDecimal); xmax["A"].AsDecimal.Should().Be(dmax.AsDecimal); } } } ================================================ FILE: LiteDB.Tests/Document/Implicit_Tests.cs ================================================ using FluentAssertions; using System; using Xunit; namespace LiteDB.Tests.Document { public class Implicit_Tests { [Fact] public void BsonValue_Implicit_Convert() { int i = int.MaxValue; long l = long.MaxValue; ulong u = ulong.MaxValue; BsonValue bi = i; BsonValue bl = l; BsonValue bu = u; bi.IsInt32.Should().BeTrue(); bl.IsInt64.Should().BeTrue(); bu.IsDouble.Should().BeTrue(); bi.AsInt32.Should().Be(i); bl.AsInt64.Should().Be(l); bu.AsDouble.Should().Be(u); } [Fact] public void BsonDocument_Inner() { var customer = new BsonDocument(); customer["_id"] = ObjectId.NewObjectId(); customer["Name"] = "John Doe"; customer["CreateDate"] = DateTime.Now; customer["Phones"] = new BsonArray { "8000-0000", "9000-000" }; customer["IsActive"] = true; customer["IsAdmin"] = new BsonValue(true); customer["Address"] = new BsonDocument { ["Street"] = "Av. Protasio Alves" }; customer["Address"]["Number"] = "1331"; var json = JsonSerializer.Serialize(customer); } } } ================================================ FILE: LiteDB.Tests/Document/Json_Tests.cs ================================================ using System; using System.Globalization; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Document { public class Json_Tests { private BsonDocument CreateDoc() { // create same object, but using BsonDocument var doc = new BsonDocument(); doc["_id"] = 123; doc["Special"] = "Màçã ámö-î"; doc["FirstString"] = "BEGIN this string \" has \" \t and this \f \n\r END"; doc["CustomerId"] = Guid.NewGuid(); doc["Date"] = new DateTime(2015, 1, 1); doc["MyNull"] = null; doc["Items"] = new BsonArray(); doc["MyObj"] = new BsonDocument(); doc["EmptyString"] = ""; var obj = new BsonDocument(); obj["Qtd"] = 3; obj["Description"] = "Big beer package"; obj["Unit"] = 1299.995; doc["Items"].AsArray.Add(obj); doc["Items"].AsArray.Add("string-one"); doc["Items"].AsArray.Add(null); doc["Items"].AsArray.Add(true); doc["Items"].AsArray.Add(DateTime.Now); return doc; } [Fact] public void Json_To_Document() { var o = CreateDoc(); var json = JsonSerializer.Serialize(o); var doc = JsonSerializer.Deserialize(json).AsDocument; doc["Special"].AsString.Should().Be(o["Special"].AsString); doc["Date"].AsDateTime.Should().Be(o["Date"].AsDateTime); doc["CustomerId"].AsGuid.Should().Be(o["CustomerId"].AsGuid); doc["Items"].AsArray.Count.Should().Be(o["Items"].AsArray.Count); doc["_id"].AsInt32.Should().Be(123); doc["_id"].AsInt64.Should().Be(o["_id"].AsInt64); } [Fact] public void JsonWriterTest() { var specialChars = "ÁÀÃÂÄÉÈÊËÉÍÌÎÏÓÒÕÔÖÚÙÛÜÇáàãâäéèêëéíìîïóòõôöúùûüç"; JsonSerializer.Serialize(specialChars).Should().Be('\"' + specialChars + '\"'); } [Fact] public void Json_Number_Deserialize_Test() { int positiveInt32 = 5000000; int negativeInt32 = -5000000; long positiveInt64 = 210000000000L; long negativeInt64 = -210000000000L; double positiveDouble = 210000000000D; double negativeDouble = -210000000000D; JsonSerializer.Deserialize(positiveInt32.ToString()).Should().Be(positiveInt32); JsonSerializer.Deserialize(negativeInt32.ToString()).Should().Be(negativeInt32); JsonSerializer.Deserialize(positiveInt64.ToString()).Should().Be(positiveInt64); JsonSerializer.Deserialize(negativeInt64.ToString()).Should().Be(negativeInt64); JsonSerializer.Deserialize(positiveDouble.ToString("F1", CultureInfo.InvariantCulture)).Should().Be(positiveDouble); JsonSerializer.Deserialize(negativeDouble.ToString("F1", CultureInfo.InvariantCulture)).Should().Be(negativeDouble); } [Fact] public void Json_DoubleNaN_Tests() { BsonDocument doc = new BsonDocument(); doc["doubleNaN"] = double.NaN; doc["doubleNegativeInfinity"] = double.NegativeInfinity; doc["doublePositiveInfinity"] = double.PositiveInfinity; // Convert to JSON string json = JsonSerializer.Serialize(doc); var bson = JsonSerializer.Deserialize(json); // JSON standard converts NaN and Infinities to null, so deserialized values should not be double.NaN nor double.*Infinity Assert.False(double.IsNaN(bson["doubleNaN"].AsDouble)); Assert.False(double.IsNegativeInfinity(bson["doubleNegativeInfinity"].AsDouble)); Assert.False(double.IsPositiveInfinity(bson["doublePositiveInfinity"].AsDouble)); } } } ================================================ FILE: LiteDB.Tests/Document/ObjectId_Tests.cs ================================================ using FluentAssertions; using Xunit; namespace LiteDB.Tests.Document { public class ObjectId_Tests { [Fact] public void ObjectId_BsonValue() { var oid0 = ObjectId.Empty; var oid1 = ObjectId.NewObjectId(); var oid2 = ObjectId.NewObjectId(); var oid3 = ObjectId.NewObjectId(); var c1 = new ObjectId(oid1); var c2 = new ObjectId(oid2.ToString()); var c3 = new ObjectId(oid3.ToByteArray()); oid0.Should().Be(ObjectId.Empty); oid1.Should().Be(c1); oid2.Should().Be(c2); oid3.Should().Be(c3); c2.CompareTo(c3).Should().Be(-1); // 1 < 2 c1.CompareTo(c2).Should().Be(-1); // 2 < 3 // serializations var joid = JsonSerializer.Serialize(c1); var jc1 = JsonSerializer.Deserialize(joid).AsObjectId; jc1.Should().Be(c1); } [Fact] public void ObjectId_Equals_Null_Does_Not_Throw() { var oid0 = default(ObjectId); var oid1 = ObjectId.NewObjectId(); oid1.Equals(null).Should().BeFalse(); oid1.Equals(oid0).Should().BeFalse(); } } } ================================================ FILE: LiteDB.Tests/Engine/Collation_Tests.cs ================================================ using FluentAssertions; using LiteDB.Engine; using System.Globalization; using System.IO; using System.Linq; using System.Threading; using Xunit; namespace LiteDB.Tests.Engine { public class Collation_Tests { [Fact] public void Culture_Ordinal_Sort() { // 1046 = pt-BR var collation = new Collation(1046, CompareOptions.IgnoreCase); var s = new EngineSettings { DataStream = new MemoryStream() }; var names = new string[] { "Ze", "Ana", "Ána", "Ánã", "Ana Paula", "ana lucia" }; var sortByLinq = names.OrderBy(x => x, collation).ToArray(); var findByLinq = names.Where(x => collation.Compare(x, "ANA") == 0).ToArray(); using(var e = new LiteEngine(s)) { //e.Rebuild(new RebuildOptions { Collation = collation }); e.Insert("col1", names.Select(x => new BsonDocument { ["name"] = x }), BsonAutoId.Int32); // sort by merge sort var sortByOrderByName = e.Query("col1", new Query { OrderBy = "name" }) .ToEnumerable() .Select(x => x["name"].AsString) .ToArray(); var query = new Query(); query.Where.Add("name = 'ANA'"); // find by expression var findByExpr = e.Query("col1", query) .ToEnumerable() .Select(x => x["name"].AsString) .ToArray(); sortByOrderByName.Should().BeEquivalentTo(sortByLinq); findByExpr.Should().BeEquivalentTo(findByLinq); // index test e.EnsureIndex("col1", "idx_name", "name", false); // sort by index var sortByIndexName = e.Query("col1", new Query { OrderBy = "name" }) .ToEnumerable() .Select(x => x["name"].AsString) .ToArray(); // find by index var findByIndex = e.Query("col1", query) .ToEnumerable() .Select(x => x["name"].AsString) .ToArray(); sortByIndexName.Should().BeEquivalentTo(sortByLinq); findByIndex.Should().BeEquivalentTo(findByLinq); } } [Fact(Skip = "Must fix in CI - works only in Windows local machine")] public void Create_Database_Using_Current_Culture() { var current = CultureInfo.CurrentCulture; CultureInfo.CurrentCulture = new CultureInfo("fi"); using (var e = new LiteEngine()) { var d = e.Pragma(Pragmas.COLLATION); d.AsString.Should().Be("fi/IgnoreCase"); } CultureInfo.CurrentCulture = current; } [Fact] public void Change_Thread_Culture() { using(var f = new TempFile()) { var current = CultureInfo.CurrentCulture; CultureInfo.CurrentCulture = new CultureInfo("fi"); // store in database using "fi" culture using (var e = new LiteEngine(f.Filename)) { e.Insert("col1", data.Select(x => new BsonDocument { ["_id"] = x }), BsonAutoId.Int32); } // change current culture do "en-GB" CultureInfo.CurrentCulture = new CultureInfo("en-gb"); using (var e = new LiteEngine(f.Filename)) { foreach(var id in data) { var doc = e.Find("col1", BsonExpression.Create("_id = @0", id)).Single(); doc["_id"].AsString.Should().Be(id); } } CultureInfo.CurrentCulture = current; } } [Fact] public void Collaction_New_Database() { var s = new EngineSettings { DataStream = new MemoryStream(), Collation = new Collation("en-US/None") }; using (var db = new LiteDatabase(new LiteEngine(s))) { db.Collation.Culture.Name.Should().Be("en-US"); db.Collation.SortOptions.Should().Be(CompareOptions.None); } } private readonly string[] data = new string[] { "r6pfkr.4keQyr", "r6pfjI.31qrGW", "r6pfjy.1ryYCW", "r6pfjs.1iCqiD", "r6pfjm.2xXoUr", "r6pfj9.sYaWO", "r6pfgj.1aguPU", "r6pfgd.kKEyS", "r6pfg7.1PD90r", "r6pffZ.1JrB8C", "r6pffU.4Exn9y", "r6pffN.atYDW", "r6pfc1.4cqgs6", "r6pfbF.1YAU7Y", "r6pfbx.463ddU", "r6pfbr.3HzECI", "r6pf9r.4ynNR", "r6pf9k.4GtaSC", "r6pf8S.4GyjFo", "r6pf49.335Ko4", "r6pf3V.rKPCX", "r6peZa.3af9h8", "r6peYq.2sDiQt", "r6peXj.1NkX0l", "r6peXc.1z8Gke", "r6peX5.mwSkb", "r6peWY.1ERxZg", "r6peWS.30hjll", "r6peR6.3UNjHd", "r6peQd.kxoMi", "r6peMK.dCIVO", "r6peLi.4AEHU3", "r6peL2.1qbyCp", "r6peKW.2v9U7X", "r6pevW.ziicH", "r6pevQ.2R9iwj", "r6pevd.3SfYHD", "r6peuv.1ji9F4", "r6pesc.2BXuZt", "r6penL.3pRAK0", "r6penD.28lRKL", "r6pekV.4CQNO9", "r6pekP.3N2SgM", "r6peiK.ZCbYg", "r6pefr.4aYnvN", "r6pef8.1xvyOh", "r6pebO.3q4BLp", "r6pebH.1QOhn9", "r6pdU8.2CMl0G", "r6pdTr.21C0Jo", "r6pdTl.1gZkJS", "r6pdSZ.11aUim", "r6pdS8.4ajIuB", "r6pdRz.2rOGSP", "r6pdRs.3U8IIx", "r6pdRe.2TwNN4", "r6pdR7.kgbfa", "r6pdPu.1eNFMi", "r6pdO7.3kq0nv", "r6pdO3.29BOsB", "r6pdNX.uS8hE", "r6pdNg.2ucRK5", "r6pdML.R1XyW", "r6pdH3.vgJzk", "r6pdGW.222gtT", "r6pdFg.dPgET", "r6pdD5.3izAKD", "r6pdCV.jkjQL", "r6pdyA.1p23Cc", "r6pdyq.1I9JIJ", "r6pdyg.1fSOFi", "r6pdvo.13PNdE", "r6pdvi.1hlgNk", "r6pdu5.1klb90", "r6pdtZ.X4e7j", "r6pdpd.3JMgtk", "r6pdmM.2Is3UL", "r6pdmH.1nDz9w", "r6pdmB.9rN7V", "r6pdjz.fkNfw", "r6pdit.3ruGes", "r6pdfN.43XLD1", "r6pdf0.2Z8i47", "r6pdeT.4czd5C", "r6pdeM.4yDpDL", "r6pd9p.406cIF", "r6pd7v.3xqJEk", "r6pcXN.1EEqIY", "r6pcXG.1NDfe4", "r6pcXv.1Yr5D4", "r6pcVz.3q8hEX", "r6pcVt.1RFapt", "r6pcOX.13oday", "r6pcOG.WJfzH", "r6pcOz.1qNZKG", "r6pcLv.4CyFii", "r6pcIt.2xFaQc", "r6pcIm.321Qpx", "r6pcEZ.2il0Z9", "r6pcEN.2irJz3", "r6pcty.48iYe5", "r6pcll.20YWd8", "r6pcii.1zgAsv", "r6pcdC.2RDRSN", "r6pcb2.LrkxT", "r6pcaq.20bCEh", "r6pc9f.1GmU8z", "r6pc3A.2tpydA", "r6pc1M.3ZISZZ", "r6pc1A.jky3a", "r6pbU2.AZMkB", "r6pbTT.3ENCXm", "r6pbTL.3dFiv4", "r6pbTC.47mjqT", "r6pbR0.2tMF28", "r6pbv5.183tiK", "r6pbqi.H04AO", "r6pblA.4jVc6v", "r6pbc5.qU3M1", "r6pbc0.2x9f5u", "r6pb8S.4lqxEf", "r6pb8F.3hKJ9f", "r6pb2N.1nv2oa", "r6paXU.2vI8FP", "r6paT3.23Tc9r", "r6paSz.6uVlP", "r6paPM.t26Qg", "r6paJh.4aCf0M","r6paDT.hTI7Z", "r6pax9.1Kj7nL", "r6paw6.13iLNH", "r6parj.4mQxY", "r6parc.3yGSF2", "r6paqU.48WiSL", "r6paow.r0t0M", "r6panr.2EIzK4", "r6panc.41QPvW", "r6pakd.2xqwi1", "r6pahn.1KDZEH", "r6pagD.40T2zQ", "r6pa0s.UaqJC", "r6p9WU.8SSSe", "r6p9RM.4pS5AB", "r6p9OW.2ko8Tq", "r6p9Jw.2hWpU6", "r6p9Fa.3lFxDy", "r6p9Cy.3rqkGv", "r6p9xC.1xrjLm", "r6p9xw.3THBs7", "r6p9p5.FP1JE" }; } } ================================================ FILE: LiteDB.Tests/Engine/Create_Database_Tests.cs ================================================ using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Engine { /*public class Create_Database_Tests { [Fact] public void Create_Database_With_Initial_Size() { var initial = 163840; // initial size: 20 x 8192 = 163.840 bytes var minimal = 8192 * 4; // 1 header + 1 collection + 1 data + 1 index = 4 pages minimal using (var file = new TempFile()) using (var db = new LiteEngine(new EngineSettings { Filename = file.Filename, InitialSize = initial })) { // test if file has 40kb Assert.Equal(initial, file.Size); // insert minimal data db.Insert("col1", new BsonDocument { ["a"] = 1 }); Assert.Equal(initial, file.Size); // ok, now shrink and test if file are minimal size db.Shrink(); Assert.Equal(minimal, file.Size); } } }*/ } ================================================ FILE: LiteDB.Tests/Engine/Crypto_Tests.cs ================================================ using System.IO; using System.Linq; using System.Text; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Engine { public class Crypto_Tests { [Fact] public void Plain_Datafile() { var data = new MemoryStream(); var log = new MemoryStream(); var settings = new EngineSettings {DataStream = data, LogStream = log}; using (var e = new LiteEngine(settings)) { this.CreateDatabase(e); // find string inside stream var dataStr = Encoding.UTF8.GetString(data.ToArray()); // plain datafile will found strings dataStr.Should().Contain("mycol"); dataStr.Should().Contain("Mauricio"); // plain datafile will consume only 4 pages: 1 header, 1 collection, 1 data e 1 index (data.Length / 8192).Should().Be(4); } } [Fact] public void Crypto_Datafile() { var data = new MemoryStream(); var log = new MemoryStream(); var settings = new EngineSettings {DataStream = data, LogStream = log, Password = "abc"}; using (var e = new LiteEngine(settings)) { this.CreateDatabase(e); // find string inside stream var dataStr = Encoding.UTF8.GetString(data.ToArray()); // encrypted datafile will not found plain strings dataStr.Should().NotContain("mycol"); dataStr.Should().NotContain("Mauricio"); // but document exists! var doc = e.Find("mycol", "_id=1").First(); doc["name"].AsString.Should().Be("Mauricio"); // encrypted datafile will consume 5 pages: 1 salt page, 1 header, 1 collection, 1 data e 1 index (data.Length / 8192).Should().Be(5); } } private void CreateDatabase(LiteEngine engine) { engine.Insert("mycol", new[] { new BsonDocument { ["_id"] = 1, ["name"] = "Mauricio" } }, BsonAutoId.Int32); // do checkpoint to use only data file engine.Checkpoint(); } } } ================================================ FILE: LiteDB.Tests/Engine/DropCollection_Tests.cs ================================================ using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Engine { public class DropCollection_Tests { [Fact] public void DropCollection() { using (var file = new TempFile()) using (var db = new LiteDatabase(file.Filename)) { db.GetCollectionNames().Should().NotContain("col"); var col = db.GetCollection("col"); col.Insert(new BsonDocument {["a"] = 1}); db.GetCollectionNames().Should().Contain("col"); db.DropCollection("col"); db.GetCollectionNames().Should().NotContain("col"); } } [Fact] public void InsertDropCollection() { using (var file = new TempFile()) { using (var db = new LiteDatabase(file.Filename)) { var col = db.GetCollection("test"); col.Insert(new BsonDocument { ["_id"] = 1 }); db.DropCollection("test"); db.Rebuild(); } using (var db = new LiteDatabase(file.Filename)) { var col = db.GetCollection("test"); col.Insert(new BsonDocument { ["_id"] = 1 }); } } } } } ================================================ FILE: LiteDB.Tests/Engine/Index_Tests.cs ================================================ using System; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Engine { public class Index_Tests { [Fact] public void Index_With_No_Name() { using (var db = new LiteDatabase("filename=:memory:")) { var users = db.GetCollection("users"); var indexes = db.GetCollection("$indexes"); users.Insert(new BsonDocument { ["name"] = new BsonDocument { ["first"] = "John", ["last"] = "Doe" } }); users.Insert(new BsonDocument { ["name"] = new BsonDocument { ["first"] = "Marco", ["last"] = "Pollo" } }); // no index name defined users.EnsureIndex("name.last"); users.EnsureIndex("$.name.first", true); // default name: remove all non-[a-z] chars indexes.Invoking(indexCol => indexCol.FindOne("collection = 'users' AND name = 'namelast'")).Should().NotBeNull(); indexes.Invoking(indexCol => indexCol.FindOne("collection = 'users' AND name = 'namefirst'")).Should().NotBeNull(); } } [Fact] public void Index_Order() { using (var db = new LiteDatabase("filename=:memory:")) { var col = db.GetCollection("col"); var indexes = db.GetCollection("$indexes"); col.Insert(new BsonDocument { { "text", "D" } }); col.Insert(new BsonDocument { { "text", "A" } }); col.Insert(new BsonDocument { { "text", "E" } }); col.Insert(new BsonDocument { { "text", "C" } }); col.Insert(new BsonDocument { { "text", "B" } }); col.EnsureIndex("text"); var asc = string.Join("", col.Query() .OrderBy("text") .Select("text") .ToDocuments() .Select(x => x["text"].AsString)); var desc = string.Join("", col.Query() .OrderByDescending("text") .Select("text") .ToDocuments() .Select(x => x["text"].AsString)); asc.Should().Be("ABCDE"); desc.Should().Be("EDCBA"); var rr = indexes.Query().ToList(); indexes.Count("name = 'text'").Should().Be(1); } } [Fact] public void Index_With_Like() { using (var db = new LiteDatabase("filename=:memory:")) { var col = db.GetCollection("names", BsonAutoId.Int32); col.Insert(new[] { new BsonDocument {["name"] = "marcelo"}, new BsonDocument {["name"] = "mauricio"}, new BsonDocument {["name"] = "Mauricio"}, new BsonDocument {["name"] = "MAUricio"}, new BsonDocument {["name"] = "MAURICIO"}, new BsonDocument {["name"] = "mauRO"}, new BsonDocument {["name"] = "ANA"} }); col.EnsureIndex("idx_name", "name", false); var all = db.Execute("SELECT name FROM names").ToArray(); // LIKE are case insensitive var r0 = db.Execute("SELECT name FROM names WHERE name LIKE 'Mau%'").ToArray(); var r1 = db.Execute("SELECT name FROM names WHERE name LIKE 'MAU%'").ToArray(); var r2 = db.Execute("SELECT name FROM names WHERE name LIKE 'mau%'").ToArray(); r0.Length.Should().Be(5); r1.Length.Should().Be(5); r2.Length.Should().Be(5); // only `mauricio´ var r3 = db.Execute("SELECT name FROM names WHERE name LIKE 'ma%ci%'").ToArray(); var r4 = db.Execute("SELECT name FROM names WHERE name LIKE 'maUriCIO").ToArray(); r3.Length.Should().Be(4); r4.Length.Should().Be(4); var r5 = db.Execute("SELECT name FROM names WHERE name LIKE 'marc_o").ToArray(); r5.Length.Should().Be(0); // `marcelo` var r6 = db.Execute("SELECT name FROM names WHERE name LIKE 'marc__o").ToArray(); r6.Length.Should().Be(1); } } [Fact] public void EnsureIndex_Invalid_Arguments() { using var db = new LiteDatabase("filename=:memory:"); var test = db.GetCollection("test"); // null name { var exn = Assert.Throws(() => test.EnsureIndex(null, "x", false)); Assert.Equal("name", exn.ParamName); } // null expression 1 { var exn = Assert.Throws(() => test.EnsureIndex(null, false)); Assert.Equal("expression", exn.ParamName); } // null expression 2 { var exn = Assert.Throws(() => test.EnsureIndex("x", null, false)); Assert.Equal("expression", exn.ParamName); } } [Fact] public void MultiKey_Index_Test() { using var db = new LiteDatabase("filename=:memory:"); var col = db.GetCollection("customers", BsonAutoId.Int32); col.EnsureIndex("$.Phones[*].Type"); var doc1 = new BsonDocument { ["Name"] = "John Doe", ["Phones"] = new BsonArray ( new BsonDocument { ["Type"] = "Mobile", ["Number"] = "9876-5432" }, new BsonDocument { ["Type"] = "Fixed", ["Number"] = "3333-3333" } ) }; var doc2 = new BsonDocument { ["Name"] = "Jane Doe", ["Phones"] = new BsonArray ( new BsonDocument { ["Type"] = "Fixed", ["Number"] = "3000-0000" } ) }; col.Insert(doc1); col.Insert(doc2); var query1 = "select $ from customers where $.Phones[*].Type any = 'Mobile'"; var query2 = "select $ from customers where $.Phones[*].Type any = 'Fixed'"; var explain1 = db.Execute("explain " + query1).First(); Assert.True(!explain1["index"]["mode"].AsString.Contains("_id")); var explain2 = db.Execute("explain " + query2).First(); Assert.True(!explain2["index"]["mode"].AsString.Contains("_id")); var result1 = db.Execute(query1).ToArray(); Assert.True(result1.Length == 1); var result2 = db.Execute(query2).ToArray(); Assert.True(result2.Length == 2); } } } ================================================ FILE: LiteDB.Tests/Engine/ParallelQuery_Tests.cs ================================================ using System.Collections.Concurrent; using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Engine { public class ParallelQuery_Tests { [Fact(Skip = "Must fix parallel query fetch")] public void Query_Parallel() { using(var db = new LiteDatabase(new MemoryStream())) { var col = db.GetCollection("person"); var all = DataGen.Person().ToArray(); col.Insert(all); var bag = new ConcurrentBag(); var people = col.FindAll(); Parallel.ForEach(people, person => //foreach(var person in people) { var col2 = db.GetCollection("person"); var exists = col2.Exists(x => x.Id == person.Id); if (exists) { var col3 = db.GetCollection("person"); var item = col3.FindOne(x => x.Id == person.Id); bag.Add(item); } }); all.Length.Should().Be(bag.Count); } } } } ================================================ FILE: LiteDB.Tests/Engine/Rebuild_Crash_Tests.cs ================================================ using FluentAssertions; using LiteDB.Engine; using System; using System.IO; using System.Linq; using Xunit; #if DEBUG namespace LiteDB.Tests.Engine { public class Rebuild_Crash_Tests { [Fact] public void Rebuild_Crash_IO_Write_Error() { var N = 1_000; using (var file = new TempFile()) { var settings = new EngineSettings { AutoRebuild = true, Filename = file.Filename, Password = "46jLz5QWd5fI3m4LiL2r" }; var data = Enumerable.Range(1, N).Select(i => new BsonDocument { ["_id"] = i, ["name"] = Faker.Fullname(), ["age"] = Faker.Age(), ["created"] = Faker.Birthday(), ["lorem"] = Faker.Lorem(5, 25) }).ToArray(); try { using (var db = new LiteEngine(settings)) { db.SimulateDiskWriteFail = (page) => { var p = new BasePage(page); if (p.PageID == 28) { p.ColID.Should().Be(1); p.PageType.Should().Be(PageType.Data); page.Write((uint)123123123, 8192 - 4); } }; db.Pragma("USER_VERSION", 123); db.EnsureIndex("col1", "idx_age", "$.age", false); db.Insert("col1", data, BsonAutoId.Int32); db.Insert("col2", data, BsonAutoId.Int32); db.Checkpoint(); // will fail var col1 = db.Query("col1", Query.All()).ToList().Count; // never run here Assert.Fail("should get error in query"); } } catch (Exception ex) { Assert.True(ex is LiteException lex && lex.ErrorCode == 999); } //Console.WriteLine("Recovering database..."); using (var db = new LiteEngine(settings)) { var col1 = db.Query("col1", Query.All()).ToList().Count; var col2 = db.Query("col2", Query.All()).ToList().Count; var errors = db.Query("_rebuild_errors", Query.All()).ToList().Count; col1.Should().Be(N - 1); col2.Should().Be(N); errors.Should().Be(1); } } } } } #endif ================================================ FILE: LiteDB.Tests/Engine/Rebuild_Tests.cs ================================================ using FluentAssertions; using LiteDB.Engine; using System; using System.IO; using System.Linq; using Xunit; namespace LiteDB.Tests.Engine { public class Rebuild_Tests { [Fact] public void Rebuild_After_DropCollection() { using (var file = new TempFile()) using (var db = new LiteDatabase(file.Filename)) { var col = db.GetCollection("zip"); col.Insert(DataGen.Zip()); db.DropCollection("zip"); db.Checkpoint(); // full disk usage var size = file.Size; var r = db.Rebuild(); // only header page Assert.Equal(8192, size - r); } } [Fact] public void Rebuild_Large_Files() { // do some tests void DoTest(ILiteDatabase db, ILiteCollection col) { Assert.Equal(1, col.Count()); Assert.Equal(99, db.UserVersion); }; using (var file = new TempFile()) { using (var db = new LiteDatabase(file.Filename)) { var col = db.GetCollection(); db.UserVersion = 99; col.EnsureIndex("city", false); var inserted = col.Insert(DataGen.Zip()); // 29.353 docs var deleted = col.DeleteMany(x => x.Id != "01001"); // delete 29.352 docs Assert.Equal(29353, inserted); Assert.Equal(29352, deleted); Assert.Equal(1, col.Count()); // must checkpoint db.Checkpoint(); // file still large than 5mb (even with only 1 document) Assert.True(file.Size > 5 * 1024 * 1024); // reduce datafile var reduced = db.Rebuild(); // now file are small than 50kb Assert.True(file.Size < 50 * 1024); DoTest(db, col); } // re-open and rebuild again using (var db = new LiteDatabase(file.Filename)) { var col = db.GetCollection(); DoTest(db, col); db.Rebuild(); DoTest(db, col); } } } [Fact (Skip = "Not supported yet")] public void Rebuild_Change_Culture_Error() { using (var file = new TempFile()) using (var db = new LiteDatabase(file.Filename)) { // remove string comparer ignore case db.Rebuild(new RebuildOptions { Collation = new Collation("en-US/None") }); // insert 2 documents with different ID in case sensitive db.GetCollection("col1").Insert(new BsonDocument[] { new BsonDocument { ["_id"] = "ana" }, new BsonDocument { ["_id"] = "ANA" } }); // migrate to ignorecase db.Rebuild(new RebuildOptions { Collation = new Collation("en-US/IgnoreCase"), IncludeErrorReport = true }); // check for rebuild errors db.GetCollection("_rebuild_errors").Count().Should().BeGreaterThan(0); // test if current pragma still with collation none db.Pragma(Pragmas.COLLATION).AsString.Should().Be("en-US/None"); } } } } ================================================ FILE: LiteDB.Tests/Engine/Recursion_Tests.cs ================================================ using System; using Xunit; namespace LiteDB.Tests.Engine; public class Recursion_Tests { [Fact] public void UpdateInFindAll() { Test(collection => { foreach (BsonDocument document in collection.FindAll()) { collection.Update(document); } }); } [Fact] public void InsertDeleteInFindAll() { Test(collection => { foreach (BsonDocument document in collection.FindAll()) { BsonValue id = collection.Insert(new BsonDocument()); collection.Delete(id); } }); } [Fact] public void QueryInFindAll() { Test(collection => { foreach (BsonDocument document in collection.FindAll()) { collection.Query().Count(); } }); } private void Test(Action> action) { using LiteDatabase database = new(new ConnectionString() { Filename = "Demo.db", Connection = ConnectionType.Shared, }); ILiteCollection accounts = database.GetCollection("Recursion"); if (accounts.Count() < 3) { accounts.Insert(new BsonDocument()); accounts.Insert(new BsonDocument()); accounts.Insert(new BsonDocument()); } action(accounts); } } ================================================ FILE: LiteDB.Tests/Engine/Transactions_Tests.cs ================================================ using System.IO; using System.Linq; using System.Threading; using System.Threading.Tasks; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Engine { using System; public class Transactions_Tests { [Fact] public async Task Transaction_Write_Lock_Timeout() { var data1 = DataGen.Person(1, 100).ToArray(); var data2 = DataGen.Person(101, 200).ToArray(); using (var db = new LiteDatabase("filename=:memory:")) { // small timeout db.Pragma(Pragmas.TIMEOUT, 1); var person = db.GetCollection(); // init person collection with 100 document person.Insert(data1); var taskASemaphore = new SemaphoreSlim(0, 1); var taskBSemaphore = new SemaphoreSlim(0, 1); // task A will open transaction and will insert +100 documents // but will commit only 2s later var ta = Task.Run(() => { db.BeginTrans(); person.Insert(data2); taskBSemaphore.Release(); taskASemaphore.Wait(); var count = person.Count(); count.Should().Be(data1.Length + data2.Length); db.Commit(); }); // task B will try delete all documents but will be locked during 1 second var tb = Task.Run(() => { taskBSemaphore.Wait(); db.BeginTrans(); person .Invoking(personCol => personCol.DeleteMany("1 = 1")) .Should() .Throw() .Where(ex => ex.ErrorCode == LiteException.LOCK_TIMEOUT); taskASemaphore.Release(); }); await Task.WhenAll(ta, tb); } } [Fact] public async Task Transaction_Avoid_Dirty_Read() { var data1 = DataGen.Person(1, 100).ToArray(); var data2 = DataGen.Person(101, 200).ToArray(); using (var db = new LiteDatabase(new MemoryStream())) { var person = db.GetCollection(); // init person collection with 100 document person.Insert(data1); var taskASemaphore = new SemaphoreSlim(0, 1); var taskBSemaphore = new SemaphoreSlim(0, 1); // task A will open transaction and will insert +100 documents // but will commit only 1s later - this plus +100 document must be visible only inside task A var ta = Task.Run(() => { db.BeginTrans(); person.Insert(data2); taskBSemaphore.Release(); taskASemaphore.Wait(); var count = person.Count(); count.Should().Be(data1.Length + data2.Length); db.Commit(); taskBSemaphore.Release(); }); // task B will not open transaction and will wait 250ms before and count collection - // at this time, task A already insert +100 document but here I can't see (are not committed yet) // after task A finish, I can see now all 200 documents var tb = Task.Run(() => { taskBSemaphore.Wait(); var count = person.Count(); // read 100 documents count.Should().Be(data1.Length); taskASemaphore.Release(); taskBSemaphore.Wait(); // read 200 documents count = person.Count(); count.Should().Be(data1.Length + data2.Length); }); await Task.WhenAll(ta, tb); } } [Fact] public async Task Transaction_Read_Version() { var data1 = DataGen.Person(1, 100).ToArray(); var data2 = DataGen.Person(101, 200).ToArray(); using (var db = new LiteDatabase(new MemoryStream())) { var person = db.GetCollection(); // init person collection with 100 document person.Insert(data1); var taskASemaphore = new SemaphoreSlim(0, 1); var taskBSemaphore = new SemaphoreSlim(0, 1); // task A will insert more 100 documents but will commit only 1s later var ta = Task.Run(() => { db.BeginTrans(); person.Insert(data2); taskBSemaphore.Release(); taskASemaphore.Wait(); db.Commit(); taskBSemaphore.Release(); }); // task B will open transaction too and will count 100 original documents only // but now, will wait task A finish - but is in transaction and must see only initial version var tb = Task.Run(() => { db.BeginTrans(); taskBSemaphore.Wait(); var count = person.Count(); // read 100 documents count.Should().Be(data1.Length); taskASemaphore.Release(); taskBSemaphore.Wait(); // keep reading 100 documents because i'm still in same transaction count = person.Count(); count.Should().Be(data1.Length); }); await Task.WhenAll(ta, tb); } } [Fact] public void Test_Transaction_States() { var data0 = DataGen.Person(1, 10).ToArray(); var data1 = DataGen.Person(11, 20).ToArray(); using (var db = new LiteDatabase(new MemoryStream())) { var person = db.GetCollection(); // first time transaction will be opened db.BeginTrans().Should().BeTrue(); // but in second type transaction will be same db.BeginTrans().Should().BeFalse(); person.Insert(data0); // must commit transaction db.Commit().Should().BeTrue(); // no transaction to commit db.Commit().Should().BeFalse(); // no transaction to rollback; db.Rollback().Should().BeFalse(); db.BeginTrans().Should().BeTrue(); // no page was changed but ok, let's rollback anyway db.Rollback().Should().BeTrue(); // auto-commit person.Insert(data1); person.Count().Should().Be(20); } } private class BlockingStream : MemoryStream { public readonly AutoResetEvent Blocked = new AutoResetEvent(false); public readonly ManualResetEvent ShouldUnblock = new ManualResetEvent(false); public bool ShouldBlock; public override void Write(byte[] buffer, int offset, int count) { if (this.ShouldBlock) { this.Blocked.Set(); this.ShouldUnblock.WaitOne(); this.Blocked.Reset(); } base.Write(buffer, offset, count); } } [Fact] public void Test_Transaction_ReleaseWhenFailToStart() { var blockingStream = new BlockingStream(); var db = new LiteDatabase(blockingStream) { Timeout = TimeSpan.FromSeconds(1) }; Thread lockerThread = null; try { lockerThread = new Thread(() => { db.GetCollection().Insert(new Person()); blockingStream.ShouldBlock = true; db.Checkpoint(); db.Dispose(); }); lockerThread.Start(); blockingStream.Blocked.WaitOne(1000).Should().BeTrue(); Assert.Throws(() => db.GetCollection().Insert(new Person())).Message.Should().Contain("timeout"); Assert.Throws(() => db.GetCollection().Insert(new Person())).Message.Should().Contain("timeout"); } finally { blockingStream.ShouldUnblock.Set(); lockerThread?.Join(); } } } } ================================================ FILE: LiteDB.Tests/Engine/Update_Tests.cs ================================================ using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Engine { public class Update_Tests { [Fact] public void Update_IndexNodes() { using (var db = new LiteEngine()) { var doc = new BsonDocument {["_id"] = 1, ["name"] = "Mauricio", ["phones"] = new BsonArray() {"51", "11"}}; db.Insert("col1", doc); db.EnsureIndex("col1", "idx_name", "name", false); db.EnsureIndex("col1", "idx_phones", "phones[*]", false); doc["name"] = "David"; doc["phones"] = new BsonArray() {"11", "25"}; db.Update("col1", doc); doc["name"] = "John"; db.Update("col1", doc); } } [Fact] public void Update_ExtendBlocks() { using (var db = new LiteEngine()) { var doc = new BsonDocument {["_id"] = 1, ["d"] = new byte[1000]}; db.Insert("col1", doc); // small (same page) doc["d"] = new byte[300]; db.Update("col1", doc); var page3 = db.GetPageLog(3); page3["freeBytes"].AsInt32.Should().Be(7828); // big (same page) doc["d"] = new byte[2000]; db.Update("col1", doc); page3 = db.GetPageLog(3); page3["freeBytes"].AsInt32.Should().Be(6128); // big (extend page) doc["d"] = new byte[20000]; db.Update("col1", doc); page3 = db.GetPageLog(3); var page4 = db.GetPageLog(4); var page5 = db.GetPageLog(5); page3["freeBytes"].AsInt32.Should().Be(0); page4["freeBytes"].AsInt32.Should().Be(0); page5["freeBytes"].AsInt32.Should().Be(4428); // small (shrink page) doc["d"] = new byte[10000]; db.Update("col1", doc); page3 = db.GetPageLog(3); page4 = db.GetPageLog(4); page5 = db.GetPageLog(5); page3["freeBytes"].AsInt32.Should().Be(0); page4["freeBytes"].AsInt32.Should().Be(6278); page5["pageType"].AsString.Should().Be("Empty"); } } [Fact] public void Update_Empty_Collection() { using(var e = new LiteEngine()) { var d = new BsonDocument { ["_id"] = 1, ["a"] = "demo" }; var r = e.Update("col1", new BsonDocument[] { d }); r.Should().Be(0); } } } } ================================================ FILE: LiteDB.Tests/Engine/UserVersion_Tests.cs ================================================ using FluentAssertions; using Xunit; namespace LiteDB.Tests.Engine { public class UserVersion_Tests { [Fact] public void UserVersion_Get_Set() { using (var file = new TempFile()) { using (var db = new LiteDatabase(file.Filename)) { db.UserVersion.Should().Be(0); db.UserVersion = 5; db.Checkpoint(); } using (var db = new LiteDatabase(file.Filename)) { db.UserVersion.Should().Be(5); } } } } } ================================================ FILE: LiteDB.Tests/Expressions/Expressions_Exec_Tests.cs ================================================ using FluentAssertions; using System; using System.Collections.Generic; using Xunit; namespace LiteDB.Tests.Expressions { public class ExpressionsExec_Tests { public BsonDocument J(string j) => JsonSerializer.Deserialize(j).AsDocument; [Fact] public void Expressions_Scalar_Path() { BsonDocument doc; BsonValue S(string s) { return BsonExpression.Create(s).ExecuteScalar(doc); } // cover the fix of "copy/paste" errors doc = new BsonDocument(); S("[1, 6] ALL > 5").ExpectValue(false); S("[1, 6] ALL >= 5").ExpectValue(false); S("[1, 6] ALL < 5").ExpectValue(false); S("[1, 6] ALL <= 5").ExpectValue(false); S("[1, 5] ALL != 5").ExpectValue(false); // direct path navigation doc = J("{ a: 1, b: null, c: true, d:[1,2], e:{d:4} }"); S("a").ExpectValue(1); S("b").ExpectValue(BsonValue.Null); S("c").ExpectValue(true); S("d").ExpectArray(1, 2); S("e").ExpectJson("{d:4}"); // dive into subdocumentos doc = J("{ a: { b: { c: { d: 1 } } } }"); S("a").ExpectJson("{ b: { c: { d: 1 } } }"); S("a.b").ExpectJson("{ c: { d: 1 } }"); S("a.b.c").ExpectJson("{ d: 1 }"); S("a.b.c.d").ExpectValue(1); // Missing field doc = J("{ a: { b: 1 } }"); S("b").ExpectValue(BsonValue.Null); S("a.c").ExpectValue(BsonValue.Null); S("x.j").ExpectValue(BsonValue.Null); // Array fixed position doc = J("{ a: [1, 2, 3] }"); S("a[0]").ExpectValue(1); S("a[1]").ExpectValue(2); S("a[-1]").ExpectValue(3); S("a[99]").ExpectValue(BsonValue.Null); // Root and Current in array doc = J("{ a: [ { b: 1, c: 2 }, { b: 2, c: 3 } ], i: 0 }"); S("FIRST(a[@.b = 1].c)").ExpectValue(2); S("FIRST(a[b = 2].c)").ExpectValue(3); // Complex field name doc = J("{ \"a b\": 1, \"c d\": { \"x y\": 2 }, x: { \"$y!z\\\"'\": 3 } }"); S("$.[\"a b\"]").ExpectValue(1); S("$.['c d'].['x y']").ExpectValue(2); S("$.x.[\"$y!z\\\"'\"]").ExpectValue(3); // Object creation S("'lite' + \"db\"").ExpectValue("litedb"); S("true").ExpectValue(true); S("123").ExpectValue(123); S("{ a: 1}").ExpectJson("{ a: 1}"); S("{ b: 1+1 }").ExpectJson("{ b: 2 }"); S("{'a-b':1, \"x+1\": 2, 'y': 3}").ExpectJson("{\"a-b\": 1, \"x+1\": 2, y: 3 }"); // Document simplified notation declaration doc = J("{ a: 1, b: 2, c: 3, d: {e: 4, f: 5 }}"); S("{ a }").ExpectJson("{ a: 1 }"); S("{ a, c }").ExpectJson("{ a: 1, c: 3 }"); S("{ d, z: d.e }").ExpectJson("{ d: { e: 4, f: 5 }, z: 4 }"); // Document simplified notation with complex key doc = J("{ \"a b\": 1, c: 2 }"); S("{ 'a b', z: null }").ExpectJson("{ \"a b\": 1, z: null }"); S("{ 'c' }").ExpectJson("{ c: 2 }"); } [Fact] public void Expressions_Scalar_Operator() { BsonDocument doc; BsonValue S(string s, params BsonValue[] args) { return BsonExpression.Create(s, args).ExecuteScalar(doc); } // Arithmetic operators doc = new BsonDocument(); // Int S("6 + 3").ExpectValue(9); S("6 * 3").ExpectValue(18); S("6 % 3").ExpectValue(0); S("6 / 3").ExpectValue(2); // Double S("6.0 + 3.0").ExpectValue(9); S("6.0 * 3.0").ExpectValue(18); S("6.0 % 3.0").ExpectValue(0); S("6.0 / 3.0").ExpectValue(2); // Operators order doc = J("{ a: 1, b: 2, c: 3 }"); S("a + 1 - c").ExpectValue(-1); S("5 + c * 2").ExpectValue(11); S("(5 + c) * 2").ExpectValue(16); // Comparer operators doc = J("{ a: 1, b: 2, c: 3 }"); S("1 = 1").ExpectValue(true); S("a = 1").ExpectValue(true); S("a > 0 and c = 3").ExpectValue(true); S("a = 0 or b = 1 or c = 2 or 1=1").ExpectValue(true); // Multi values equals doc = J("{ a: 5 }"); S("ARRAY(MAP(ITEMS([3, 4, 5, 6]) => (@ = $.a)))").ExpectArray(false, false, true, false); S("ANY(MAP(ITEMS([3, 4, 5, 6]) => (@ = $.a)))").ExpectValue(true); // Between doc = J("{ a: 50, b: 'm' }"); S("5 between 1 AND 10").ExpectValue(true); S("b between @0 and @1", "a", "z").ExpectValue(true); // Greater and Less S("1 < 3.0").ExpectValue(true); S("4 < 8").ExpectValue(true); S("3 >= 3").ExpectValue(true); S("2 <= 1").ExpectValue(false); S("2 <= 'a'").ExpectValue(true); // String Like S("'John' LIKE 'J'").ExpectValue(false); S("'John' LIKE 'J%'").ExpectValue(true); S("'John' LIKE @0", "%o%").ExpectValue(true); S("'John' LIKE 1").ExpectValue(false); doc = J("{ names: ['John', 'Joana', 'Carlos'] }"); S("ARRAY(MAP(names[*] => (@ LIKE 'J%')))").ExpectArray(true, true, false); S("ARRAY(names[@ LIKE 'J%'])").ExpectArray("John", "Joana"); // Array filter using root/current doc = J("{ a: 3, b: [{a: 2, x: 99}, {a: 3, x: 100}] }"); S("FIRST(b[@.a=2].x)").ExpectValue(99); S("FIRST(b[@.a = $.a].x)").ExpectValue(100); // MongoDB examples doc = J("{ '_id' : 3, 'date' : 'October 30', 'temps' : [ 18, 6, 8 ] }"); S("{ date, 'temps in Fahrenheit': ARRAY(MAP(temps[*] => (@ * (9/5)+32)))}") .ExpectJson("{ 'date' : 'October 30', 'temps in Fahrenheit' : [ 64.4, 42.8, 46.4 ]}"); } [Fact] public void Expressions_Scalar_Methods() { BsonDocument doc; BsonValue S(string s, params BsonValue[] args) { return BsonExpression.Create(s, args).ExecuteScalar(doc); }; doc = J("{}"); // String functions S("'Lite' + 'DB' + 'v' + 5").ExpectValue("LiteDBv5"); S("upper('liteDB')").ExpectValue("LITEDB"); S("LOWER('LiteDB')").ExpectValue("litedb"); S("UPPER('LiteDB' + '-ok')").ExpectValue("LITEDB-OK"); S("UPPER('LiteDB') + '-ok'").ExpectValue("LITEDB-ok"); S("UPPER(3)").ExpectValue(BsonValue.Null); S("SUBSTRING('LiteDB', 0, 2)").ExpectValue("Li"); S("LOWER(SUBSTRING('LiteDB', 4))").ExpectValue("db"); S("LPAD(STRING(27), 5, '0')").ExpectValue("00027"); S("RPAD(STRING(27), 5, '0')").ExpectValue("27000"); S("REPLACE('Hi', 'i', 'I')").ExpectValue("HI"); S("ARRAY(MAP(ITEMS(['Lite', 'LiteDB']) => REPLACE(@, 'L', 'x')))").ExpectArray("xite", "xiteDB"); // String in array items doc = J("{ arr: ['one', 'two'] }"); S("ARRAY(MAP(arr[*] => UPPER(@)))").ExpectArray("ONE", "TWO"); S("ARRAY(MAP(arr[*] => SUBSTRING(@, 0, 1)))").ExpectArray("o", "t"); // JSON Parser S("JSON('{a:1, b:\"string\"}')").ExpectJson("{ a: 1, b: \"string\" }"); S("JSON('\"string-only\"')").ExpectValue("string-only"); S("JSON('error')").ExpectValue(BsonValue.Null); // EXTEND document doc = J("{a:1}"); S("EXTEND($, {b:2})").ExpectJson("{a:1, b:2}"); S("EXTEND($, {a:2})").ExpectJson("{a:2}"); S("EXTEND($, {a:2, b:{c:2}})").ExpectJson("{a: 2, b: {c: 2} }"); S("EXTEND({a:true}, {a: false})").ExpectJson("{a:false}"); // DATE functions doc = J("{mydate:{$date: '2018-05-01T15:30:45Z'}}"); S("YEAR($.mydate)").ExpectValue(2018); S("MONTH($.mydate)").ExpectValue(5); S("DAY($.mydate)").ExpectValue(1); // dateParts: "y|year", "M|month", "d|day", "h|hour", "m|minute", "s|second" S("DATEADD('d', 1, $.mydate)").ExpectValue(DateTime.Parse("2018-05-02T15:30:45Z")); S("DATEADD('d', -1, $.mydate)").ExpectValue(DateTime.Parse("2018-04-30T15:30:45Z")); S("DATEADD('M', 12, $.mydate)").ExpectValue(DateTime.Parse("2019-05-01T15:30:45Z")); S("DATEDIFF('M', $.mydate, DATE_UTC(2018, 6, 1))").ExpectValue(1); S("DATEDIFF('M', $.mydate, DATE_UTC(2018, 4, 1))").ExpectValue(-1); // Length Method doc = J("{a:'my string', empty: '', rnull: null, b: {$binary:'MTIz'}, arr: [1, 2, null]}"); S("LENGTH(a)").ExpectValue(9); S("LENGTH(empty)").ExpectValue(0); S("LENGTH(null)").ExpectValue(0); S("LENGTH(miss)").ExpectValue(0); S("LENGTH(b)").ExpectValue(3); S("LENGTH(arr)").ExpectValue(3); S("LENGTH($)").ExpectValue(5); S("ROUND(DECIMAL(123.45678), 3)").ExpectValue(123.457m); S("ROUND(DOUBLE(123.45678), 3)").ExpectValue(123.457d); } [Fact] public void Expressions_Scalar_Parameters() { BsonDocument doc; BsonValue P(string s, params BsonValue[] args) { return BsonExpression.Create(s, args).ExecuteScalar(doc); } doc = J("{ arr: [1, 2, 3, 4, 5 ] }"); P("@0", 10).ExpectValue(10); P("@0 + 15", 10).ExpectValue(25); P("UPPER(@0 + @1)", "lite", "db").ExpectValue("LITEDB"); // parameter only filter = fixed index P("arr[@0]", 0).ExpectValue(1); // any other case: filter query P("ARRAY(arr[@ > @0])", 3).ExpectArray(4, 5); // using map P("ARRAY(MAP(ITEMS(@0) => (@ + @1)))", new BsonArray(new BsonValue[] { 10, 11, 12 }), 5) .ExpectArray(15, 16, 17); // sort ascending P("ARRAY(SORT(ITEMS(@0) => @, @1))", new BsonArray(new BsonValue[] { 30, 20, 50 }), 1) .ExpectArray(20, 30, 50); P("ARRAY(SORT(ITEMS(@0) => @, @1))", new BsonArray(new BsonValue[] { 30, 20, 50 }), "asc") .ExpectArray(20, 30, 50); // sort descending P("ARRAY(SORT(ITEMS(@0) => @, @1))", new BsonArray(new BsonValue[] { 30, 20, 50 }), -1) .ExpectArray(50, 30, 20); P("ARRAY(SORT(ITEMS(@0) => @, @1))", new BsonArray(new BsonValue[] { 30, 20, 50 }), "desc") .ExpectArray(50, 30, 20); } [Fact] public void Expressions_Enumerable_Expr() { List docs; IEnumerable A(string s, params BsonValue[] args) { return BsonExpression.Create(s, args).Execute(docs); }; docs = new List() { J("{ a: 1, b: 5, c: \"First\", arr: [1,2] }"), J("{ a: 2, b: 15, c: \"Second\", arr: [1, 3, 5, 9] }"), J("{ a: 5, b: 10, c: \"Last\", arr: [1, 5, 5] }") }; A("SUM(*.a)").ExpectValues(8); A("*.b").ExpectValues(5, 15, 10); A("MAP(*.c => UPPER(@))", "FIRST", "SECOND", "LAST"); A("SUM(*.arr[*])").ExpectValues(32); A("SUM(*.arr[@ < 2]) + 7").ExpectValues(10); A("JOIN(*.c, '#')").ExpectValues("First#Second#Last"); // when use $ over multiple values, only first result are used A("JOIN(MAP(*.arr[*] => (@ + 1)), '-')").ExpectValues("2-3-2-4-6-10-2-6-6"); // flaten A("*.arr[*]").ExpectValues(1, 2, 1, 3, 5, 9, 1, 5, 5); // Top Method A("TOP([1,2,3,4,5],3)").ExpectValues(1, 2, 3); A("TOP([1,2,3,4,5],0)").ExpectValues(); A("TOP([1,2,3,4,5],-3)").ExpectValues(); A("TOP([1,2,3,4,5],10)").ExpectValues(1, 2, 3, 4, 5); // Union Method A("UNION([1,2,3],4)").ExpectValues(1, 2, 3, 4); A("UNION([1,2,3],[4])").ExpectValues(1, 2, 3, 4); A("UNION([1,2,3],[4,5,6,7])").ExpectValues(1, 2, 3, 4, 5, 6, 7); A("UNION([1,2,3],[1,2,3])").ExpectValues(1, 2, 3); // Except Method A("EXCEPT([1,2,3],4)").ExpectValues(1, 2, 3); A("EXCEPT([1,2,3],1)").ExpectValues(2, 3); A("EXCEPT([1,2,3],[1,3])").ExpectValues(2); A("EXCEPT([1,2,3],[4,5])").ExpectValues(1, 2, 3); } [Fact] public void Expression_Multiple_And_Tests() { BsonValue B(params BsonExpression[] args) { return Query.And(args).ExecuteScalar(); }; B("5 > 3", "10 != 'a'", "1 = 1").ExpectValue(true); B("5 < 3", "10 != 'a'", "1 = 1").ExpectValue(false); B("5 > 3", "10 = 'a'", "1 = 1").ExpectValue(false); B("5 > 3", "10 != 'a'", "1 != 1").ExpectValue(false); } [Fact] public void Expression_Multiple_Or_Tests() { BsonValue B(params BsonExpression[] args) { return Query.Or(args).ExecuteScalar(); }; B("5 > 3", "10 != 'a'", "1 = 1").ExpectValue(true); B("5 < 3", "10 != 'a'", "1 = 1").ExpectValue(true); B("5 > 3", "10 = 'a'", "1 = 1").ExpectValue(true); B("5 < 3", "10 = 'a'", "1 != 1").ExpectValue(false); } [Fact] public void Expression_AndAlso_OrElse() { var ex1 = BsonExpression.Create("LENGTH($.x) >= 5 AND SUBSTRING($.x, 0, 5) = \"12345\""); var doc1 = new BsonDocument(); // OK (true) doc1["x"] = "12345"; ex1.ExecuteScalar(doc1); // KO (expected: false, actual: exception) doc1["x"] = "123"; ex1.ExecuteScalar(doc1); } [Fact] public void Expression_Conditional_IIF() { var ex1 = BsonExpression.Create("IIF(LENGTH($.x) >= 5, SUBSTRING($.x, 0, 5), \"too-short\")"); var doc1 = new BsonDocument(); // OK ("12345") doc1["x"] = "123456789"; var r1 = ex1.ExecuteScalar(doc1); r1.AsString.Should().Be("12345"); // KO (expected: "too-short", actual: System.ArgumentOutOfRangeException: Index and length must refer to a location within the string.) doc1["x"] = "123"; var r2 = ex1.ExecuteScalar(doc1); r2.AsString.Should().Be("too-short"); } } } ================================================ FILE: LiteDB.Tests/Expressions/Expressions_Tests.cs ================================================ using FluentAssertions; using System.Collections.Generic; using Xunit; namespace LiteDB.Tests.Expressions { public class Expressions_Tests { [Fact] public void Expressions_Constants() { BsonValue K(string s) { return BsonExpression.Create(s).ExecuteScalar(); } K(@"123").ExpectValue(123); K(@"null").ExpectValue(BsonValue.Null); K(@"15.9").ExpectValue(15.9); K(@"true").ExpectValue(true); K(@"false").ExpectValue(false); K(@"'my string'").ExpectValue("my string"); K(@"""my string""").ExpectValue("my string"); K(@"[1,2]").ExpectArray(1, 2); K(@"[]").ExpectJson("[]"); K(@"{a:1}").ExpectJson("{a:1}"); K(@"{a:true,i:0}").ExpectJson("{a:true,i:0}"); } [Fact] public void Expression_Fields() { IEnumerable F(string s) { return BsonExpression.Create(s).Fields; } // simple case F("$.Name").ExpectValues("Name"); F("JustName").ExpectValues("JustName"); F("$.[\"My First Name\"]").ExpectValues("My First Name"); // only root field F("$.Name.First").ExpectValues("Name"); F("$.Items[*].Type").ExpectValues("Items"); // inside new document/array F("{ Active, _id }").ExpectValues("Active", "_id"); F("{ Active, _id: 1 }").ExpectValues("Active"); F("[ Active, _id, null, UPPER(Name.First)]").ExpectValues("Active", "_id", "Name"); // no fields F("{ Active: 1, _id: 2 }").ExpectCount(0); F("123").ExpectCount(0); F("UPPER(@p0) = 'JOHN' OR YEAR(NOW()) = 2018").ExpectCount(0); // duplicate F("{ Active: active, NewActive: active, Root: $ }").ExpectValues("active", "$"); // case insensitive (only first field is return) F("{ Active: active, NewActive: ACTIVE }").ExpectValues("active"); // with no root in array F("Items[0].Type = Age").ExpectValues("Items", "Age"); // with root and MAP :: ($.Items[$.Root = 1] => @.Type) = $.Age F("Items[$.Root = 1].Type all = Age").ExpectValues("Items", "Root", "Age"); // predicate + method F("_id = Age + YEAR(DATETIME(2000, 1, DAY(NewField))) AND UPPER(TRIM(Name)) = @0") .ExpectValues("_id", "Age", "NewField", "Name"); // using root document F("$").ExpectValues("$"); F("$ + _id").ExpectValues("$", "_id"); // fields when using source (do simplify, when use * is same as $) F("*").ExpectValues("$"); F("*._id").ExpectValues("_id"); F("FIRST(MAP(* => (@.abc + $.name))) + _id").ExpectValues("$", "abc", "name", "_id"); } [Fact] public void Expression_Immutable() { bool I(string s) { return BsonExpression.Create(s).IsImmutable; } // some immutable expression I("_id").ExpectValue(true); I("{ a: 1, n: UPPER(name) }").ExpectValue(true); I("GUID('00000000-0000-0000-0000-000000000000')").ExpectValue(true); // using method that are not immutable I("_id + DAY(NOW())").ExpectValue(false); I("r + 10 > 10 AND GUID() = true").ExpectValue(false); I("r + 10 > 10 AND Name LIKE OBJECTID() + '%'").ExpectValue(false); I("_id > @0").ExpectValue(false); } [Fact] public void Expression_Type() { BsonExpressionType T(string s) { return BsonExpression.Create(s).Type; } T("1").ExpectValue(BsonExpressionType.Int); T("-1").ExpectValue(BsonExpressionType.Int); T("1.1").ExpectValue(BsonExpressionType.Double); T("-1.1").ExpectValue(BsonExpressionType.Double); T("''").ExpectValue(BsonExpressionType.String); T("null").ExpectValue(BsonExpressionType.Null); T("[ ]").ExpectValue(BsonExpressionType.Array); T("{ }").ExpectValue(BsonExpressionType.Document); T("true").ExpectValue(BsonExpressionType.Boolean); T("false").ExpectValue(BsonExpressionType.Boolean); T("@p0").ExpectValue(BsonExpressionType.Parameter); T("UPPER(@p0)").ExpectValue(BsonExpressionType.Call); T("1 + 1").ExpectValue(BsonExpressionType.Add); T("1 - 1").ExpectValue(BsonExpressionType.Subtract); T("1 * 1").ExpectValue(BsonExpressionType.Multiply); T("1 / 1").ExpectValue(BsonExpressionType.Divide); // math order T("1 + 1 / 3").ExpectValue(BsonExpressionType.Add); T("(1 + 1) / 3").ExpectValue(BsonExpressionType.Divide); // predicate T("1 = 1").ExpectValue(BsonExpressionType.Equal); T("1 > 1").ExpectValue(BsonExpressionType.GreaterThan); T("1 >= 1").ExpectValue(BsonExpressionType.GreaterThanOrEqual); T("1 < 1").ExpectValue(BsonExpressionType.LessThan); T("1 <= 1").ExpectValue(BsonExpressionType.LessThanOrEqual); T("'JOHN' LIKE 'J%'").ExpectValue(BsonExpressionType.Like); T("1 BETWEEN 0 AND 1").ExpectValue(BsonExpressionType.Between); T("1 IN [1,2]").ExpectValue(BsonExpressionType.In); T("1 != 1").ExpectValue(BsonExpressionType.NotEqual); T("1=1 OR 1=2").ExpectValue(BsonExpressionType.Or); T("2=1 AND 1=2").ExpectValue(BsonExpressionType.And); T("*").ExpectValue(BsonExpressionType.Source); // maps T("MAP(arr[*] => @)").ExpectValue(BsonExpressionType.Map); T("MAP(el.arr[*] => @)").ExpectValue(BsonExpressionType.Map); T("MAP(el.arr[*] => (@ + 10 + UPPER(@)))").ExpectValue(BsonExpressionType.Map); // shortcut T("arr[*].price").ExpectValue(BsonExpressionType.Map); T("*._id").ExpectValue(BsonExpressionType.Map); } [Fact] public void Expression_Format() { string F(string s) { return BsonExpression.Create(s).Source; } F("_id").ExpectValue("$._id"); // Expression format F("_id").ExpectValue("$._id"); F("a.b").ExpectValue("$.a.b"); F("a[ @ + 1 = @ + 2].b").ExpectValue("MAP($.a[@+1=@+2]=>@.b)"); F("a.['a-b']").ExpectValue("$.a.[\"a-b\"]"); F("'single \"quote\\\' string'").ExpectValue("\"single \\\"quote' string\""); F("\"double 'quote\\\" string\"").ExpectValue("\"double 'quote\\\" string\""); F("{'a-b':1, \"x + 1\": 2, 'y': 3}").ExpectValue("{\"a-b\":1,\"x + 1\":2,y:3}"); F("[1, 2 , { $guid : \"826944a6-72ec-4fc0-a1bc-9fd9f846c266\" }]") .ExpectValue("[1,2,{$guid:\"826944a6-72ec-4fc0-a1bc-9fd9f846c266\"}]"); // And/Or F("1 = true and false > \"A\"").ExpectValue("1=true AND false>\"A\""); F("1 < 1 or \"two\" = \"two\" or three > three").ExpectValue("1<1 OR \"two\"=\"two\" OR $.three>$.three"); F("( 1 + 2) = 3 and X + y = 9").ExpectValue("(1+2)=3 AND $.X+$.y=9"); // Methods F("SUBSTRING( \"lite\" + \"db\", -4, 1 + 9 )").ExpectValue("SUBSTRING(\"lite\"+\"db\",-4,1+9)"); // Array F("[a,b, 1, true , [ null, { \"x\" : 99 }] ]").ExpectValue("[$.a,$.b,1,true,[null,{x:99}]]"); // Inner F("(10 * (1 + 2) - 5)").ExpectValue("(10*(1+2)-5)"); // Map F("MAP(names[length(@) > 10] => upper(@))").ExpectValue("MAP($.names[LENGTH(@)>10]=>UPPER(@))"); // Path/Source-Map F("items[*].id").ExpectValue("MAP($.items[*]=>@.id)"); F("items[*].products[*].price").ExpectValue("MAP($.items[*]=>MAP(@.products[*]=>@.price))"); F("sum(items[*].price ) + 3").ExpectValue("SUM(MAP($.items[*]=>@.price))+3"); // any/all F("items[*].id any=5").ExpectValue("MAP($.items[*]=>@.id) ANY=5"); F("items[id > 99].id all between 5 and 'go'").ExpectValue("MAP($.items[@.id>99]=>@.id) ALL BETWEEN 5 AND \"go\""); // parameters F("items[ @0 ].price = 9").ExpectValue("$.items[@0].price=9"); // double vs int F("5 % 3").ExpectValue("5%3"); F("5.0 % 3").ExpectValue("5.0%3"); F("5.00 % 3").ExpectValue("5.0%3"); F("5.001 % 3").ExpectValue("5.001%3"); } [Fact] public void Invalid_Expressions() { void Err(string s) { Assert.Throws(() => { var expr = BsonExpression.Create(s); }); } Err("5 FOO < 1"); Err("8 ++ 9"); Err("10 + 5)"); Err("10 + 5 -"); Err("MAP(A => +)"); Err("(25 + 15"); Err("10 + 5 -."); } } } ================================================ FILE: LiteDB.Tests/Internals/Aes_Tests.cs ================================================ using System; using System.IO; using System.Linq; using System.Reflection; using System.Security.Cryptography; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class Aes_Tests { [Fact] public void Encrypt_Decrypt_Stream() { using (var media = new MemoryStream()) using (var crypto = new AesStream("abc", media)) { var input0 = new byte[8192]; var input1 = new byte[8192]; var input2 = new byte[8192]; var output0 = new byte[8192]; var output1 = new byte[8192]; var output2 = new byte[8192]; input0.Fill(100, 0, 8192); input1.Fill(101, 0, 8192); input2.Fill(102, 0, 8192); // write 0, 2, 1 but in order 0, 1, 2 crypto.Position = 0 * 8192; crypto.Write(input0, 0, 8192); crypto.Position = 2 * 8192; crypto.Write(input2, 0, 8192); crypto.Position = 1 * 8192; crypto.Write(input1, 0, 8192); // read encrypted data media.Position = 0; media.Read(output0, 0, 8192); media.Read(output1, 0, 8192); media.Read(output2, 0, 8192); output0.All(x => x == 100).Should().BeFalse(); output1.All(x => x == 101).Should().BeFalse(); output2.All(x => x == 102).Should().BeFalse(); // read decrypted data crypto.Position = 0 * 8192; crypto.Read(output0, 0, 8192); crypto.Position = 2 * 8192; crypto.Read(output2, 0, 8192); crypto.Position = 1 * 8192; crypto.Read(output1, 0, 8192); output0.All(x => x == 100).Should().BeTrue(); output1.All(x => x == 101).Should().BeTrue(); output2.All(x => x == 102).Should().BeTrue(); } } /// /// Test whether AesStream can handle stream that has invalid page size. /// [Fact] public void AesStream_Invalid_Page_Size() { var fakeContent = new byte[] { 1,22,222,184,3,227,126,129,205,182,182,143,201,181,242,107,36, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 20,88,18,70,65,77,202,50,184,177,167,59,80,255,67,66,20, 88,18,70,65,77,202,50,184,177,167,59,80,255,67,66 }; // stream of 64bytes (invalid page size) using (var memoryStream = new MemoryStream()) { memoryStream.Write(fakeContent, 0, fakeContent.Length); memoryStream.Position = 0; using (var crypto = new AesStream("password", memoryStream)) { // 1st page is hidden, so AesStream.Length returns (stream.Length - PAGE_SIZE) Assert.Equal(0, crypto.Length); // AesStream should add padding to the underlying stream to make its size equivalent to PAGE_SIZE Assert.Equal(8192, memoryStream.Length); } } } /// /// Test whether AesStream can handle stream where bytes 32-64 are empty. /// [Fact] public void AesStream_Invalid_Password() { // stream of 8192 bytes where bytes 32 to 64 is empty. using (var memoryStream = new MemoryStream()) { // 1st byte to indicate the stream is encrypted memoryStream.WriteByte(1); // next 16 bytes contain salt var salt = new byte[16]; using (var rng = RandomNumberGenerator.Create()) { rng.GetBytes(salt); } memoryStream.Write(salt, 0, salt.Length); // remaining (8192 - 17) bytes are empty var emptyContent = new byte[8175]; memoryStream.Write(emptyContent, 0, emptyContent.Length); // reset the stream position to 0 memoryStream.Position = 0; using (var crypto = new AesStream("password", memoryStream)) { // 1st page is hidden, so AesStream.Length returns (stream.Length - PAGE_SIZE) Assert.Equal(0, crypto.Length); // AesStream should add padding to the underlying stream to make its size equivalent to PAGE_SIZE Assert.Equal(8192, memoryStream.Length); // AesStream should fill bytes 32-64 with encrypted 1s var checkBytes = new byte[32]; var cryptoReader = typeof(AesStream) .GetField("_reader", BindingFlags.Instance | BindingFlags.NonPublic) .GetValue(crypto) as CryptoStream; memoryStream.Position = 32; cryptoReader.Read(checkBytes, 0, checkBytes.Length); Assert.All(checkBytes, b => Assert.Equal(1, b)); } } } } } ================================================ FILE: LiteDB.Tests/Internals/BasePage_Tests.cs ================================================ using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class BasePage_Tests { [Fact] public void BasePage_Insert() { // create new memory area with 10 bytes offset (just for fun) var data = new byte[Constants.PAGE_SIZE + 10]; var buffer = new PageBuffer(data, 10, 1); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; // create new base page var page = new BasePage(buffer, 1, PageType.Empty); page.Insert(10, out var index0).Fill(1); page.Insert(20, out var index1).Fill(2); page.Insert(30, out var index2).Fill(3); page.Insert(40, out var index3).Fill(4); page.FragmentedBytes.Should().Be(0); page.UsedBytes.Should().Be(100); page.NextFreePosition.Should().Be(32 + 100); page.FooterSize.Should().Be(4 * 4); page.FreeBytes.Should().Be(8192 - 32 - 100 - (4 * 4)); page.Get(index0).All(1).Should().BeTrue(); page.Get(index1).All(2).Should().BeTrue(); page.Get(index2).All(3).Should().BeTrue(); page.Get(index3).All(4).Should().BeTrue(); // update header buffer page.UpdateBuffer(); // let's create another page instance based on same page buffer var page2 = new BasePage(buffer); ((int) page.PageID).Should().Be(1); page.PageType.Should().Be(PageType.Empty); page.Get(index0).All(1).Should().BeTrue(); page.Get(index1).All(2).Should().BeTrue(); page.Get(index2).All(3).Should().BeTrue(); page.Get(index3).All(4).Should().BeTrue(); buffer.ShareCounter = 0; } [Fact] public void BasePage_Insert_Full_Bytes_Page() { // create new memory area var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 1); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; // create new base page var page = new BasePage(buffer, 1, PageType.Empty); var full = page.FreeBytes - BasePage.SLOT_SIZE; page.Insert((ushort) full, out var index0).Fill(1); page.ItemsCount.Should().Be(1); ((int) page.UsedBytes).Should().Be(full); page.FreeBytes.Should().Be(0); ((int) page.NextFreePosition).Should().Be(32 + full); buffer.ShareCounter = 0; } [Fact] public void BasePage_Insert_Full_Items_Page() { // create new memory area var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 1); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; // create new base page var page = new BasePage(buffer, 1, PageType.Empty); // create 255 page segments for (byte i = 0; i < byte.MaxValue; i++) { page.Insert(10, out var index).Fill(i); } page.ItemsCount.Should().Be(255); page.UsedBytes.Should().Be(2550); page.FreeBytes.Should().Be(0); page.NextFreePosition.Should().Be(32 + 2550); buffer.ShareCounter = 0; } [Fact] public void BasePage_Delete() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 0); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; // create new base page var page = new BasePage(buffer, 1, PageType.Empty); var seg0 = page.Insert(100, out var index0); var seg1 = page.Insert(200, out var index1); var seg2 = page.Insert(300, out var index2); page.HighestIndex.Should().Be(2); page.ItemsCount.Should().Be(3); page.UsedBytes.Should().Be(600); page.NextFreePosition.Should().Be(32 + 600); page.FreeBytes.Should().Be(8192 - 32 - 12 - 600); // page size - header - footer - used page.FragmentedBytes.Should().Be(0); // deleting 300b (end of page) page.Delete(index2); page.HighestIndex.Should().Be(1); page.ItemsCount.Should().Be(2); page.UsedBytes.Should().Be(300); page.NextFreePosition.Should().Be(32 + 300); page.FreeBytes.Should().Be(8192 - 32 - 8 - 300); page.FragmentedBytes.Should().Be(0); // deleting 100b (middle of page) - create data fragment page.Delete(index0); page.HighestIndex.Should().Be(1); page.ItemsCount.Should().Be(1); page.UsedBytes.Should().Be(200); page.NextFreePosition.Should().Be(32 + 300); // 200 + 100 (fragmented) page.FreeBytes.Should().Be(8192 - 32 - 8 - 200); page.FragmentedBytes.Should().Be(100); // delete 200b - last item page.Delete(index1); // after delete last item page will be defrag page.HighestIndex.Should().Be(byte.MaxValue); page.ItemsCount.Should().Be(0); page.UsedBytes.Should().Be(0); page.NextFreePosition.Should().Be(32); page.FreeBytes.Should().Be(8192 - 32); page.FragmentedBytes.Should().Be(0); buffer.ShareCounter = 0; } [Fact] public void BasePage_Delete_Full() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 0); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; // create new base page var page = new BasePage(buffer, 1, PageType.Empty); var seg0 = page.Insert(100, out var index0); var seg1 = page.Insert(200, out var index1); var seg2 = page.Insert(8192 - 32 - (100 + 200 + 8) - 4, out var index2); // 7848 seg0.Fill(10); seg1.Fill(11); seg2.Fill(12); page.HighestIndex.Should().Be(2); page.ItemsCount.Should().Be(3); page.UsedBytes.Should().Be(8148); page.NextFreePosition.Should().Be(8180); // no next free position page.FreeBytes.Should().Be(0); // full used page.FragmentedBytes.Should().Be(0); // deleting 200b (end of page) page.Delete(index1); page.HighestIndex.Should().Be(2); page.ItemsCount.Should().Be(2); page.UsedBytes.Should().Be(8148 - 200); page.NextFreePosition.Should().Be(8180); page.FreeBytes.Should().Be(200); page.FragmentedBytes.Should().Be(200); page.Delete(index0); page.HighestIndex.Should().Be(2); page.ItemsCount.Should().Be(1); page.UsedBytes.Should().Be(8148 - 200 - 100); page.NextFreePosition.Should().Be(8180); page.FreeBytes.Should().Be(300); page.FragmentedBytes.Should().Be(300); var seg3 = page.Insert(250, out var index3); seg3.Fill(13); page.HighestIndex.Should().Be(2); page.ItemsCount.Should().Be(2); page.UsedBytes.Should().Be(8148 - 200 - 100 + 250); page.NextFreePosition.Should().Be(8180 - 50); page.FreeBytes.Should().Be(50); page.FragmentedBytes.Should().Be(0); var seg3f = page.Get(index3); seg3f.All(13).Should().BeTrue(); buffer.ShareCounter = 0; } [Fact] public void BasePage_Defrag() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 0); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; var page = new BasePage(buffer, 1, PageType.Empty); page.Insert(100, out var index0).Fill(101); page.Insert(200, out var index1).Fill(102); page.Insert(300, out var index2).Fill(103); page.Insert(400, out var index3).Fill(104); page.FragmentedBytes.Should().Be(0); page.UsedBytes.Should().Be(1000); page.NextFreePosition.Should().Be(32 + 1000); page.Delete(index0); page.Delete(index1); page.FragmentedBytes.Should().Be(300); page.UsedBytes.Should().Be(700); page.NextFreePosition.Should().Be(32 + 1000); // fill all page page.Insert(7440, out var index4).Fill(105); // 8192 - 32 - (4 * 4) - 700 page.FragmentedBytes.Should().Be(0); page.UsedBytes.Should().Be(8140); page.NextFreePosition.Should().Be(8172); page.Get(index2).All(103).Should().BeTrue(); page.Get(index3).All(104).Should().BeTrue(); page.Get(index4).All(105).Should().BeTrue(); page.GetUsedIndexs().ToArray().Should().Equal(0, 2, 3); buffer.ShareCounter = 0; } [Fact] public void BasePage_Update() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 0); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; var page = new BasePage(buffer, 1, PageType.Empty); page.Insert(100, out var index0).Fill(101); page.Insert(200, out var index1).Fill(102); page.Insert(300, out var index2).Fill(103); page.Insert(400, out var index3).Fill(104); page.FragmentedBytes.Should().Be(0); page.UsedBytes.Should().Be(1000); page.NextFreePosition.Should().Be(32 + 1000); // update same segment length page.Update(index0, 100).Fill(201); page.Get(index0).All(201).Should().BeTrue(); page.FragmentedBytes.Should().Be(0); page.UsedBytes.Should().Be(1000); page.NextFreePosition.Should().Be(32 + 1000); // less bytes (segment in middle of page) page.Update(index1, 150).Fill(202); page.Get(index1).All(202).Should().BeTrue(); page.FragmentedBytes.Should().Be(50); page.UsedBytes.Should().Be(950); page.NextFreePosition.Should().Be(32 + 1000); // less bytes (segment in end of page) page.Update(index3, 350).Fill(204); page.Get(index3).All(204).Should().BeTrue(); page.FragmentedBytes.Should().Be(50); page.UsedBytes.Should().Be(900); page.NextFreePosition.Should().Be(32 + 950); // more bytes (segment in end of page) page.Update(index3, 550).Fill(214); page.Get(index3).All(214).Should().BeTrue(); page.FragmentedBytes.Should().Be(50); page.UsedBytes.Should().Be(1100); page.NextFreePosition.Should().Be(32 + 1150); // more bytes (segment in middle of page) page.Update(index0, 200).Fill(211); page.Get(index0).All(211).Should().BeTrue(); page.FragmentedBytes.Should().Be(150); page.UsedBytes.Should().Be(1200); page.NextFreePosition.Should().Be(32 + 1350); buffer.ShareCounter = 0; } [Fact] public void BasePage_Test_Output() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 0); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; var page = new BasePage(buffer, 1, PageType.Empty); page.Insert(100, out var index0).Fill(101); page.Insert(7900, out var index1).Fill(102); page.Insert(100, out var index2).Fill(103); page.FragmentedBytes.Should().Be(0); page.UsedBytes.Should().Be(8100); page.NextFreePosition.Should().Be(8132); page.Delete(index1); page.Insert(7948 - 4, out var index3).Fill(104); buffer.ShareCounter = 0; } } } ================================================ FILE: LiteDB.Tests/Internals/BufferWriter_Tests.cs ================================================ using System; using System.Linq; using System.Text; using FluentAssertions; using LiteDB.Engine; using System.Collections.Generic; using Xunit; namespace LiteDB.Internals { public class BufferWriter_Tests { [Fact] public void Buffer_Write_CString() { var doc = JsonSerializer.Deserialize("{\"_id\":{\"$numberLong\":\"5\"},\"unique_id\":\"20-133-5\",\"event_log\":[{\"created\":{\"$date\":\"2020-05-06T09:29:10.8350000Z\"},\"type\":\"job_created\"},{\"created\":{\"$date\":\"2020-05-06T09:29:19.0510000Z\"},\"type\":\"asset_added\",\"data\":{\"filename\":[\"IMG_1333.JPG\"],\"filepath\":[\"D:\\\\Users\\\\Daniel\\\\Desktop\\\\German Shepherd\\\\IMG_1333.JPG\"]}},{\"created\":{\"$date\":\"2020-05-06T09:29:23.6910000Z\"},\"type\":\"lookup_preformed\",\"data\":{\"searchterm\":[\"1424101.2\"]}},{\"created\":{\"$date\":\"2020-05-06T09:29:25.9060000Z\"},\"type\":\"lookup_selected\"},{\"created\":{\"$date\":\"2020-05-06T09:29:43.7350000Z\"},\"type\":\"job_saved\"},{\"created\":{\"$date\":\"2020-05-06T09:29:43.7900000Z\"},\"type\":\"job_closed\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"},{\"created\":{\"$date\":\"2020-06-10T16:00:30.3950000Z\"},\"type\":\"job_deleted\"}],\"status\":\"PERMANANTDELETE\",\"cleaned_up\":false,\"user_info\":{\"href\":\"/fotoweb/users/dan%40deathstar.local\",\"userName\":\"dan@deathstar.local\",\"fullName\":\"Dan Twomey\",\"firstName\":\"Dan\",\"lastName\":\"Twomey\",\"email\":\"dan@medialogix.co.uk\",\"userId\":\"15003\",\"isGuest\":\"false\",\"userAvatarHref\":\"https://www.gravatar.com/avatar/9496065924d90ffa6b6184c741aa0184?d=mm\"},\"device_info\":{\"_id\":null,\"short_id\":133,\"device_name\":\"DANSCOMPUTER\"},\"template_id\":\"5cb0b82fd1654e07c7a3dd72\",\"created\":{\"$date\":\"2020-05-06T09:29:10.8350000Z\"},\"last_save\":{\"$date\":\"2020-06-15T19:40:50.8250000Z\"},\"files\":[{\"_id\":\"5f9bffbc-a6d7-4ccb-985b-17470745f760\",\"filename\":\"IMG_1333.JPG\",\"extension\":\".JPG\",\"file_checksum\":\"SHA1:09025C2C3009051C51877E052A740140F73EC518\",\"local_file_info\":{\"imported_datetime\":{\"$date\":\"2020-05-06T09:29:17.7650000Z\"},\"system_created_datetime\":{\"$date\":\"2020-03-26T17:04:08.9930000Z\"},\"original_file_path\":\"D:\\\\Users\\\\Daniel\\\\Desktop\\\\German Shepherd\\\\IMG_1333.JPG\",\"local_file_path\":\"C:\\\\ProgramData\\\\Medialogix\\\\Pixel\\\\Upload Storage\\\\20-133-5\\\\5f9bffbc-a6d7-4ccb-985b-17470745f760\\\\IMG_1333.JPG\",\"original_file_directory\":\"D:\\\\Users\\\\Daniel\\\\Desktop\\\\German Shepherd\",\"thumbnail_path\":\"C:\\\\ProgramData\\\\Medialogix\\\\Pixel\\\\Upload Storage\\\\20-133-5\\\\5f9bffbc-a6d7-4ccb-985b-17470745f760\\\\IMG_1333.JPG.thumb\"},\"filesize_bytes\":{\"$numberLong\":\"4225974\"},\"friendly_filesize\":\"4 MB\",\"metadata\":{\"2c0066d2-3f9f-4cf8-8d06-33a544624418\":null,\"4a389ee1-9e1b-4e06-b46f-23f1fd8f6a93\":null,\"b0ad5374-213f-488f-bb21-407e782de287\":null,\"91328cc4-eb72-4c30-9545-e931c830e847\":null,\"b94b21cf-eef3-4e8c-951a-1c20d16d871f\":null,\"3a660b33-c99f-4111-ba88-633533017b40\":null,\"500c2388-ccc1-4b63-8da1-5bbb468a0c5b\":null,\"652cdabe-3c6f-4765-86fd-1680749b412b\":null,\"2a2668c3-2b69-4f9b-89a8-914b70e00aa3\":null,\"fd67fdb2-3705-4f14-a929-5336c8e46489\":null,\"2405d44c-13d3-4ce3-8ba1-dae189139f84\":[],\"8b73f206-8b2c-4ce5-9867-a4e1892370e5\":null,\"5c73f206-8b2c-4ce5-9852-a4e1892370a5\":[\"csitemplate\"],\"9fc32696-4efd-4b6a-8fcc-554c75421cff\":[\"{{asset.uploadtype}}\"],\"c47645ab-0bfa-42e0-9c43-66868f10f90f\":[\"{{curentuser.username}}\"],\"a16a3bae-59bc-4583-9015-7f6bbd0d2b87\":[\"{{job.id}}\"]},\"status\":\"CREATED\",\"file_valid\":false,\"type\":\"IMAGE\",\"fotoweb_responses\":[]}],\"lookup_metadata\":{\"2c0066d2-3f9f-4cf8-8d06-33a544624418\":[\"1424101.2\"],\"4a389ee1-9e1b-4e06-b46f-23f1fd8f6a93\":[\"Exhibit 2\"],\"b0ad5374-213f-488f-bb21-407e782de287\":[\"1424101.2 - Exhibit 2\"],\"91328cc4-eb72-4c30-9545-e931c830e847\":[\"Location 3\"],\"b94b21cf-eef3-4e8c-951a-1c20d16d871f\":[\"DHL\"],\"3a660b33-c99f-4111-ba88-633533017b40\":[\"Medium\"]},\"error_reason\":null,\"retry_count\":0,\"error_counters\":{},\"deleted_datetime\":{\"$date\":\"2020-06-10T16:00:30.3920000Z\"},\"delete_when\":{\"$date\":\"2020-06-15T16:00:30.3920000Z\"}}").AsDocument; var size = doc.GetBytesCount(true); var arr0 = new BufferSlice(new byte[2935], 0, 2935); var arr1 = new BufferSlice(new byte[97], 0, 97); var arr2 = new BufferSlice(new byte[5], 0, 5); var arr3 = new BufferSlice(new byte[189], 0, 189); using (var w = new BufferWriter(new[] { arr0, arr1, arr2, arr3 })) { w.WriteDocument(doc, false); w.Consume(); } using (var r = new BufferReader(new[] { arr0, arr1, arr2, arr3 })) { var docNew = r.ReadDocument(); } } [Fact] public void Buffer_Write_CString_Basic() { var arr = new byte[500]; var slice0 = new BufferSlice(arr, 0, 3); var slice1 = new BufferSlice(arr, 20, 4); var slice2 = new BufferSlice(arr, 30, 5); var slice3 = new BufferSlice(arr, 40, 6); var slice4 = new BufferSlice(arr, 50, 7); using (var w = new BufferWriter(new[] { slice0, slice1, slice2, slice3, slice4 })) { w.WriteCString("123456789*ABCEFGHIJ"); w.WriteCString("abc"); } using (var r = new BufferReader(new[] { slice0, slice1, slice2, slice3, slice4 })) { var cstring0 = r.ReadCString(); var cstring1 = r.ReadCString(); } } [Fact] public void Buffer_Write_String() { var source = new BufferSlice(new byte[1000], 0, 1000); // direct string into byte[] using (var w = new BufferWriter(source)) { w.WriteString("abc123", false); w.Position.Should().Be(6); } Encoding.UTF8.GetString(source.Array, 0, 6).Should().Be("abc123"); source.Fill(0); // BSON string specs using (var w = new BufferWriter(source)) { w.WriteString("abc123", true); } source.ReadInt32(0).Should().Be(7); source.ReadString(4, 6).Should().Be("abc123"); ((char) source.ReadByte(10)).Should().Be('\0'); } [Fact] public void Buffer_Write_Numbers() { var source = new BufferSlice(new byte[1000], 0, 1000); // numbers using (var w = new BufferWriter(source)) { // max values w.Write(int.MaxValue); w.Write(uint.MaxValue); w.Write(long.MaxValue); w.Write(double.MaxValue); w.Write(decimal.MaxValue); // min values w.Write(int.MinValue); w.Write(uint.MinValue); w.Write(long.MinValue); w.Write(double.MinValue); w.Write(decimal.MinValue); // zero values w.Write(0); // int w.Write(0u); // uint w.Write(0L); // long w.Write(0d); // double w.Write(0m); // decimal // fixed values w.Write(1990); // int w.Write(1990u); // uint w.Write(1990L); // long w.Write(1990d); // double w.Write(1990m); // decimal } var p = 0; source.ReadInt32(p).Should().Be(int.MaxValue); p += 4; source.ReadUInt32(p).Should().Be(uint.MaxValue); p += 4; source.ReadInt64(p).Should().Be(long.MaxValue); p += 8; source.ReadDouble(p).Should().Be(double.MaxValue); p += 8; source.ReadDecimal(p).Should().Be(decimal.MaxValue); p += 16; source.ReadInt32(p).Should().Be(int.MinValue); p += 4; source.ReadUInt32(p).Should().Be(uint.MinValue); p += 4; source.ReadInt64(p).Should().Be(long.MinValue); p += 8; source.ReadDouble(p).Should().Be(double.MinValue); p += 8; source.ReadDecimal(p).Should().Be(decimal.MinValue); p += 16; source.ReadInt32(p).Should().Be(0); p += 4; source.ReadUInt32(p).Should().Be(0u); p += 4; source.ReadInt64(p).Should().Be(0L); p += 8; source.ReadDouble(p).Should().Be(0d); p += 8; source.ReadDecimal(p).Should().Be(0m); p += 16; source.ReadInt32(p).Should().Be(1990); p += 4; source.ReadUInt32(p).Should().Be(1990u); p += 4; source.ReadInt64(p).Should().Be(1990L); p += 8; source.ReadDouble(p).Should().Be(1990d); p += 8; source.ReadDecimal(p).Should().Be(1990m); p += 16; } [Fact] public void Buffer_Write_Types() { var source = new BufferSlice(new byte[1000], 0, 1000); var g = Guid.NewGuid(); var d = DateTime.Now; var o = ObjectId.NewObjectId(); using (var w = new BufferWriter(source)) { w.Write(true); w.Write(false); w.Write(DateTime.MinValue); w.Write(DateTime.MaxValue); w.Write(d); w.Write(Guid.Empty); w.Write(g); w.Write(ObjectId.Empty); w.Write(o); w.Write(PageAddress.Empty); w.Write(new PageAddress(199, 0)); } var p = 0; source.ReadBool(p).Should().BeTrue(); p += 1; source.ReadBool(p).Should().BeFalse(); p += 1; source.ReadDateTime(p).Should().Be(DateTime.MinValue); p += 8; source.ReadDateTime(p).Should().Be(DateTime.MaxValue); p += 8; source.ReadDateTime(p).ToLocalTime().Should().Be(d); p += 8; source.ReadGuid(p).Should().Be(Guid.Empty); p += 16; source.ReadGuid(p).Should().Be(g); p += 16; source.ReadObjectId(p).Should().Be(ObjectId.Empty); p += 12; source.ReadObjectId(p).Should().Be(o); p += 12; source.ReadPageAddress(p).Should().Be(PageAddress.Empty); p += PageAddress.SIZE; source.ReadPageAddress(p).Should().Be(new PageAddress(199, 0)); p += PageAddress.SIZE; } [Fact] public void Buffer_Write_Overflow() { var data = new byte[50]; var source = new BufferSlice[] { new BufferSlice(data, 0, 10), new BufferSlice(data, 10, 10), new BufferSlice(data, 20, 10), new BufferSlice(data, 30, 10), new BufferSlice(data, 40, 10) }; using (var w = new BufferWriter(source)) { w.Write(new byte[50].Fill(99, 0, 50), 0, 50); } data.All(x => x == 99).Should().BeTrue(); } [Fact] public void Buffer_Bson() { var source = new BufferSlice(new byte[1000], 0, 1000); var doc = new BsonDocument { ["minValue"] = BsonValue.MinValue, ["null"] = BsonValue.Null, ["int"] = int.MaxValue, ["long"] = long.MaxValue, ["double"] = double.MaxValue, ["decimal"] = decimal.MaxValue, ["string"] = "String", ["document"] = new BsonDocument {["_id"] = 1}, ["array"] = new BsonArray {1, 2, 3}, ["binary"] = new byte[50].Fill(255, 0, 49), ["objectId"] = ObjectId.NewObjectId(), ["guid"] = Guid.NewGuid(), ["boolean"] = true, ["date"] = DateTime.UtcNow, ["maxValue"] = BsonValue.MaxValue }; using (var w = new BufferWriter(source)) { w.WriteDocument(doc, true); w.Position.Should().Be(307); } using (var r = new BufferReader(source, true)) { var reader = r.ReadDocument(); r.Position.Should().Be(307); JsonSerializer.Serialize(reader).Should().Be(JsonSerializer.Serialize(doc)); } } } } ================================================ FILE: LiteDB.Tests/Internals/CacheAsync_Tests.cs ================================================ using System.IO; using System.Threading.Tasks; using LiteDB.Engine; using System.Threading; using FluentAssertions; using Xunit; using static LiteDB.Constants; namespace LiteDB.Internals { public class CacheAsync_Tests { [Fact] public void CacheAsync_Thread_ShareCounter() { // Set() - Seta true - Se estiver bloqueado, vai liberar // Reset() - Seta false - Quando chegar no proximo Wait() vai aguardar // Wait() - Trava a thread SE estiver false (Reset) - Passa reto se estiver true (Set) var wa = new ManualResetEventSlim(true); var wb = new ManualResetEventSlim(false); // serialize 2 threads void serialize(ManualResetEventSlim toBlock, ManualResetEventSlim toFree) { toBlock?.Reset(); toFree.Set(); toBlock?.Wait(); } var settings = new EngineSettings { DataStream = new MemoryStream() }; var state = new EngineState(null, settings); var disk = new DiskService(settings, state, new int[] { 10 }); var ta = new Task(() => { var r = disk.GetReader(); wa.Wait(); // test starts here!!! var p0 = new HeaderPage(r.NewPage(), 0); disk.WriteLogDisk(new PageBuffer[] { p0.UpdateBuffer() }); // (1 ->) jump to thread B serialize(wa, wb); // (2 <-) continue from thread B // (3 ->) jump to thread B serialize(wa, wb); }); var tb = new Task(() => { var r = disk.GetReader(); wb.Wait(); // (1 <-) continue from thread A var p0 = r.ReadPage(0, false, FileOrigin.Log); // share counter can be 2 or 3 // - if 2, page was not persisted yet on disk (async) // - if 1, page already persisted on disk var share = p0.ShareCounter; (share >= 1 && share <= 2).Should().BeTrue(); // (2 ->) jump to thread A serialize(wb, wa); // (3 <-) continue from thread B // but now, I'm sure this page was saved and thread A release p0.ShareCounter.Should().Be(1); // let's release my page p0.Release(); p0.ShareCounter.Should().Be(0); // release thread A serialize(null, wa); }); ta.Start(); tb.Start(); Task.WaitAll(ta, tb); } } } ================================================ FILE: LiteDB.Tests/Internals/Cache_Tests.cs ================================================ using System; using System.Linq; using System.Collections.Generic; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class Cache_Tests { [Fact] public void Cache_Read_Write() { var m = new MemoryCache(new int[] { 10 }); m.PagesInUse.Should().Be(0); var p0 = m.NewPage(); // new pages are writable (p0.ShareCounter).Should().Be(-1); // simulate write operation on page p0.Origin = FileOrigin.Log; p0.Position = 0; p0.Write(123, 10); m.WritablePages.Should().Be(1); var readable = m.TryMoveToReadable(p0); // now, page are readable readable.Should().BeTrue(); p0.ShareCounter.Should().Be(0); // now get same page again var p1 = m.GetReadablePage(0, FileOrigin.Log, (p, s) => { }); p1.ReadInt32(10).Should().Be(123); p1.ShareCounter.Should().Be(1); // let's read again (must return same instance but increment share counter) var p2 = m.GetReadablePage(0, FileOrigin.Log, (p, s) => { }); p1.Should().Be(p2); p2.ShareCounter.Should().Be(2); // releasing first p1.Release(); p2.ShareCounter.Should().Be(1); // releasing second p2.Release(); m.PagesInUse.Should().Be(0); p0.ShareCounter.Should().Be(0); p1.ShareCounter.Should().Be(0); p2.ShareCounter.Should().Be(0); } [Fact] public void Cache_Extends() { var m = new MemoryCache(new int[] { 10 }); var pos = 0; // in ctor, memory cache create only 1 memory segment m.ExtendSegments.Should().Be(1); var pages = new List(); // request 17 pages to write in disk for (var i = 0; i < 17; i++) { pages.Add(m.NewPage()); } m.ExtendSegments.Should().Be(2); // release 5 pages (this pages will be in readable-list) foreach (var p in pages.Take(5)) { // simulate write p.Origin = FileOrigin.Log; p.Position = ++pos; m.TryMoveToReadable(p); } // checks if still 2 segments in memory (segments never decrease) m.ExtendSegments.Should().Be(2); // but only 3 free pages m.FreePages.Should().Be(3); // now, request new 5 pages to write for (var i = 0; i < 5; i++) { pages.Add(m.NewPage()); } // extends must be increase m.ExtendSegments.Should().Be(3); // but if I release more than 10 pages, now I will re-use old pages foreach (var p in pages.Where(x => x.ShareCounter == -1).Take(10)) { // simulate write p.Origin = FileOrigin.Log; p.Position = ++pos; m.TryMoveToReadable(p); } m.WritablePages.Should().Be(7); m.FreePages.Should().Be(8); // now, if I request for 10 pages, all pages will be reused (no segment extend) for (var i = 0; i < 10; i++) { pages.Add(m.NewPage()); } // keep same extends m.ExtendSegments.Should().Be(3); // discard all pages PageBuffer pw; while ((pw = pages.FirstOrDefault(x => x.ShareCounter == -1)) != null) { m.DiscardPage(pw); } } [Fact] public void Cache_UniqueIDNumbering() { // Test case when second segment size is smaller than first int[] segmentSizes = { 5, 3 }; ConsumeNewPages(segmentSizes); // Test default database segment sizes segmentSizes = Constants.MEMORY_SEGMENT_SIZES; ConsumeNewPages(segmentSizes); // Test random memory segment sizes Random rnd = new Random(DateTime.Now.Millisecond); segmentSizes = new int[rnd.Next(3, 12)]; for (int i = 0; i < segmentSizes.Length; i++) { segmentSizes[i] = rnd.Next(1, 1000); } ConsumeNewPages(segmentSizes); } private void ConsumeNewPages(int[] segmentSizes) { var m = new MemoryCache(segmentSizes); // Test some additional segments using last segment size more than once var totalSegments = segmentSizes.Sum() + 10; for (int i = 1; i <= totalSegments; i++) { PageBuffer p = m.NewPage(); p.UniqueID.Should().Be(i); // Set ShareCounter to 0 to proper disposal (not needed in this test) p.ShareCounter = 0; } } } } ================================================ FILE: LiteDB.Tests/Internals/Disk_Tests.cs ================================================ using System.IO; using System.Collections.Generic; using FluentAssertions; using LiteDB.Engine; using Xunit; using System.Threading.Tasks; using System.Threading; using static LiteDB.Constants; namespace LiteDB.Internals { public class Disk_Tests { [Fact] public void Disk_Read_Write() { var settings = new EngineSettings { DataStream = new MemoryStream(), LogStream = new MemoryStream() }; var state = new EngineState(null, settings); var disk = new DiskService(settings, state, new int[] { 10 }); var pages = new List(); // let's create 100 pages with 0-99 full data for (var i = 0; i < 100; i++) { var p = disk.NewPage(); p.Fill((byte) i); // fills with 0 - 99 pages.Add(p); } // page will be saved in LOG file in PagePosition order (0-99) disk.WriteLogDisk(pages); // after release, no page can be read/write pages.Clear(); // lets do some read tests var reader = disk.GetReader(); for (var i = 0; i < 100; i++) { var p = reader.ReadPage(i * 8192, false, FileOrigin.Log); p.All((byte) i).Should().BeTrue(); p.Release(); } // test cache in use disk.Cache.PagesInUse.Should().Be(0); // wait all async threads disk.Dispose(); } [Fact (Skip = "Verificar loop")] public Task Disk_ExclusiveScheduler_Write() => Task.Factory.StartNew(Disk_Read_Write, CancellationToken.None, TaskCreationOptions.DenyChildAttach, new ConcurrentExclusiveSchedulerPair().ExclusiveScheduler); } } ================================================ FILE: LiteDB.Tests/Internals/Document_Tests.cs ================================================ using System; using System.Linq; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Internals { public class Document_Test { [Fact] public void Document_Copies_Properties_To_KeyValue_Array() { // ARRANGE // create a Bson document with all possible value types var document = new BsonDocument(); document.Add("string", new BsonValue("string")); document.Add("bool", new BsonValue(true)); document.Add("objectId", new BsonValue(ObjectId.NewObjectId())); document.Add("DateTime", new BsonValue(DateTime.Now)); document.Add("decimal", new BsonValue((decimal) 1)); document.Add("double", new BsonValue((double) 1.0)); document.Add("guid", new BsonValue(Guid.NewGuid())); document.Add("int", new BsonValue((int) 1)); document.Add("long", new BsonValue((long) 1)); document.Add("bytes", new BsonValue(new byte[] {(byte) 1})); document.Add("bsonDocument", new BsonDocument()); // ACT // copy all properties to destination array var result = new KeyValuePair[document.Count()]; document.CopyTo(result, 0); } [Fact] public void Value_Index_From_BsonValue() { var arr = JsonSerializer.Deserialize("[0, 1, 2, 3]"); var doc = JsonSerializer.Deserialize("{a:1,b:2,c:3}"); arr[0].RawValue.Should().Be(0); arr[3].RawValue.Should().Be(3); doc["a"].RawValue.Should().Be(1); doc["c"].RawValue.Should().Be(3); arr[1] = 111; doc["b"] = 222; arr[1].RawValue.Should().Be(111); doc["b"].RawValue.Should().Be(222); } } } ================================================ FILE: LiteDB.Tests/Internals/ExtendedLength_Tests.cs ================================================ using System; using System.Collections.Generic; using System.Text; using Xunit; namespace LiteDB.Internals { public class ExtendedLength_Tests { [Fact] public void ExtendedLengthHelper_Tests() { byte typeByte, lengthByte; BsonType type; ushort length; ExtendedLengthHelper.WriteLength(BsonType.String, 1010, out typeByte, out lengthByte); ExtendedLengthHelper.ReadLength(typeByte, lengthByte, out type, out length); Assert.Equal(BsonType.String, type); Assert.Equal((ushort)1010, length); } [Fact] public void IndexExtendedLength_Tests() { using var db = new LiteDatabase(":memory:"); var col = db.GetCollection("customers", BsonAutoId.Int32); col.EnsureIndex("$.Name"); col.Insert(new BsonDocument { ["Name"] = new string('A', 1010) }); col.Insert(new BsonDocument { ["Name"] = new string('B', 230) }); var results = db.Execute("select $ from customers where $.Name < 'B'").ToArray(); Assert.Single(results); } } } ================================================ FILE: LiteDB.Tests/Internals/Extensions_Test.cs ================================================ using LiteDB.Utils.Extensions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Xunit; namespace LiteDB.Tests.Internals; public class Extensions_Test { // Asserts that chained IEnumerable.OnDispose(()=> { }) calls the action on dispose, even when chained [Fact] public void EnumerableExtensions_OnDispose() { var disposed = false; var disposed1 = false; var enumerable = new[] { 1, 2, 3 }.OnDispose(() => disposed = true).OnDispose(() => disposed1 = true); foreach (var item in enumerable) { // do nothing } Assert.True(disposed); Assert.True(disposed1); } // tests IDisposable StartDisposable(this Stopwatch stopwatch) [Fact] public async Task StopWatchExtensions_StartDisposable() { var stopwatch = new System.Diagnostics.Stopwatch(); using (stopwatch.StartDisposable()) { await Task.Delay(100); } Assert.True(stopwatch.ElapsedMilliseconds > 0); } } ================================================ FILE: LiteDB.Tests/Internals/FreePage_Tests.cs ================================================ using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class FreePage_Tests { // FreeBytes ranges on page slot for free list page // 90% - 100% = 0 (7344 - 8160) // 75% - 90% = 1 (6120 - 7343) // 60% - 75% = 2 (4896 - 6119) // 30% - 60% = 3 (2448 - 4895) // 0% - 30% = 4 (0000 - 2447) [Fact] public void FreeSlot_Insert() { using (var e = new LiteEngine()) { e.BeginTrans(); // get transaction/snapshot "col1" var t = e.GetMonitor().GetTransaction(false, false, out var isNew); var s = t.CreateSnapshot(LockMode.Write, "col1", true); e.Insert("col1", new BsonDocument[] {new BsonDocument {["n"] = new byte[200]}}, BsonAutoId.Int32); // get pages var colPage = s.CollectionPage; var dataPage = s.LocalPages.FirstOrDefault(x => x.PageType == PageType.Data); var indexPage = s.LocalPages.FirstOrDefault(x => x.PageType == PageType.Index); // test dataPage free space dataPage.FreeBytes.Should().Be(7928); // page should be in Slot #0 (7344 - 8160 free bytes) colPage.FreeDataPageList.Should().Equal(dataPage.PageID, uint.MaxValue, uint.MaxValue, uint.MaxValue, uint.MaxValue); // adding 1 more document into same page e.Insert("col1", new BsonDocument[] {new BsonDocument {["n"] = new byte[600]}}, BsonAutoId.Int32); dataPage.FreeBytes.Should().Be(7296); // page should me moved into Slot #1 (6120 - 7343 free bytes) colPage.FreeDataPageList.Should().Equal(uint.MaxValue, dataPage.PageID, uint.MaxValue, uint.MaxValue, uint.MaxValue); // adding 1 big document to move this page into last page e.Insert("col1", new BsonDocument[] {new BsonDocument {["n"] = new byte[6000]}}, BsonAutoId.Int32); dataPage.FreeBytes.Should().Be(1264); // now this page should me moved into last Slot (#4) - next document will use another data page (even a very small document) colPage.FreeDataPageList.Should().Equal(uint.MaxValue, uint.MaxValue, uint.MaxValue, uint.MaxValue, dataPage.PageID); // adding a very small document to test adding new page e.Insert("col1", new BsonDocument[] {new BsonDocument {["n"] = new byte[10]}}, BsonAutoId.Int32); // no changes in dataPage... but new page as created dataPage.FreeBytes.Should().Be(1264); var dataPage2 = s.LocalPages.FirstOrDefault(x => x.PageType == PageType.Data && x.PageID != dataPage.PageID); dataPage2.FreeBytes.Should().Be(8118); // test slots (#0 for dataPage2 and #4 for dataPage1) colPage.FreeDataPageList.Should().Equal(dataPage2.PageID, uint.MaxValue, uint.MaxValue, uint.MaxValue, dataPage.PageID); // add another big document into dataPage2 do put both pages in same free Slot (#4) e.Insert("col1", new BsonDocument[] {new BsonDocument {["n"] = new byte[7000]}}, BsonAutoId.Int32); // now, both pages are linked in same slot #4 (starts with new dataPage2) colPage.FreeDataPageList.Should().Equal(uint.MaxValue, uint.MaxValue, uint.MaxValue, uint.MaxValue, dataPage2.PageID); // dataPage2 link into dataPage1 dataPage2.NextPageID.Should().Be(dataPage.PageID); dataPage.PrevPageID.Should().Be(dataPage2.PageID); // and both start/end points to null dataPage2.PrevPageID.Should().Be(uint.MaxValue); dataPage.NextPageID.Should().Be(uint.MaxValue); // do ColID tests dataPage.ColID.Should().Be(colPage.PageID); dataPage2.ColID.Should().Be(colPage.PageID); indexPage.ColID.Should().Be(colPage.PageID); } } [Fact] public void FreeSlot_Delete() { using (var e = new LiteEngine()) { e.BeginTrans(); // get transaction/snapshot "col1" var t = e.GetMonitor().GetTransaction(false, false, out var isNew); var s = t.CreateSnapshot(LockMode.Write, "col1", true); // first page e.Insert("col1", new BsonDocument[] {new BsonDocument {["_id"] = 1, ["n"] = new byte[2000]}}, BsonAutoId.Int32); e.Insert("col1", new BsonDocument[] {new BsonDocument {["_id"] = 2, ["n"] = new byte[2000]}}, BsonAutoId.Int32); e.Insert("col1", new BsonDocument[] {new BsonDocument {["_id"] = 3, ["n"] = new byte[2000]}}, BsonAutoId.Int32); // second page e.Insert("col1", new BsonDocument[] {new BsonDocument {["_id"] = 4, ["n"] = new byte[2000]}}, BsonAutoId.Int32); e.Insert("col1", new BsonDocument[] {new BsonDocument {["_id"] = 5, ["n"] = new byte[2000]}}, BsonAutoId.Int32); e.Insert("col1", new BsonDocument[] {new BsonDocument {["_id"] = 6, ["n"] = new byte[2000]}}, BsonAutoId.Int32); // get pages var colPage = s.CollectionPage; var indexPage = s.LocalPages.FirstOrDefault(x => x.PageType == PageType.Index); var dataPage1 = s.LocalPages.FirstOrDefault(x => x.PageType == PageType.Data); var dataPage2 = s.LocalPages.FirstOrDefault(x => x.PageType == PageType.Data && x.PageID != dataPage1.PageID); // test dataPage free space dataPage1.FreeBytes.Should().Be(2064); dataPage2.FreeBytes.Should().Be(2064); colPage.FreeDataPageList.Should().Equal(uint.MaxValue, uint.MaxValue, uint.MaxValue, uint.MaxValue, dataPage2.PageID); // delete some data e.Delete("col1", new BsonValue[] {2}); // test again dataPage dataPage1.FreeBytes.Should().Be(4092); colPage.FreeDataPageList.Should().Equal(uint.MaxValue, uint.MaxValue, uint.MaxValue, dataPage1.PageID, dataPage2.PageID); // clear first page e.Delete("col1", new BsonValue[] {1, 3}); // page1 must be now a clean page var emptyPage = s.LocalPages.FirstOrDefault(x => x.PageID == dataPage1.PageID); emptyPage.PageType.Should().Be(PageType.Empty); emptyPage.ItemsCount.Should().Be(0); emptyPage.FreeBytes.Should().Be(8160); t.Pages.DeletedPages.Should().Be(1); t.Pages.FirstDeletedPageID.Should().Be(emptyPage.PageID); t.Pages.LastDeletedPageID.Should().Be(emptyPage.PageID); } } } } ================================================ FILE: LiteDB.Tests/Internals/FreeSlot_Tests.cs ================================================ using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class FreeSlots_Tests { /// /// FreeBytes ranges on page slot for free list page /// 90% - 100% = 0 (7344 - 8160) /// 75% - 90% = 1 (6120 - 7343) /// 60% - 75% = 2 (4896 - 6119) /// 30% - 60% = 3 (2448 - 4895) /// 0% - 30% = 4 (0000 - 2447) /// [Fact] public void FreeIndexSlot_Ranges() { DataPage.FreeIndexSlot(0).Should().Be(4); DataPage.FreeIndexSlot(200).Should().Be(4); DataPage.FreeIndexSlot(2447).Should().Be(4); DataPage.FreeIndexSlot(2448).Should().Be(3); DataPage.FreeIndexSlot(4895).Should().Be(3); DataPage.FreeIndexSlot(4896).Should().Be(2); DataPage.FreeIndexSlot(6119).Should().Be(2); DataPage.FreeIndexSlot(6120).Should().Be(1); DataPage.FreeIndexSlot(7343).Should().Be(1); DataPage.FreeIndexSlot(7344).Should().Be(0); DataPage.FreeIndexSlot(8160).Should().Be(0); } [Fact] public void MinimumIndexSlot_Ranges() { DataPage.GetMinimumIndexSlot(1).Should().Be(3); DataPage.GetMinimumIndexSlot(200).Should().Be(3); DataPage.GetMinimumIndexSlot(2447).Should().Be(3); DataPage.GetMinimumIndexSlot(2448).Should().Be(2); DataPage.GetMinimumIndexSlot(4895).Should().Be(2); DataPage.GetMinimumIndexSlot(4896).Should().Be(1); DataPage.GetMinimumIndexSlot(6119).Should().Be(1); DataPage.GetMinimumIndexSlot(6120).Should().Be(0); DataPage.GetMinimumIndexSlot(7343).Should().Be(0); // need new page (returns -1) DataPage.GetMinimumIndexSlot(8160).Should().Be(-1); DataPage.GetMinimumIndexSlot(7344).Should().Be(-1); } } } ================================================ FILE: LiteDB.Tests/Internals/HeaderPage_Tests.cs ================================================ using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class HeaderPage_Tests { [Fact] public void HeaderPage_Collections() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 1); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; // create new header page var header = new HeaderPage(buffer, 0); header.InsertCollection("my-col1", 1); header.InsertCollection("my-col2", 2); header.GetCollections().Count().Should().Be(2); ((int) header.GetCollectionPageID("my-col1")).Should().Be(1); ((int) header.GetCollectionPageID("my-col2")).Should().Be(2); header.GetAvailableCollectionSpace().Should().Be(7955); header.UpdateBuffer(); // read header var h2 = new HeaderPage(buffer); h2.GetCollections().Count().Should().Be(2); ((int) h2.GetCollectionPageID("my-col1")).Should().Be(1); ((int) h2.GetCollectionPageID("my-col2")).Should().Be(2); h2.GetAvailableCollectionSpace().Should().Be(7955); buffer.ShareCounter = 0; } [Fact] public void HeaderPage_Savepoint() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 1); // mark buffer as writable (debug propose) buffer.ShareCounter = Constants.BUFFER_WRITABLE; // create new header page var header = new HeaderPage(buffer, 0); header.InsertCollection("my-col1", 1); header.InsertCollection("my-col2", 2); header.GetCollections().Count().Should().Be(2); // savepoint alse execute UpdateBuffer var sp = header.Savepoint(); header.DeleteCollection("my-col1"); header.DeleteCollection("my-col2"); header.UpdateBuffer(); header.GetCollections().Count().Should().Be(0); // now, restore header header.Restore(sp); header.GetCollections().Count().Should().Be(2); buffer.ShareCounter = 0; } } } ================================================ FILE: LiteDB.Tests/Internals/Pragma_Tests.cs ================================================ using System; using System.IO; using System.Linq; using System.Collections.Generic; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class Pragma_Tests { [Fact] public void Pragma_RunTests() { var data = new byte[Constants.PAGE_SIZE]; var buffer = new PageBuffer(data, 0, 1); // create new header page var header = new HeaderPage(buffer, 0); this.Invoking(x => header.Pragmas.Get("INEXISTENT_PRAGMA")).Should().Throw(); this.Invoking(x => header.Pragmas.Set(Pragmas.USER_VERSION, "invalid value", true)).Should().Throw(); this.Invoking(x => header.Pragmas.Set(Pragmas.USER_VERSION, 1, true)).Should().NotThrow(); this.Invoking(x => header.Pragmas.Set(Pragmas.COLLATION, "en-US/IgnoreCase", true)).Should().Throw(); this.Invoking(x => header.Pragmas.Set(Pragmas.TIMEOUT, -1, true)).Should().Throw(); this.Invoking(x => header.Pragmas.Set(Pragmas.TIMEOUT, 1, true)).Should().NotThrow(); this.Invoking(x => header.Pragmas.Set(Pragmas.LIMIT_SIZE, 1000, true)).Should().Throw(); this.Invoking(x => header.Pragmas.Set(Pragmas.LIMIT_SIZE, (Convert.ToInt32(header.LastPageID)) * Constants.PAGE_SIZE - 1, true)).Should().Throw(); this.Invoking(x => header.Pragmas.Set(Pragmas.LIMIT_SIZE, 1024L*1024L*1024L*1024L, true)).Should().NotThrow(); this.Invoking(x => header.Pragmas.Set(Pragmas.UTC_DATE, true, true)).Should().NotThrow(); this.Invoking(x => header.Pragmas.Set(Pragmas.CHECKPOINT, -1, true)).Should().Throw(); } } } ================================================ FILE: LiteDB.Tests/Internals/Sort_Tests.cs ================================================ using System; using System.IO; using System.Linq; using System.Collections.Generic; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Internals { public class Sort_Tests { private readonly IStreamFactory _factory = new StreamFactory(new MemoryStream(), null); [Fact] public void Sort_String_Asc() { var source = Enumerable.Range(0, 2000) .Select(x => Guid.NewGuid().ToString()) .Select(x => new KeyValuePair(x, PageAddress.Empty)) .ToArray(); var pragmas = new EnginePragmas(null); pragmas.Set(Pragmas.COLLATION, Collation.Binary.ToString(), false); using (var tempDisk = new SortDisk(_factory, 10 * 8192, pragmas)) using (var s = new SortService(tempDisk, Query.Ascending, pragmas)) { s.Insert(source); s.Count.Should().Be(2000); s.Containers.Count.Should().Be(2); s.Containers.ElementAt(0).Count.Should().Be(1905); s.Containers.ElementAt(1).Count.Should().Be(95); var output = s.Sort().ToArray(); output.Should().Equal(source.OrderBy(x => x.Key).ToArray()); } } [Fact] public void Sort_Int_Desc() { var rnd = new Random(); var source = Enumerable.Range(0, 20000) .Select(x => new KeyValuePair(rnd.Next(1, 30000), PageAddress.Empty)) .ToArray(); var pragmas = new EnginePragmas(null); pragmas.Set(Pragmas.COLLATION, Collation.Binary.ToString(), false); using (var tempDisk = new SortDisk(_factory, 10 * 8192, pragmas)) using (var s = new SortService(tempDisk, Query.Descending, pragmas)) { s.Insert(source); s.Count.Should().Be(20000); s.Containers.Count.Should().Be(3); s.Containers.ElementAt(0).Count.Should().Be(8192); s.Containers.ElementAt(1).Count.Should().Be(8192); s.Containers.ElementAt(2).Count.Should().Be(3616); var output = s.Sort().ToArray(); output.Should().Equal(source.OrderByDescending(x => x.Key).ToArray()); } } } } ================================================ FILE: LiteDB.Tests/Issues/Issue1585_Tests.cs ================================================ using System; using System.IO; using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Issues { public class PlayerDto { [BsonId] public Guid Id { get; } public string Name { get; } public PlayerDto(Guid id, string name) { Id = id; Name = name; } } public class Issue1585a_Tests { [Fact] public void Dto_Read() { using (var db = new LiteDatabase(new MemoryStream())) { var id = Guid.NewGuid(); var col = db.GetCollection(); col.Insert(new PlayerDto(id, "Bob")); var player = col.FindOne(x => x.Id == id); Assert.NotNull(player); } } [Fact] public void Dto_Read1() { using (var db = new LiteDatabase(new MemoryStream())) { var id = Guid.NewGuid(); var col = db.GetCollection(); col.Insert(new PlayerDto(id, "Bob")); var player = col.FindOne(x => x.Id == id); Assert.NotNull(player); } } [Fact] public void Dto_Read2() { using (var db = new LiteDatabase(new MemoryStream())) { var id = Guid.NewGuid(); var col = db.GetCollection(); col.Insert(new PlayerDto(id, "Bob")); var player = col.FindOne(x => x.Id == id); Assert.NotNull(player); } } } public class Issue1585b_Tests { [Fact] public void Dto_Read3() { using (var db = new LiteDatabase(new MemoryStream())) { var id = Guid.NewGuid(); var col = db.GetCollection(); col.Insert(new PlayerDto(id, "Bob")); var player = col.FindOne(x => x.Id == id); Assert.NotNull(player); } } [Fact] public void Dto_Read4() { using (var db = new LiteDatabase(new MemoryStream())) { var id = Guid.NewGuid(); var col = db.GetCollection(); col.Insert(new PlayerDto(id, "Bob")); var player = col.FindOne(x => x.Id == id); Assert.NotNull(player); } } [Fact] public void Dto_Read5() { using (var db = new LiteDatabase(new MemoryStream())) { var id = Guid.NewGuid(); var col = db.GetCollection(); col.Insert(new PlayerDto(id, "Bob")); var player = col.FindOne(x => x.Id == id); Assert.NotNull(player); } } } } ================================================ FILE: LiteDB.Tests/Issues/Issue1651_Tests.cs ================================================ using System; using System.Collections.Generic; using Xunit; using System.Linq; namespace LiteDB.Tests.Issues { public class Issue1651_Tests { public class Order : BaseEntity { public Customer Customer { get; set; } } public class Customer : BaseEntity { public string Name { get; set; } } public class BaseEntity { public Guid Id { get; set; } } [Fact] public void Find_ByRelationId_Success() { BsonMapper.Global.Entity().DbRef(order => order.Customer); using var _database = new LiteDatabase(":memory:"); var _orderCollection = _database.GetCollection("Order"); var _customerCollection = _database.GetCollection("Customer"); var customer = new Customer() { Name = "John", }; Assert.True(_customerCollection.Upsert(customer)); Assert.True(_customerCollection.Upsert(new Customer() { Name = "Anonymous" })); Assert.NotEqual(Guid.Empty, customer.Id); var order = new Order() { Customer = customer, }; var order2 = new Order() { Customer = new Customer() { Id = customer.Id }, }; var orphanOrder = new Order(); Assert.True(_orderCollection.Upsert(orphanOrder)); Assert.True(_orderCollection.Upsert(order)); Assert.True(_orderCollection.Upsert(order2)); customer.Name = "Josh"; Assert.True(_customerCollection.Update(customer)); var actualOrders = _orderCollection .Include(orderEntity => orderEntity.Customer) .Find(orderEntity => orderEntity.Customer.Id == customer.Id) .ToList(); Assert.Equal(2, actualOrders.Count); Assert.Equal(new[] { customer.Name, customer.Name }, actualOrders.Select(actualOrder => actualOrder.Customer.Name)); Assert.Equal(2, (_customerCollection.FindAll().ToList()).Count); Assert.Equal(3, (_orderCollection.FindAll().ToList()).Count); } } } ================================================ FILE: LiteDB.Tests/Issues/Issue1695_Tests.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using LiteDB.Engine; using Xunit; namespace LiteDB.Tests.Issues { public class Issue1695_Tests { public class StateModel { [BsonId] public ObjectId Id { get; set; } } [Fact] public void ICollection_Parameter_Test() { using var db = new LiteDatabase(":memory:"); var col = db.GetCollection("col"); ICollection ids = new List(); for (var i = 1; i <= 10; i++) ids.Add(col.Insert(new StateModel())); var items = col.Query() .Where(x => ids.Contains(x.Id)) .ToList(); items.Should().HaveCount(10); } } } ================================================ FILE: LiteDB.Tests/Issues/Issue1701_Tests.cs ================================================ using System; using System.Collections.Generic; using Xunit; using System.Linq; namespace LiteDB.Tests.Issues { public class Issue1701_Tests { [Fact] public void Deleted_Index_Slot_Test() { using var db = new LiteDatabase(":memory:"); var col = db.GetCollection("col", BsonAutoId.Int32); var id = col.Insert(new BsonDocument { ["attr1"] = "attr", ["attr2"] = "attr", ["attr3"] = "attr" }); col.EnsureIndex("attr1", "$.attr1"); col.EnsureIndex("attr2", "$.attr2"); col.EnsureIndex("attr3", "$.attr3"); col.DropIndex("attr2"); col.Update(id, new BsonDocument { ["attr1"] = "new" }); } } } ================================================ FILE: LiteDB.Tests/Issues/Issue1838_Tests.cs ================================================ using System; using System.Collections.Generic; using Xunit; using System.Linq; namespace LiteDB.Tests.Issues { public class Issue1838_Tests { [Fact] public void Find_ByDatetime_Offset() { using var db = new LiteDatabase(":memory:"); var collection = db.GetCollection(nameof(TestType)); // sample data collection.Insert(new TestType() { Foo = "abc", Timestamp = DateTimeOffset.UtcNow, }); collection.Insert(new TestType() { Foo = "def", Timestamp = DateTimeOffset.UtcNow, }); // filter from 1 hour in the past to 1 hour in the future var timeRange = TimeSpan.FromHours(2); var result = collection // throws exception .Find(x => x.Timestamp > (DateTimeOffset.UtcNow - timeRange)) .ToList(); Assert.NotNull(result); Assert.Equal(2, result.Count); } public class TestType { [BsonId] public int Id { get; set; } [BsonField] public string Foo { get; set; } [BsonField] public DateTimeOffset Timestamp { get; set; } } } } ================================================ FILE: LiteDB.Tests/Issues/Issue1860_Tests.cs ================================================ using System; using System.Collections.Generic; using Xunit; using System.Linq; namespace LiteDB.Tests.Issues { public class Issue1860_Tests { [Fact] public void Constructor_has_enum_bsonctor() { using var db = new LiteDatabase(":memory:"); // Get a collection (or create, if doesn't exist) var col1 = db.GetCollection("c1"); var col3 = db.GetCollection("c3"); var c1 = new C1 { Id = 1, EnumAB = EnumAB.B }; col1.Insert(c1); var c3 = new C3 ( id: 1, enumAB: EnumAB.B ); col3.Insert(c3); var value1 = col1.FindAll().FirstOrDefault(); Assert.NotNull(value1); Assert.Equal(c1.EnumAB, value1.EnumAB); var value3 = col3.FindAll().FirstOrDefault(); Assert.NotNull(value3); Assert.Equal(c3.EnumAB, value3.EnumAB); } [Fact] public void Constructor_has_enum() { using var db = new LiteDatabase(":memory:"); // Get a collection (or create, if doesn't exist) var col1 = db.GetCollection("c1"); var col2 = db.GetCollection("c2"); var c1 = new C1 { Id = 1, EnumAB = EnumAB.B }; col1.Insert(c1); var c2 = new C2 ( id: 1, enumAB: EnumAB.B ); col2.Insert(c2); var value1 = col1.FindAll().FirstOrDefault(); Assert.NotNull(value1); Assert.Equal(c1.EnumAB, value1.EnumAB); var value2 = col2.FindAll().FirstOrDefault(); Assert.NotNull(value2); Assert.Equal(c2.EnumAB, value2.EnumAB); } [Fact] public void Constructor_has_enum_asint() { using var db = new LiteDatabase(":memory:", new BsonMapper { EnumAsInteger = true }); // Get a collection (or create, if doesn't exist) var col1 = db.GetCollection("c1"); var col2 = db.GetCollection("c2"); var c1 = new C1 { Id = 1, EnumAB = EnumAB.B }; col1.Insert(c1); var c2 = new C2 ( id: 1, enumAB: EnumAB.B ); col2.Insert(c2); var value1 = col1.FindAll().FirstOrDefault(); Assert.NotNull(value1); Assert.Equal(c1.EnumAB, value1.EnumAB); var value2 = col2.FindAll().FirstOrDefault(); Assert.NotNull(value2); Assert.Equal(c2.EnumAB, value2.EnumAB); } public enum EnumAB { A = 1, B = 2, } public class C1 { public int Id { get; set; } public EnumAB? EnumAB { get; set; } } public class C2 { public int Id { get; set; } public EnumAB EnumAB { get; set; } public C2(int id, EnumAB enumAB) { Id = id; EnumAB = enumAB; } } public class C3 { public int Id { get; set; } public EnumAB EnumAB { get; set; } [BsonCtor] public C3(int id, EnumAB enumAB) { Id = id; EnumAB = enumAB; } } } } ================================================ FILE: LiteDB.Tests/Issues/Issue1865_Tests.cs ================================================ using System; using System.Collections.Generic; using Xunit; using System.Linq; using System.Security.Cryptography; namespace LiteDB.Tests.Issues { public class Issue1865_Tests { public class Project : BaseEntity { public List Points { get; set; } = new List(); } public class Point : BaseEntity { public BaseEntity Project { get; set; } public BaseEntity Parent { get; set; } public DateTime Start { get; internal set; } public DateTime End { get; internal set; } } public class BaseEntity { public ObjectId Id { get; set; } = ObjectId.NewObjectId(); public string Name { get; set; } } [Fact] public void Incluced_document_types_should_be_reald() { BsonMapper.Global.Entity().DbRef(p => p.Project, "activity"); BsonMapper.Global.Entity().DbRef(p => p.Parent, "activity"); BsonMapper.Global.Entity().DbRef(p => p.Points, "activity"); //BsonMapper.Global.ResolveCollectionName = (s) => "activity"; using var _database = new LiteDatabase(":memory:"); var projectsCol = _database.GetCollection("activity"); var pointsCol = _database.GetCollection("activity"); var project = new Project() { Name = "Project" }; var point1 = new Point { Parent = project, Project = project, Name = "Point 1", Start = DateTime.Now, End = DateTime.Now.AddDays(2) }; var point2 = new Point { Parent = point1, Project = project, Name = "Point 2", Start = DateTime.Now, End = DateTime.Now.AddDays(2) }; project.Points.Add(point1); project.Points.Add(point2); pointsCol.Insert(point1); pointsCol.Insert(point2); projectsCol.Insert(project); var p1 = pointsCol .FindById(point1.Id); Assert.Equal(typeof(Project), p1.Parent.GetType()); Assert.Equal(typeof(Project), p1.Project.GetType()); var p2 = pointsCol .FindById(point2.Id); Assert.Equal(typeof(Point), p2.Parent.GetType()); Assert.Equal(typeof(Project), p2.Project.GetType()); var prj = projectsCol .FindById(project.Id); Assert.Equal(typeof(Point), prj.Points[0].GetType()); p1 = pointsCol .Include(p => p.Parent).Include(p => p.Project) .FindById(point1.Id); Assert.Equal(typeof(Project), p1.Parent.GetType()); Assert.Equal(typeof(Project), p1.Project.GetType()); p2 = pointsCol .Include(p => p.Parent).Include(p => p.Project) .FindById(point2.Id); Assert.Equal(typeof(Point), p2.Parent.GetType()); Assert.Equal(typeof(Project), p2.Project.GetType()); prj = projectsCol .Include(p => p.Points) .FindById(project.Id); Assert.Equal(typeof(Point), prj.Points[0].GetType()); } } } ================================================ FILE: LiteDB.Tests/Issues/Issue2112_Tests.cs ================================================ using System; using System.Collections.Generic; using Xunit; using System.Linq; namespace LiteDB.Tests.Issues { public class Issue2112_Tests { private readonly BsonMapper _mapper = new BsonMapper(); [Fact] public void Serialize_covariant_collection_has_type() { IA a = new A { Bs = new List { new B() } }; var docA = _mapper.Serialize(a).AsDocument; var docB = docA["Bs"].AsArray[0].AsDocument; Assert.True(docA.ContainsKey("_type")); Assert.True(docB.ContainsKey("_type")); } [Fact] public void Deserialize_covariant_collection_succeed() { IA a = new A { Bs = new List { new B() } }; var serialized = _mapper.Serialize(a); var deserialized = _mapper.Deserialize(serialized); Assert.Equal(1, deserialized.Bs.Count); } interface IA { // at runtime this will be a List IReadOnlyCollection Bs { get; set; } } class A : IA { public IReadOnlyCollection Bs { get; set; } } interface IB { } class B : IB { } } } ================================================ FILE: LiteDB.Tests/Issues/Issue2127_Tests.cs ================================================ using Xunit; using System; using System.IO; using System.Text; using System.Threading; namespace LiteDB.Tests.Issues { public class Issue2127_Tests { public class ReproTests { [Fact(Skip = "To slow for a unit test in a build process")] public void InsertItemBackToBack_Test() { var databaseDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DatabaseLocation"); var databasePath = Path.Combine(databaseDirectory, "SampleDatabase.db"); var databaseLogPath = Path.Combine(databaseDirectory, "SampleDatabase-log.db"); // Repeat in a loop to hit that scenario where queue processing thread exists the loop but the task still remains incomplete. for (var i = 0; i < 100; i++) { if (Directory.Exists(databaseDirectory)) Directory.Delete(databaseDirectory, true); Directory.CreateDirectory(databaseDirectory); using var subject = new ExampleItemRepository(databasePath); var item1 = new ExampleItem { Id = Guid.NewGuid(), SomeProperty = Guid.NewGuid().ToString() }; var item2 = new ExampleItem { Id = Guid.NewGuid(), SomeProperty = Guid.NewGuid().ToString() }; subject.Insert(item1); subject.Insert(item2); // Allow items to be processed. Thread.Sleep(1000); var liteDbPath = databasePath; var liteDbLogPath = databaseLogPath; var copiedLiteDbPath = liteDbPath + ".copy"; var copiedLiteDbLogPath = liteDbLogPath + ".copy"; File.Copy(liteDbPath, copiedLiteDbPath); File.Copy(liteDbLogPath, copiedLiteDbLogPath); var liteDbContent = File.ReadAllText(copiedLiteDbPath, Encoding.UTF8); liteDbContent += File.ReadAllText(copiedLiteDbLogPath, Encoding.UTF8); Assert.True(liteDbContent.Contains(item1.SomeProperty, StringComparison.OrdinalIgnoreCase), $"Could not find item 1 property. {item1.SomeProperty}, Iteration: {i}"); Assert.True(liteDbContent.Contains(item2.SomeProperty, StringComparison.OrdinalIgnoreCase), $"Could not find item 2 property. {item2.SomeProperty}, Iteration: {i}"); } } } public class ExampleItem { [BsonId] public Guid Id { get; set; } public string SomeProperty { get; set; } } public sealed class ExampleItemRepository : IDisposable { public const string DatabaseFileName = "SampleDb"; private readonly LiteDatabase _liteDb; public ExampleItemRepository(string databasePath) { var connectionString = new ConnectionString { Filename = databasePath, Connection = ConnectionType.Direct }; _liteDb = new LiteDatabase(connectionString); } public void Insert(ExampleItem item) { var collection = _liteDb.GetCollection(); collection.Insert(item); } public void Dispose() { _liteDb?.Dispose(); } } } } ================================================ FILE: LiteDB.Tests/Issues/Issue2129_Tests.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using Xunit; namespace LiteDB.Tests.Issues { public class Issue2129_Tests { [Fact] public void TestInsertAfterDeleteAll() { var db = new LiteDatabase(":memory:"); var col = db.GetCollection(nameof(SwapChance)); col.EnsureIndex(x => x.Accounts1to2); col.EnsureIndex(x => x.Accounts2to1); col.InsertBulk(this.GenerateItems()); col.DeleteAll(); col.InsertBulk(this.GenerateItems()); } private IEnumerable GenerateItems() { var r = new Random(); int seq = 1; return Enumerable.Range(0, 150).Select(x => new SwapChance { Rarity = "Uncommon", Template1Id = r.Next(15023), Template2Id = r.Next(142, 188645), Accounts1to2 = Enumerable.Range(0, 8).Select(a => Guid.NewGuid().ToString().Substring(0, 10) + ".wam").ToList(), Accounts2to1 = Enumerable.Range(0, 6).Select(a => Guid.NewGuid().ToString().Substring(0, 10) + ".wam").ToList(), Sequence = seq++ }); } } public class SwapChance { public ObjectId Id { get; set; } public int Sequence { get; set; } = 0; public string Rarity { get; set; } = string.Empty; public int Template1Id { get; set; } public int Template2Id { get; set; } public List Accounts1to2 { get; set; } = new List(); public List Accounts2to1 { get; set; } = new List(); } } ================================================ FILE: LiteDB.Tests/Issues/Issue2265_Tests.cs ================================================ using System; using Xunit; namespace LiteDB.Tests.Issues; // issue 2265 public class Issue2265_Tests { public class Weights { public int Id { get; set; } = 0; // comment out [BsonRef] and the the test works [BsonRef("weights")] public Weights[] Parents { get; set; } public Weights(int id, Weights[] parents) { Id = id; Parents = parents; } public Weights() { Id = 0; Parents = Array.Empty(); } } [Fact] public void Test() { using (var db = new LiteDatabase(":memory:")) { var c = db.GetCollection("weights"); Weights? w = c.FindOne(x => true); if (w == null) { w = new Weights(); c.Insert(w); } //return w; } } } ================================================ FILE: LiteDB.Tests/Issues/Issue2298_Tests.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; using Xunit; namespace LiteDB.Tests.Issues; public class Issue2298_Tests { public struct Mass { public enum Units { Pound, Kilogram } public Mass(double value, Units unit) { Value = value; Unit = unit; } public double Value { get; init; } public Units Unit { get; init; } } public class QuantityRange { public QuantityRange(double min, double max, Enum unit) { Min = min; Max = max; Unit = unit; } public double Min { get; init; } public double Max { get; init; } public Enum Unit { get; init; } } public static QuantityRange MassRangeBuilder(BsonDocument document) { var doc = JsonDocument.Parse(document.ToString()).RootElement; var min = doc.GetProperty(nameof(QuantityRange.Min)).GetDouble(); var max = doc.GetProperty(nameof(QuantityRange.Max)).GetDouble(); var unit = Enum.Parse(doc.GetProperty(nameof(QuantityRange.Unit)).GetString()); var restored = new QuantityRange(min, max, unit); return restored; } [Fact] public void We_Dont_Need_Ctor() { BsonMapper.Global.RegisterType>( serialize: (range) => new BsonDocument { { nameof(QuantityRange.Min), range.Min }, { nameof(QuantityRange.Max), range.Max }, { nameof(QuantityRange.Unit), range.Unit.ToString() } }, deserialize: (document) => MassRangeBuilder(document as BsonDocument) ); var range = new QuantityRange(100, 500, Mass.Units.Pound); var filename = "Demo.DB"; var DB = new LiteDatabase(filename); var collection = DB.GetCollection>("DEMO"); collection.Insert(range); var restored = collection.FindAll().First(); } } ================================================ FILE: LiteDB.Tests/Issues/Issue2417_Tests.cs ================================================ using FluentAssertions; using LiteDB.Engine; using System; using System.IO; using System.Linq; using Xunit; namespace LiteDB.Tests.Issues { public class Issue2417_Tests { [Fact] public void Rebuild_Detected_Infinite_Loop() { var original = "../../../Resources/Issue2417_MyData.db"; using (var filename = new TempFile(original)) { var settings = new EngineSettings { Filename = filename, AutoRebuild = true, }; try { using (var db = new LiteEngine(settings)) { // infinite loop here var col = db.Query("customers", Query.All()).ToList(); // never run here Assert.Fail("not expected"); } } catch (Exception ex) { Assert.True(ex is LiteException lex && lex.ErrorCode == 999); } using (var db = new LiteEngine(settings)) { var col = db.Query("customers", Query.All()).ToList().Count; var errors = db.Query("_rebuild_errors", Query.All()).ToList().Count; col.Should().Be(4); errors.Should().Be(0); } } } [Fact] public void Rebuild_Detected_Infinite_Loop_With_Password() { var original = "../../../Resources/Issue2417_TestCacheDb.db"; using (var filename = new TempFile(original)) { var settings = new EngineSettings { Filename = filename, Password = "bzj2NplCbVH/bB8fxtjEC7u0unYdKHJVSmdmPgArRBwmmGw0+Wd2tE+b2zRMFcHAzoG71YIn/2Nq1EMqa5JKcQ==", AutoRebuild = true, }; try { using (var db = new LiteEngine(settings)) { // infinite loop here var col = db.Query("hubData$AppOperations", Query.All()).ToList(); // never run here Assert.Fail("not expected"); } } catch (Exception ex) { Assert.True(ex is LiteException lex && lex.ErrorCode == 999); } using (var db = new LiteEngine(settings)) { var col = db.Query("hubData$AppOperations", Query.All()).ToList().Count; var errors = db.Query("_rebuild_errors", Query.All()).ToList().Count; col.Should().Be(408); errors.Should().Be(0); } } } } } ================================================ FILE: LiteDB.Tests/Issues/Issue2458_Tests.cs ================================================ using System; using System.IO; using Xunit; namespace LiteDB.Tests.Issues; public class Issue2458_Tests { [Fact] public void NegativeSeekFails() { using var db = new LiteDatabase(":memory:"); var fs = db.FileStorage; AddTestFile("test", 1, fs); using Stream stream = fs.OpenRead("test"); Assert.Throws(() => stream.Position = -1); } //https://learn.microsoft.com/en-us/dotnet/api/system.io.stream.position?view=net-8.0 says seeking to a position //beyond the end of a stream is supported, so implementations should support it (error on read). [Fact] public void SeekPastFileSucceds() { using var db = new LiteDatabase(":memory:"); var fs = db.FileStorage; AddTestFile("test", 1, fs); using Stream stream = fs.OpenRead("test"); stream.Position = Int32.MaxValue; } [Fact] public void SeekShortChunks() { using var db = new LiteDatabase(":memory:"); var fs = db.FileStorage; using(Stream writeStream = fs.OpenWrite("test", "test")) { writeStream.WriteByte(0); writeStream.Flush(); //Create single-byte chunk just containing a 0 writeStream.WriteByte(1); writeStream.Flush(); writeStream.WriteByte(2); } using Stream readStream = fs.OpenRead("test"); readStream.Position = 2; Assert.Equal(2, readStream.ReadByte()); } private void AddTestFile(string id, long length, ILiteStorage fs) { using Stream writeStream = fs.OpenWrite(id, id); writeStream.Write(new byte[length]); } } ================================================ FILE: LiteDB.Tests/Issues/Issue2471_Test.cs ================================================ using FluentAssertions; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using Xunit; namespace LiteDB.Tests.Issues; public class Issue2471_Test { [Fact] public void TestFragmentDB_FindByIDException() { using var db = new LiteDatabase(":memory:"); var collection = db.GetCollection("fragtest"); var fragment = new object { }; var id = collection.Insert(fragment); id.Should().BeGreaterThan(0); var frag2 = collection.FindById(id); frag2.Should().NotBeNull(); Action act = () => db.Checkpoint(); act.Should().NotThrow(); } [Fact] public void MultipleReadCleansUpTransaction() { using var database = new LiteDatabase(":memory:"); var collection = database.GetCollection("test"); collection.Insert(new BsonDocument { ["_id"] = 1 }); for (int i = 0; i < 500; i++) { collection.FindById(1); } } #region Model public class User { public int Id { get; set; } public string Name { get; set; } public int[] Phones { get; set; } public List
Addresses { get; set; } } public class Address { public string Street { get; set; } } #endregion Model // Copied from IndexMultiKeyIndex, but this time we ensure that the lock is released by calling db.Checkpoint() [Fact] public void Ensure_Query_GetPlan_Releases_Lock() { using var db = new LiteDatabase(new MemoryStream()); var col = db.GetCollection(); col.Insert(new User { Name = "John Doe", Phones = new int[] { 1, 3, 5 }, Addresses = new List
{ new Address { Street = "Av.1" }, new Address { Street = "Av.3" } } }); col.Insert(new User { Name = "Joana Mark", Phones = new int[] { 1, 4 }, Addresses = new List
{ new Address { Street = "Av.3" } } }); // create indexes col.EnsureIndex(x => x.Phones); col.EnsureIndex(x => x.Addresses.Select(z => z.Street)); // testing indexes expressions var indexes = db.GetCollection("$indexes").FindAll().ToArray(); indexes[1]["expression"].AsString.Should().Be("$.Phones[*]"); indexes[2]["expression"].AsString.Should().Be("MAP($.Addresses[*]=>@.Street)"); // doing Phone query var queryPhone = col.Query() .Where(x => x.Phones.Contains(3)); var planPhone = queryPhone.GetPlan(); Action act = () => db.Checkpoint(); act.Should().NotThrow(); } } ================================================ FILE: LiteDB.Tests/Issues/Issue2487_Tests.cs ================================================ using FluentAssertions; using System.Diagnostics; using Xunit; namespace LiteDB.Tests.Issues; public class Issue2487_tests { private class DataClass { [BsonId] public int Id { get; set; } public string Foo { get; set; } public string Bar { get; set; } } [Fact] public void Test_Contains_EmptyStrings() { using var engine = new ConnectionString(":memory:").CreateEngine(); using var db = new LiteDatabase(engine); var collection = db.GetCollection("data"); collection.Insert(new DataClass { Foo = "bar", Bar = "abc" }); collection.Insert(new DataClass { Foo = " ", Bar = "def" }); collection.Insert(new DataClass { Foo = "fo bar", Bar = "def" }); collection.Insert(new DataClass { Foo = "", Bar = "def" }); collection.Insert(new DataClass { Foo = null, Bar = "def" }); var containsAction = () => collection.FindOne(x => x.Foo.Contains(" ")); containsAction.Should().NotThrow(); var def = containsAction(); def.Should().NotBeNull(); def.Bar.Should().Be("def"); var shouldExecute = () => engine.Query("data", Query.All(Query.Contains("Foo", " "))); shouldExecute.Should().NotThrow(); } } ================================================ FILE: LiteDB.Tests/Issues/Issue2494_Tests.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Xunit; namespace LiteDB.Tests.Issues; public class Issue2494_Tests { [Fact] public static void Test() { var original = "../../../Resources/Issue_2494_EncryptedV4.db"; using var filename = new TempFile(original); var connectionString = new ConnectionString(filename) { Password = "pass123", Upgrade = true, }; using (var db = new LiteDatabase(connectionString)) // <= throws as of version 5.0.18 { var col = db.GetCollection(); col.FindAll(); } } public class PlayerDto { [BsonId] public Guid Id { get; set; } public string Name { get; set; } public PlayerDto(Guid id, string name) { Id = id; Name = name; } public PlayerDto() { } } } ================================================ FILE: LiteDB.Tests/Issues/Issue2506_Tests.cs ================================================ using System.Collections.Generic; using System.IO; using Xunit; namespace LiteDB.Tests.Issues; public class Issue2506_Tests { [Fact] public void Test() { // Open database connection using LiteDatabase dataBase = new("demo.db"); // Get the file metadata/chunks storage ILiteStorage fileStorage = dataBase.GetStorage("myFiles", "myChunks"); // Upload empty test file to file storage using MemoryStream emptyStream = new(); fileStorage.Upload("photos/2014/picture-01.jpg", "picture-01.jpg", emptyStream); // Find file reference by its ID (returns null if not found) LiteFileInfo file = fileStorage.FindById("photos/2014/picture-01.jpg"); Assert.NotNull(file); // Load and save file bytes to hard drive file.SaveAs(Path.Combine(Path.GetTempPath(), "new-picture.jpg")); // Find all files matching pattern IEnumerable> files = fileStorage.Find("_id LIKE 'photos/2014/%'"); Assert.Single(files); // Find all files matching pattern using parameters IEnumerable> files2 = fileStorage.Find("_id LIKE @0", "photos/2014/%"); Assert.Single(files2); } } ================================================ FILE: LiteDB.Tests/Issues/Issue2534_Tests.cs ================================================ using Xunit; namespace LiteDB.Tests.Issues; public class Issue2534_Tests { [Fact] public void Test() { using LiteDatabase database = new(new ConnectionString() { Filename = "Demo.db", Connection = ConnectionType.Shared, }); ILiteCollection accounts = database.GetCollection("Issue2534"); if (accounts.Count() < 3) { accounts.Insert(new BsonDocument()); accounts.Insert(new BsonDocument()); accounts.Insert(new BsonDocument()); } foreach (BsonDocument document in accounts.FindAll()) { accounts.Update(document); } } } ================================================ FILE: LiteDB.Tests/Issues/Issue2570_Tests.cs ================================================ using FluentAssertions; using Xunit; namespace LiteDB.Tests.Issues; public class Issue2570_Tests { public class Person { public int Id { get; set; } public (string FirstName, string LastName) Name { get; set; } } [Fact] public void Issue2570_Tuples() { using (var db = new LiteDatabase(":memory:")) { var col = db.GetCollection("Person"); col.Insert(new Person { Name = ("John", "Doe") }); col.Insert(new Person { Name = ("Joana", "Doe") }); var result = col.FindOne(x => x.Name.FirstName == "John"); result.Should().NotBeNull(); result.Name.FirstName.Should().Be("John"); result.Name.LastName.Should().Be("Doe"); } } public struct PersonData { public string FirstName; public string LastName; } public class PersonWithStruct { public int Id { get; set; } public PersonData Name { get; set; } } [Fact] public void Issue2570_Structs() { using (var db = new LiteDatabase(":memory:")) { var col = db.GetCollection("Person"); col.Insert(new PersonWithStruct { Name = new PersonData { FirstName = "John", LastName = "Doe" } }); col.Insert(new PersonWithStruct { Name = new PersonData { FirstName = "Joana", LastName = "Doe" } }); var result = col.FindOne(x => x.Name.FirstName == "John"); result.Should().NotBeNull(); result.Name.FirstName.Should().Be("John"); result.Name.LastName.Should().Be("Doe"); } } } ================================================ FILE: LiteDB.Tests/Issues/Pull2468_Tests.cs ================================================ using FluentAssertions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Xunit; using static LiteDB.Tests.Issues.Issue1838_Tests; namespace LiteDB.Tests.Issues; public class Pull2468_Tests { // tests if lowerinvariant works [Fact] public void Supports_LowerInvariant() { using var db = new LiteDatabase(":memory:"); var collection = db.GetCollection(nameof(TestType)); collection.Insert(new TestType() { Foo = "Abc", Timestamp = DateTimeOffset.UtcNow, }); collection.Insert(new TestType() { Foo = "Def", Timestamp = DateTimeOffset.UtcNow, }); var result = collection.Query() .Where(x => x.Foo.ToLowerInvariant() == "abc") .ToList(); Assert.NotNull(result); Assert.Single(result); } // tests if upperinvariant works [Fact] public void Supports_UpperInvariant() { using var db = new LiteDatabase(":memory:"); var collection = db.GetCollection(nameof(TestType)); collection.Insert(new TestType() { Foo = "Abc", Timestamp = DateTimeOffset.UtcNow, }); collection.Insert(new TestType() { Foo = "Def", Timestamp = DateTimeOffset.UtcNow, }); var result = collection.Query() .Where(x => x.Foo.ToUpperInvariant() == "ABC") .ToList(); Assert.NotNull(result); Assert.Single(result); } } ================================================ FILE: LiteDB.Tests/LiteDB.Tests.csproj ================================================  net8 LiteDB.Tests LiteDB.Tests Maurício David MIT en-US false 1701;1702;1705;1591;0618 True ..\LiteDB\LiteDB.snk PreserveNewest all runtime; build; native; contentfiles; analyzers; buildtransitive all runtime; build; native; contentfiles; analyzers; buildtransitive ================================================ FILE: LiteDB.Tests/Mapper/CustomInterface_Tests.cs ================================================ using System; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class CustomInterface_Tests { public class User { private List strings = new List(); public int Id { get; set; } public IReadOnlyList Strings { get => strings; set => strings = new List(value); } } [Fact] public void Custom_Interface_Implements_IEnumerable() { var mapper = new BsonMapper(); var user = new User { Id = 1, Strings = new List { "aaa", "bbb" } }; var doc = mapper.ToDocument(user); var user2 = mapper.ToObject(doc); Assert.Equal(user.Id, user2.Id); Assert.Equal(user.Strings.Count, user2.Strings.Count); } } } ================================================ FILE: LiteDB.Tests/Mapper/CustomMappingCtor_Tests.cs ================================================ using System; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class CustomMapping_Tests { public class User { public int Id { get; } public string Name { get; } public User(int id, string name) { this.Id = id; this.Name = name; } } public class Domain { public int Id { get; set; } public string Name { get; set; } } public class MultiCtor { public int Id { get; set; } public string Name { get; set; } public string DefinedOnlyInInt32 { get; set; } public MultiCtor() { } [BsonCtor] public MultiCtor(int id) { this.Id = id; this.DefinedOnlyInInt32 = "changed"; } public MultiCtor(int id, string name) { this.Id = id; this.Name = name; } } public class MultiCtorWithArray { public int Id { get; set; } public string[] StrArr { get; set; } public string Name { get; set; } public string DefinedOnlyInStrArray { get; set; } public MultiCtorWithArray() { } [BsonCtor] public MultiCtorWithArray(int id, string[] strarr) { this.Id = id; this.StrArr = strarr; this.DefinedOnlyInStrArray = "changed"; } public MultiCtorWithArray(int id, string[] strarr, string name) { this.Id = id; this.StrArr = strarr; this.Name = name; } } public class MyClass { public int Id { get; set; } public string Name { get; set; } public DateTimeOffset DateTimeOffset { get; set; } public MyClass(int id, string name, DateTimeOffset dateTimeOffset) { Id = id; Name = name; DateTimeOffset = dateTimeOffset; } } public class ClassByte { public byte MyByte { get; } [BsonCtor] public ClassByte(byte myByte) { MyByte = myByte; } } private readonly BsonMapper _mapper = new BsonMapper(); [Fact] public void Custom_Ctor() { var doc = new BsonDocument { ["_id"] = 10, ["name"] = "John" }; var user = _mapper.ToObject(doc); user.Id.Should().Be(10); user.Name.Should().Be("John"); } [Fact] public void ParameterLess_Ctor() { var doc = new BsonDocument { ["_id"] = 25, ["name"] = "numeria.com.br" }; var domain = _mapper.ToObject(doc); domain.Id.Should().Be(25); domain.Name.Should().Be("numeria.com.br"); } [Fact] public void BsonCtor_Attribute() { var doc = new BsonDocument { ["_id"] = 25, ["name"] = "value-name" }; var obj = _mapper.ToObject(doc); obj.Id.Should().Be(25); obj.Name.Should().Be("value-name"); obj.DefinedOnlyInInt32.Should().Be("changed"); } [Fact] public void BsonCtorWithArray_Attribute() { var doc = new BsonDocument { ["_id"] = 25, ["name"] = "value-name", ["strarr"] = new BsonArray() {"foo","bar"} }; var obj = _mapper.ToObject(doc); obj.Id.Should().Be(25); obj.Name.Should().Be("value-name"); string.Join(", ", obj.StrArr).Should().Be("foo, bar"); obj.DefinedOnlyInStrArray.Should().Be("changed"); } [Fact] public void Custom_Ctor_Non_Simple_Types() { var doc = new BsonDocument { ["_id"] = 1, ["Name"] = "myName", ["DateTimeOffset"] = new DateTime(2020, 01, 01).ToUniversalTime() }; var obj = _mapper.ToObject(doc); obj.Id.Should().Be(1); obj.Name.Should().Be("myName"); obj.DateTimeOffset.Should().Be(new DateTimeOffset(new DateTime(2020, 01, 01))); } [Fact] public void Custom_Ctor_Byte_Property() { var obj1 = new ClassByte(150); var doc = _mapper.ToDocument(obj1); var obj2 = _mapper.ToObject(doc); obj2.MyByte.Should().Be(obj1.MyByte); } } } ================================================ FILE: LiteDB.Tests/Mapper/CustomMapping_Tests.cs ================================================ using System; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class CustomMappingCtor_Tests { public class UserWithCustomId { public int Key { get; } public string Name { get; } public UserWithCustomId(int key, string name) { this.Key = key; this.Name = name; } } [Fact] public void Custom_Ctor_With_Custom_Id() { var mapper = new BsonMapper(); mapper.Entity() .Id(u => u.Key, false); var doc = new BsonDocument { ["_id"] = 10, ["name"] = "John" }; var user = mapper.ToObject(doc); user.Key.Should().Be(10); // Expected user.Key to be 10, but found 0. user.Name.Should().Be("John"); } public abstract class BaseClass { [BsonId] public string CustomId { get; set; } [BsonField("CustomName")] public string Name { get; set; } } public class ConcreteClass : BaseClass { } [Fact] public void Custom_Id_In_Interface() { var mapper = new BsonMapper(); var obj = new ConcreteClass { CustomId = "myid", Name = "myname" }; var doc = mapper.Serialize(obj) as BsonDocument; doc["_id"].Should().NotBeNull(); doc["_id"].Should().Be("myid"); doc["CustomName"].Should().NotBe(BsonValue.Null); doc["CustomName"].Should().Be("myname"); doc["Name"].Should().Be(BsonValue.Null); doc.Keys.ExpectCount(2); } } } ================================================ FILE: LiteDB.Tests/Mapper/DbRefAbstract_Tests.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class DbRefAbstract_Tests { public class ProjectList { public int Id { get; set; } public string Name { get; set; } [BsonRef("items")] public List Items { get; set; } } public class ProjectItem { public int Id { get; set; } public string Name { get; set; } public ItemBase Item { get; set; } } public abstract class ItemBase { public Guid Id { get; set; } public string Name { get; set; } } public class ItemA : ItemBase { public string DetailsA { get; set; } } public class ItemB : ItemBase { public string DetailsB { get; set; } } [Fact] public void DbRef_List_Using_Abstract_Class() { using (var db = new LiteDatabase(new MemoryStream())) { var projectsCollection = db.GetCollection("projects"); var itemsCollection = db.GetCollection("items"); var itemA = new ItemA { Name = "Item A1", DetailsA = "Details A1" }; itemsCollection.Insert(itemA); var itemB = new ItemB { Name = "Item B1", DetailsB = "Details B1" }; itemsCollection.Insert(itemB); var project = new ProjectList { Name = "Project 1", Items = new List { itemA, itemB } }; projectsCollection.Insert(project); var queryResult = projectsCollection.FindAll().First(); // no Include - must use $type to load reference class queryResult.Items[0].GetType().Should().Be(typeof(ItemA)); queryResult.Items[1].GetType().Should().Be(typeof(ItemB)); } } [Fact] public void DbRef_Item_Using_Abstract_Class() { using (var db = new LiteDatabase(new MemoryStream())) { var projectsCollection = db.GetCollection("projects"); var itemsCollection = db.GetCollection("items"); var itemA = new ItemA { Name = "Item A1", DetailsA = "Details A1" }; itemsCollection.Insert(itemA); var itemB = new ItemB { Name = "Item B1", DetailsB = "Details B1" }; itemsCollection.Insert(itemB); var projectA = new ProjectItem { Name = "Project A", Item = itemA }; var projectB = new ProjectItem { Name = "Project B", Item = itemB }; projectsCollection.Insert(projectA); projectsCollection.Insert(projectB); var queryResult = projectsCollection.FindAll().ToArray(); // no Include - must use $type to load reference class queryResult[0].Item.GetType().Should().Be(typeof(ItemA)); queryResult[1].Item.GetType().Should().Be(typeof(ItemB)); } } } } ================================================ FILE: LiteDB.Tests/Mapper/Dictionary_Tests.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class Dictionary_Tests { public class Dict { public IDictionary DateDict { get; set; } = new Dictionary(); } private readonly BsonMapper _mapper = new BsonMapper(); [Fact] public void Dictionary_Map() { var obj = new Dict(); obj.DateDict[DateTime.Now] = "now!"; var doc = _mapper.ToDocument(obj); var newobj = _mapper.ToObject(doc); newobj.DateDict.Keys.First().Should().Be(obj.DateDict.Keys.First()); } [Fact] public void Deserialize_Object() { var doc = new BsonDocument() { ["x"] = 1 }; var result = _mapper.Deserialize(typeof(object), doc); Assert.Equal(typeof(Dictionary), result.GetType()); //! used to be empty var dic = (Dictionary)result; Assert.Single(dic); Assert.Equal(1, dic["x"]); } [Fact] public void Deserialize_Hashtable() { var doc = new BsonDocument() { ["x"] = 1 }; var result = _mapper.Deserialize(typeof(Hashtable), doc); Assert.Equal(typeof(Hashtable), result.GetType()); //! used to be empty var dic = (Hashtable)result; Assert.Single(dic); Assert.Equal(1, dic["x"]); } [Fact] public void Serialize_Hashtable() { var data = new Hashtable() { ["x"] = 1 }; //! used to fail var result = _mapper.Serialize(data).AsDocument; Assert.Single(result); Assert.Equal(1, result["x"].AsInt32); } [Fact] public void Deserialize_Uri() { var dict = new Dictionary(); dict.Add(new Uri("http://www.litedb.org/"), "LiteDB website"); var doc = _mapper.Serialize(dict).AsDocument; var dict2 = _mapper.Deserialize>(doc); Assert.Single(dict2); Assert.Equal(dict.Keys.Single(), dict2.Keys.Single()); } } } ================================================ FILE: LiteDB.Tests/Mapper/Enum_Tests.cs ================================================ using System; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class Enum_Tests { public enum CustomerType { Potential, New, Loyal } public class Customer { public int Id { get; set; } public CustomerType Type { get; set; } public CustomerType? NullableType { get; set; } } [Fact] public void Enum_Convert_Into_Document() { var mapper = new BsonMapper(); var c = new Customer { Id = 1, Type = CustomerType.Loyal }; var doc = mapper.ToDocument(c); doc["Type"].AsString.Should().Be("Loyal"); doc["NullableType"].IsNull.Should().BeTrue(); var fromDoc = mapper.ToObject(doc); fromDoc.Type.Should().Be(CustomerType.Loyal); fromDoc.NullableType.Should().BeNull(); } [Fact] public void Enum_Convert_Into_Linq_Query() { var mapper = new BsonMapper(); var c = new Customer { Id = 1, Type = CustomerType.Loyal }; mapper.EnumAsInteger = true; var doc = mapper.ToDocument(c); doc["Type"].AsInt32.Should().Be(2); doc["Nullable"].IsNull.Should().BeTrue(); // To use Eum in LINQ expressions, Enum must be integer value (should be EnumAsInteger = true) var expr1 = mapper.GetExpression(x => x.Type == CustomerType.Loyal); expr1.Parameters["p0"].AsInt32.Should().Be(2); var expr2 = mapper.GetExpression(x => x.NullableType.Value == CustomerType.Loyal); expr2.Parameters["p0"].AsInt32.Should().Be(2); } [Fact] public void Enum_Array_Test() { var mapper = new BsonMapper(); mapper.EnumAsInteger = false; var array = new CustomerType[] { CustomerType.Potential, CustomerType.Loyal }; var serialized1 = mapper.Serialize(array); var deserialized1 = mapper.Deserialize(serialized1); deserialized1.Should().Equal(array); mapper.EnumAsInteger = true; var serialized2 = mapper.Serialize(array); var deserialized2 = mapper.Deserialize(serialized1); deserialized2.Should().Equal(array); } } } ================================================ FILE: LiteDB.Tests/Mapper/GenericMap_Tests.cs ================================================ using System; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class GenericMap_Tests { public class User { public T Id { get; set; } public K Name { get; set; } } private readonly BsonMapper _mapper = new BsonMapper(); [Fact] public void Generic_Map() { var guid = Guid.NewGuid(); var today = DateTime.Today; var u0 = new User {Id = 1, Name = "John"}; var u1 = new User {Id = 99.9, Name = guid}; var u2 = new User {Id = today, Name = "Carlos"}; var u3 = new User, string> { Id = new Dictionary {["f"] = "user1", ["n"] = 4}, Name = "Complex User" }; var u4 = new User, string> { Id = new HashSet { 1, 3, "user2" }, Name = "User" }; var d0 = _mapper.ToDocument(u0.GetType(), u0); var d1 = _mapper.ToDocument(u1.GetType(), u1); var d2 = _mapper.ToDocument(u2.GetType(), u2); var d3 = _mapper.ToDocument(u3.GetType(), u3); var d4 = _mapper.ToDocument(u4.GetType(), u4); d0["_id"].AsInt32.Should().Be(1); d0["Name"].AsString.Should().Be("John"); d1["_id"].AsDouble.Should().Be(99.9); d1["Name"].AsGuid.Should().Be(guid); d2["_id"].AsDateTime.Should().Be(today); d2["Name"].AsString.Should().Be("Carlos"); d3["_id"]["f"].AsString.Should().Be("user1"); d3["_id"]["n"].AsInt32.Should().Be(4); d3["Name"].AsString.Should().Be("Complex User"); d4["_id"][0].AsInt32.Should().Be(1); d4["_id"][1].AsInt32.Should().Be(3); d4["_id"][2].AsString.Should().Be("user2"); d4["Name"].AsString.Should().Be("User"); } } } ================================================ FILE: LiteDB.Tests/Mapper/LinqBsonExpression_Tests.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Linq.Expressions; using System.Text.RegularExpressions; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class LinqBsonExpression_Tests { #region Model public class User { public int Id { get; set; } public string Name { get; set; } public double Salary { get; set; } public DateTime CreatedOn { get; set; } public bool Active { get; set; } public Address Address { get; set; } public List Phones { get; set; } public Phone[] Phones2 { get; set; } public int[] PhoneNumbers { get; set; } [BsonField("USER_DOMAIN_NAME")] public string DomainName { get; } public int? Latitude { get; set; } /// /// This type will be render as new BsonDoctument { [key] = value } /// public IDictionary MetaData { get; set; } } public class Address { public string Street { get; set; } public int Number { get; set; } public City City { get; set; } public string InvalidMethod() => "will thow error in eval"; } public class City { public string CityName { get; set; } public string Country { get; set; } } public class Phone { public PhoneType Type { get; set; } public int Prefix { get; set; } public int Number { get; set; } } public enum PhoneType { Mobile, Landline } public class Customer { public int CustomerId { get; set; } public string Name { get; set; } } public class Order { [BsonId] public int OrderNumber { get; set; } [BsonRef("customers")] public Customer Customer { get; set; } [BsonRef("users")] public List Users { get; set; } } public class Account { [BsonId] public Guid Id { get; set; } [BsonRef("customers")] public Customer Customer { get; set; } } public class Product { [BsonId] public ObjectId Id { get; set; } public string Name { get; set; } } private static Address StaticProp { get; set; } = new Address { Number = 99 }; private const int CONST_INT = 100; private string MyMethod() => "ok"; private int MyIndex() => 5; #endregion private readonly BsonMapper _mapper = new BsonMapper(); [Fact] public void Linq_Document_Navigation() { // document navigation TestExpr(x => x.Id, "_id"); TestExpr(x => x.Name, "Name"); TestExpr(x => x.Address.Street, "Address.Street"); TestExpr(x => x.Address.City.Country, "Address.City.Country"); } [Fact] public void Linq_Constants() { // only constants var today = DateTime.Today; var john = "JOHN"; var a = new { b = new { c = "JOHN" } }; // only constants TestExpr(x => 0, "@p0", 0); TestExpr(x => 1 + 1, "@p0", 2); // "1 + 1" will be resolved by LINQ before convert // values from variables TestExpr(x => today, "@p0", today); // values from deep object variables TestExpr(x => a.b.c, "@p0", a.b.c); TestExpr(x => x.Address.Street == a.b.c, "(Address.Street = @p0)", a.b.c); // class constants TestExpr(x => CONST_INT, "@p0", CONST_INT); TestExpr(x => StaticProp.Number, "@p0", StaticProp.Number); // methods inside constants TestExpr(x => "demo".Trim(), "TRIM(@p0)", "demo"); // execute method inside variables TestExpr(x => john.Trim(), "TRIM(@p0)", john); TestExpr(x => today.Day, "DAY(@p0)", today); // testing node stack using parameter-expression vs variable-expression TestExpr(x => x.Name.Length > john.Length, "(LENGTH(Name) > LENGTH(@p0))", john); // calling external methods TestExpr(x => x.Name == MyMethod(), "(Name = @p0)", MyMethod()); TestExpr(x => MyMethod().Length, "LENGTH(@p0)", MyMethod()); TestException(() => x => x.Name == x.Address.InvalidMethod()); } [Fact] public void Linq_Enumerables() { // access array items TestExpr(x => x.Phones, "$.Phones"); TestExpr(x => x.Phones.AsEnumerable(), "$.Phones[*]"); // where TestExpr(x => x.Phones.Where(p => p.Prefix == 1), "FILTER($.Phones=>(@.Prefix=@p0))", 1); TestExpr(x => x.Phones.Where(p => p.Prefix == x.Id), "FILTER($.Phones=>(@.Prefix=$._id))"); // aggregate TestExpr(x => x.Phones.Count(), "COUNT($.Phones)"); TestExpr(x => x.Phones.Min(), "MIN($.Phones)"); TestExpr(x => x.Phones.Max(), "MAX($.Phones)"); TestExpr(x => x.Phones.Select(p => p.Number).Sum(), "SUM(MAP($.Phones => @.Number))"); // aggregate with map TestExpr(x => x.Phones.Sum(w => w.Number), "SUM(MAP($.Phones => @.Number))"); TestExpr(x => x.Phones.Average(w => w.Number), "AVG(MAP($.Phones => @.Number))"); TestExpr(x => x.Phones.Max(w => w.Number), "MAX(MAP($.Phones => @.Number))"); TestExpr(x => x.Phones.Min(w => w.Number), "MIN(MAP($.Phones => @.Number))"); // map TestExpr(x => x.Phones.Select(y => y.Type), "MAP($.Phones => @.Type)"); TestExpr(x => x.Phones.Select(p => p.Number).Sum(), "SUM(MAP($.Phones => @.Number))"); TestExpr(x => x.Phones.Select(p => p.Number).Average(), "AVG(MAP($.Phones => @.Number))"); // array/list TestExpr(x => x.Phones.Where(w => w.Number == 5).ToArray(), "ARRAY(FILTER($.Phones=>(@.Number=@p0)))", 5); TestExpr(x => x.Phones.ToList(), "ARRAY($.Phones)"); // access using native array index (special "get_Item" eval index value) TestExpr(x => x.Phones[1].Number, "$.Phones[1].Number"); // fixed position TestExpr(x => x.Phones[15], "$.Phones[15]"); TestExpr(x => x.Phones.ElementAt(1), "$.Phones[@p0]", 1); // call external method/props/const inside parameter expression var a = new { b = new { c = 123 } }; // Items(int) generate eval value index TestExpr(x => x.Phones[a.b.c].Number, "$.Phones[123].Number"); TestExpr(x => x.Phones[CONST_INT].Number, "$.Phones[100].Number"); TestExpr(x => x.Phones[MyIndex()].Number, "$.Phones[5].Number"); // fixed position TestExpr(x => x.Phones.First(), "$.Phones[0]"); TestExpr(x => x.Phones.Last(), "$.Phones[-1]"); // contains TestExpr(x => x.PhoneNumbers.Contains(1234), "PhoneNumbers ANY = @p0", 1234); TestExpr(x => x.Phones2.Contains(new Phone { Number = 1 }), "Phones2 ANY = { Number: @p0 }", 1); // negated contains TestExpr(x => !x.PhoneNumbers.Contains(1234), "(PhoneNumbers ANY = @p0) = false", 1234); TestExpr(x => !x.Phones2.Contains(new Phone { Number = 1 }), "(Phones2 ANY = { Number: @p0 }) = false", 1); // fixed position with filter expression TestExpr(x => x.Phones.First(p => p.Number == 1), "FIRST(FILTER($.Phones=>(@.Number=@p0)))", 1); // using any/all TestExpr(x => x.Phones.Select(p => p.Number).Any(p => p == 1), "MAP(Phones => @.Number) ANY = @p0", 1); TestExpr(x => x.Phones.Select(p => p.Number.ToString()).Any(p => p.StartsWith("51")), "MAP(Phones => STRING(@.Number)) ANY LIKE (@p0 + '%')", "51"); } [Fact] public void Linq_Predicate() { // binary expressions TestPredicate(x => x.Active == true, "(Active = @p0)", true); TestPredicate(x => x.Salary > 50, "(Salary > @p0)", 50); TestPredicate(x => x.Salary != 50, "(Salary != @p0)", 50); TestPredicate(x => x.Salary == x.Id, "(Salary = _id)"); TestPredicate(x => x.Salary > 50 && x.Name == "John", "((Salary > @p0) AND (Name = @p1))", 50, "John"); TestPredicate(x => x.Salary > 50 & x.Name == "John", "((Salary > @p0) AND (Name = @p1))", 50, "John"); TestPredicate(x => x.Salary > 50 || x.Name == "John", "((Salary > @p0) OR (Name = @p1))", 50, "John"); TestPredicate(x => x.Salary > 50 | x.Name == "John", "((Salary > @p0) OR (Name = @p1))", 50, "John"); // unary expressions TestPredicate(x => x.Active, "(Active = true)"); TestPredicate(x => x.Active && x.Active, "(((Active) = true) AND ((Active) = true))"); TestPredicate(x => x.Active && x.Active && x.Active, "(((($.Active)=true) AND (($.Active)=true)) AND (($.Active)=true))"); TestPredicate(x => x.Active && !x.Active, "(((Active) = true) AND (Active = false))"); TestPredicate(x => !x.Active, "(Active = false)"); TestPredicate(x => !x.Active == true, "((Active = false) = @p0)", true); TestPredicate(x => !(x.Salary == 50), "((Salary = @p0)) = false", 50); // test for precedence order TestPredicate(x => x.Name.StartsWith("J") == false, "(Name LIKE (@p0 + '%') = @p1)", "J", false); // iif (c ? true : false) TestExpr(x => x.Id > 10 ? x.Id : 0, "IIF((_id > @p0), _id, @p1)", 10, 0); // contains in Array/List var numbersArray = new int[] { 1, 2, 3 }; var numbersList = new List() { 1, 2, 3 }; var numbersSet = new HashSet() { 1, 2, 3 }; var numbersArrayList = new ArrayList() { 1, 2, 3 }; var numbersBson = new BsonArray(numbersArray.Select(x => new BsonValue(x))); TestExpr(x => numbersArray.Contains(x.Id), "@p0 ANY = _id", numbersBson); TestExpr(x => numbersList.Contains(x.Id), "@p0 ANY = _id", numbersBson); TestExpr(x => numbersSet.Contains(x.Id), "@p0 ANY = _id", numbersBson); TestExpr(x => numbersArrayList.Contains(x.Id), "@p0 ANY = _id", numbersBson); } [Fact] public void Linq_Nullables() { TestExpr(x => x.Latitude, "Latitude"); TestExpr(x => x.Latitude + 200, "(Latitude + @p0)", 200); TestExpr(x => x.Latitude.Value + 200, "(Latitude + @p0)", 200); TestPredicate(x => x.Latitude > 0, "(Latitude > @p0)", 0); TestPredicate(x => x.Latitude != null && x.Latitude > 0, "((Latitude != @p0) AND (Latitude > @p1))", BsonValue.Null, 0); TestPredicate(x => x.Latitude.HasValue && x.Latitude > 0, "((((IS_NULL(Latitude) = false)) = true) AND (Latitude > @p0))", 0); } [Fact] public void Linq_Cast_Convert_Types() { // cast only fromType Double/Decimal to Int32/64 // int cast/convert/parse TestExpr(x => (int)x.Salary, "INT32(Salary)"); TestExpr(x => (int)x.Salary, "INT32(Salary)"); TestExpr(x => (double)x.Id, "_id"); TestExpr(x => Convert.ToInt32("123"), "INT32(@p0)", "123"); TestExpr(x => Int32.Parse("123"), "INT32(@p0)", "123"); } [Fact] public void Linq_Methods() { // string instance methods TestExpr(x => x.Name.ToUpper(), "UPPER(Name)"); TestExpr(x => x.Name.Substring(10), "SUBSTRING(Name, @p0)", 10); TestExpr(x => x.Name.Substring(10, 20), "SUBSTRING(Name, @p0, @p1)", 10, 20); TestExpr(x => x.Name.Replace('+', '-'), "REPLACE(Name, @p0, @p1)", "+", "-"); TestExpr(x => x.Name.IndexOf("m"), "INDEXOF(Name, @p0)", "m"); TestExpr(x => x.Name.IndexOf("m", 20), "INDEXOF(Name, @p0, @p1)", "m", 20); TestExpr(x => x.Name.ToUpper().Trim(), "TRIM(UPPER(Name))"); TestExpr(x => x.Name.ToUpper().Trim().PadLeft(5, '0'), "LPAD(TRIM(UPPER($.Name)), @p0, @p1)", 5, "0"); // string LIKE TestExpr(x => x.Name.StartsWith("Mauricio"), "Name LIKE (@p0 + '%')", "Mauricio"); TestExpr(x => x.Name.Contains("Bezerra"), "Name LIKE ('%' + @p0 + '%')", "Bezerra"); TestExpr(x => x.Name.EndsWith("David"), "Name LIKE ('%' + @p0)", "David"); TestExpr(x => x.Name.StartsWith(x.Address.Street), "Name LIKE (Address.Street + '%')"); // Equals TestExpr(x => x.Name.Equals("John"), "Name = @p0", "John"); TestExpr(x => x.CreatedOn.Equals(new DateTime(2019, 1, 1)), "CreatedOn = DATETIME(@p0, @p1, @p2)", 2019, 1, 1); TestExpr(x => x.Id.Equals(Guid.Empty), $"_id = GUID(\"{Guid.Empty.ToString()}\")"); TestExpr(x => x.Id.Equals(ObjectId.Empty), $"_id = OBJECTID(\"{ObjectId.Empty.ToString()}\")"); TestExpr(x => x.Salary.Equals(2000.0D), "Salary = @p0", 2000.0D); // string members TestExpr(x => x.Address.Street.Length, "LENGTH(Address.Street)"); TestExpr(x => string.Empty, "''"); // string static methods TestExpr(x => string.IsNullOrEmpty(x.Name), "(LENGTH(Name) = 0)"); TestExpr(x => string.IsNullOrWhiteSpace(x.Name), "(LENGTH(TRIM(Name)) = 0)"); // guid initialize/converter TestExpr(x => Guid.NewGuid(), "GUID()"); TestExpr(x => Guid.Empty, "GUID('00000000-0000-0000-0000-000000000000')"); TestExpr(x => Guid.Parse("1A3B944E-3632-467B-A53A-206305310BAC"), "GUID(@p0)", "1A3B944E-3632-467B-A53A-206305310BAC"); // toString/Format TestExpr(x => x.Id.ToString(), "STRING(_id)"); TestExpr(x => x.CreatedOn.ToString(), "STRING(CreatedOn)"); TestExpr(x => x.CreatedOn.ToString("yyyy-MM-dd"), "FORMAT(CreatedOn, @p0)", "yyyy-MM-dd"); TestExpr(x => x.Salary.ToString("#.##0,00"), "FORMAT(Salary, @p0)", "#.##0,00"); // adding dates TestExpr(x => x.CreatedOn.AddYears(5), "DATEADD('y', @p0, CreatedOn)", 5); TestExpr(x => x.CreatedOn.AddMonths(5), "DATEADD('M', @p0, CreatedOn)", 5); TestExpr(x => x.CreatedOn.AddDays(5), "DATEADD('d', @p0, CreatedOn)", 5); TestExpr(x => x.CreatedOn.AddHours(5), "DATEADD('h', @p0, CreatedOn)", 5); TestExpr(x => x.CreatedOn.AddMinutes(5), "DATEADD('m', @p0, CreatedOn)", 5); TestExpr(x => x.CreatedOn.AddSeconds(5), "DATEADD('s', @p0, CreatedOn)", 5); // using dates properties TestExpr(x => x.CreatedOn.Year, "YEAR(CreatedOn)"); TestExpr(x => x.CreatedOn.Month, "MONTH(CreatedOn)"); TestExpr(x => x.CreatedOn.Day, "DAY(CreatedOn)"); TestExpr(x => x.CreatedOn.Hour, "HOUR(CreatedOn)"); TestExpr(x => x.CreatedOn.Minute, "MINUTE(CreatedOn)"); TestExpr(x => x.CreatedOn.Second, "SECOND(CreatedOn)"); TestExpr(x => x.CreatedOn.Date, "DATETIME(YEAR(CreatedOn), MONTH(CreatedOn), DAY(CreatedOn))"); TestExpr(x => x.CreatedOn.ToUniversalTime(), "TO_UTC(CreatedOn)"); // static date TestExpr(x => DateTime.Now, "NOW()"); TestExpr(x => DateTime.UtcNow, "NOW_UTC()"); TestExpr(x => DateTime.Today, "TODAY()"); // using regex TestExpr(x => Regex.Split(x.Name, @"\s"), "SPLIT(Name, @p0, true)", @"\s"); TestExpr(x => Regex.IsMatch(x.Name, @"^K"), "IS_MATCH(Name, @p0)", @"^K"); } [Fact] public void Linq_Dictionary_Index_Access() { // index value will be evaluate when "get_Item" method call TestExpr(x => x.Phones[0].Number, "Phones[0].Number"); TestExpr(x => x.MetaData["KeyLocal"], "$.MetaData.KeyLocal"); TestExpr(x => x.MetaData["Key Local"].Street, "$.MetaData.['Key Local'].Street"); } [Fact] public void Linq_New_Instance() { // new class TestExpr(x => new { x.Name, x.Address }, "{ Name, Address }"); TestExpr(x => new { N = x.Name, A = x.Address }, "{ N: $.Name, A: $.Address }"); // new array TestExpr(x => new int[] { x.Id, 6, 7 }, "[_id, @p0, @p1]", 6, 7); // new fixed types TestExpr(x => new DateTime(2018, 5, 28), "DATETIME(@p0, @p1, @p2)", 2018, 5, 28); TestExpr(x => new Guid("1A3B944E-3632-467B-A53A-206305310BAC"), "GUID(@p0)", "1A3B944E-3632-467B-A53A-206305310BAC"); // new instances with initializers TestExpr(x => new User { Id = 1, Active = false }, "{ _id: @p0, Active: @p1 }", 1, false); // used in UpdateMany extend document TestExpr(x => new User { Name = x.Name.ToUpper(), Salary = x.Salary * 2 }, "{ Name: UPPER($.Name), Salary: ($.Salary * @p0) }", 2); } [Fact] public void Linq_Composite_Key() { // using composite key new class initializer TestExpr(x => x.Address == new Address { Number = 555 }, "(Address = { Number: @p0 })", 555); // using 2 levels TestExpr(x => x.Address == new Address { Number = 1, City = new City { Country = "BR", CityName = "POA" } }, "(Address = { Number: @p0, City: { Country: @p1, CityName: @p2 } })", 1, "BR", "POA"); } [Fact] public void Linq_Coalesce() { TestExpr(x => x.DomainName ?? x.Name, "COALESCE(USER_DOMAIN_NAME, Name)"); TestExpr(x => (x.CityName ?? x.Country) == DateTime.Now.Year.ToString(), "(COALESCE(CityName, Country) = STRING(YEAR(NOW())))"); } [Fact] public void Linq_DbRef() { TestExpr(x => x.Customer.CustomerId == 123, "(Customer.$id = @p0)", 123); TestExpr(x => x.Customer.Name == "John", "(Customer.Name = @p0)", "John"); TestExpr(x => x.Users.Select(u => u.Id).Any(id => id == 9), "MAP(Users => @.$id) ANY = @p0", 9); TestExpr(x => x.Users.Select(u => u.Name).Any(n => n == "U1"), "MAP(Users => @.Name) ANY = @p0 ", "U1"); } [Fact] public void Linq_Complex_Expressions() { _mapper.EnumAsInteger = true; TestExpr(x => new { CityName = x.Address.City.CityName, Count = x.Phones.Where(p => p.Type == PhoneType.Landline).Count(), List = x.Phones.Where(p => p.Number > x.Salary).Select(p => p.Number).ToArray() }, @" { CityName: $.Address.City.CityName, Count: COUNT(FILTER($.Phones=>(@.Type=@p0))), List: ARRAY(MAP(FILTER($.Phones=>(@.Number>$.Salary))=>@.Number)) }", (int)PhoneType.Landline); } [Fact] public void Linq_Enum_Expressions() { _mapper.EnumAsInteger = false; TestExpr(p => p.Type == PhoneType.Landline, "($.Type=@p0)", PhoneType.Landline.ToString()); _mapper.EnumAsInteger = true; TestExpr(p => p.Type == PhoneType.Landline, "($.Type=@p0)", (int)PhoneType.Landline); } [Fact] public void Linq_BsonDocument_Navigation() { TestExpr(x => x["name"].AsString, "$.name"); TestExpr(x => x["first"]["name"], "$.first.name"); TestExpr(x => x["arr"][0]["demo"], "$.arr[0].demo"); TestExpr(x => x["age"] == 1, "($.age = @p0)", 1); } [Fact] public void Linq_BsonDocument_Predicate() { TestPredicate(x => x["age"] == 1, "($.age = @p0)", 1); } [Fact] public void Linq_Custom_Field_Name() { // first use TestExpr(x => x.DomainName, "$.USER_DOMAIN_NAME"); // in creation new class TestExpr(x => new { x.DomainName }, "{ DomainName: $.USER_DOMAIN_NAME }"); } [Fact] public void Linq_Array_Contains() { var ids = new int[] { 1, 2, 3 }; //var ids = new List { 1, 2, 3 }; // works too // the result are correct, but can be optimize (in QueryOptimzier) to `$._id IN @p0` (index will be used) TestExpr(x => ids.Contains(x.Id), "@p0 ANY = $._id", new BsonArray { 1, 2, 3 }); TestExpr(x => ids.Where(q => q == x.Id).Count() > 0, "(COUNT(FILTER(@p0 => (@=$._id))) > @p1)", new BsonArray { 1, 2, 3 }, 0); } [Fact] public void Linq_Array_Any() { TestExpr(x => x.Phones.Any(), "COUNT($.Phones) > 0"); } [Fact] public void Linq_InvocationExpression() { Expression> expr = x => x.Id >= 1 && x.Id <= 10; Expression> exprLeft = x => x.Id >= 1; Expression> exprRight = x => x.Id <= 10; var invokedExprRight = Expression.Invoke(exprRight, exprRight.Parameters.Cast()); Expression> exprMerged = Expression.Lambda> (Expression.AndAlso(exprLeft.Body, invokedExprRight), exprLeft.Parameters); Test(expr, "(($._id>=@p0) AND ($._id<=@p1))", 1, 10); Test(exprMerged, "(($._id>=@p0) AND (((@._id<=@p1))=true))", 1, 10); //the right expr of exprMerged uses @ (instead of $) because the rootParameter is different for exprLeft and exprRight } #region Test helper /// /// Compare LINQ expression with expected BsonExpression /// [DebuggerHidden] private BsonExpression Test(Expression> expr, BsonExpression expect, params BsonValue[] args) { var expression = _mapper.GetExpression(expr); expression.Source.Should().Be(expect.Source); expression.Parameters.Keys.Count.Should().Be(args.Length, "Number of parameter are different than expected"); var index = 0; foreach (var par in args) { var pval = expression.Parameters["p" + (index++).ToString()]; pval.Should().Be(par, $"Expression: {expect.Source}"); } return expression; } [DebuggerHidden] private BsonExpression TestExpr(Expression> expr, BsonExpression expect, params BsonValue[] args) { return this.Test(expr, expect, args); } [DebuggerHidden] private BsonExpression TestExpr(Expression> expr, BsonExpression expect, params BsonValue[] args) { return this.Test(expr, expect, args); } [DebuggerHidden] private BsonExpression TestPredicate(Expression> expr, BsonExpression expect, params BsonValue[] args) { return this.Test(expr, expect, args); } /// /// Execute test but expect an exception /// [DebuggerHidden] private void TestException(Func>> fn) where TException : Exception { var test = fn(); this.Invoking(x => this.TestExpr(test, "$")).Should().Throw(); } #endregion } } ================================================ FILE: LiteDB.Tests/Mapper/LinqEval_Tests.cs ================================================ using System; using System.Linq; using System.Collections.Generic; using System.Linq.Expressions; using System.Diagnostics; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class LinqEval_Tests { #region Model public class User { public int Id { get; set; } public string Name { get; set; } public DateTime Date { get; set; } public bool Active { get; set; } public Guid Ticket { get; set; } public Address Address { get; set; } public List Phones { get; set; } } public class Address { public string Street { get; set; } public int Number { get; set; } } public class Phone { public PhoneType Type { get; set; } public int Prefix { get; set; } public int Number { get; set; } } public enum PhoneType { Mobile, Landline } #endregion private readonly BsonMapper _mapper = new BsonMapper(); [Fact] public void Linq_Date_Eval() { // remove milliseconds from now (BSON format do not support milliseconds) var now = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")); var u = new User {Date = now}; // date properties Eval(u, x => x.Date.Year, u.Date.Year); Eval(u, x => x.Date.Month, u.Date.Month); Eval(u, x => x.Date.Day, u.Date.Day); Eval(u, x => x.Date.Hour, u.Date.Hour); Eval(u, x => x.Date.Minute, u.Date.Minute); Eval(u, x => x.Date.Second, u.Date.Second); Eval(u, x => x.Date.Date, u.Date.Date); // date method Eval(u, x => x.Date.AddYears(5), u.Date.AddYears(5)); Eval(u, x => x.Date.AddMonths(5), u.Date.AddMonths(5)); Eval(u, x => x.Date.AddDays(5), u.Date.AddDays(5)); Eval(u, x => x.Date.AddHours(5), u.Date.AddHours(5)); Eval(u, x => x.Date.AddMinutes(5), u.Date.AddMinutes(5)); Eval(u, x => x.Date.AddSeconds(5), u.Date.AddSeconds(5)); // date Now/Today Eval(u, x => x.Date.Year + DateTime.Now.Year, u.Date.Year + DateTime.Now.Year); Eval(u, x => x.Date.Year + DateTime.UtcNow.Year, u.Date.Year + DateTime.UtcNow.Year); Eval(u, x => x.Date.Year + DateTime.Today.Year, u.Date.Year + DateTime.Today.Year); } [Fact] public void Linq_Predicate_Eval() { var u = new User {Id = 1, Active = false}; Eval(u, x => x.Id == 1, true); Eval(u, x => x.Id != 1, false); Eval(u, x => x.Id > 1, false); Eval(u, x => x.Id >= 1, true); Eval(u, x => x.Id < 1, false); Eval(u, x => x.Id <= 1, true); Eval(u, x => x.Id == 2 || !x.Active, true); Eval(u, x => x.Id == 2 && x.Active == true, false); Eval(u, x => x.Id == 2 && x.Active == true, false); // unary Eval(u, x => x.Active, false); Eval(u, x => !x.Active, true); Eval(u, x => !x.Active && !x.Active, true); Eval(u, x => x.Active || !x.Active, true); } [Fact] public void Linq_Document_Navigation_Eval() { var u = new User {Id = 1, Name = "John", Address = new Address {Number = 123, Street = "Ipiranga"}}; // return root $ Eval(u, x => x, u); // return property Eval(u, x => x.Address, u.Address); Eval(u, x => x.Address.Street, u.Address.Street); // checks "Name: " will not apply "Trim" as default option in BsonMapper Eval(u, x => "Name: " + x.Name, "Name: John"); } [Fact] public void Linq_Math_Eval() { var u = new User {Id = 5}; Eval(u, x => u.Id + 10 * 2, 25); Eval(u, x => (u.Id + 10) * 2, 30); Eval(u, x => Math.Abs(u.Id - 20), 15); Eval(u, x => Math.Round((double) u.Id / 3, 2), 1.67); } [Fact] public void Linq_Array_Navigation_Eval() { var u = new User { Phones = new List { new Phone {Number = 1, Prefix = 10, Type = PhoneType.Mobile}, new Phone {Number = 2, Prefix = 20, Type = PhoneType.Mobile}, new Phone {Number = 3, Prefix = 30, Type = PhoneType.Landline}, } }; // get full document inside //** Eval(u, x => x.Phones[0], u.Phones[0]); //** //** Eval(u, x => x.Phones.Items().Prefix, 10, 20, 30); //** Eval(u, x => x.Phones.Items(0).Number, 1); //** Eval(u, x => x.Phones.Items(-1).Number, 3); //** Eval(u, x => x.Phones.Items(z => z.Prefix >= 20).Number, 2, 3); } /// /// Eval expression and check with expected /// [DebuggerHidden] private void Eval(T entity, Expression> expr, params K[] expect) { var expression = _mapper.GetExpression(expr); var doc = _mapper.ToDocument(entity); var results = expression.Execute(doc).ToArray(); var index = 0; results.Length.Should().Be(expect.Length); foreach (var result in results) { var exp = _mapper.Serialize(typeof(K), expect[index++]); result.Should().Be(exp); } } } } ================================================ FILE: LiteDB.Tests/Mapper/Mapper_Tests.cs ================================================ using FluentAssertions; using System; using System.Reflection; using Xunit; namespace LiteDB.Tests.Mapper { public class Mapper_Tests { private readonly BsonMapper _mapper = new BsonMapper(); [Fact] public void ToDocument_ReturnsNull_WhenFail() { var array = new int[] { 1, 2, 3, 4, 5 }; var doc1 = _mapper.ToDocument(array); doc1.Should().Be(null); var doc2 = _mapper.ToDocument(typeof(int[]), array); doc2.Should().Be(null); } [Fact] public void Class_Not_Assignable() { using (var db = new LiteDatabase(":memory:")) { var col = db.GetCollection("Test"); col.Insert(new MyClass { Id = 1, Member = null }); var type = typeof(OtherClass); var typeName = type.FullName + ", " + type.GetTypeInfo().Assembly.GetName().Name; db.Execute($"update Test set Member = {{_id: 1, Name: null, _type: \"{typeName}\"}} where _id = 1"); Func func = (() => col.FindById(1)); func.Should().Throw(); } } public class MyClass { public int Id { get; set; } public MyClass Member { get; set; } } public class OtherClass { public string Name { get; set; } } } } ================================================ FILE: LiteDB.Tests/Mapper/Records_Tests.cs ================================================ using System; using System.Collections.Generic; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class Records_Tests { public record User(int Id, string Name); [Fact] public void Record_Simple_Mapper() { var mapper = new BsonMapper(); var user = new User(1, "John"); var doc = mapper.ToDocument(user); var user2 = mapper.ToObject(doc); Assert.Equal(user.Id, user2.Id); Assert.Equal(user.Name, user2.Name); } } } ================================================ FILE: LiteDB.Tests/Mapper/StructField_Tests.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.Mapper { public class StructFields_Tests { public struct Point2D { public int X; public int Y; } [Fact] public void Serialize_Struct_Fields() { var m = new BsonMapper(); m.IncludeFields = true; using (var db = new LiteDatabase(new MemoryStream(), m, new MemoryStream())) { var col = db.GetCollection("mytable"); col.Insert(new Point2D { X = 10, Y = 120 }); col.Insert(new Point2D { X = 15, Y = 130 }); col.Insert(new Point2D { X = 20, Y = 140 }); var col2 = db.GetCollection("mytable"); var allY = col2.Query().Select(p => p.Y).ToArray(); var allX = col2.Query().Select(p => p.X).ToArray(); var allStruct = col2.Query().ToArray(); var allNewStruct = col2.Query().Select(p => new { NewX = p.X, NewY = p.Y }).ToArray(); } } } } ================================================ FILE: LiteDB.Tests/Query/Aggregate_Tests.cs ================================================ //using Microsoft.VisualStudio.TestTools.UnitTesting; //using System; //using System.IO; //using System.Linq; //using System.Threading.Tasks; //using System.Collections; //using System.Collections.Generic; //using System.Text; //using System.Reflection; //using System.Text.RegularExpressions; //using LiteDB.Engine; //namespace LiteDB.Tests.QueryTest //{ // [TestClass] // public class Aggregate_Tests // { // private LiteEngine db; // private BsonDocument[] person; // [TestInitialize] // public void Init() // { // db = new LiteEngine(); // person = DataGen.Person(1, 1000).ToArray(); // db.Insert("person", person); // db.EnsureIndex("col", "age"); // } // [TestCleanup] // public void CleanUp() // { // db.Dispose(); // } // [Fact] // public void Query_Aggregate_Min_Max() // { // // indexed // Assert.Equal( // person.Min(x => x["age"].AsInt32), // db.Min("person", "age").AsInt32); // Assert.Equal( // person.Max(x => x["age"].AsInt32), // db.Max("person", "age").AsInt32); // // full query // Assert.Equal( // person.Min(x => x["name"].AsString), // db.Min("person", "name").AsString); // Assert.Equal( // person.Max(x => x["name"].AsString), // db.Max("person", "name").AsString); // } // [Fact] // public void Query_Count_With_Filter() // { // Assert.Equal( // person.LongCount(), // db.Count("person")); // Assert.Equal( // person.Count(x => x["age"] > 20), // db.Count("person", "age > 20")); // // length // Assert.Equal( // person.Count(x => x["name"].AsString.Length > 20), // db.Count("person", "LENGTH(name) > 20")); // } // [Fact] // public void Query_Sum_With_Filter() // { // // sum // Assert.Equal( // person.Sum(x => x["age"].AsInt32), // db.Query("person").SelectAll("SUM(age)").ExecuteScalar().AsInt32); // // with filter // Assert.Equal( // person.Where(x => x["active"].AsBoolean).Sum(x => x["age"].AsInt32), // db.Query("person").Where("active = true").SelectAll("SUM(age)").ExecuteScalar().AsInt32); // } // [Fact] // public void Query_Exists_With_Filter() // { // // using expression // Assert.Equal( // person.Any(x => x["age"].AsInt32 == 99), // db.Exists("person", "age = 99")); // } // } //} ================================================ FILE: LiteDB.Tests/Query/Data/PersonGroupByData.cs ================================================ using FluentAssertions; using System; using System.IO; using System.Linq; using Xunit; namespace LiteDB.Tests.QueryTest { public class PersonGroupByData : IDisposable { private readonly Person[] _local; private readonly ILiteDatabase _db; private readonly ILiteCollection _collection; public PersonGroupByData() { _local = DataGen.Person(1, 1000).ToArray(); _db = new LiteDatabase(new MemoryStream()); _collection = _db.GetCollection(); _collection.Insert(_local); _collection.EnsureIndex(x => x.Age); } public (ILiteCollection, Person[]) GetData() => (_collection, _local); public void Dispose() { _db.Dispose(); } } } ================================================ FILE: LiteDB.Tests/Query/Data/PersonQueryData.cs ================================================ using System; using System.Linq; namespace LiteDB.Tests.QueryTest { public class PersonQueryData : IDisposable { private readonly Person[] _local; private readonly ILiteDatabase _db; private readonly ILiteCollection _collection; public PersonQueryData() { _local = DataGen.Person().ToArray(); _db = new LiteDatabase(":memory:"); _collection = _db.GetCollection("person"); _collection.Insert(this._local); } public (ILiteCollection, Person[]) GetData() => (_collection, _local); public void Dispose() { _db.Dispose(); } } } ================================================ FILE: LiteDB.Tests/Query/GroupBy_Tests.cs ================================================ using FluentAssertions; using System; using System.IO; using System.Linq; using Xunit; namespace LiteDB.Tests.QueryTest { public class GroupBy_Tests { [Fact(Skip = "Missing implement LINQ for GroupBy")] public void Query_GroupBy_Age_With_Count() { //**using var db = new PersonGroupByData(); //**var (collection, local) = db.GetData(); //** //**var r0 = local //** .GroupBy(x => x.Age) //** .Select(x => new { Age = x.Key, Count = x.Count() }) //** .OrderBy(x => x.Age) //** .ToArray(); //** //**var r1 = collection.Query() //** .GroupBy("$.Age") //** .Select(x => new { Age = x.Key, Count = x.Count() }) //** .ToArray(); //** //**foreach (var r in r0.Zip(r1, (l, r) => new { left = l, right = r })) //**{ //** r.left.Age.Should().Be(r.right.Age); //** r.left.Count.Should().Be(r.right.Count); //**} } [Fact(Skip = "Missing implement LINQ for GroupBy")] public void Query_GroupBy_Year_With_Sum_Age() { //** var r0 = local //** .GroupBy(x => x.Date.Year) //** .Select(x => new { Year = x.Key, Sum = x.Sum(q => q.Age) }) //** .OrderBy(x => x.Year) //** .ToArray(); //** //** var r1 = collection.Query() //** .GroupBy(x => x.Date.Year) //** .Select(x => new { Year = x.Key, Sum = x.Sum(q => q.Age) }) //** .ToArray(); //** //** foreach (var r in r0.Zip(r1, (l, r) => new { left = l, right = r })) //** { //** r.left.Year.Should().Be(r.right.Year); //** r.left.Sum.Should().Be(r.right.Sum); //** } } [Fact(Skip = "Missing implement LINQ for GroupBy")] public void Query_GroupBy_Func() { //** var r0 = local //** .GroupBy(x => x.Date.Year) //** .Select(x => new { Year = x.Key, Count = x.Count() }) //** .OrderBy(x => x.Year) //** .ToArray(); //** //** var r1 = collection.Query() //** .GroupBy(x => x.Date.Year) //** .Select(x => new { x.Date.Year, Count = x }) //** .ToArray(); //** //** foreach (var r in r0.Zip(r1, (l, r) => new { left = l, right = r })) //** { //** Assert.Equal(r.left.Year, r.right.Year); //** Assert.Equal(r.left.Count, r.right.Count); //** } } [Fact(Skip = "Missing implement LINQ for GroupBy")] public void Query_GroupBy_With_Array_Aggregation() { //** // quite complex group by query //** var r = collection.Query() //** .GroupBy(x => x.Email.Substring(x.Email.IndexOf("@") + 1)) //** .Select(x => new //** { //** Domain = x.Email.Substring(x.Email.IndexOf("@") + 1), //** Users = Sql.ToArray(new //** { //** Login = x.Email.Substring(0, x.Email.IndexOf("@")).ToLower(), //** x.Name, //** x.Age //** }) //** }) //** .Limit(10) //** .ToArray(); //** //** // test first only //** Assert.Equal(5, r[0].Users.Length); //** Assert.Equal("imperdiet.us", r[0].Domain); //** Assert.Equal("delilah", r[0].Users[0].Login); //** Assert.Equal("Dahlia Warren", r[0].Users[0].Name); //** Assert.Equal(24, r[0].Users[0].Age); } } } ================================================ FILE: LiteDB.Tests/Query/Include_Tests.cs ================================================ //using Microsoft.VisualStudio.TestTools.UnitTesting; //using System; //using System.IO; //using System.Linq; //using System.Threading.Tasks; //using System.Collections; //using System.Collections.Generic; //using System.Text; //using System.Reflection; //using System.Text.RegularExpressions; //using LiteDB.Engine; //namespace LiteDB.Tests.QueryTest //{ // [TestClass] // public class Include_Tests // { // private LiteEngine db; // [TestInitialize] // public void Init() // { // db = new LiteEngine(); // #region Initial Data // var sql = //@"insert into city values { _id: 1, name: 'Porto Alegre', state: 'RS' }; //insert into city values { _id: 2, name: 'Pelotas', state: 'RS' }; //insert into city values { _id: 3, name: 'São Paulo', state: 'SP' }; //insert into city values { _id: 4, name: 'Rio de Janeiro', state: 'RJ' }; //insert into city values { _id: 5, name: 'Niteroi', state: 'RJ' }; //insert into address values {_id: 1, street: 'Ipiranga', nr: 6609, city: {$id: 1, $ref: 'city'} }; //insert into address values {_id: 2, street: 'Protasio', nr: 25, city: {$id: 1, $ref: 'city'} }; //insert into address values {_id: 3, street: 'Brigadeiro Faria Lima', nr: 1100, city: {$id: 3, $ref: 'city'} }; //insert into address values {_id: 4, street: 'Copacabana', nr: 1, cit: {$id: 4, $ref: 'city'} }; //insert into address values {_id: 5, street: 'Travessa do Ouvidor', nr: 225, city: {$id: 5, $ref: 'city'} }; //insert into customer values {_id: 1, name: 'Mauricio', address: {$id: 1, $ref:'address'}}; //insert into customer values {_id: 2, name: 'Carlos', address: {$id: 1, $ref:'address'}}; //insert into customer values {_id: 3, name: 'Joao', address: {$id: 3, $ref:'address'}}; //insert into customer values {_id: 4, name: 'Juliano', address: {$id: 3, $ref:'address'}}; //insert into customer values {_id: 5, name: 'Mauro', address: {$id: 3, $ref:'address'}}; //insert into customer values {_id: 6, name: 'Moacir', address: {$id: 4, $ref:'address'}}; //insert into customer values {_id: 7, name: 'Neimar', address: {$id: 5, $ref:'address'}};"; // #endregion // using (var r = db.Execute(sql)) // { // while (r.NextResult()) ; // } // } // [TestCleanup] // public void CleanUp() // { // db.Dispose(); // } // [Fact] // public void Query_Include_Address() // { // var json = "[{'_id':1,'name':'Mauricio','address':{'_id':1,'street':'Ipiranga','nr':6609,'city':{'$id':1,'$ref':'city'}}},{'_id':2,'name':'Carlos','address':{'_id':1,'street':'Ipiranga','nr':6609,'city':{'$id':1,'$ref':'city'}}},{'_id':3,'name':'Joao','address':{'_id':3,'street':'Brigadeiro Faria Lima','nr':1100,'city':{'$id':3,'$ref':'city'}}},{'_id':4,'name':'Juliano','address':{'_id':3,'street':'Brigadeiro Faria Lima','nr':1100,'city':{'$id':3,'$ref':'city'}}},{'_id':5,'name':'Mauro','address':{'_id':3,'street':'Brigadeiro Faria Lima','nr':1100,'city':{'$id':3,'$ref':'city'}}},{'_id':6,'name':'Moacir','address':{'_id':4,'street':'Copacabana','nr':1,'cit':{'$id':4,'$ref':'city'}}},{'_id':7,'name':'Neimar','address':{'_id':5,'street':'Travessa do Ouvidor','nr':225,'city':{'$id':5,'$ref':'city'}}}]"; // var r0 = JsonSerializer.Deserialize(json); // var r1 = db.Query("customer") // .Include("address") // .ToArray() // .ToBsonArray(); // Assert.Equal(r0, r1); // } // [Fact] // public void Query_Include_Address_And_City() // { // var json = "[{'_id':1,'name':'Mauricio','address':{'_id':1,'street':'Ipiranga','nr':6609,'city':{'_id':1,'name':'Porto Alegre','state':'RS'}}},{'_id':2,'name':'Carlos','address':{'_id':1,'street':'Ipiranga','nr':6609,'city':{'_id':1,'name':'Porto Alegre','state':'RS'}}},{'_id':3,'name':'Joao','address':{'_id':3,'street':'Brigadeiro Faria Lima','nr':1100,'city':{'_id':3,'name':'S\u00e3o Paulo','state':'SP'}}},{'_id':4,'name':'Juliano','address':{'_id':3,'street':'Brigadeiro Faria Lima','nr':1100,'city':{'_id':3,'name':'S\u00e3o Paulo','state':'SP'}}},{'_id':5,'name':'Mauro','address':{'_id':3,'street':'Brigadeiro Faria Lima','nr':1100,'city':{'_id':3,'name':'S\u00e3o Paulo','state':'SP'}}},{'_id':6,'name':'Moacir','address':{'_id':4,'street':'Copacabana','nr':1,'cit':{'$id':4,'$ref':'city'}}},{'_id':7,'name':'Neimar','address':{'_id':5,'street':'Travessa do Ouvidor','nr':225,'city':{'_id':5,'name':'Niteroi','state':'RJ'}}}]"; // var r0 = JsonSerializer.Deserialize(json); // var r1 = db.Query("customer") // .Include("address") // .Include("address.city") // .ToArray() // .ToBsonArray(); // Assert.Equal(r0, r1); // } // } //} ================================================ FILE: LiteDB.Tests/Query/OrderBy_Tests.cs ================================================ using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.QueryTest { public class OrderBy_Tests { [Fact] public void Query_OrderBy_Using_Index() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); collection.EnsureIndex(x => x.Name); var r0 = local .OrderBy(x => x.Name) .Select(x => new {x.Name}) .ToArray(); var r1 = collection.Query() .OrderBy(x => x.Name) .Select(x => new {x.Name}) .ToArray(); r0.Should().Equal(r1); } [Fact] public void Query_OrderBy_Using_Index_Desc() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); collection.EnsureIndex(x => x.Name); var r0 = local .OrderByDescending(x => x.Name) .Select(x => new {x.Name}) .ToArray(); var r1 = collection.Query() .OrderByDescending(x => x.Name) .Select(x => new {x.Name}) .ToArray(); r0.Should().Equal(r1); } [Fact] public void Query_OrderBy_With_Func() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); collection.EnsureIndex(x => x.Date.Day); var r0 = local .OrderBy(x => x.Date.Day) .Select(x => new {d = x.Date.Day}) .ToArray(); var r1 = collection.Query() .OrderBy(x => x.Date.Day) .Select(x => new {d = x.Date.Day}) .ToArray(); r0.Should().Equal(r1); } [Fact] public void Query_OrderBy_With_Offset_Limit() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); // no index var r0 = local .OrderBy(x => x.Date.Day) .Select(x => new { d = x.Date.Day }) .Skip(5) .Take(10) .ToArray(); var r1 = collection.Query() .OrderBy(x => x.Date.Day) .Select(x => new { d = x.Date.Day }) .Offset(5) .Limit(10) .ToArray(); r0.Should().Equal(r1); } [Fact] public void Query_Asc_Desc() { using var db = new PersonQueryData(); var (collection, _) = db.GetData(); var asc = collection.Find(Query.All(Query.Ascending)).ToArray(); var desc = collection.Find(Query.All(Query.Descending)).ToArray(); asc[0].Id.Should().Be(1); desc[0].Id.Should().Be(1000); } } } ================================================ FILE: LiteDB.Tests/Query/QueryApi_Tests.cs ================================================ using FluentAssertions; using System; using System.Linq; using Xunit; namespace LiteDB.Tests.QueryTest { public class QueryApi_Tests : PersonQueryData { [Fact] public void Query_And() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var r0 = local.Where(x => x.Age == 22 && x.Active == true).ToArray(); var r1 = collection.Find(Query.And(Query.EQ("Age", 22), Query.EQ("Active", true))).ToArray(); AssertEx.ArrayEqual(r0, r1, true); } [Fact] public void Query_And_Same_Field() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var r0 = local.Where(x => x.Age > 22 && x.Age < 25).ToArray(); var r1 = collection.Find(Query.And(Query.GT("Age", 22), Query.LT("Age", 25))).ToArray(); AssertEx.ArrayEqual(r0, r1, true); } } } ================================================ FILE: LiteDB.Tests/Query/Select_Tests.cs ================================================ using System; using System.Linq; using FluentAssertions; using Xunit; namespace LiteDB.Tests.QueryTest { public class Select_Tests : PersonQueryData { [Fact] public void Query_Select_Key_Only() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); collection.EnsureIndex(x => x.Address.City); // must orderBy mem data because index will be sorted var r0 = local .OrderBy(x => x.Address.City) .Select(x => x.Address.City) .ToArray(); // this query will not deserialize document, using only index key var r1 = collection.Query() .OrderBy(x => x.Address.City) .Select(x => x.Address.City) .ToArray(); r0.Should().Equal(r1); } [Fact] public void Query_Select_New_Document() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var r0 = local .Select(x => new {city = x.Address.City.ToUpper(), phone0 = x.Phones[0], address = new Address {Street = x.Name}}) .ToArray(); var r1 = collection.Query() .Select(x => new {city = x.Address.City.ToUpper(), phone0 = x.Phones[0], address = new Address {Street = x.Name}}) .ToArray(); foreach (var r in r0.Zip(r1, (l, r) => new {left = l, right = r})) { r.right.city.Should().Be(r.left.city); r.right.phone0.Should().Be(r.left.phone0); r.right.address.Street.Should().Be(r.left.address.Street); } } [Fact] public void Query_Or_With_Null() { using var db = new PersonQueryData(); var (collection, _) = db.GetData(); var r = collection.Find(Query.Or( Query.GTE("Date", new DateTime(2001, 1, 1)), Query.EQ("Date", null) )); } [Fact] public void Query_Find_All_Predicate() { using var db = new PersonQueryData(); var (collection, _) = db.GetData(); var r = collection.Find(x => true).ToArray(); r.Should().HaveCount(1000); } [Fact] public void Query_With_No_Collection() { using var db = new LiteDatabase(":memory:"); using (var r = db.Execute("SELECT DAY(NOW()) as DIA")) { while(r.Read()) { r.Current["DIA"].Should().Be(DateTime.Now.Day); } } } } } ================================================ FILE: LiteDB.Tests/Query/Where_Tests.cs ================================================ using FluentAssertions; using System.Linq; using Xunit; namespace LiteDB.Tests.QueryTest { public class Where_Tests : PersonQueryData { class Entity { public string Name { get; set; } public int Size { get; set; } } [Fact] public void Query_Where_With_Parameter() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var r0 = local .Where(x => x.Address.State == "FL") .ToArray(); var r1 = collection.Query() .Where(x => x.Address.State == "FL") .ToArray(); AssertEx.ArrayEqual(r0, r1, true); } [Fact] public void Query_Multi_Where_With_Like() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var r0 = local .Where(x => x.Age >= 10 && x.Age <= 40) .Where(x => x.Name.StartsWith("Ge")) .ToArray(); var r1 = collection.Query() .Where(x => x.Age >= 10 && x.Age <= 40) .Where(x => x.Name.StartsWith("Ge")) .ToArray(); AssertEx.ArrayEqual(r0, r1, true); } [Fact] public void Query_Single_Where_With_And() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var r0 = local .Where(x => x.Age == 25 && x.Active) .ToArray(); var r1 = collection.Query() .Where("age = 25 AND active = true") .ToArray(); AssertEx.ArrayEqual(r0, r1, true); } [Fact] public void Query_Single_Where_With_Or_And_In() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var r0 = local .Where(x => x.Age == 25 || x.Age == 26 || x.Age == 27) .ToArray(); var r1 = collection.Query() .Where("age = 25 OR age = 26 OR age = 27") .ToArray(); var r2 = collection.Query() .Where("age IN [25, 26, 27]") .ToArray(); AssertEx.ArrayEqual(r0, r1, true); AssertEx.ArrayEqual(r1, r2, true); } [Fact] public void Query_With_Array_Ids() { using var db = new PersonQueryData(); var (collection, local) = db.GetData(); var ids = new int[] { 1, 2, 3 }; var r0 = local .Where(x => ids.Contains(x.Id)) .ToArray(); var r1 = collection.Query() .Where(x => ids.Contains(x.Id)) .ToArray(); AssertEx.ArrayEqual(r0, r1, true); } } } ================================================ FILE: LiteDB.Tests/Resources/person.json ================================================ [ { "name": "Kelsey Garza", "age": 66, "phone": "624-744-6218", "email": "Kelly@suscipit.edu", "address": "62702 West Bosnia and Herzegovina Way", "city": "Wheaton", "state": "MO", "date": { "$date": "1950-08-07"}, "active": true }, { "name": "Brendan Bennett", "age": 57, "phone": "720-717-2342", "email": "Donna@cursus.net", "address": "8674 West Venezuela Ct.", "city": "DuBois", "state": "MI", "date": { "$date": "1990-03-28"}, "active": true }, { "name": "Davis Clay", "age": 47, "phone": "935-733-3275", "email": "Rhea@ac.net", "address": "53699 West Dunkirk Blvd.", "city": "Dixon", "state": "MS", "date": { "$date": "1951-04-05"}, "active": false }, { "name": "Cairo Holloway", "age": 25, "phone": "935-155-5996", "email": "Iona@massa.us", "address": "21197 South Bosnia and Herzegovina Ct.", "city": "Worcester", "state": "TX", "date": { "$date": "1997-07-04"}, "active": true }, { "name": "Hillary Rich", "age": 25, "phone": "931-504-1990", "email": "Gabriel@malesuada.org", "address": "35115 Bolivia Way", "city": "Laughlin", "state": "IA", "date": { "$date": "1966-09-21"}, "active": true }, { "name": "Kuame Hines", "age": 28, "phone": "362-510-6903", "email": "Erasmus@Fusce.gov", "address": "6920 South Biddeford Ct.", "city": "Reno", "state": "SC", "date": { "$date": "1952-03-24"}, "active": true }, { "name": "Sybil Alford", "age": 7, "phone": "257-892-9822", "email": "Brennan@ad.org", "address": "25373 South Jacksonville Ave.", "city": "Rolling Hills Estates", "state": "NJ", "date": { "$date": "1953-12-14"}, "active": false }, { "name": "Geoffrey Collins", "age": 20, "phone": "399-533-0518", "email": "Lance@massa.gov", "address": "74646 North Las Vegas St.", "city": "Sharon", "state": "TN", "date": { "$date": "1973-06-01"}, "active": true }, { "name": "Jelani Shannon", "age": 36, "phone": "972-920-4794", "email": "Tyrone@vestibulum.com", "address": "87131 West Mauritius Way", "city": "Eden Prairie", "state": "ND", "date": { "$date": "1957-03-16"}, "active": false }, { "name": "Rebekah Nichols", "age": 44, "phone": "329-360-5551", "email": "Henry@turpis.us", "address": "92794 South Dominica St.", "city": "Bristol", "state": "MO", "date": { "$date": "1992-04-18"}, "active": true }, { "name": "Mark Jennings", "age": 71, "phone": "353-735-8518", "email": "Tad@netus.gov", "address": "65935 Hollywood Blvd.", "city": "Helena", "state": "OH", "date": { "$date": "1954-10-12"}, "active": true }, { "name": "August Klein", "age": 68, "phone": "040-053-8820", "email": "Harriet@velit.gov", "address": "90164 East El Salvador Ave.", "city": "Pico Rivera", "state": "AZ", "date": { "$date": "2004-01-23"}, "active": true }, { "name": "Raven Diaz", "age": 72, "phone": "671-893-3112", "email": "Stuart@eget.gov", "address": "42210 South New Zealand Ln.", "city": "Cape May", "state": "FL", "date": { "$date": "1956-05-01"}, "active": true }, { "name": "Kiona Justice", "age": 22, "phone": "372-226-3765", "email": "Jaden@primis.net", "address": "89884 Nigeria Ct.", "city": "Port Huron", "state": "OH", "date": { "$date": "1984-07-12"}, "active": true }, { "name": "Dahlia Webb", "age": 64, "phone": "978-113-2714", "email": "Constance@montes.edu", "address": "94897 College Station Ln.", "city": "Dubuque", "state": "AL", "date": { "$date": "1984-07-13"}, "active": true }, { "name": "Jerome Jarvis", "age": 23, "phone": "566-067-4446", "email": "Hamilton@Class.gov", "address": "67926 East Frankfort Ln.", "city": "East Hartford", "state": "LA", "date": { "$date": "1958-05-31"}, "active": true }, { "name": "Driscoll Lindsey", "age": 35, "phone": "784-790-3703", "email": "Rowan@neque.net", "address": "71312 Latvia Ave.", "city": "San Fernando", "state": "KY", "date": { "$date": "1986-04-03"}, "active": false }, { "name": "Brooke Meyers", "age": 43, "phone": "706-506-2599", "email": "Keaton@ad.com", "address": "56593 West Niagara Falls Ln.", "city": "Nogales", "state": "AL", "date": { "$date": "1958-11-30"}, "active": true }, { "name": "Leah Hughes", "age": 9, "phone": "324-966-2780", "email": "Reuben@amet.org", "address": "36370 West Korea Way", "city": "Terre Haute", "state": "IN", "date": { "$date": "1950-04-28"}, "active": false }, { "name": "Cassady Norris", "age": 59, "phone": "815-001-9700", "email": "Lance@inceptos.com", "address": "20350 South Sao Tome and Principe Blvd.", "city": "Monroe", "state": "CT", "date": { "$date": "1981-04-16"}, "active": true }, { "name": "Cody Hopper", "age": 19, "phone": "924-973-9801", "email": "Mollie@bibendum.net", "address": "38677 West New Caledonia Way", "city": "Jeannette", "state": "VA", "date": { "$date": "1976-04-08"}, "active": true }, { "name": "Nash Holder", "age": 20, "phone": "480-766-1508", "email": "Hayley@rutrum.net", "address": "16412 West Areceibo Ln.", "city": "Tempe", "state": "AK", "date": { "$date": "1965-01-20"}, "active": true }, { "name": "Jaime Thompson", "age": 14, "phone": "193-494-8518", "email": "Cameron@Cras.us", "address": "71800 West Mayotte Blvd.", "city": "Louisville", "state": "NY", "date": { "$date": "1971-02-21"}, "active": true }, { "name": "Chiquita Beard", "age": 29, "phone": "727-163-1139", "email": "Quemby@per.edu", "address": "1080 West Sudan Ave.", "city": "Saint Albans", "state": "WV", "date": { "$date": "1978-04-25"}, "active": true }, { "name": "Michelle Porter", "age": 31, "phone": "113-351-0554", "email": "Hillary@ligula.net", "address": "44294 West Cambodia Way", "city": "Frisco", "state": "CA", "date": { "$date": "1969-06-26"}, "active": true }, { "name": "Elizabeth Hooper", "age": 37, "phone": "480-317-6113", "email": "Duncan@suscipit.gov", "address": "65288 East Romania Ave.", "city": "Duquesne", "state": "MN", "date": { "$date": "1992-04-14"}, "active": true }, { "name": "Joel Humphrey", "age": 16, "phone": "723-564-5731", "email": "September@justo.us", "address": "92614 South Chile Ave.", "city": "Virginia Beach", "state": "CO", "date": { "$date": "1965-08-05"}, "active": true }, { "name": "Shaine Giles", "age": 29, "phone": "437-378-8662", "email": "Willa@in.us", "address": "39947 Green River Ln.", "city": "Hermosa Beach", "state": "CO", "date": { "$date": "1956-08-13"}, "active": true }, { "name": "Joelle Petersen", "age": 38, "phone": "180-542-6851", "email": "Emma@neque.net", "address": "36726 West South Africa Ln.", "city": "Corvallis", "state": "RI", "date": { "$date": "1987-05-26"}, "active": true }, { "name": "Kareem Santiago", "age": 58, "phone": "627-504-1864", "email": "Adria@lorem.gov", "address": "59318 South Armenia St.", "city": "Cedar City", "state": "UT", "date": { "$date": "1973-05-26"}, "active": true }, { "name": "Charlotte Ryan", "age": 40, "phone": "560-575-9771", "email": "Renee@iaculis.com", "address": "82956 West Lynn Way", "city": "Covina", "state": "NC", "date": { "$date": "1958-04-04"}, "active": true }, { "name": "Axel Chapman", "age": 38, "phone": "090-254-3148", "email": "Tatum@ultricies.gov", "address": "34781 North Botswana Ave.", "city": "Missoula", "state": "MD", "date": { "$date": "1955-10-23"}, "active": true }, { "name": "Chanda Tanner", "age": 8, "phone": "649-438-1486", "email": "Sarah@mauris.com", "address": "12961 North Areceibo Ave.", "city": "Savannah", "state": "WA", "date": { "$date": "1960-05-23"}, "active": true }, { "name": "Gay Alexander", "age": 25, "phone": "814-973-5653", "email": "Armando@est.us", "address": "52218 Saint Helena Ln.", "city": "Artesia", "state": "CO", "date": { "$date": "1954-02-03"}, "active": false }, { "name": "Cleo Mccarty", "age": 43, "phone": "382-138-5057", "email": "Colorado@vitae.net", "address": "38923 North Bouvet Island Ln.", "city": "Pass Christian", "state": "DC", "date": { "$date": "1970-06-19"}, "active": true }, { "name": "Fallon Fox", "age": 71, "phone": "072-855-8421", "email": "Riley@congue.org", "address": "57262 North Liechtenstein Way", "city": "Hartford", "state": "IA", "date": { "$date": "1964-10-10"}, "active": true }, { "name": "Alexis May", "age": 25, "phone": "246-612-3983", "email": "Carolyn@eleifend.edu", "address": "14357 Corona Ct.", "city": "Pascagoula", "state": "AK", "date": { "$date": "1976-04-25"}, "active": true }, { "name": "Helen Estrada", "age": 15, "phone": "075-474-7557", "email": "Jackson@neque.gov", "address": "55662 North Dana Point Way", "city": "Raleigh", "state": "WI", "date": { "$date": "1976-05-20"}, "active": false }, { "name": "Emma Mcleod", "age": 45, "phone": "980-334-8051", "email": "Jenette@Quisque.net", "address": "88002 Gabon St.", "city": "La Palma", "state": "CO", "date": { "$date": "1964-09-04"}, "active": true }, { "name": "Haviva Romero", "age": 50, "phone": "166-399-6350", "email": "Kathleen@Vivamus.us", "address": "37588 West Israel Ln.", "city": "Daly City", "state": "NE", "date": { "$date": "1964-03-14"}, "active": true }, { "name": "Phillip Hughes", "age": 33, "phone": "155-558-7501", "email": "Quintessa@metus.us", "address": "2745 South Evanston Blvd.", "city": "Attleboro", "state": "MI", "date": { "$date": "1967-12-19"}, "active": true }, { "name": "Lucas Klein", "age": 61, "phone": "855-368-7646", "email": "Wayne@cursus.edu", "address": "56775 Tanzania", "city": "United Republic of Way", "state": "CT", "date": { "$date": "1996-05-21"}, "active": true }, { "name": "Driscoll Holt", "age": 12, "phone": "121-037-2608", "email": "Camden@quam.us", "address": "62644 West Fort Worth St.", "city": "Attleboro", "state": "OH", "date": { "$date": "1973-01-29"}, "active": true }, { "name": "Avye Rollins", "age": 63, "phone": "133-590-3435", "email": "Preston@massa.net", "address": "98990 South Citrus Heights Ln.", "city": "South Portland", "state": "IL", "date": { "$date": "2000-04-15"}, "active": false }, { "name": "Tate Sampson", "age": 71, "phone": "593-505-9211", "email": "Lynn@accumsan.org", "address": "90389 North Cranston Blvd.", "city": "Tucson", "state": "OH", "date": { "$date": "1955-12-26"}, "active": true }, { "name": "Zelda Coleman", "age": 36, "phone": "233-661-2798", "email": "Skyler@per.edu", "address": "97892 East Turkey Ave.", "city": "San Dimas", "state": "CA", "date": { "$date": "1953-03-18"}, "active": true }, { "name": "Amena Arnold", "age": 52, "phone": "807-484-8578", "email": "Thane@aliquet.org", "address": "3766 North Congo Way", "city": "Meadville", "state": "OK", "date": { "$date": "1971-07-15"}, "active": false }, { "name": "Philip Fowler", "age": 31, "phone": "150-313-8507", "email": "Nora@est.com", "address": "14782 West Sudan Ln.", "city": "Fort Smith", "state": "DC", "date": { "$date": "1987-07-23"}, "active": false }, { "name": "Christopher Lang", "age": 20, "phone": "756-668-1596", "email": "Dalton@Nam.gov", "address": "90117 West Monaco Way", "city": "Nenana", "state": "MO", "date": { "$date": "1975-06-21"}, "active": true }, { "name": "Conan Tanner", "age": 30, "phone": "283-343-0521", "email": "Judah@aliquam.gov", "address": "35178 North Bahrain Blvd.", "city": "Westlake Village", "state": "SD", "date": { "$date": "1986-04-04"}, "active": true }, { "name": "Sara Mcconnell", "age": 40, "phone": "281-575-3024", "email": "Laura@blandit.us", "address": "93424 Austria Way", "city": "Johnstown", "state": "MO", "date": { "$date": "1952-06-21"}, "active": true }, { "name": "Ishmael Dillard", "age": 39, "phone": "948-563-9559", "email": "Aspen@est.edu", "address": "3028 North Uruguay St.", "city": "Easthampton", "state": "UT", "date": { "$date": "1998-03-09"}, "active": true }, { "name": "Francesca Navarro", "age": 51, "phone": "279-457-5626", "email": "Shelly@nostra.net", "address": "23233 South Senegal Ct.", "city": "Claremore", "state": "MO", "date": { "$date": "1988-02-18"}, "active": true }, { "name": "Kim Vasquez", "age": 70, "phone": "739-125-6709", "email": "Valentine@vestibulum.gov", "address": "16866 West Suriname Way", "city": "Champaign", "state": "AK", "date": { "$date": "1967-02-08"}, "active": true }, { "name": "Wesley Mejia", "age": 18, "phone": "235-646-8112", "email": "Kelsey@ac.gov", "address": "15133 East Chad Ln.", "city": "Richland", "state": "CA", "date": { "$date": "1970-06-03"}, "active": true }, { "name": "Isadora Benson", "age": 48, "phone": "857-925-0818", "email": "Alma@Etiam.net", "address": "3083 East Ukraine Ct.", "city": "Pulaski", "state": "CO", "date": { "$date": "1964-02-02"}, "active": true }, { "name": "Naida Tucker", "age": 19, "phone": "253-877-5528", "email": "Ocean@scelerisque.com", "address": "55914 West Belgium Ln.", "city": "West Jordan", "state": "WI", "date": { "$date": "1954-12-26"}, "active": true }, { "name": "Isabelle Carney", "age": 39, "phone": "494-781-4051", "email": "Ruth@mattis.us", "address": "94309 Mauritania St.", "city": "Bloomington", "state": "MA", "date": { "$date": "1966-10-22"}, "active": true }, { "name": "Francis Riddle", "age": 63, "phone": "001-649-2061", "email": "Castor@laoreet.org", "address": "61894 West Corinth Way", "city": "Port Huron", "state": "WY", "date": { "$date": "1974-04-08"}, "active": true }, { "name": "Kenneth Langley", "age": 42, "phone": "278-713-3025", "email": "Guy@fames.us", "address": "70094 Aliso Viejo Blvd.", "city": "Somerville", "state": "MO", "date": { "$date": "2004-05-07"}, "active": false }, { "name": "Fuller Chambers", "age": 36, "phone": "234-635-9761", "email": "Quintessa@ridiculus.com", "address": "34493 West Barbados Ave.", "city": "East St. Louis", "state": "VT", "date": { "$date": "1959-02-07"}, "active": true }, { "name": "Raya Haynes", "age": 62, "phone": "859-209-8797", "email": "Germane@sodales.net", "address": "3083 North Argentina Blvd.", "city": "Rancho Santa Margarita", "state": "UT", "date": { "$date": "1992-08-17"}, "active": true }, { "name": "Keith Cochran", "age": 6, "phone": "493-507-3620", "email": "Xaviera@Cum.net", "address": "96010 West United States Ct.", "city": "Idabel", "state": "AL", "date": { "$date": "1964-10-30"}, "active": true }, { "name": "Mufutau Vance", "age": 59, "phone": "255-966-1246", "email": "Alec@Nullam.net", "address": "21292 North Lufkin Ct.", "city": "Sioux City", "state": "PA", "date": { "$date": "1968-11-07"}, "active": true }, { "name": "Barry Gardner", "age": 74, "phone": "183-937-0463", "email": "Gray@turpis.net", "address": "38469 West Portugal Way", "city": "Concord", "state": "ND", "date": { "$date": "1987-09-22"}, "active": true }, { "name": "Melissa Booth", "age": 66, "phone": "328-770-1434", "email": "Clarke@tortor.org", "address": "46252 West Akron Way", "city": "Palos Verdes Estates", "state": "DC", "date": { "$date": "1965-02-05"}, "active": true }, { "name": "Cruz Spencer", "age": 65, "phone": "244-795-8955", "email": "Xanthus@Proin.edu", "address": "69423 North Chad Blvd.", "city": "Lincoln", "state": "AZ", "date": { "$date": "1953-02-25"}, "active": true }, { "name": "Lucy Le", "age": 12, "phone": "427-668-3742", "email": "Keith@ut.net", "address": "55319 North Cameroon Blvd.", "city": "Galesburg", "state": "NM", "date": { "$date": "1953-01-19"}, "active": true }, { "name": "Valentine Gallagher", "age": 49, "phone": "600-664-8894", "email": "Mason@cursus.edu", "address": "73335 West Cape Verde Ave.", "city": "Chicago Heights", "state": "OK", "date": { "$date": "1961-12-04"}, "active": true }, { "name": "Rama Chan", "age": 21, "phone": "815-563-1379", "email": "Quentin@Maecenas.gov", "address": "55645 South Brunei Darussalam St.", "city": "East Hartford", "state": "ID", "date": { "$date": "1976-09-26"}, "active": true }, { "name": "Malachi Ashley", "age": 57, "phone": "788-900-6972", "email": "Dieter@lobortis.net", "address": "7998 North Cocos (Keeling) Islands Ln.", "city": "Hattiesburg", "state": "LA", "date": { "$date": "1969-07-18"}, "active": true }, { "name": "Nehru Burnett", "age": 25, "phone": "402-506-4115", "email": "Rudyard@scelerisque.edu", "address": "34134 East Heard Island and Mcdonald Islands St.", "city": "Laguna Woods", "state": "WY", "date": { "$date": "1952-07-16"}, "active": true }, { "name": "Riley Harrell", "age": 50, "phone": "509-955-7139", "email": "Scarlet@rutrum.net", "address": "95636 South Afghanistan Ln.", "city": "Warner Robins", "state": "MN", "date": { "$date": "1989-10-19"}, "active": true }, { "name": "Gillian Carroll", "age": 46, "phone": "041-749-7052", "email": "Flavia@tellus.org", "address": "47662 East Viet Nam Blvd.", "city": "Pendleton", "state": "LA", "date": { "$date": "2000-01-21"}, "active": true }, { "name": "Brenna Reed", "age": 34, "phone": "792-547-7936", "email": "Mark@ligula.gov", "address": "75527 East Avalon St.", "city": "Hartford", "state": "SC", "date": { "$date": "1951-06-13"}, "active": false }, { "name": "Maxine Kemp", "age": 27, "phone": "558-599-4786", "email": "Nicholas@blandit.us", "address": "6721 West Burkina Faso Blvd.", "city": "Yonkers", "state": "MD", "date": { "$date": "1990-08-23"}, "active": false }, { "name": "Amal Frederick", "age": 32, "phone": "678-673-7744", "email": "Kieran@iaculis.org", "address": "40520 South Cameroon St.", "city": "Clarksburg", "state": "IN", "date": { "$date": "1976-01-02"}, "active": false }, { "name": "Reece Holt", "age": 51, "phone": "594-871-4814", "email": "Connor@dapibus.edu", "address": "46749 North Belize Ave.", "city": "New Brunswick", "state": "DC", "date": { "$date": "1961-12-26"}, "active": true }, { "name": "Aileen Mann", "age": 34, "phone": "742-987-5967", "email": "Vladimir@rhoncus.us", "address": "61398 West United States Minor Outlying Islands St.", "city": "Manitowoc", "state": "IN", "date": { "$date": "1953-01-18"}, "active": true }, { "name": "Ivy Deleon", "age": 32, "phone": "483-572-9129", "email": "Mona@conubia.net", "address": "44861 North Latvia Blvd.", "city": "Wynne", "state": "KS", "date": { "$date": "1958-09-25"}, "active": true }, { "name": "Talon Holden", "age": 9, "phone": "085-734-6192", "email": "Indira@mollis.us", "address": "24205 West Cocos (Keeling) Islands Way", "city": "Battle Creek", "state": "KY", "date": { "$date": "1962-12-07"}, "active": true }, { "name": "Gannon Hatfield", "age": 35, "phone": "176-924-7745", "email": "Kim@consequat.us", "address": "37260 South Turks and Caicos Islands Blvd.", "city": "Corvallis", "state": "TX", "date": { "$date": "2000-12-05"}, "active": true }, { "name": "Natalie Wolf", "age": 43, "phone": "111-297-8977", "email": "Destiny@nec.edu", "address": "69682 North Corona Way", "city": "Saint Paul", "state": "PA", "date": { "$date": "1986-04-12"}, "active": false }, { "name": "Brenden Stuart", "age": 26, "phone": "639-258-2117", "email": "Octavia@pharetra.net", "address": "88913 North Kyrgyzstan St.", "city": "Narragansett", "state": "HI", "date": { "$date": "1951-06-11"}, "active": true }, { "name": "Zeus Robertson", "age": 6, "phone": "692-138-9830", "email": "Alec@elementum.net", "address": "79408 South Central African Republic Ln.", "city": "Niagara Falls", "state": "OH", "date": { "$date": "1993-04-30"}, "active": true }, { "name": "Marvin Leonard", "age": 31, "phone": "627-219-1746", "email": "Kaseem@pede.net", "address": "88675 Barre Ln.", "city": "Elsmere", "state": "WV", "date": { "$date": "1990-07-04"}, "active": true }, { "name": "Ignatius Larson", "age": 7, "phone": "887-270-8428", "email": "Emmanuel@condimentum.gov", "address": "43452 West United Kingdom Ct.", "city": "Seal Beach", "state": "ND", "date": { "$date": "1985-05-21"}, "active": true }, { "name": "Scarlett Strong", "age": 63, "phone": "921-026-9570", "email": "Yael@Quisque.com", "address": "1760 North Houston Way", "city": "New Bedford", "state": "UT", "date": { "$date": "1954-05-31"}, "active": true }, { "name": "Rhonda Wynn", "age": 14, "phone": "048-420-2266", "email": "Hedy@malesuada.us", "address": "1242 Romania Ct.", "city": "Roseville", "state": "WI", "date": { "$date": "1980-06-18"}, "active": true }, { "name": "Jacob Mathews", "age": 33, "phone": "696-114-2995", "email": "Macaulay@lorem.gov", "address": "58179 North Bermuda Way", "city": "Sandy Springs", "state": "CO", "date": { "$date": "1983-12-01"}, "active": true }, { "name": "Kathleen Marks", "age": 66, "phone": "237-520-4684", "email": "Kasimir@Lorem.com", "address": "0 West Swaziland Blvd.", "city": "Homer", "state": "CT", "date": { "$date": "1984-01-03"}, "active": true }, { "name": "Eagan Bradford", "age": 27, "phone": "818-407-2274", "email": "Cathleen@aliquet.org", "address": "34846 West El Salvador Blvd.", "city": "Ocean City", "state": "UT", "date": { "$date": "1995-04-21"}, "active": true }, { "name": "MacKensie Palmer", "age": 37, "phone": "629-547-3960", "email": "Nerea@dolor.edu", "address": "27536 Algeria Blvd.", "city": "Morrison", "state": "NM", "date": { "$date": "1961-05-29"}, "active": true }, { "name": "Burke Knapp", "age": 75, "phone": "880-071-8027", "email": "Lionel@ligula.us", "address": "50928 South Marshall Islands St.", "city": "Wilson", "state": "NV", "date": { "$date": "1991-05-02"}, "active": true }, { "name": "Todd Fitzgerald", "age": 66, "phone": "995-449-8611", "email": "Beverly@sagittis.us", "address": "89505 West Bhutan Ave.", "city": "Dover", "state": "UT", "date": { "$date": "1978-11-10"}, "active": true }, { "name": "Meghan Lynch", "age": 36, "phone": "609-880-3175", "email": "Nell@laoreet.us", "address": "5912 Covington Blvd.", "city": "Lynwood", "state": "RI", "date": { "$date": "1991-03-03"}, "active": false }, { "name": "Regan Zamora", "age": 7, "phone": "562-700-0483", "email": "Hedley@ullamcorper.us", "address": "16723 East New Castle Ct.", "city": "Sanford", "state": "IN", "date": { "$date": "1981-02-05"}, "active": true }, { "name": "Brennan Rice", "age": 35, "phone": "547-844-4174", "email": "Ina@sociis.us", "address": "74115 East Cambodia Blvd.", "city": "Homer", "state": "MA", "date": { "$date": "1972-02-11"}, "active": true }, { "name": "Steven Weiss", "age": 52, "phone": "607-107-8042", "email": "Moses@ornare.gov", "address": "39618 South Canada Ave.", "city": "Beaver Falls", "state": "MN", "date": { "$date": "1960-01-28"}, "active": true }, { "name": "Jason Odom", "age": 44, "phone": "972-851-4523", "email": "Amethyst@laoreet.net", "address": "27053 East Charlottesville St.", "city": "Anaconda", "state": "GA", "date": { "$date": "2001-10-17"}, "active": false }, { "name": "Wang Kemp", "age": 19, "phone": "537-324-6381", "email": "Basil@Integer.edu", "address": "82563 East Slovenia Ln.", "city": "Oxnard", "state": "RI", "date": { "$date": "1976-06-12"}, "active": true }, { "name": "Britanney Pugh", "age": 38, "phone": "765-284-6518", "email": "Keegan@viverra.net", "address": "74923 North Korea Ave.", "city": "Newcastle", "state": "WI", "date": { "$date": "1961-08-28"}, "active": true }, { "name": "Gage Flowers", "age": 61, "phone": "126-772-6598", "email": "Alisa@sociis.org", "address": "43056 Slovakia St.", "city": "Passaic", "state": "AZ", "date": { "$date": "1954-10-03"}, "active": false }, { "name": "Lucian Harvey", "age": 38, "phone": "195-699-7144", "email": "Molly@In.org", "address": "67963 East Christmas Island Blvd.", "city": "Cerritos", "state": "GA", "date": { "$date": "1993-06-10"}, "active": true }, { "name": "Nita Ballard", "age": 19, "phone": "052-588-3774", "email": "Gloria@mus.edu", "address": "56360 West Swaziland Ave.", "city": "Ashland", "state": "KY", "date": { "$date": "2000-10-15"}, "active": true }, { "name": "Mark Monroe", "age": 73, "phone": "606-818-1307", "email": "Zia@nec.edu", "address": "28526 West Bulgaria Ave.", "city": "New Brunswick", "state": "WV", "date": { "$date": "1959-05-08"}, "active": true }, { "name": "Deacon Hendrix", "age": 22, "phone": "188-783-4598", "email": "Dana@aptent.net", "address": "17212 South Culver City Ln.", "city": "Palm Springs", "state": "ID", "date": { "$date": "2004-02-13"}, "active": true }, { "name": "Fletcher Banks", "age": 49, "phone": "725-578-3447", "email": "Jana@diam.us", "address": "47026 West Guyana Blvd.", "city": "West Haven", "state": "NY", "date": { "$date": "1993-09-03"}, "active": true }, { "name": "Hilel Mckenzie", "age": 12, "phone": "253-307-4476", "email": "Wallace@mauris.gov", "address": "31470 West Djibouti Ct.", "city": "Georgetown", "state": "AK", "date": { "$date": "1963-11-20"}, "active": true }, { "name": "Howard Avery", "age": 56, "phone": "581-779-4427", "email": "Jorden@auctor.gov", "address": "3850 East Micronesia Ave.", "city": "Lockport", "state": "OH", "date": { "$date": "1987-11-09"}, "active": false }, { "name": "Christen Case", "age": 53, "phone": "741-773-8159", "email": "Sierra@lorem.net", "address": "99345 South Azerbaijan Ct.", "city": "Norwich", "state": "ME", "date": { "$date": "1976-08-27"}, "active": true }, { "name": "Xanthus Collins", "age": 65, "phone": "523-197-5171", "email": "Steel@fames.com", "address": "99571 Guyana St.", "city": "Detroit", "state": "NJ", "date": { "$date": "1966-11-02"}, "active": true }, { "name": "Ebony Logan", "age": 51, "phone": "951-569-3286", "email": "Reece@diam.us", "address": "12985 North Norway St.", "city": "South El Monte", "state": "CA", "date": { "$date": "1997-12-20"}, "active": false }, { "name": "Solomon Newton", "age": 35, "phone": "361-235-9627", "email": "Talon@magna.edu", "address": "1027 South Yemen Ave.", "city": "Parker", "state": "NV", "date": { "$date": "1976-09-19"}, "active": true }, { "name": "Zena Chan", "age": 17, "phone": "776-249-6984", "email": "Dahlia@mauris.com", "address": "96942 West Ukraine Way", "city": "Frederiksted", "state": "HI", "date": { "$date": "1982-08-23"}, "active": true }, { "name": "Owen Preston", "age": 59, "phone": "833-922-6677", "email": "Fritz@Phasellus.net", "address": "71808 East Cayman Islands Blvd.", "city": "Saipan", "state": "IN", "date": { "$date": "1985-05-07"}, "active": true }, { "name": "Quinn Stevens", "age": 35, "phone": "656-988-9090", "email": "Miranda@erat.us", "address": "38420 China Ave.", "city": "Elmira", "state": "MD", "date": { "$date": "1988-10-22"}, "active": true }, { "name": "Roary Mays", "age": 10, "phone": "578-079-9093", "email": "Unity@nisl.gov", "address": "40984 Angola Ln.", "city": "Woburn", "state": "OK", "date": { "$date": "1971-12-21"}, "active": false }, { "name": "Felix Kirk", "age": 48, "phone": "213-371-9363", "email": "Calista@posuere.gov", "address": "99058 West Arvada Blvd.", "city": "Slidell", "state": "NY", "date": { "$date": "1997-02-10"}, "active": true }, { "name": "Seth Bennett", "age": 19, "phone": "161-795-3361", "email": "Leslie@faucibus.org", "address": "73740 North Andorra Blvd.", "city": "Philadelphia", "state": "GA", "date": { "$date": "1969-04-09"}, "active": true }, { "name": "Eric Sims", "age": 11, "phone": "795-832-0170", "email": "Dylan@senectus.org", "address": "27154 South United Kingdom Blvd.", "city": "Orem", "state": "MS", "date": { "$date": "1977-01-07"}, "active": true }, { "name": "Medge Boyle", "age": 70, "phone": "774-910-1622", "email": "Len@Phasellus.net", "address": "76735 West Chad Way", "city": "Lake Charles", "state": "CO", "date": { "$date": "1975-03-04"}, "active": true }, { "name": "Kylee Keith", "age": 8, "phone": "290-413-1146", "email": "Medge@aptent.org", "address": "84302 East Cortland Way", "city": "Uniontown", "state": "IA", "date": { "$date": "1963-08-04"}, "active": true }, { "name": "Randall Terrell", "age": 51, "phone": "636-853-9219", "email": "Leslie@egestas.edu", "address": "3242 West Hong Kong Ave.", "city": "Roseville", "state": "RI", "date": { "$date": "2002-02-15"}, "active": true }, { "name": "Robin Gordon", "age": 38, "phone": "371-955-9755", "email": "Willa@arcu.edu", "address": "13557 West Botswana Ave.", "city": "San Gabriel", "state": "KS", "date": { "$date": "1984-06-14"}, "active": true }, { "name": "Melvin Mercado", "age": 37, "phone": "777-044-3988", "email": "Kirby@conubia.gov", "address": "68114 East Bahamas Blvd.", "city": "Gary", "state": "MS", "date": { "$date": "1957-07-22"}, "active": true }, { "name": "Yvette Bowers", "age": 28, "phone": "652-962-4938", "email": "Ann@mus.com", "address": "87489 East San Marino Ln.", "city": "Tempe", "state": "MT", "date": { "$date": "1991-05-02"}, "active": false }, { "name": "Lynn Clay", "age": 63, "phone": "004-353-4646", "email": "Rylee@mattis.net", "address": "83325 West Korea Blvd.", "city": "Albany", "state": "FL", "date": { "$date": "1966-12-16"}, "active": true }, { "name": "Derek Garcia", "age": 25, "phone": "045-316-9930", "email": "Todd@netus.us", "address": "4390 South Anguilla St.", "city": "Burbank", "state": "AK", "date": { "$date": "1992-02-29"}, "active": true }, { "name": "Jorden Gardner", "age": 60, "phone": "603-861-4004", "email": "Melinda@ipsum.us", "address": "99200 South Green River Ln.", "city": "Placentia", "state": "SC", "date": { "$date": "1960-07-29"}, "active": true }, { "name": "Karleigh Bean", "age": 26, "phone": "004-201-7937", "email": "Dexter@taciti.edu", "address": "76842 Bowling Green Blvd.", "city": "Fulton", "state": "FL", "date": { "$date": "1969-01-04"}, "active": false }, { "name": "Shafira Howe", "age": 43, "phone": "394-274-3517", "email": "Abbot@odio.com", "address": "29474 West Chile Blvd.", "city": "Parkersburg", "state": "OK", "date": { "$date": "1999-08-09"}, "active": false }, { "name": "Roth Greene", "age": 11, "phone": "602-291-8845", "email": "Astra@Nam.net", "address": "16221 West Bahamas St.", "city": "Brunswick", "state": "ND", "date": { "$date": "1950-10-02"}, "active": false }, { "name": "Lois Potter", "age": 48, "phone": "010-512-5786", "email": "Alyssa@rhoncus.us", "address": "87706 North Brazil Blvd.", "city": "La Crosse", "state": "HI", "date": { "$date": "1970-01-12"}, "active": true }, { "name": "Zachery Weber", "age": 15, "phone": "505-104-9601", "email": "Jeanette@egestas.edu", "address": "52757 East Brazil Way", "city": "Paramount", "state": "AZ", "date": { "$date": "1963-04-24"}, "active": true }, { "name": "Patience Coleman", "age": 60, "phone": "363-290-0927", "email": "Kareem@Fusce.net", "address": "37064 West Gabon Ct.", "city": "North Platte", "state": "TN", "date": { "$date": "1976-04-09"}, "active": true }, { "name": "Brennan Hutchinson", "age": 74, "phone": "423-638-1219", "email": "Jamal@mus.com", "address": "47896 South Malawi Ave.", "city": "Dayton", "state": "NJ", "date": { "$date": "1990-08-10"}, "active": true }, { "name": "Carissa Rios", "age": 9, "phone": "952-945-2039", "email": "Cassidy@mattis.org", "address": "87582 East Honduras St.", "city": "Glendora", "state": "DE", "date": { "$date": "1975-04-29"}, "active": false }, { "name": "Timothy Santiago", "age": 41, "phone": "455-519-9960", "email": "Hadley@sapien.net", "address": "7172 Estonia Way", "city": "Glendale", "state": "SC", "date": { "$date": "1966-10-26"}, "active": true }, { "name": "Tobias Mullen", "age": 64, "phone": "676-582-4911", "email": "Britanney@ut.com", "address": "99480 Malta Blvd.", "city": "Fernley", "state": "GA", "date": { "$date": "1970-05-18"}, "active": false }, { "name": "Isadora Peck", "age": 13, "phone": "501-468-3929", "email": "Guinevere@natoque.edu", "address": "13338 East Morocco St.", "city": "Morrison", "state": "TX", "date": { "$date": "1950-05-19"}, "active": true }, { "name": "Ray Holloway", "age": 28, "phone": "666-113-6297", "email": "Jordan@in.net", "address": "9727 West Helena St.", "city": "Covina", "state": "NY", "date": { "$date": "1975-10-14"}, "active": false }, { "name": "Dorothy Harrington", "age": 62, "phone": "972-811-8653", "email": "Miriam@tristique.us", "address": "41971 Bahamas Blvd.", "city": "Cedar City", "state": "NM", "date": { "$date": "1956-02-18"}, "active": true }, { "name": "Hammett Hardin", "age": 40, "phone": "182-693-0045", "email": "Kyla@pulvinar.edu", "address": "85303 East Eritrea Ln.", "city": "Burbank", "state": "NC", "date": { "$date": "1983-12-11"}, "active": false }, { "name": "Wyoming Buck", "age": 22, "phone": "568-104-3280", "email": "Mark@Curae.edu", "address": "17536 Christmas Island Ave.", "city": "Mequon", "state": "WY", "date": { "$date": "1982-02-24"}, "active": true }, { "name": "Urielle Washington", "age": 67, "phone": "206-589-3204", "email": "Doris@Suspendisse.net", "address": "913 West Greenland Way", "city": "Sonoma", "state": "WA", "date": { "$date": "1958-01-27"}, "active": true }, { "name": "Steven Hill", "age": 41, "phone": "605-431-6054", "email": "Fitzgerald@mollis.edu", "address": "65433 West Mexico Ct.", "city": "Princeton", "state": "MD", "date": { "$date": "1999-04-23"}, "active": true }, { "name": "Fletcher Benton", "age": 15, "phone": "008-523-9160", "email": "Burton@congue.org", "address": "89911 East Honduras Blvd.", "city": "Scranton", "state": "LA", "date": { "$date": "1975-09-30"}, "active": false }, { "name": "Graiden Key", "age": 47, "phone": "829-486-5594", "email": "Carl@Etiam.com", "address": "47101 West Colombia Blvd.", "city": "Longview", "state": "AZ", "date": { "$date": "1983-03-31"}, "active": false }, { "name": "Yuli Lancaster", "age": 25, "phone": "408-043-8439", "email": "Ivor@suscipit.gov", "address": "28819 West Guadeloupe Blvd.", "city": "Corpus Christi", "state": "ID", "date": { "$date": "1983-03-19"}, "active": true }, { "name": "Iris Christensen", "age": 11, "phone": "809-016-0988", "email": "Hayden@luctus.edu", "address": "48111 West Cameroon Blvd.", "city": "Bell Gardens", "state": "NM", "date": { "$date": "1954-10-05"}, "active": false }, { "name": "Amos Blackburn", "age": 61, "phone": "507-635-8418", "email": "Fallon@enim.edu", "address": "28924 North Mauritania Way", "city": "Ruston", "state": "NE", "date": { "$date": "1952-03-22"}, "active": false }, { "name": "Merrill Mercado", "age": 6, "phone": "452-754-0481", "email": "Ori@est.com", "address": "14842 Bolivia Blvd.", "city": "Fallon", "state": "NJ", "date": { "$date": "1963-10-17"}, "active": true }, { "name": "Alvin Hammond", "age": 30, "phone": "674-317-7468", "email": "Clio@Donec.net", "address": "66581 East Duluth Way", "city": "Carrollton", "state": "OH", "date": { "$date": "2001-07-15"}, "active": true }, { "name": "Rajah Oneal", "age": 28, "phone": "074-024-2743", "email": "Stewart@rhoncus.com", "address": "92478 East High Point Ct.", "city": "Appleton", "state": "CA", "date": { "$date": "1995-11-23"}, "active": true }, { "name": "Neil Gonzales", "age": 41, "phone": "255-909-2400", "email": "Mikayla@dictum.edu", "address": "54289 South Danville Ave.", "city": "McKeesport", "state": "AL", "date": { "$date": "2002-05-29"}, "active": true }, { "name": "Daquan Haney", "age": 72, "phone": "225-212-3552", "email": "Evangeline@non.com", "address": "30114 Christmas Island Ln.", "city": "Anchorage", "state": "WI", "date": { "$date": "1988-05-23"}, "active": true }, { "name": "Irma Petersen", "age": 26, "phone": "120-456-3442", "email": "Nicholas@blandit.gov", "address": "76533 North Chile Ct.", "city": "Columbia", "state": "GA", "date": { "$date": "1963-06-14"}, "active": true }, { "name": "Adara Travis", "age": 28, "phone": "043-005-6272", "email": "Tanya@fermentum.us", "address": "79724 North Belgium St.", "city": "Pottsville", "state": "MI", "date": { "$date": "1951-12-27"}, "active": true }, { "name": "Orli Ballard", "age": 11, "phone": "041-383-5407", "email": "Rhea@adipiscing.com", "address": "110 North Beverly Ln.", "city": "Lincoln", "state": "NY", "date": { "$date": "1969-12-31"}, "active": false }, { "name": "Maile Francis", "age": 54, "phone": "089-641-5842", "email": "Uriah@aptent.gov", "address": "22281 West Christmas Island St.", "city": "Chicago", "state": "LA", "date": { "$date": "1952-08-15"}, "active": false }, { "name": "Amy Wilkinson", "age": 63, "phone": "504-937-4366", "email": "Kyra@tortor.us", "address": "67581 West Pittston Ln.", "city": "Sharon", "state": "SC", "date": { "$date": "1999-03-05"}, "active": true }, { "name": "Edan Buck", "age": 52, "phone": "968-680-2793", "email": "Quynn@mattis.us", "address": "59073 West Danville Blvd.", "city": "Murfreesboro", "state": "SC", "date": { "$date": "2002-01-02"}, "active": true }, { "name": "Barrett Rice", "age": 48, "phone": "686-845-5740", "email": "Zenaida@sed.net", "address": "6198 South Bhutan Ln.", "city": "Mesa", "state": "NM", "date": { "$date": "1956-12-06"}, "active": true }, { "name": "Miranda Good", "age": 71, "phone": "902-976-9509", "email": "Jael@a.edu", "address": "15171 West Palestinian Territory", "city": "Occupied Ln. Champaign", "state": "OR", "date": { "$date": "1965-06-21"}, "active": true }, { "name": "Zia Carpenter", "age": 32, "phone": "366-281-4984", "email": "Jeanette@euismod.com", "address": "50009 North Norway Blvd.", "city": "Salem", "state": "IL", "date": { "$date": "1990-12-12"}, "active": true }, { "name": "Amir Perez", "age": 19, "phone": "152-043-5719", "email": "Aline@urna.net", "address": "32327 South Greensburg Blvd.", "city": "Vermillion", "state": "IA", "date": { "$date": "2003-08-18"}, "active": true }, { "name": "Jasmine Mclean", "age": 18, "phone": "212-097-7787", "email": "Baker@lobortis.us", "address": "45059 East Kyrgyzstan Way", "city": "Lowell", "state": "ME", "date": { "$date": "1965-06-04"}, "active": true }, { "name": "Vladimir Fleming", "age": 14, "phone": "689-545-4280", "email": "Samuel@aliquet.org", "address": "72017 West Kahului Ave.", "city": "Cambridge", "state": "NE", "date": { "$date": "1958-10-21"}, "active": true }, { "name": "Dahlia Warren", "age": 24, "phone": "954-472-3832", "email": "Delilah@imperdiet.us", "address": "98830 South Geneva St.", "city": "North Charleston", "state": "MS", "date": { "$date": "1970-01-13"}, "active": true }, { "name": "Desirae Trujillo", "age": 38, "phone": "679-429-9811", "email": "Nyssa@viverra.com", "address": "65495 South Finland Way", "city": "Hartford", "state": "DE", "date": { "$date": "1996-09-08"}, "active": true }, { "name": "Eaton Mcclain", "age": 25, "phone": "741-540-2616", "email": "Erasmus@ac.gov", "address": "81686 North Eau Claire Blvd.", "city": "Ogdensburg", "state": "OR", "date": { "$date": "1993-12-25"}, "active": true }, { "name": "Kelsie Brennan", "age": 42, "phone": "326-898-2180", "email": "Germaine@mi.net", "address": "70573 North Faroe Islands St.", "city": "Arlington", "state": "WY", "date": { "$date": "1951-06-22"}, "active": true }, { "name": "Isaac Juarez", "age": 71, "phone": "086-277-4715", "email": "Quentin@et.edu", "address": "33415 North Papua New Guinea Ct.", "city": "Meadville", "state": "MD", "date": { "$date": "1961-05-11"}, "active": true }, { "name": "Karen Hatfield", "age": 56, "phone": "164-836-8869", "email": "Donovan@lobortis.us", "address": "2540 Trinidad and Tobago St.", "city": "Hastings", "state": "HI", "date": { "$date": "1981-12-30"}, "active": false }, { "name": "Chancellor Weiss", "age": 14, "phone": "415-283-9958", "email": "David@gravida.us", "address": "80950 Fullerton Ave.", "city": "Yakima", "state": "VA", "date": { "$date": "2003-01-30"}, "active": true }, { "name": "Sara Langley", "age": 69, "phone": "892-568-3071", "email": "Colleen@luctus.net", "address": "55153 East Kenya Way", "city": "Sierra Madre", "state": "AL", "date": { "$date": "1957-08-08"}, "active": false }, { "name": "Ivana Leblanc", "age": 36, "phone": "327-682-1343", "email": "Noelle@suscipit.edu", "address": "32358 South Kankakee Way", "city": "Chula Vista", "state": "FL", "date": { "$date": "1990-09-18"}, "active": true }, { "name": "Maryam Shields", "age": 22, "phone": "875-395-9214", "email": "Keefe@tristique.org", "address": "50179 South Bethlehem St.", "city": "Turlock", "state": "LA", "date": { "$date": "1971-11-07"}, "active": false }, { "name": "Abigail Mcneil", "age": 11, "phone": "804-968-1505", "email": "Sawyer@Aliquam.com", "address": "96514 Colombia Ln.", "city": "Chicopee", "state": "CA", "date": { "$date": "1982-07-22"}, "active": true }, { "name": "Vernon Marshall", "age": 19, "phone": "885-693-9845", "email": "Alika@tortor.net", "address": "88907 South Kiribati Ave.", "city": "La Habra Heights", "state": "AK", "date": { "$date": "1998-12-26"}, "active": true }, { "name": "Olympia Morrow", "age": 61, "phone": "757-913-5441", "email": "Ishmael@in.com", "address": "49061 Johnstown Ln.", "city": "Fort Worth", "state": "DE", "date": { "$date": "1967-03-25"}, "active": true }, { "name": "Deacon Carlson", "age": 64, "phone": "406-934-6216", "email": "Zia@scelerisque.edu", "address": "63383 North Argentina Ct.", "city": "Brookings", "state": "AK", "date": { "$date": "1962-09-24"}, "active": true }, { "name": "Ahmed Cooley", "age": 69, "phone": "897-670-1268", "email": "Inez@nascetur.gov", "address": "71163 East Bulgaria Blvd.", "city": "Orange", "state": "NJ", "date": { "$date": "1995-04-14"}, "active": true }, { "name": "Wendy Warner", "age": 54, "phone": "970-488-1881", "email": "Kimberley@porttitor.com", "address": "70237 South Virgin Islands", "city": "British", "state": "AZ", "date": { "$date": "1969-08-28"}, "active": false }, { "name": "Conan Zamora", "age": 28, "phone": "682-018-5537", "email": "Kibo@laoreet.org", "address": "27046 West Nenana Way", "city": "Tamuning", "state": "CO", "date": { "$date": "1961-08-01"}, "active": false }, { "name": "Fuller Mathews", "age": 5, "phone": "076-103-2434", "email": "Honorato@Aliquam.us", "address": "35502 West Cape Verde St.", "city": "Huntington Park", "state": "NV", "date": { "$date": "1975-05-20"}, "active": true }, { "name": "Garth Morrow", "age": 35, "phone": "047-175-6295", "email": "Gabriel@condimentum.edu", "address": "4626 West Cambodia Ln.", "city": "Plantation", "state": "HI", "date": { "$date": "1952-03-19"}, "active": true }, { "name": "Dieter Lyons", "age": 38, "phone": "212-633-1023", "email": "Kyra@Donec.org", "address": "73598 Allentown Ln.", "city": "Fajardo", "state": "GA", "date": { "$date": "1999-07-19"}, "active": true }, { "name": "Dylan Wise", "age": 43, "phone": "321-995-8516", "email": "Shana@aliquam.com", "address": "80333 South Gabon Way", "city": "Warwick", "state": "KS", "date": { "$date": "1957-11-02"}, "active": false }, { "name": "Urielle Mitchell", "age": 19, "phone": "653-487-2743", "email": "Pamela@nulla.org", "address": "63153 South Dover Ln.", "city": "Helena", "state": "DC", "date": { "$date": "1955-10-02"}, "active": true }, { "name": "Renee Guthrie", "age": 67, "phone": "908-709-3647", "email": "Stella@montes.us", "address": "4916 East Belarus Blvd.", "city": "Kemmerer", "state": "MO", "date": { "$date": "1974-11-25"}, "active": false }, { "name": "Tanek Moran", "age": 19, "phone": "078-519-5551", "email": "James@convallis.edu", "address": "31170 South Puerto Rico St.", "city": "Vicksburg", "state": "MA", "date": { "$date": "1999-08-04"}, "active": true }, { "name": "Acton Graham", "age": 21, "phone": "679-491-4454", "email": "Curran@pellentesque.net", "address": "10134 North Crown Point Ave.", "city": "Michigan City", "state": "AL", "date": { "$date": "1982-07-16"}, "active": true }, { "name": "Gemma Jensen", "age": 43, "phone": "279-660-3948", "email": "Dustin@rutrum.gov", "address": "1916 Chile St.", "city": "Corpus Christi", "state": "ME", "date": { "$date": "1996-06-22"}, "active": true }, { "name": "Wylie Roach", "age": 45, "phone": "139-296-8728", "email": "Skyler@rutrum.org", "address": "57374 North Pitcairn Blvd.", "city": "Boulder Junction", "state": "MN", "date": { "$date": "1984-04-28"}, "active": true }, { "name": "Cheyenne Marsh", "age": 33, "phone": "804-854-6175", "email": "Carlos@nostra.us", "address": "51403 Comoros Ave.", "city": "Lower Burrell", "state": "OR", "date": { "$date": "1985-04-15"}, "active": true }, { "name": "Shelly Huber", "age": 61, "phone": "338-299-1344", "email": "Leo@nec.gov", "address": "67391 West Binghamton Blvd.", "city": "Azusa", "state": "IL", "date": { "$date": "1964-09-21"}, "active": true }, { "name": "Fleur Berger", "age": 65, "phone": "812-835-1686", "email": "Reagan@ad.edu", "address": "32641 West Gulfport St.", "city": "Rutland", "state": "MS", "date": { "$date": "1996-03-31"}, "active": true }, { "name": "Orlando Parker", "age": 44, "phone": "544-995-2427", "email": "Lisandra@metus.gov", "address": "59946 Hong Kong Blvd.", "city": "Mount Vernon", "state": "VA", "date": { "$date": "1981-01-17"}, "active": true }, { "name": "Joel Gutierrez", "age": 41, "phone": "475-044-1076", "email": "Cynthia@mollis.us", "address": "26200 North Bahamas Blvd.", "city": "Nevada City", "state": "IN", "date": { "$date": "1962-08-31"}, "active": true }, { "name": "Reece Roberson", "age": 37, "phone": "140-097-9828", "email": "Hamilton@tellus.us", "address": "45258 East Aruba Ln.", "city": "Saint Cloud", "state": "MO", "date": { "$date": "1996-02-08"}, "active": true }, { "name": "Morgan Coffey", "age": 15, "phone": "755-439-0584", "email": "Kibo@augue.edu", "address": "8089 East Boulder Ct.", "city": "Johnstown", "state": "OR", "date": { "$date": "1988-07-30"}, "active": false }, { "name": "Camille Keller", "age": 46, "phone": "979-287-0423", "email": "Quintessa@Praesent.com", "address": "28543 East Romania Ln.", "city": "Fort Smith", "state": "SC", "date": { "$date": "1992-11-11"}, "active": true }, { "name": "Chandler Solomon", "age": 73, "phone": "136-164-2208", "email": "Branden@molestie.org", "address": "64364 South Eritrea St.", "city": "Muskogee", "state": "HI", "date": { "$date": "1953-07-08"}, "active": true }, { "name": "Steven Mccall", "age": 48, "phone": "581-678-6922", "email": "Vivien@viverra.gov", "address": "46140 East Brazil St.", "city": "Morrison", "state": "WA", "date": { "$date": "1972-09-08"}, "active": true }, { "name": "Walter Sherman", "age": 48, "phone": "080-526-3533", "email": "Georgia@Sed.org", "address": "35883 West Bosnia and Herzegovina Ln.", "city": "Dixon", "state": "VA", "date": { "$date": "2001-11-10"}, "active": false }, { "name": "Moses Mccormick", "age": 58, "phone": "301-954-0747", "email": "Ashton@mi.edu", "address": "49085 East French Polynesia Ave.", "city": "Missoula", "state": "WI", "date": { "$date": "1992-08-22"}, "active": true }, { "name": "Abdul Harris", "age": 9, "phone": "429-784-8407", "email": "Harrison@nunc.edu", "address": "79963 West Bahrain Way", "city": "Bandon", "state": "ME", "date": { "$date": "1992-01-09"}, "active": true }, { "name": "Noel Lewis", "age": 36, "phone": "325-856-5279", "email": "Flynn@ullamcorper.us", "address": "32870 South Nampa Blvd.", "city": "Vancouver", "state": "SD", "date": { "$date": "1969-04-25"}, "active": false }, { "name": "Donna Hayes", "age": 19, "phone": "771-644-2980", "email": "Nissim@Class.us", "address": "10724 Cameroon Ln.", "city": "Uniontown", "state": "CA", "date": { "$date": "1985-01-23"}, "active": true }, { "name": "Rebekah Simon", "age": 17, "phone": "145-280-9081", "email": "Keiko@dis.org", "address": "23212 South Fort Collins Ct.", "city": "Lancaster", "state": "VT", "date": { "$date": "1953-07-29"}, "active": true }, { "name": "Leonard Poole", "age": 53, "phone": "612-060-4266", "email": "Carly@conubia.us", "address": "84343 Dominican Republic Ln.", "city": "Two Rivers", "state": "TN", "date": { "$date": "1968-09-11"}, "active": true }, { "name": "Neil Booth", "age": 74, "phone": "286-274-2783", "email": "Felicia@sociosqu.edu", "address": "77173 East Lithuania Ln.", "city": "Easton", "state": "NJ", "date": { "$date": "2002-07-08"}, "active": false }, { "name": "Candice Kirk", "age": 72, "phone": "642-862-5599", "email": "Plato@Proin.edu", "address": "3310 West Algeria Way", "city": "Klamath Falls", "state": "NV", "date": { "$date": "1974-10-23"}, "active": true }, { "name": "Keith Faulkner", "age": 30, "phone": "548-409-9684", "email": "Sade@cubilia.org", "address": "48130 South Alamogordo Ave.", "city": "Rancho Palos Verdes", "state": "TX", "date": { "$date": "1993-11-30"}, "active": false }, { "name": "Isabella Bonner", "age": 5, "phone": "885-101-0144", "email": "Dolan@inceptos.com", "address": "83480 West Namibia St.", "city": "Apple Valley", "state": "NY", "date": { "$date": "1984-10-02"}, "active": false }, { "name": "Devin Duncan", "age": 6, "phone": "176-495-3359", "email": "Meredith@metus.edu", "address": "14021 Kyrgyzstan Way", "city": "Bellflower", "state": "WY", "date": { "$date": "1981-07-06"}, "active": true }, { "name": "Christian Hicks", "age": 55, "phone": "818-135-9306", "email": "Ainsley@Cras.com", "address": "64477 West Belize Ln.", "city": "Hudson", "state": "CT", "date": { "$date": "1989-09-12"}, "active": false }, { "name": "Brianna Madden", "age": 67, "phone": "783-687-4118", "email": "Amir@per.gov", "address": "50395 North Azerbaijan Way", "city": "Newark", "state": "TX", "date": { "$date": "1954-09-24"}, "active": true }, { "name": "Reese Espinoza", "age": 15, "phone": "284-736-4532", "email": "Emi@velit.us", "address": "35768 South Chile Way", "city": "Newburyport", "state": "MN", "date": { "$date": "1978-09-11"}, "active": true }, { "name": "Yolanda Ewing", "age": 74, "phone": "683-671-5986", "email": "Nyssa@magnis.com", "address": "172 New Iberia Way", "city": "Athens", "state": "IN", "date": { "$date": "1990-11-20"}, "active": false }, { "name": "Basia Whitehead", "age": 58, "phone": "383-381-9667", "email": "Sylvester@dapibus.edu", "address": "17142 Chicopee Ct.", "city": "Branson", "state": "DE", "date": { "$date": "1973-11-11"}, "active": true }, { "name": "Ruth David", "age": 37, "phone": "944-126-2789", "email": "Joseph@volutpat.edu", "address": "67370 West Cayman Islands Way", "city": "North Little Rock", "state": "IA", "date": { "$date": "1986-11-17"}, "active": false }, { "name": "Hannah Mayer", "age": 61, "phone": "097-279-7919", "email": "Kennan@nulla.org", "address": "55195 North Manassas Blvd.", "city": "Costa Mesa", "state": "IN", "date": { "$date": "1972-12-13"}, "active": false }, { "name": "Winifred Banks", "age": 69, "phone": "832-508-4726", "email": "Fletcher@morbi.us", "address": "47743 North Bosnia and Herzegovina Ln.", "city": "Oxnard", "state": "KS", "date": { "$date": "1995-11-17"}, "active": true }, { "name": "Lacy Andrews", "age": 65, "phone": "326-591-2202", "email": "Cameron@egestas.edu", "address": "25112 East South Georgia and The South Sandwich Islands Ct.", "city": "Poughkeepsie", "state": "ND", "date": { "$date": "1996-02-14"}, "active": true }, { "name": "Miranda Franklin", "age": 14, "phone": "395-094-4642", "email": "Drew@parturient.gov", "address": "40551 North Cayman Islands Blvd.", "city": "Rochester", "state": "MN", "date": { "$date": "1966-10-10"}, "active": true }, { "name": "Thomas Bartlett", "age": 51, "phone": "637-557-9317", "email": "Rahim@neque.gov", "address": "48277 South Macon St.", "city": "Grand Junction", "state": "MO", "date": { "$date": "1960-05-30"}, "active": true }, { "name": "Fritz Thomas", "age": 17, "phone": "122-783-5643", "email": "Sean@conubia.edu", "address": "263 Brazil Ct.", "city": "Sonoma", "state": "MO", "date": { "$date": "1956-03-30"}, "active": true }, { "name": "Ronan Rasmussen", "age": 37, "phone": "697-919-3645", "email": "Chadwick@litora.edu", "address": "6803 West Bermuda Ave.", "city": "Layton", "state": "NJ", "date": { "$date": "1990-11-01"}, "active": false }, { "name": "Kyra Ruiz", "age": 25, "phone": "962-662-7417", "email": "Christen@molestie.com", "address": "41680 North Cambodia St.", "city": "Belpre", "state": "IL", "date": { "$date": "1979-01-02"}, "active": true }, { "name": "Armand Webster", "age": 47, "phone": "232-522-7853", "email": "Odette@luctus.us", "address": "97883 Bosnia and Herzegovina Blvd.", "city": "Huntington Park", "state": "TN", "date": { "$date": "1986-04-13"}, "active": true }, { "name": "Sheila Stuart", "age": 56, "phone": "908-465-6462", "email": "Alexander@Integer.us", "address": "24594 East Peru Way", "city": "Covington", "state": "ID", "date": { "$date": "1999-05-01"}, "active": true }, { "name": "Mufutau Mcneil", "age": 15, "phone": "699-590-3624", "email": "Candice@faucibus.edu", "address": "78690 West Chino Hills Ave.", "city": "New Kensington", "state": "IL", "date": { "$date": "1985-05-22"}, "active": true }, { "name": "Cruz Mills", "age": 18, "phone": "996-592-0536", "email": "Ulysses@libero.com", "address": "80279 West Peru Way", "city": "Staunton", "state": "WY", "date": { "$date": "1968-10-20"}, "active": true }, { "name": "Hyatt Goff", "age": 70, "phone": "537-680-0612", "email": "Carlos@dignissim.org", "address": "94021 East Hong Kong Ct.", "city": "La Cañada Flintridge", "state": "PA", "date": { "$date": "1987-02-15"}, "active": false }, { "name": "Luke Prince", "age": 7, "phone": "848-328-8008", "email": "Sarah@quis.net", "address": "85464 Namibia Ct.", "city": "Phoenix", "state": "ID", "date": { "$date": "1950-09-05"}, "active": true }, { "name": "Daryl Wiley", "age": 53, "phone": "201-671-3275", "email": "Lesley@nec.us", "address": "69280 North Andorra St.", "city": "Burlington", "state": "AZ", "date": { "$date": "1960-03-22"}, "active": false }, { "name": "Peter Medina", "age": 17, "phone": "633-010-2694", "email": "Moana@porttitor.edu", "address": "28416 West Antarctica Ave.", "city": "La Habra Heights", "state": "NY", "date": { "$date": "1974-12-30"}, "active": true }, { "name": "Harriet Doyle", "age": 28, "phone": "681-439-3339", "email": "Cora@nascetur.edu", "address": "51901 South Hastings Ln.", "city": "Dodge City", "state": "TN", "date": { "$date": "1966-09-05"}, "active": false }, { "name": "Wynter Mason", "age": 74, "phone": "538-429-7336", "email": "Vladimir@eget.us", "address": "83691 South Honduras Way", "city": "Salem", "state": "MD", "date": { "$date": "1990-12-12"}, "active": true }, { "name": "Brynn Stafford", "age": 61, "phone": "740-177-8383", "email": "Remedios@nibh.gov", "address": "28396 South Bermuda Ln.", "city": "Hidden Hills", "state": "VA", "date": { "$date": "1978-01-21"}, "active": false }, { "name": "Lael Benjamin", "age": 69, "phone": "582-736-9436", "email": "Althea@sociis.org", "address": "69921 East Israel Ln.", "city": "Santa Clara", "state": "CT", "date": { "$date": "1995-06-06"}, "active": true }, { "name": "Patience Maldonado", "age": 34, "phone": "024-256-6012", "email": "Len@laoreet.net", "address": "19662 South Argentina Ln.", "city": "Hattiesburg", "state": "TX", "date": { "$date": "1985-05-15"}, "active": true }, { "name": "Brynne Blackwell", "age": 20, "phone": "275-593-2079", "email": "Fredericka@risus.us", "address": "78811 North Brownsville Way", "city": "Titusville", "state": "GA", "date": { "$date": "1974-07-16"}, "active": true }, { "name": "Kylee Lindsay", "age": 70, "phone": "598-574-4609", "email": "Merritt@ut.edu", "address": "21212 West Philippines Ln.", "city": "White Plains", "state": "IL", "date": { "$date": "2004-11-24"}, "active": false }, { "name": "Thane Rollins", "age": 7, "phone": "072-436-6560", "email": "Dai@tempor.com", "address": "5238 South Ephraim Ave.", "city": "Needham", "state": "ND", "date": { "$date": "2001-08-30"}, "active": false }, { "name": "Ruby Moreno", "age": 60, "phone": "072-916-8084", "email": "Xaviera@ullamcorper.net", "address": "86019 Guánica Ct.", "city": "Lynn", "state": "UT", "date": { "$date": "1990-06-28"}, "active": true }, { "name": "Leo Pena", "age": 58, "phone": "954-605-1074", "email": "Lillian@interdum.net", "address": "58664 West United Arab Emirates Ave.", "city": "Sharon", "state": "MA", "date": { "$date": "1997-02-12"}, "active": true }, { "name": "Jordan Stone", "age": 46, "phone": "504-980-4048", "email": "Colby@mi.com", "address": "3755 South Angola St.", "city": "Pullman", "state": "MT", "date": { "$date": "1981-01-28"}, "active": false }, { "name": "Chancellor Foster", "age": 46, "phone": "783-942-3062", "email": "Brianna@consequat.edu", "address": "10054 South Cameroon Blvd.", "city": "Rock Island", "state": "AK", "date": { "$date": "1958-07-25"}, "active": true }, { "name": "Whoopi Rocha", "age": 57, "phone": "349-082-5570", "email": "Kylee@mattis.net", "address": "10723 North Fort Wayne Ln.", "city": "Tamuning", "state": "OR", "date": { "$date": "1966-06-20"}, "active": true }, { "name": "Jessamine Medina", "age": 20, "phone": "225-423-2334", "email": "Sylvia@Integer.net", "address": "40940 North Aruba Ln.", "city": "Rancho Cordova", "state": "TX", "date": { "$date": "1962-08-31"}, "active": false }, { "name": "Nayda Valencia", "age": 69, "phone": "519-489-9391", "email": "Dieter@turpis.com", "address": "92619 East Antarctica Ln.", "city": "Statesboro", "state": "OR", "date": { "$date": "1969-09-13"}, "active": true }, { "name": "Francesca Beck", "age": 43, "phone": "640-548-7975", "email": "Laurel@semper.org", "address": "93461 Commerce Ave.", "city": "Murray", "state": "SD", "date": { "$date": "1986-08-18"}, "active": false }, { "name": "Bruno Russo", "age": 71, "phone": "583-757-5170", "email": "Keefe@id.com", "address": "91364 North Champaign Ct.", "city": "Missoula", "state": "ND", "date": { "$date": "1975-10-08"}, "active": true }, { "name": "Alyssa Mccoy", "age": 18, "phone": "136-933-3635", "email": "Carla@tempor.edu", "address": "41800 West Bradbury Blvd.", "city": "West Hartford", "state": "AZ", "date": { "$date": "1974-04-17"}, "active": false }, { "name": "Tucker Stevens", "age": 32, "phone": "054-958-8317", "email": "Vielka@sapien.net", "address": "71299 North French Southern Territories Ct.", "city": "Alexandria", "state": "AK", "date": { "$date": "2003-02-10"}, "active": true }, { "name": "Todd Mcmahon", "age": 47, "phone": "904-231-2617", "email": "Philip@orci.org", "address": "9048 South Cape Verde Way", "city": "Oneida", "state": "AL", "date": { "$date": "1974-07-17"}, "active": true }, { "name": "Ella Anderson", "age": 53, "phone": "655-793-4227", "email": "Kai@tellus.com", "address": "94705 West Togo Way", "city": "New Bedford", "state": "WY", "date": { "$date": "1958-02-22"}, "active": true }, { "name": "Winter Campos", "age": 69, "phone": "661-805-0393", "email": "Talon@ante.edu", "address": "7516 West Pitcairn St.", "city": "Artesia", "state": "VT", "date": { "$date": "1988-01-28"}, "active": false }, { "name": "Dorian Hopper", "age": 32, "phone": "559-709-1063", "email": "Ronan@eget.gov", "address": "58581 South Antarctica Ave.", "city": "Cheyenne", "state": "SD", "date": { "$date": "1972-10-31"}, "active": true }, { "name": "Lani Suarez", "age": 61, "phone": "414-430-3621", "email": "Ali@velit.org", "address": "37722 East Flint Ln.", "city": "Hickory", "state": "WY", "date": { "$date": "1980-12-22"}, "active": true }, { "name": "Elvis Mccoy", "age": 37, "phone": "253-274-5859", "email": "Emerson@taciti.org", "address": "29950 East Longview Ave.", "city": "Nome", "state": "PA", "date": { "$date": "1965-07-22"}, "active": true }, { "name": "Tanner Rodriguez", "age": 69, "phone": "597-382-2246", "email": "Amal@Cum.us", "address": "22574 East Papua New Guinea Ct.", "city": "Redding", "state": "VA", "date": { "$date": "1980-12-16"}, "active": true }, { "name": "Xena Mckee", "age": 38, "phone": "562-282-0733", "email": "Ina@iaculis.gov", "address": "71811 West Botswana Blvd.", "city": "Fitchburg", "state": "NY", "date": { "$date": "1990-01-29"}, "active": true }, { "name": "Keelie Clay", "age": 29, "phone": "472-871-6975", "email": "Ciara@ligula.org", "address": "31275 South Ethiopia St.", "city": "Roanoke", "state": "KY", "date": { "$date": "1973-08-10"}, "active": false }, { "name": "Jameson Tyler", "age": 24, "phone": "344-376-1497", "email": "Edan@pharetra.edu", "address": "57716 East Oneida Ct.", "city": "Greensboro", "state": "NH", "date": { "$date": "1956-08-19"}, "active": false }, { "name": "Neil Steele", "age": 64, "phone": "247-565-2603", "email": "Isabelle@lobortis.us", "address": "26290 North Mozambique Ct.", "city": "Provo", "state": "NY", "date": { "$date": "1984-01-04"}, "active": true }, { "name": "Lillian Keller", "age": 32, "phone": "104-472-2912", "email": "Kelsey@Integer.edu", "address": "93738 North French Guiana Way", "city": "Scranton", "state": "MO", "date": { "$date": "1998-05-19"}, "active": true }, { "name": "Declan Ashley", "age": 28, "phone": "182-468-7605", "email": "Abel@libero.org", "address": "92921 North Holyoke Ave.", "city": "Lynwood", "state": "OH", "date": { "$date": "1969-03-24"}, "active": false }, { "name": "Alexander Cantrell", "age": 45, "phone": "152-078-8867", "email": "Paki@felis.edu", "address": "6466 North Bartlesville Ln.", "city": "Mount Pleasant", "state": "TX", "date": { "$date": "1955-12-07"}, "active": false }, { "name": "Summer Burke", "age": 72, "phone": "331-041-2643", "email": "Neil@suscipit.com", "address": "71031 South Clarksville Ct.", "city": "Laguna Woods", "state": "NC", "date": { "$date": "1990-06-10"}, "active": false }, { "name": "Ila Cochran", "age": 64, "phone": "517-737-8261", "email": "Guinevere@iaculis.org", "address": "71884 West Cambodia Ct.", "city": "Aspen", "state": "IL", "date": { "$date": "1981-01-01"}, "active": true }, { "name": "Georgia Hinton", "age": 66, "phone": "992-830-5680", "email": "Leilani@porttitor.us", "address": "62952 West Hartland Ave.", "city": "Brea", "state": "IA", "date": { "$date": "2001-08-04"}, "active": false }, { "name": "Mannix Hancock", "age": 35, "phone": "705-032-0405", "email": "Frances@dui.net", "address": "57498 Brazil Ct.", "city": "Boise", "state": "NY", "date": { "$date": "1970-07-24"}, "active": true }, { "name": "Karly Mcdaniel", "age": 46, "phone": "738-685-3606", "email": "Germane@ultrices.org", "address": "82694 North Tuvalu Ct.", "city": "Hidden Hills", "state": "FL", "date": { "$date": "1977-02-17"}, "active": true }, { "name": "Uma Tate", "age": 50, "phone": "031-114-6820", "email": "Lionel@interdum.com", "address": "44378 North Viet Nam Way", "city": "Brown Deer", "state": "AK", "date": { "$date": "1967-06-11"}, "active": true }, { "name": "Jenna Miranda", "age": 39, "phone": "245-343-2595", "email": "Rahim@torquent.net", "address": "1939 South Elsmere St.", "city": "Del Rio", "state": "IA", "date": { "$date": "1980-04-17"}, "active": true }, { "name": "Ariel Trevino", "age": 65, "phone": "474-913-3906", "email": "Charles@dignissim.edu", "address": "473 West Malawi Ct.", "city": "Newark", "state": "ME", "date": { "$date": "1992-03-17"}, "active": false }, { "name": "Rajah Osborn", "age": 55, "phone": "388-199-1217", "email": "Adara@hymenaeos.net", "address": "96050 South Harrisburg Ct.", "city": "Brea", "state": "MS", "date": { "$date": "1954-06-15"}, "active": true }, { "name": "Robin Ferrell", "age": 73, "phone": "210-511-2275", "email": "Ali@vestibulum.gov", "address": "39115 North Bulgaria Blvd.", "city": "Murrieta", "state": "TX", "date": { "$date": "2004-10-12"}, "active": true }, { "name": "Molly Jensen", "age": 45, "phone": "203-401-1288", "email": "Chadwick@in.edu", "address": "99509 East Botswana St.", "city": "Plano", "state": "FL", "date": { "$date": "1962-05-20"}, "active": true }, { "name": "Ayanna Underwood", "age": 31, "phone": "494-371-5178", "email": "Alvin@sed.edu", "address": "59073 North Lakeland St.", "city": "Chicago", "state": "OR", "date": { "$date": "1955-11-28"}, "active": false }, { "name": "Diana Koch", "age": 15, "phone": "765-630-6589", "email": "Desirae@porta.gov", "address": "77007 West Virgin Islands", "city": "Brown Deer", "state": "TX", "date": { "$date": "1985-12-15"}, "active": true }, { "name": "Rama Mcclain", "age": 22, "phone": "474-540-8228", "email": "Cecilia@Nulla.net", "address": "4961 Austria St.", "city": "New Bedford", "state": "NC", "date": { "$date": "2004-12-18"}, "active": false }, { "name": "Jason Dejesus", "age": 20, "phone": "943-199-3769", "email": "Wallace@odio.org", "address": "6267 South Galveston St.", "city": "Blythe", "state": "NJ", "date": { "$date": "1951-08-08"}, "active": true }, { "name": "Owen Snider", "age": 68, "phone": "348-349-9100", "email": "Isabelle@adipiscing.edu", "address": "71617 Hollywood Ln.", "city": "Wisconsin Dells", "state": "ME", "date": { "$date": "1950-10-29"}, "active": true }, { "name": "Leroy Walsh", "age": 35, "phone": "713-153-3268", "email": "Chaim@sagittis.net", "address": "63895 South Djibouti Ln.", "city": "Poughkeepsie", "state": "CO", "date": { "$date": "1955-10-06"}, "active": true }, { "name": "Carson Newton", "age": 46, "phone": "402-808-5128", "email": "Lillith@at.edu", "address": "76801 Fayetteville Way", "city": "Green Bay", "state": "NE", "date": { "$date": "1951-06-27"}, "active": false }, { "name": "Colleen Hines", "age": 5, "phone": "661-311-3119", "email": "Kiayada@quis.com", "address": "62337 West Belgium Ave.", "city": "Miami Gardens", "state": "NC", "date": { "$date": "1968-01-17"}, "active": false }, { "name": "Nolan Zamora", "age": 69, "phone": "066-391-5551", "email": "Zephania@Maecenas.com", "address": "69882 West Cuba Ave.", "city": "Worland", "state": "ND", "date": { "$date": "1989-10-29"}, "active": true }, { "name": "Keegan Anderson", "age": 68, "phone": "082-509-5143", "email": "Cassandra@Cras.us", "address": "19427 South Gilette Blvd.", "city": "Huntington Beach", "state": "RI", "date": { "$date": "1963-01-26"}, "active": true }, { "name": "Ruby Barrera", "age": 25, "phone": "459-647-5631", "email": "Chelsea@ante.gov", "address": "87931 Antigua and Barbuda Ln.", "city": "Beverly", "state": "MA", "date": { "$date": "1965-03-30"}, "active": true }, { "name": "Odysseus Sanford", "age": 63, "phone": "061-995-0784", "email": "Fiona@dis.org", "address": "45053 South Colombia Ct.", "city": "Westlake Village", "state": "IA", "date": { "$date": "1994-12-22"}, "active": true }, { "name": "Indira Fitzgerald", "age": 52, "phone": "493-123-3918", "email": "Orson@enim.us", "address": "18036 North Ireland Way", "city": "Oro Valley", "state": "VT", "date": { "$date": "1968-09-15"}, "active": true }, { "name": "Genevieve Lawrence", "age": 68, "phone": "777-143-0602", "email": "Hunter@magna.net", "address": "45783 Bermuda St.", "city": "Waterloo", "state": "IL", "date": { "$date": "1969-08-26"}, "active": true }, { "name": "Isaiah Lane", "age": 25, "phone": "976-809-2293", "email": "Tanek@tortor.org", "address": "72624 East Poland St.", "city": "Kingsport", "state": "PA", "date": { "$date": "1978-07-03"}, "active": true }, { "name": "Ulla Woodward", "age": 52, "phone": "665-656-7643", "email": "Garrett@congue.gov", "address": "66492 West Hanahan Ct.", "city": "Sister Bay", "state": "MS", "date": { "$date": "1963-06-01"}, "active": false }, { "name": "Geraldine Gregory", "age": 50, "phone": "796-695-3830", "email": "Cooper@dapibus.org", "address": "37596 West Turks and Caicos Islands Ln.", "city": "Richmond", "state": "DC", "date": { "$date": "2002-07-24"}, "active": true }, { "name": "Piper Acosta", "age": 42, "phone": "091-057-5624", "email": "Anthony@Nulla.com", "address": "24843 North Peekskill Way", "city": "Bend", "state": "ME", "date": { "$date": "1987-09-23"}, "active": true }, { "name": "Rebekah Townsend", "age": 31, "phone": "982-446-7998", "email": "Joan@conubia.com", "address": "65064 Cocos (Keeling) Islands Ln.", "city": "Poughkeepsie", "state": "CA", "date": { "$date": "1970-05-20"}, "active": true }, { "name": "Heidi Navarro", "age": 49, "phone": "292-236-3002", "email": "Samson@scelerisque.us", "address": "49322 West Micronesia Ln.", "city": "Union City", "state": "MD", "date": { "$date": "1964-01-31"}, "active": true }, { "name": "Wayne Stafford", "age": 25, "phone": "000-265-5652", "email": "Christine@pulvinar.edu", "address": "75722 West Saint Pierre and Miquelon Way", "city": "North Little Rock", "state": "NH", "date": { "$date": "1961-03-06"}, "active": true }, { "name": "Keane Barry", "age": 9, "phone": "036-551-9443", "email": "Cyrus@quam.org", "address": "94801 South Bangladesh Ln.", "city": "Hickory", "state": "AZ", "date": { "$date": "1975-11-29"}, "active": true }, { "name": "Gannon Mcgee", "age": 53, "phone": "720-842-0864", "email": "Valentine@purus.us", "address": "78539 West Corry Way", "city": "Alexandria", "state": "NY", "date": { "$date": "1957-01-31"}, "active": false }, { "name": "Odysseus Monroe", "age": 14, "phone": "060-383-1667", "email": "Chaney@quam.edu", "address": "98939 West Aurora Ct.", "city": "Hoover", "state": "KY", "date": { "$date": "1984-09-16"}, "active": true }, { "name": "Devin Howell", "age": 50, "phone": "321-792-4257", "email": "Alyssa@accumsan.org", "address": "78177 East Cocos (Keeling) Islands Ln.", "city": "North Little Rock", "state": "IA", "date": { "$date": "1961-10-11"}, "active": true }, { "name": "Addison Griffith", "age": 18, "phone": "637-471-2902", "email": "Chase@augue.org", "address": "26328 Colombia Blvd.", "city": "Casper", "state": "PA", "date": { "$date": "1954-10-06"}, "active": true }, { "name": "Dora Mcdonald", "age": 62, "phone": "119-692-9258", "email": "Jena@sed.gov", "address": "93051 East Hastings Ln.", "city": "Fayetteville", "state": "NV", "date": { "$date": "1957-12-27"}, "active": true }, { "name": "Mary Sloan", "age": 29, "phone": "561-130-1058", "email": "Leonard@at.com", "address": "15051 South Grenada Way", "city": "Saginaw", "state": "ID", "date": { "$date": "2002-07-04"}, "active": true }, { "name": "Wanda Haynes", "age": 43, "phone": "139-325-1721", "email": "Christen@quis.org", "address": "14911 Agoura Hills Ave.", "city": "San Francisco", "state": "CA", "date": { "$date": "1961-09-09"}, "active": true }, { "name": "Reese Valenzuela", "age": 55, "phone": "871-337-6411", "email": "Amal@Donec.us", "address": "93125 Bangladesh Blvd.", "city": "Concord", "state": "DE", "date": { "$date": "1984-08-26"}, "active": true }, { "name": "Brianna Stokes", "age": 41, "phone": "685-255-4031", "email": "Cullen@imperdiet.com", "address": "10428 East Lithuania St.", "city": "Manitowoc", "state": "NY", "date": { "$date": "1979-08-08"}, "active": true }, { "name": "Reese Witt", "age": 14, "phone": "378-016-0559", "email": "Jeremy@tellus.edu", "address": "79010 South Tokelau Ct.", "city": "Corona", "state": "KY", "date": { "$date": "1959-09-09"}, "active": true }, { "name": "Rogan Mcintosh", "age": 65, "phone": "202-969-2812", "email": "Harriet@Curabitur.edu", "address": "26293 South Colombia Ave.", "city": "Mount Pleasant", "state": "NE", "date": { "$date": "1968-10-15"}, "active": false }, { "name": "Kuame Mccoy", "age": 73, "phone": "935-349-0957", "email": "Brock@tempus.net", "address": "52885 North Holy See (Vatican City State) Blvd.", "city": "Gallup", "state": "AZ", "date": { "$date": "2000-11-29"}, "active": true }, { "name": "Kristen Short", "age": 72, "phone": "106-257-4158", "email": "Vernon@Pellentesque.gov", "address": "62664 West Saint Helena Blvd.", "city": "Abilene", "state": "NM", "date": { "$date": "1960-07-23"}, "active": false }, { "name": "Jessica Burch", "age": 52, "phone": "674-684-2721", "email": "Madonna@nisi.edu", "address": "40185 East French Southern Territories St.", "city": "Worcester", "state": "CA", "date": { "$date": "1995-10-29"}, "active": true }, { "name": "Lev Mckee", "age": 57, "phone": "039-374-9109", "email": "Jaquelyn@pede.org", "address": "8081 West Greece Blvd.", "city": "Vincennes", "state": "MO", "date": { "$date": "1964-09-23"}, "active": false }, { "name": "George Gibson", "age": 29, "phone": "997-800-4347", "email": "Fletcher@nulla.com", "address": "63677 West Fajardo St.", "city": "Middlebury", "state": "ME", "date": { "$date": "1956-07-21"}, "active": true }, { "name": "Xenos Koch", "age": 60, "phone": "380-185-6227", "email": "Lesley@quis.gov", "address": "11152 North Papua New Guinea Ave.", "city": "Portsmouth", "state": "MA", "date": { "$date": "1971-11-10"}, "active": true }, { "name": "Amethyst Hunt", "age": 37, "phone": "910-539-3359", "email": "Gretchen@facilisi.net", "address": "56624 Comoros Ct.", "city": "Fairmont", "state": "NV", "date": { "$date": "1966-09-02"}, "active": false }, { "name": "Brody Riggs", "age": 46, "phone": "133-444-2434", "email": "Zephania@sit.com", "address": "10978 South Glen Cove St.", "city": "Morrison", "state": "ID", "date": { "$date": "1979-01-12"}, "active": false }, { "name": "Magee Williamson", "age": 28, "phone": "114-619-0996", "email": "Evangeline@euismod.edu", "address": "90792 North United Kingdom Blvd.", "city": "Westfield", "state": "VT", "date": { "$date": "1959-08-03"}, "active": true }, { "name": "Harlan Harris", "age": 51, "phone": "744-238-5279", "email": "Shaine@ligula.us", "address": "72280 West Comoros Ct.", "city": "Grand Island", "state": "FL", "date": { "$date": "1987-05-21"}, "active": true }, { "name": "Emery Williams", "age": 49, "phone": "442-112-5744", "email": "Kevyn@gravida.edu", "address": "51664 East New Caledonia Ln.", "city": "Anaheim", "state": "NJ", "date": { "$date": "1951-10-30"}, "active": true }, { "name": "Bo Alford", "age": 32, "phone": "313-439-8259", "email": "Jolie@iaculis.org", "address": "91880 West Abilene Way", "city": "Macon", "state": "IA", "date": { "$date": "1964-01-25"}, "active": true }, { "name": "Jack Bruce", "age": 65, "phone": "875-868-3298", "email": "Samuel@sem.net", "address": "55387 North Alameda Ct.", "city": "Kenosha", "state": "GA", "date": { "$date": "1994-02-04"}, "active": true }, { "name": "Rhoda Koch", "age": 36, "phone": "437-442-9683", "email": "Victoria@neque.net", "address": "93572 South French Guiana Ave.", "city": "San Luis Obispo", "state": "IN", "date": { "$date": "1956-04-29"}, "active": true }, { "name": "Dale Summers", "age": 46, "phone": "894-483-8935", "email": "Jocelyn@neque.edu", "address": "92262 North Bakersfield Ave.", "city": "Grand Rapids", "state": "AK", "date": { "$date": "1977-11-07"}, "active": true }, { "name": "Allistair Ramsey", "age": 63, "phone": "568-439-9834", "email": "Ava@inceptos.gov", "address": "33070 West Chesapeake Ct.", "city": "Bessemer", "state": "NC", "date": { "$date": "1950-02-15"}, "active": true }, { "name": "Josiah Fields", "age": 65, "phone": "241-410-6643", "email": "Aaron@tristique.net", "address": "40011 East Kazakhstan St.", "city": "Paramount", "state": "MO", "date": { "$date": "1980-12-26"}, "active": false }, { "name": "Axel Macdonald", "age": 5, "phone": "130-863-5921", "email": "Ulla@dui.com", "address": "66682 West Anguilla St.", "city": "Asheville", "state": "OK", "date": { "$date": "1954-05-08"}, "active": true }, { "name": "Timon Hancock", "age": 49, "phone": "148-029-4392", "email": "Harper@facilisis.org", "address": "56412 East Malawi Ln.", "city": "East St. Louis", "state": "IA", "date": { "$date": "1998-06-10"}, "active": true }, { "name": "Plato Holloway", "age": 64, "phone": "135-866-6205", "email": "Oleg@hendrerit.net", "address": "30844 Bahrain Ct.", "city": "Cairo", "state": "NH", "date": { "$date": "1997-01-26"}, "active": false }, { "name": "Emmanuel Richards", "age": 48, "phone": "537-489-1464", "email": "Galvin@Phasellus.org", "address": "79686 West Bangladesh St.", "city": "Fall River", "state": "MA", "date": { "$date": "1955-01-21"}, "active": false }, { "name": "Edward Hayes", "age": 70, "phone": "663-386-9673", "email": "Maya@augue.gov", "address": "60654 West Bosnia and Herzegovina Ln.", "city": "Durango", "state": "AZ", "date": { "$date": "2004-08-12"}, "active": true }, { "name": "Ralph Herman", "age": 74, "phone": "131-714-0731", "email": "Lucius@et.org", "address": "50813 North Monaco Ave.", "city": "Moultrie", "state": "WA", "date": { "$date": "1961-01-06"}, "active": false }, { "name": "Pascale Riley", "age": 20, "phone": "924-577-4180", "email": "Nell@elit.net", "address": "15007 West Togo Ln.", "city": "Athens", "state": "PA", "date": { "$date": "2004-07-19"}, "active": true }, { "name": "Florence Simon", "age": 50, "phone": "845-555-3335", "email": "Jacob@molestie.org", "address": "19062 East Bandon Ct.", "city": "Rosemead", "state": "SC", "date": { "$date": "1995-05-19"}, "active": true }, { "name": "Kameko Hall", "age": 57, "phone": "623-117-4628", "email": "Bryar@sagittis.us", "address": "14736 East Needham Way", "city": "Taylorsville", "state": "VA", "date": { "$date": "1984-10-27"}, "active": false }, { "name": "Kyla Shaffer", "age": 24, "phone": "546-106-7961", "email": "Daniel@euismod.edu", "address": "44791 West Bolivia Ct.", "city": "Michigan City", "state": "VT", "date": { "$date": "1966-04-15"}, "active": true }, { "name": "Karly Hill", "age": 37, "phone": "641-413-6544", "email": "Harlan@quam.us", "address": "56220 East Concord Ct.", "city": "Cortland", "state": "NV", "date": { "$date": "1977-07-14"}, "active": true }, { "name": "Giacomo Gaines", "age": 30, "phone": "817-103-3805", "email": "Leroy@blandit.com", "address": "71856 South Bahamas Ave.", "city": "Bloomington", "state": "RI", "date": { "$date": "1963-11-29"}, "active": true }, { "name": "Armando Herrera", "age": 65, "phone": "610-636-1425", "email": "Austin@morbi.net", "address": "94905 American Samoa Ave.", "city": "Biddeford", "state": "MO", "date": { "$date": "1961-05-24"}, "active": true }, { "name": "Ariel Roberts", "age": 18, "phone": "161-596-5480", "email": "Hunter@varius.net", "address": "63085 North Bulgaria St.", "city": "Tyler", "state": "IA", "date": { "$date": "1979-01-25"}, "active": true }, { "name": "Clayton Pugh", "age": 39, "phone": "727-744-3996", "email": "Alexander@tortor.us", "address": "52897 South Bolivia Ave.", "city": "Jenks", "state": "OK", "date": { "$date": "1991-05-19"}, "active": false }, { "name": "Erin Estrada", "age": 15, "phone": "943-143-7006", "email": "Keane@mollis.net", "address": "29283 Armenia Blvd.", "city": "Dover", "state": "MT", "date": { "$date": "1973-02-10"}, "active": true }, { "name": "Nathan Sanders", "age": 47, "phone": "573-651-3008", "email": "Keiko@consectetuer.org", "address": "11294 North Iowa City Ave.", "city": "Geneva", "state": "MT", "date": { "$date": "1979-08-11"}, "active": false }, { "name": "Indigo Skinner", "age": 74, "phone": "093-494-0897", "email": "Lani@ullamcorper.net", "address": "295 East Algeria Way", "city": "Cleveland", "state": "IA", "date": { "$date": "1954-01-17"}, "active": true }, { "name": "Ori Stanley", "age": 70, "phone": "363-195-4353", "email": "Dolan@sodales.org", "address": "25317 Chattanooga Ave.", "city": "Arvada", "state": "WA", "date": { "$date": "2000-03-12"}, "active": false }, { "name": "Aquila Perry", "age": 33, "phone": "040-926-6000", "email": "Uta@sociis.edu", "address": "5243 West Green Bay Blvd.", "city": "Moorhead", "state": "WY", "date": { "$date": "1955-05-31"}, "active": true }, { "name": "Ruby Mclean", "age": 45, "phone": "469-392-1036", "email": "Myles@Aenean.us", "address": "13739 East Midland Blvd.", "city": "Birmingham", "state": "OK", "date": { "$date": "1995-08-10"}, "active": false }, { "name": "Daphne Justice", "age": 43, "phone": "798-741-3435", "email": "Zorita@nec.com", "address": "92604 West Ukraine Ave.", "city": "Cedar Rapids", "state": "CT", "date": { "$date": "1956-02-19"}, "active": true }, { "name": "Wanda Sosa", "age": 20, "phone": "071-327-2010", "email": "Lewis@odio.net", "address": "957 South Bartlesville Ct.", "city": "Aguadilla", "state": "NE", "date": { "$date": "2000-02-28"}, "active": true }, { "name": "Oren Wyatt", "age": 65, "phone": "809-551-8535", "email": "Isaac@a.org", "address": "76936 South Saint Helena St.", "city": "Lander", "state": "AK", "date": { "$date": "2000-03-06"}, "active": true }, { "name": "Carson Beck", "age": 66, "phone": "055-055-2280", "email": "Kenneth@sem.org", "address": "54362 West Glen Cove St.", "city": "Sheboygan", "state": "TN", "date": { "$date": "2000-04-23"}, "active": false }, { "name": "Isaiah Frazier", "age": 53, "phone": "882-117-8404", "email": "Idola@euismod.com", "address": "84846 West Bhutan Way", "city": "Thibodaux", "state": "LA", "date": { "$date": "1953-03-30"}, "active": true }, { "name": "Alexis Ellison", "age": 64, "phone": "852-565-5762", "email": "Harlan@risus.edu", "address": "73279 West Cayman Islands Blvd.", "city": "Hoover", "state": "AK", "date": { "$date": "1952-02-08"}, "active": true }, { "name": "Erica Hampton", "age": 48, "phone": "394-231-2001", "email": "Jarrod@ridiculus.edu", "address": "45272 West Belize Way", "city": "Hope", "state": "CA", "date": { "$date": "1976-07-28"}, "active": false }, { "name": "Emerald Ware", "age": 34, "phone": "726-840-8754", "email": "Tanya@nulla.us", "address": "29674 South Kyrgyzstan Blvd.", "city": "Los Alamitos", "state": "RI", "date": { "$date": "1994-01-13"}, "active": false }, { "name": "Cheyenne William", "age": 74, "phone": "538-948-5441", "email": "Tara@consequat.net", "address": "58938 South Benin Way", "city": "Lafayette", "state": "DE", "date": { "$date": "1964-06-08"}, "active": true }, { "name": "Jerome Jacobs", "age": 9, "phone": "431-031-3863", "email": "Jillian@blandit.gov", "address": "19451 South Moldova Ln.", "city": "Beckley", "state": "LA", "date": { "$date": "1957-06-05"}, "active": true }, { "name": "Reece Pollard", "age": 25, "phone": "004-366-4426", "email": "Mia@Vivamus.gov", "address": "42435 East Argentina Way", "city": "Grafton", "state": "VA", "date": { "$date": "1957-11-03"}, "active": true }, { "name": "Hilda Cain", "age": 42, "phone": "154-907-0290", "email": "Adrian@Cum.gov", "address": "64571 West Bouvet Island Ave.", "city": "Moorhead", "state": "NC", "date": { "$date": "1995-08-06"}, "active": true }, { "name": "Rhea Gentry", "age": 51, "phone": "016-216-3897", "email": "Georgia@Lorem.org", "address": "35556 North Austria St.", "city": "Carson City", "state": "WI", "date": { "$date": "1959-09-30"}, "active": true }, { "name": "Deanna Saunders", "age": 46, "phone": "224-309-6117", "email": "Uriel@imperdiet.us", "address": "88299 Hamilton Ct.", "city": "Utica", "state": "CA", "date": { "$date": "1970-10-20"}, "active": true }, { "name": "Brianna Cleveland", "age": 46, "phone": "467-926-3380", "email": "Lysandra@pharetra.edu", "address": "53014 West Georgia St.", "city": "Bayamon", "state": "MT", "date": { "$date": "2001-04-08"}, "active": false }, { "name": "Libby Casey", "age": 59, "phone": "058-194-6839", "email": "Leilani@erat.gov", "address": "49804 West Aruba Ct.", "city": "Peekskill", "state": "KS", "date": { "$date": "1972-12-29"}, "active": false }, { "name": "Venus Justice", "age": 22, "phone": "028-267-5418", "email": "Noah@ridiculus.edu", "address": "12151 East Central African Republic St.", "city": "Vernon", "state": "OH", "date": { "$date": "1979-03-11"}, "active": true }, { "name": "Gail Collier", "age": 68, "phone": "698-912-2100", "email": "Cathleen@Lorem.net", "address": "22742 North Cambodia Way", "city": "Cary", "state": "OK", "date": { "$date": "1994-07-22"}, "active": true }, { "name": "TaShya Ayers", "age": 64, "phone": "247-112-8860", "email": "Bernard@Donec.org", "address": "5064 North Brown Deer Ct.", "city": "Astoria", "state": "AZ", "date": { "$date": "1957-11-24"}, "active": true }, { "name": "Vera Holland", "age": 48, "phone": "680-332-7557", "email": "Eagan@ac.com", "address": "50543 Cook Islands Ct.", "city": "Allentown", "state": "MN", "date": { "$date": "1959-02-14"}, "active": true }, { "name": "Roanna Rosa", "age": 40, "phone": "239-583-8273", "email": "Lucian@per.edu", "address": "76404 East Costa Rica St.", "city": "Laramie", "state": "NC", "date": { "$date": "1979-01-11"}, "active": false }, { "name": "Amy Hart", "age": 52, "phone": "455-492-3711", "email": "Buffy@arcu.org", "address": "11794 South Cameroon Ct.", "city": "Winnemucca", "state": "TN", "date": { "$date": "1998-01-10"}, "active": true }, { "name": "Ivory Ayers", "age": 51, "phone": "618-056-5911", "email": "Tatum@egestas.gov", "address": "97549 East Mauritius Ln.", "city": "Holyoke", "state": "MT", "date": { "$date": "1961-03-29"}, "active": true }, { "name": "Zenia David", "age": 18, "phone": "582-663-6645", "email": "Ignacia@gravida.net", "address": "13566 Nome Ct.", "city": "Akron", "state": "AZ", "date": { "$date": "2001-04-04"}, "active": true }, { "name": "Amity Oliver", "age": 66, "phone": "201-533-2357", "email": "Baxter@leo.us", "address": "62256 East Austria Way", "city": "Ventura", "state": "LA", "date": { "$date": "1993-02-04"}, "active": true }, { "name": "Anjolie Giles", "age": 13, "phone": "210-533-9921", "email": "Vance@imperdiet.us", "address": "46655 East Cincinnati Ave.", "city": "Dover", "state": "TN", "date": { "$date": "2003-08-08"}, "active": true }, { "name": "Kiona Irwin", "age": 41, "phone": "515-323-6679", "email": "Vernon@sed.net", "address": "12593 North Fiji Ave.", "city": "Duarte", "state": "TX", "date": { "$date": "1986-02-19"}, "active": true }, { "name": "Robin Cleveland", "age": 66, "phone": "173-014-4410", "email": "Georgia@leo.gov", "address": "7880 North Norman Ln.", "city": "Carolina", "state": "WI", "date": { "$date": "1982-10-28"}, "active": true }, { "name": "Yvonne Rich", "age": 18, "phone": "313-729-6720", "email": "Anne@per.com", "address": "53545 West Burkina Faso Blvd.", "city": "Peru", "state": "NC", "date": { "$date": "1975-03-14"}, "active": true }, { "name": "Jasmine Foreman", "age": 22, "phone": "291-683-7113", "email": "Thor@semper.com", "address": "96883 East Guam Ave.", "city": "Cary", "state": "MT", "date": { "$date": "1986-05-16"}, "active": true }, { "name": "Shelley Gross", "age": 68, "phone": "913-877-5369", "email": "Lynn@pede.edu", "address": "34380 Timor-leste Blvd.", "city": "Edina", "state": "IL", "date": { "$date": "1953-08-13"}, "active": true }, { "name": "Jane Rogers", "age": 9, "phone": "017-911-2575", "email": "Zane@natoque.gov", "address": "53970 West Newport Beach Ct.", "city": "Indianapolis", "state": "FL", "date": { "$date": "1987-11-25"}, "active": true }, { "name": "Fitzgerald Weiss", "age": 71, "phone": "332-323-3523", "email": "Jena@erat.net", "address": "73417 South Dominican Republic Blvd.", "city": "Farmer City", "state": "DC", "date": { "$date": "1990-09-19"}, "active": true }, { "name": "Justina Walsh", "age": 34, "phone": "206-652-6409", "email": "Deanna@varius.gov", "address": "29028 West Cedar Rapids Ct.", "city": "Reno", "state": "IL", "date": { "$date": "1977-07-15"}, "active": true }, { "name": "Rooney Emerson", "age": 74, "phone": "931-124-5828", "email": "Dexter@nibh.net", "address": "16251 South Austria Blvd.", "city": "Cape May", "state": "NE", "date": { "$date": "1977-09-28"}, "active": true }, { "name": "Rowan Cooley", "age": 5, "phone": "118-438-6678", "email": "Nicole@netus.edu", "address": "57338 East Panama St.", "city": "Bessemer", "state": "CA", "date": { "$date": "1966-08-02"}, "active": true }, { "name": "Brett Fuentes", "age": 33, "phone": "987-246-4666", "email": "Sybil@hymenaeos.gov", "address": "11726 West China Ave.", "city": "Sutter Creek", "state": "DC", "date": { "$date": "2004-07-11"}, "active": false }, { "name": "Myra Patton", "age": 54, "phone": "177-694-3555", "email": "Kennedy@magna.com", "address": "10884 Sri Lanka Ct.", "city": "College Park", "state": "OH", "date": { "$date": "1987-07-04"}, "active": true }, { "name": "Dacey Gallegos", "age": 35, "phone": "500-485-0683", "email": "Rylee@parturient.gov", "address": "40857 West Fall River Ln.", "city": "Forest Lake", "state": "DC", "date": { "$date": "1997-01-29"}, "active": false }, { "name": "Ferdinand Weaver", "age": 31, "phone": "465-281-4123", "email": "Samuel@senectus.us", "address": "54120 West Saint Lucia Way", "city": "Barrow", "state": "AZ", "date": { "$date": "1992-05-25"}, "active": true }, { "name": "Hall Vance", "age": 52, "phone": "434-432-7021", "email": "Davis@turpis.edu", "address": "1738 North Philippines Ct.", "city": "West Covina", "state": "LA", "date": { "$date": "1961-06-22"}, "active": true }, { "name": "Ivan Gray", "age": 5, "phone": "477-514-2769", "email": "Janna@torquent.gov", "address": "85803 North Franklin Ct.", "city": "Kemmerer", "state": "IL", "date": { "$date": "1961-03-07"}, "active": false }, { "name": "Gil Fitzgerald", "age": 47, "phone": "465-800-3060", "email": "Neil@primis.net", "address": "96047 French Polynesia St.", "city": "Anaheim", "state": "IL", "date": { "$date": "1953-04-28"}, "active": true }, { "name": "Bree Shields", "age": 22, "phone": "900-054-5256", "email": "Joseph@nulla.gov", "address": "53047 Antarctica Blvd.", "city": "Evansville", "state": "AZ", "date": { "$date": "1984-03-14"}, "active": true }, { "name": "Calista Ellison", "age": 67, "phone": "555-322-5082", "email": "Raya@mattis.us", "address": "94462 West Des Moines Ln.", "city": "Bell Gardens", "state": "WA", "date": { "$date": "1986-02-08"}, "active": true }, { "name": "Bree Bradley", "age": 16, "phone": "617-692-0679", "email": "Arden@Duis.net", "address": "30693 South La Verne Ct.", "city": "Coral Springs", "state": "KY", "date": { "$date": "1976-08-03"}, "active": true }, { "name": "Cyrus Spears", "age": 51, "phone": "015-600-3391", "email": "Solomon@parturient.us", "address": "15809 United Kingdom Blvd.", "city": "Tustin", "state": "DC", "date": { "$date": "1979-11-24"}, "active": true }, { "name": "Gray Glover", "age": 72, "phone": "288-517-4497", "email": "Hedda@libero.org", "address": "3430 North Monongahela Ave.", "city": "Kent", "state": "OH", "date": { "$date": "1979-03-19"}, "active": true }, { "name": "Dorian Collier", "age": 59, "phone": "809-585-0277", "email": "Connor@hendrerit.org", "address": "16103 North Lesotho Blvd.", "city": "Pine Bluff", "state": "HI", "date": { "$date": "1985-04-29"}, "active": true }, { "name": "Rahim Rosales", "age": 54, "phone": "424-814-2026", "email": "Leah@aliquam.com", "address": "63858 East Sweden St.", "city": "Maywood", "state": "NV", "date": { "$date": "1957-08-04"}, "active": true }, { "name": "Austin Finley", "age": 33, "phone": "610-930-6078", "email": "Hoyt@Phasellus.net", "address": "55136 North Green Bay Ave.", "city": "Lufkin", "state": "NE", "date": { "$date": "1967-06-28"}, "active": true }, { "name": "Steven Hopper", "age": 70, "phone": "428-651-9363", "email": "Rina@massa.us", "address": "44051 East Finland Way", "city": "Blacksburg", "state": "SC", "date": { "$date": "1967-01-28"}, "active": true }, { "name": "Kenyon Beck", "age": 22, "phone": "332-740-6217", "email": "Marvin@cursus.net", "address": "20731 East Indio Blvd.", "city": "El Segundo", "state": "UT", "date": { "$date": "1962-07-18"}, "active": true }, { "name": "Lillith Conway", "age": 38, "phone": "051-029-7589", "email": "Orson@magnis.us", "address": "1585 North Afghanistan Blvd.", "city": "Newark", "state": "FL", "date": { "$date": "1962-02-23"}, "active": true }, { "name": "Kyra Weeks", "age": 53, "phone": "654-029-5467", "email": "Alden@ac.com", "address": "53766 West Calabasas Ct.", "city": "Vallejo", "state": "OH", "date": { "$date": "1989-03-08"}, "active": false }, { "name": "Rigel Hicks", "age": 25, "phone": "267-711-8142", "email": "Malachi@at.org", "address": "22288 South Egypt St.", "city": "New York", "state": "GA", "date": { "$date": "1959-06-27"}, "active": false }, { "name": "Heidi Huffman", "age": 9, "phone": "649-094-8184", "email": "Ivana@magnis.com", "address": "57464 South Morocco Ln.", "city": "Sugar Land", "state": "OH", "date": { "$date": "1973-04-11"}, "active": true }, { "name": "Evelyn Mills", "age": 47, "phone": "312-623-5192", "email": "Quon@ridiculus.net", "address": "84036 North Saint Vincent and The Grenadines Ct.", "city": "Bandera", "state": "MD", "date": { "$date": "1964-11-13"}, "active": false }, { "name": "Imelda Bray", "age": 21, "phone": "540-969-6098", "email": "Mona@Class.net", "address": "72340 East Pottsville Ave.", "city": "Downey", "state": "KY", "date": { "$date": "1955-10-22"}, "active": true }, { "name": "Britanni Ochoa", "age": 60, "phone": "674-712-1895", "email": "Octavius@Suspendisse.com", "address": "30191 Djibouti Ave.", "city": "Grass Valley", "state": "NM", "date": { "$date": "1979-05-04"}, "active": true }, { "name": "Christine Warren", "age": 17, "phone": "787-498-8815", "email": "Amela@nibh.gov", "address": "51599 South Brunswick St.", "city": "Marquette", "state": "AL", "date": { "$date": "1966-08-30"}, "active": true }, { "name": "Lionel Maynard", "age": 55, "phone": "171-853-0705", "email": "Felicia@ultrices.gov", "address": "51939 North Bermuda Blvd.", "city": "Irvine", "state": "SD", "date": { "$date": "1951-05-06"}, "active": false }, { "name": "Owen Acevedo", "age": 32, "phone": "184-845-3606", "email": "Vernon@et.com", "address": "3319 West Columbus Ct.", "city": "Wheeling", "state": "NM", "date": { "$date": "1981-02-11"}, "active": true }, { "name": "Arsenio Boyle", "age": 35, "phone": "342-499-8982", "email": "Paloma@libero.us", "address": "17956 North Escondido Ave.", "city": "Corona", "state": "DC", "date": { "$date": "1984-12-28"}, "active": true }, { "name": "Linus Manning", "age": 18, "phone": "663-723-5599", "email": "Alec@Aliquam.org", "address": "99282 South College Park Ave.", "city": "La Verne", "state": "SD", "date": { "$date": "1954-09-07"}, "active": true }, { "name": "Xandra Holden", "age": 36, "phone": "173-491-3549", "email": "Baxter@venenatis.gov", "address": "52120 Portugal Way", "city": "Thibodaux", "state": "NJ", "date": { "$date": "1995-05-31"}, "active": true }, { "name": "Eagan Torres", "age": 68, "phone": "478-522-1697", "email": "Octavius@Nunc.org", "address": "32692 West Congo Blvd.", "city": "Waycross", "state": "AL", "date": { "$date": "1978-06-14"}, "active": true }, { "name": "Dana Yang", "age": 54, "phone": "392-160-0147", "email": "Roary@ad.us", "address": "97891 Brunei Darussalam Ln.", "city": "Maywood", "state": "IA", "date": { "$date": "1994-02-17"}, "active": true }, { "name": "Noel Park", "age": 47, "phone": "335-277-6014", "email": "Nissim@sollicitudin.us", "address": "47991 Thailand Way", "city": "Hickory", "state": "AK", "date": { "$date": "1998-07-24"}, "active": true }, { "name": "Holmes Bowman", "age": 39, "phone": "427-773-7389", "email": "Philip@Vestibulum.gov", "address": "46330 East Guthrie Ave.", "city": "Joplin", "state": "NE", "date": { "$date": "1976-04-03"}, "active": true }, { "name": "Cara Stokes", "age": 59, "phone": "066-244-9646", "email": "Marvin@lobortis.edu", "address": "22868 South Nicaragua Ln.", "city": "Palm Springs", "state": "MO", "date": { "$date": "1953-12-20"}, "active": true }, { "name": "Malcolm Valenzuela", "age": 41, "phone": "622-638-2627", "email": "Marvin@dolor.us", "address": "45263 Douglas Ct.", "city": "Jordan Valley", "state": "OK", "date": { "$date": "1963-09-14"}, "active": true }, { "name": "Maggie Snow", "age": 40, "phone": "774-350-0026", "email": "Vernon@tempus.gov", "address": "62967 West Benin St.", "city": "Valdez", "state": "TN", "date": { "$date": "1991-07-15"}, "active": true }, { "name": "Lawrence Haney", "age": 51, "phone": "966-473-6113", "email": "Palmer@sociis.us", "address": "36045 Chile Ave.", "city": "Harrisburg", "state": "WI", "date": { "$date": "1976-05-01"}, "active": false }, { "name": "Wendy Cotton", "age": 21, "phone": "178-812-4329", "email": "Joshua@Etiam.org", "address": "66747 West Andorra Ct.", "city": "Pittsfield", "state": "DC", "date": { "$date": "1987-11-03"}, "active": false }, { "name": "Jamal Mercado", "age": 5, "phone": "065-129-4602", "email": "Haviva@arcu.us", "address": "52912 East Congo Blvd.", "city": "Little Falls", "state": "OH", "date": { "$date": "2000-10-25"}, "active": false }, { "name": "Acton Schmidt", "age": 8, "phone": "492-771-4870", "email": "Xenos@sociosqu.us", "address": "82739 West Viet Nam Blvd.", "city": "Santa Ana", "state": "RI", "date": { "$date": "1997-05-01"}, "active": true }, { "name": "Kelly Andrews", "age": 28, "phone": "720-574-3758", "email": "Shaine@hymenaeos.com", "address": "69529 North Uruguay Way", "city": "Tulsa", "state": "MS", "date": { "$date": "1996-04-19"}, "active": true }, { "name": "Olga Frederick", "age": 35, "phone": "860-878-9356", "email": "Lydia@egestas.org", "address": "51802 North Heard Island and Mcdonald Islands Ave.", "city": "Gulfport", "state": "RI", "date": { "$date": "1984-03-25"}, "active": true }, { "name": "Ora James", "age": 56, "phone": "128-890-8252", "email": "Chanda@Fusce.gov", "address": "70172 East Saudi Arabia Blvd.", "city": "Webster Groves", "state": "IA", "date": { "$date": "1951-02-07"}, "active": true }, { "name": "Faith Mclaughlin", "age": 68, "phone": "943-137-5239", "email": "Herman@suscipit.gov", "address": "820 North Croatia St.", "city": "Monterey Park", "state": "NM", "date": { "$date": "1961-09-24"}, "active": true }, { "name": "Ifeoma Small", "age": 43, "phone": "550-660-8612", "email": "Rafael@sollicitudin.com", "address": "58558 Switzerland Ln.", "city": "Yigo", "state": "IL", "date": { "$date": "1980-08-31"}, "active": false }, { "name": "Jesse Mckinney", "age": 52, "phone": "650-929-2102", "email": "Sandra@fringilla.us", "address": "10453 North Camden Way", "city": "Scarborough", "state": "VA", "date": { "$date": "1970-07-19"}, "active": true }, { "name": "Colton Massey", "age": 47, "phone": "532-525-8765", "email": "Lisandra@at.us", "address": "13940 South Ecuador St.", "city": "Inglewood", "state": "IL", "date": { "$date": "1977-06-16"}, "active": true }, { "name": "Shay Hart", "age": 15, "phone": "589-703-4693", "email": "Rhiannon@facilisi.edu", "address": "77786 South Djibouti Ct.", "city": "Las Cruces", "state": "NV", "date": { "$date": "1963-11-30"}, "active": false }, { "name": "Armando Alford", "age": 61, "phone": "041-959-9493", "email": "Kirby@nec.com", "address": "51748 North American Samoa Ct.", "city": "Dana Point", "state": "NH", "date": { "$date": "1985-01-17"}, "active": true }, { "name": "Victor Kennedy", "age": 53, "phone": "256-277-7489", "email": "Kristen@condimentum.org", "address": "25664 West Malaysia Blvd.", "city": "Columbia", "state": "MA", "date": { "$date": "1956-08-02"}, "active": true }, { "name": "Conan Grimes", "age": 43, "phone": "561-342-9701", "email": "Vivien@cubilia.us", "address": "90487 New Caledonia Ave.", "city": "Wahoo", "state": "NC", "date": { "$date": "1993-08-08"}, "active": true }, { "name": "Flynn Kemp", "age": 45, "phone": "793-723-3495", "email": "Sopoline@taciti.edu", "address": "4124 Ephraim St.", "city": "Orangeburg", "state": "MI", "date": { "$date": "1988-09-20"}, "active": false }, { "name": "Carter Robertson", "age": 35, "phone": "303-010-8027", "email": "Hadley@suscipit.edu", "address": "16290 West Aguadilla Blvd.", "city": "Kansas City", "state": "KS", "date": { "$date": "1968-04-26"}, "active": true }, { "name": "Iliana Michael", "age": 28, "phone": "836-405-2872", "email": "Adele@cubilia.gov", "address": "22784 City of Industry Ln.", "city": "Iowa City", "state": "CO", "date": { "$date": "1955-03-11"}, "active": true }, { "name": "Curran Noble", "age": 6, "phone": "619-669-5673", "email": "Laurel@sagittis.net", "address": "99708 Idaho Falls Way", "city": "Reading", "state": "ND", "date": { "$date": "1955-01-04"}, "active": false }, { "name": "Kyle Clay", "age": 20, "phone": "413-309-5322", "email": "Janna@Curabitur.edu", "address": "67609 West Cameroon Blvd.", "city": "Dunkirk", "state": "MN", "date": { "$date": "1970-10-22"}, "active": true }, { "name": "Marcia Wade", "age": 61, "phone": "705-645-9166", "email": "Deanna@ac.com", "address": "94605 South Congo St.", "city": "Elkhart", "state": "NE", "date": { "$date": "1950-11-02"}, "active": false }, { "name": "Wesley Murphy", "age": 23, "phone": "273-283-5644", "email": "Debra@ullamcorper.us", "address": "42134 East Brunei Darussalam Ct.", "city": "Anchorage", "state": "SD", "date": { "$date": "1998-06-08"}, "active": true }, { "name": "Ima Bender", "age": 42, "phone": "213-359-9322", "email": "Raymond@dignissim.com", "address": "49346 Svalbard and Jan Mayen Ave.", "city": "Areceibo", "state": "RI", "date": { "$date": "1977-07-15"}, "active": true }, { "name": "Lyle Hobbs", "age": 51, "phone": "679-770-8123", "email": "Eve@at.net", "address": "49555 South Littleton Blvd.", "city": "Hastings", "state": "SD", "date": { "$date": "1968-06-22"}, "active": true }, { "name": "Dacey Hunter", "age": 50, "phone": "332-605-0132", "email": "Moses@ullamcorper.org", "address": "56668 North Andorra Ave.", "city": "City of Industry", "state": "MD", "date": { "$date": "1962-08-30"}, "active": true }, { "name": "Ivy Spencer", "age": 47, "phone": "024-370-5418", "email": "Barclay@Proin.gov", "address": "17197 East Baytown St.", "city": "North Charleston", "state": "NC", "date": { "$date": "1964-07-26"}, "active": false }, { "name": "Claudia Franks", "age": 20, "phone": "301-527-8971", "email": "Macy@ac.org", "address": "34185 North Chile St.", "city": "Grand Junction", "state": "MS", "date": { "$date": "1966-02-05"}, "active": false }, { "name": "Phillip Sims", "age": 53, "phone": "915-114-9522", "email": "Justine@non.net", "address": "13494 South Idaho Falls Blvd.", "city": "Spokane Valley", "state": "NH", "date": { "$date": "1956-05-03"}, "active": false }, { "name": "Marvin Vang", "age": 7, "phone": "587-147-5914", "email": "Camilla@lorem.us", "address": "23536 North Saint Lucia Way", "city": "Huntsville", "state": "NE", "date": { "$date": "1985-02-21"}, "active": true }, { "name": "Nyssa Smith", "age": 11, "phone": "559-848-9250", "email": "Connor@Sed.edu", "address": "13596 North Switzerland St.", "city": "Davis", "state": "ID", "date": { "$date": "1993-04-20"}, "active": true }, { "name": "Dillon Mueller", "age": 70, "phone": "845-676-9227", "email": "Alec@Sed.gov", "address": "19568 West Cook Islands Ct.", "city": "Jackson", "state": "KS", "date": { "$date": "1988-08-20"}, "active": true }, { "name": "Amena Carrillo", "age": 18, "phone": "040-043-5305", "email": "Philip@primis.com", "address": "15129 East Russian Federation St.", "city": "Port Jervis", "state": "OK", "date": { "$date": "1979-11-30"}, "active": true }, { "name": "Rama Dale", "age": 58, "phone": "500-889-0490", "email": "Denton@habitant.edu", "address": "17400 North Bangladesh St.", "city": "Rialto", "state": "CT", "date": { "$date": "1961-09-13"}, "active": true }, { "name": "Sacha Farley", "age": 13, "phone": "256-579-4844", "email": "Evangeline@Vivamus.us", "address": "41082 Qatar St.", "city": "Newton", "state": "WA", "date": { "$date": "1995-05-30"}, "active": true }, { "name": "Brian Chase", "age": 6, "phone": "768-544-1714", "email": "Erasmus@Proin.us", "address": "45400 East Antigua and Barbuda Ave.", "city": "Annapolis", "state": "CT", "date": { "$date": "2003-04-02"}, "active": true }, { "name": "Riley Pennington", "age": 6, "phone": "777-685-3097", "email": "Addison@hymenaeos.us", "address": "12009 South Netherlands Antilles Ave.", "city": "Perth Amboy", "state": "CA", "date": { "$date": "1984-01-30"}, "active": true }, { "name": "Skyler Conway", "age": 39, "phone": "937-795-9880", "email": "Abbot@lobortis.edu", "address": "81903 Oswego Blvd.", "city": "Easton", "state": "AZ", "date": { "$date": "1957-08-13"}, "active": true }, { "name": "Cullen Manning", "age": 51, "phone": "012-496-1549", "email": "Hadley@lobortis.edu", "address": "34115 South Muskegon Blvd.", "city": "Hannibal", "state": "MO", "date": { "$date": "1964-11-12"}, "active": true }, { "name": "Micah Wiley", "age": 7, "phone": "698-095-4843", "email": "Barclay@quam.net", "address": "10645 North Dickinson Ave.", "city": "Kent", "state": "WA", "date": { "$date": "1991-09-22"}, "active": false }, { "name": "Leonard Hansen", "age": 24, "phone": "506-624-6582", "email": "Risa@consectetuer.us", "address": "81758 South Latvia Blvd.", "city": "Webster Groves", "state": "KS", "date": { "$date": "1962-02-28"}, "active": true }, { "name": "Christine Stone", "age": 21, "phone": "104-526-2429", "email": "Ray@habitant.org", "address": "138 South Saint Pierre and Miquelon Ave.", "city": "Enfield", "state": "ND", "date": { "$date": "2001-03-05"}, "active": true }, { "name": "Erica Wallace", "age": 44, "phone": "728-784-3892", "email": "Ashton@Vivamus.edu", "address": "14628 Antarctica St.", "city": "Spartanburg", "state": "VA", "date": { "$date": "1989-09-05"}, "active": false }, { "name": "Lacey Morin", "age": 61, "phone": "837-666-7501", "email": "Ulla@taciti.com", "address": "90503 West Ethiopia St.", "city": "Lufkin", "state": "NY", "date": { "$date": "1965-03-17"}, "active": true }, { "name": "Maia Goff", "age": 49, "phone": "508-713-7375", "email": "Hop@Proin.org", "address": "24204 West Cape Verde St.", "city": "Trenton", "state": "CA", "date": { "$date": "1972-08-02"}, "active": true }, { "name": "Ahmed Wilkinson", "age": 32, "phone": "293-017-1991", "email": "Destiny@accumsan.org", "address": "69777 North Austria St.", "city": "Glendora", "state": "HI", "date": { "$date": "1953-04-04"}, "active": true }, { "name": "Ramona Lambert", "age": 15, "phone": "042-405-2617", "email": "Oliver@aliquam.org", "address": "30443 North Japan Ln.", "city": "Huntington Beach", "state": "WI", "date": { "$date": "1972-10-10"}, "active": true }, { "name": "Tyrone Hampton", "age": 41, "phone": "853-865-9713", "email": "Heather@Nam.gov", "address": "6721 North Marshall Islands Blvd.", "city": "Peru", "state": "DC", "date": { "$date": "1988-10-17"}, "active": true }, { "name": "Germaine Cotton", "age": 22, "phone": "317-458-8053", "email": "Fleur@montes.edu", "address": "73864 East Dominica Ln.", "city": "Webster Groves", "state": "DE", "date": { "$date": "1953-11-02"}, "active": true }, { "name": "Danielle Drake", "age": 8, "phone": "912-671-6670", "email": "Vernon@habitant.net", "address": "66580 Guam Blvd.", "city": "Vincennes", "state": "RI", "date": { "$date": "1971-10-13"}, "active": true }, { "name": "Travis Cox", "age": 60, "phone": "561-181-7917", "email": "Alma@vestibulum.edu", "address": "43590 East North Las Vegas Ct.", "city": "Mobile", "state": "ME", "date": { "$date": "1992-05-10"}, "active": false }, { "name": "Holmes Mccormick", "age": 74, "phone": "112-932-8419", "email": "Octavius@ultrices.gov", "address": "96096 West Monaco Ln.", "city": "Austin", "state": "NM", "date": { "$date": "2003-03-16"}, "active": false }, { "name": "Declan Wong", "age": 36, "phone": "399-117-2633", "email": "Keaton@ridiculus.gov", "address": "2325 Venezuela Way", "city": "Portland", "state": "MA", "date": { "$date": "1966-04-27"}, "active": true }, { "name": "Meghan Pruitt", "age": 70, "phone": "249-142-2408", "email": "Germaine@primis.com", "address": "42813 West Italy Ln.", "city": "Vancouver", "state": "CT", "date": { "$date": "1992-01-02"}, "active": false }, { "name": "Lamar Payne", "age": 35, "phone": "386-809-3300", "email": "Raphael@ullamcorper.com", "address": "24153 East Aruba Blvd.", "city": "Odessa", "state": "ND", "date": { "$date": "1961-10-10"}, "active": false }, { "name": "Bruno Donaldson", "age": 71, "phone": "785-433-4297", "email": "Len@montes.gov", "address": "16065 Heard Island and Mcdonald Islands Ct.", "city": "Ashland", "state": "DC", "date": { "$date": "1987-08-11"}, "active": false }, { "name": "Chava Harrison", "age": 47, "phone": "394-081-2706", "email": "Griffin@vel.com", "address": "62708 North Luxembourg Ct.", "city": "Beloit", "state": "AL", "date": { "$date": "1958-12-17"}, "active": true }, { "name": "Alexa Romero", "age": 13, "phone": "610-369-0804", "email": "Finn@consectetuer.gov", "address": "79896 Carbondale Ct.", "city": "Falls Church", "state": "NY", "date": { "$date": "1957-06-19"}, "active": true }, { "name": "Chaney Flores", "age": 56, "phone": "877-207-5000", "email": "Ria@Morbi.gov", "address": "28506 South Helena Blvd.", "city": "Anaconda", "state": "IN", "date": { "$date": "1983-05-20"}, "active": true }, { "name": "Moses Trujillo", "age": 37, "phone": "660-962-6911", "email": "Alana@ut.org", "address": "89605 Jamaica Ct.", "city": "Superior", "state": "DE", "date": { "$date": "1960-02-09"}, "active": true }, { "name": "Sybil Nielsen", "age": 36, "phone": "460-883-3206", "email": "Colt@vulputate.net", "address": "76401 North Gabon Blvd.", "city": "Rohnert Park", "state": "CO", "date": { "$date": "1977-05-06"}, "active": false }, { "name": "Lucian Hayden", "age": 71, "phone": "653-653-5131", "email": "Abigail@pellentesque.org", "address": "60462 South Mali Ct.", "city": "Gilbert", "state": "SD", "date": { "$date": "2003-09-15"}, "active": true }, { "name": "Macey Cotton", "age": 11, "phone": "578-471-0049", "email": "Lamar@Cras.us", "address": "68721 West Pakistan Way", "city": "Eugene", "state": "PA", "date": { "$date": "1953-08-24"}, "active": false }, { "name": "Burton Pennington", "age": 28, "phone": "057-866-3054", "email": "Nero@felis.org", "address": "59985 Malawi Way", "city": "Vancouver", "state": "WA", "date": { "$date": "1983-02-28"}, "active": true }, { "name": "Melissa Knox", "age": 56, "phone": "408-518-0086", "email": "Thaddeus@aliquet.com", "address": "64469 North Platte Blvd.", "city": "Vail", "state": "MN", "date": { "$date": "1951-02-04"}, "active": true }, { "name": "Amethyst Marsh", "age": 28, "phone": "813-176-3111", "email": "Jade@varius.org", "address": "23992 Leominster Blvd.", "city": "Somerville", "state": "IN", "date": { "$date": "1962-02-26"}, "active": true }, { "name": "Heather Lindsey", "age": 18, "phone": "635-332-7567", "email": "Darryl@montes.com", "address": "48954 North Belarus Ln.", "city": "Muncie", "state": "NY", "date": { "$date": "1955-07-12"}, "active": false }, { "name": "Rama Walls", "age": 47, "phone": "258-217-0982", "email": "Ainsley@libero.gov", "address": "33036 Christmas Island Way", "city": "Guthrie", "state": "WA", "date": { "$date": "1965-01-22"}, "active": true }, { "name": "Martina Vargas", "age": 26, "phone": "813-416-9673", "email": "Mari@aliquet.org", "address": "4195 North Guinea-bissau Ave.", "city": "Miami Gardens", "state": "NJ", "date": { "$date": "1973-06-08"}, "active": true }, { "name": "Keaton Terry", "age": 25, "phone": "852-715-0803", "email": "Maile@justo.us", "address": "10434 North Modesto Ct.", "city": "Evanston", "state": "MT", "date": { "$date": "1985-10-18"}, "active": true }, { "name": "Kenyon Ashley", "age": 17, "phone": "121-756-0702", "email": "Ryan@sem.gov", "address": "80868 South Namibia Ln.", "city": "Farmington", "state": "DE", "date": { "$date": "1992-02-20"}, "active": true }, { "name": "Jayme Cox", "age": 19, "phone": "242-266-4403", "email": "Linus@dapibus.us", "address": "41347 South Bermuda Way", "city": "Santa Monica", "state": "NE", "date": { "$date": "1959-09-23"}, "active": false }, { "name": "Brady Warner", "age": 8, "phone": "485-846-8462", "email": "Hamish@congue.org", "address": "52482 Bulgaria Ln.", "city": "Hickory", "state": "MA", "date": { "$date": "1979-07-27"}, "active": true }, { "name": "Hanna Bowers", "age": 13, "phone": "022-747-1587", "email": "Tiger@urna.us", "address": "93255 Netherlands Ln.", "city": "Chester", "state": "AK", "date": { "$date": "1964-02-03"}, "active": false }, { "name": "Illiana Walsh", "age": 69, "phone": "066-808-6159", "email": "Luke@per.edu", "address": "23206 North Pakistan Blvd.", "city": "Middlebury", "state": "GA", "date": { "$date": "1970-09-09"}, "active": true }, { "name": "Baxter Adkins", "age": 68, "phone": "927-611-3320", "email": "Guy@senectus.us", "address": "12763 North Saudi Arabia Blvd.", "city": "Reno", "state": "LA", "date": { "$date": "1998-07-29"}, "active": true }, { "name": "Howard Golden", "age": 37, "phone": "709-518-8817", "email": "Xaviera@dignissim.com", "address": "50489 North Cayman Islands Ct.", "city": "Zanesville", "state": "NE", "date": { "$date": "1970-11-22"}, "active": true }, { "name": "Rylee Gross", "age": 12, "phone": "494-838-8317", "email": "Rhea@libero.net", "address": "73843 North Bahamas Ct.", "city": "Charlottesville", "state": "PA", "date": { "$date": "1954-04-26"}, "active": true }, { "name": "Erich Sutton", "age": 50, "phone": "850-180-0787", "email": "Kylan@sapien.org", "address": "64796 North Nauru St.", "city": "Uniontown", "state": "CO", "date": { "$date": "2003-07-30"}, "active": true }, { "name": "Nell Pope", "age": 71, "phone": "331-212-8791", "email": "Yvette@Curae.net", "address": "55537 Baton Rouge St.", "city": "Lakeland", "state": "FL", "date": { "$date": "1982-03-03"}, "active": false }, { "name": "Tanisha Mayer", "age": 69, "phone": "556-330-8221", "email": "Hillary@aliquet.gov", "address": "54131 Chad Ave.", "city": "Hattiesburg", "state": "AL", "date": { "$date": "1957-08-18"}, "active": true }, { "name": "Autumn Howard", "age": 29, "phone": "422-931-6755", "email": "Leo@suscipit.org", "address": "16738 East Korea Way", "city": "Parker", "state": "WY", "date": { "$date": "1987-03-29"}, "active": true }, { "name": "Chaney Wynn", "age": 58, "phone": "135-575-0951", "email": "Carly@elit.us", "address": "97999 West Ethiopia Blvd.", "city": "Charleston", "state": "NM", "date": { "$date": "1969-07-17"}, "active": true }, { "name": "Yoko Durham", "age": 60, "phone": "185-324-7401", "email": "Drake@metus.com", "address": "29654 Central African Republic Way", "city": "Hastings", "state": "ID", "date": { "$date": "1957-04-01"}, "active": true }, { "name": "Clarke Ellis", "age": 45, "phone": "985-556-3199", "email": "Cora@felis.org", "address": "24509 South Benin Blvd.", "city": "Garland", "state": "NY", "date": { "$date": "1984-05-01"}, "active": true }, { "name": "Shana Cox", "age": 57, "phone": "867-809-2520", "email": "Dominique@eu.net", "address": "52139 East Togo Ave.", "city": "Plainfield", "state": "WI", "date": { "$date": "2002-05-25"}, "active": true }, { "name": "Dalton Stuart", "age": 36, "phone": "329-511-7391", "email": "Cameran@euismod.net", "address": "13908 Colombia Ct.", "city": "Hamilton", "state": "NH", "date": { "$date": "1971-12-17"}, "active": true }, { "name": "Jonah Nelson", "age": 30, "phone": "288-851-7936", "email": "McKenzie@gravida.edu", "address": "19961 South Brunei Darussalam Ln.", "city": "San Bernardino", "state": "TN", "date": { "$date": "1984-08-31"}, "active": true }, { "name": "Petra Sexton", "age": 25, "phone": "138-886-8462", "email": "Maisie@libero.edu", "address": "48878 East Bouvet Island Way", "city": "Needham", "state": "OR", "date": { "$date": "1952-04-02"}, "active": false }, { "name": "Morgan Mueller", "age": 44, "phone": "186-563-0047", "email": "Audrey@vehicula.com", "address": "58584 North Bradbury St.", "city": "Gettysburg", "state": "MI", "date": { "$date": "1959-04-11"}, "active": true }, { "name": "Lester Rosa", "age": 11, "phone": "021-386-2377", "email": "Howard@ullamcorper.net", "address": "83820 North Bulgaria Blvd.", "city": "Tok", "state": "IL", "date": { "$date": "1990-12-18"}, "active": true }, { "name": "Jacob Morales", "age": 46, "phone": "727-286-4127", "email": "Aline@mauris.edu", "address": "13734 East Tuvalu Ln.", "city": "New Albany", "state": "WA", "date": { "$date": "1961-08-17"}, "active": true }, { "name": "Lane Becker", "age": 46, "phone": "708-106-1237", "email": "Mercedes@mi.net", "address": "68036 Viet Nam Blvd.", "city": "Raleigh", "state": "VT", "date": { "$date": "1959-09-14"}, "active": true }, { "name": "Eve Carter", "age": 69, "phone": "344-390-7665", "email": "Cadman@tempus.com", "address": "88050 South Germany Ave.", "city": "Birmingham", "state": "ND", "date": { "$date": "1971-06-04"}, "active": true }, { "name": "Barrett Waters", "age": 54, "phone": "972-976-4487", "email": "Ira@nec.us", "address": "67060 East Algeria Ave.", "city": "Omaha", "state": "NV", "date": { "$date": "1987-06-23"}, "active": false }, { "name": "Adara Wilson", "age": 49, "phone": "594-148-8766", "email": "Shaine@pretium.gov", "address": "22440 South Guthrie Way", "city": "Thiensville", "state": "SD", "date": { "$date": "1951-12-22"}, "active": true }, { "name": "Felicia Horne", "age": 65, "phone": "199-724-3321", "email": "Cameran@magna.edu", "address": "21424 South French Guiana Ln.", "city": "Arvada", "state": "MO", "date": { "$date": "2002-05-21"}, "active": true }, { "name": "Valentine Moses", "age": 62, "phone": "395-134-4382", "email": "Isaiah@eget.com", "address": "49407 Germany St.", "city": "Bethany", "state": "KY", "date": { "$date": "1978-04-16"}, "active": false }, { "name": "Hanna Sheppard", "age": 12, "phone": "506-276-6296", "email": "Perry@lacinia.net", "address": "1132 South Namibia Way", "city": "Barre", "state": "WA", "date": { "$date": "1995-07-29"}, "active": true }, { "name": "Tatiana Mercer", "age": 5, "phone": "146-007-0805", "email": "Chase@molestie.us", "address": "3286 East Bradford Way", "city": "Laguna Beach", "state": "NE", "date": { "$date": "1957-02-07"}, "active": true }, { "name": "Rhoda Maldonado", "age": 70, "phone": "798-678-5200", "email": "Hayley@fermentum.us", "address": "54280 South Camden Way", "city": "Zanesville", "state": "SD", "date": { "$date": "1952-11-01"}, "active": false }, { "name": "Samson Ford", "age": 22, "phone": "269-003-9991", "email": "Addison@mus.gov", "address": "33375 East Modesto Way", "city": "Irving", "state": "FL", "date": { "$date": "1958-04-18"}, "active": false }, { "name": "Justina Puckett", "age": 9, "phone": "225-597-5074", "email": "Yoshio@convallis.edu", "address": "18291 South Madison Ave.", "city": "Waukegan", "state": "ID", "date": { "$date": "1980-11-09"}, "active": true }, { "name": "Quyn Oliver", "age": 35, "phone": "287-360-5131", "email": "Tyrone@dis.gov", "address": "4456 Uganda Blvd.", "city": "Covington", "state": "NJ", "date": { "$date": "1999-04-05"}, "active": true }, { "name": "Walker Holmes", "age": 25, "phone": "386-281-5578", "email": "Vivien@Lorem.com", "address": "35354 Ecuador St.", "city": "San Luis Obispo", "state": "IL", "date": { "$date": "1968-09-26"}, "active": false }, { "name": "William Daniels", "age": 18, "phone": "250-523-7122", "email": "Sigourney@molestie.us", "address": "90782 South Belarus Ln.", "city": "Huntington Beach", "state": "ME", "date": { "$date": "1995-07-26"}, "active": true }, { "name": "Norman Foster", "age": 9, "phone": "451-417-4634", "email": "Guinevere@sodales.net", "address": "53131 United States Minor Outlying Islands Ln.", "city": "Catskill", "state": "OH", "date": { "$date": "1982-10-09"}, "active": true }, { "name": "Trevor Shaw", "age": 43, "phone": "547-590-0269", "email": "Howard@Class.gov", "address": "55756 South Hopkinsville St.", "city": "Ocean City", "state": "SC", "date": { "$date": "1998-08-29"}, "active": true }, { "name": "Hyatt Rivera", "age": 71, "phone": "894-052-7236", "email": "Caldwell@mollis.us", "address": "67869 Niue Blvd.", "city": "Appleton", "state": "VA", "date": { "$date": "1995-03-02"}, "active": true }, { "name": "Leigh Lane", "age": 60, "phone": "261-499-3905", "email": "Pandora@Vivamus.com", "address": "5689 South Wallis and Futuna Ct.", "city": "Lexington", "state": "TN", "date": { "$date": "1964-03-17"}, "active": true }, { "name": "Kyle Dillard", "age": 14, "phone": "568-756-8347", "email": "Anne@erat.us", "address": "6742 North Bolivia Ct.", "city": "Orlando", "state": "NJ", "date": { "$date": "1956-12-29"}, "active": true }, { "name": "Rowan Rowe", "age": 30, "phone": "866-500-8363", "email": "Asher@porttitor.net", "address": "61066 West Northern Mariana Islands Ct.", "city": "Mobile", "state": "MA", "date": { "$date": "1980-01-05"}, "active": true }, { "name": "Cara Hall", "age": 50, "phone": "662-492-7907", "email": "Barrett@senectus.us", "address": "30165 East Burkina Faso Ln.", "city": "Cranston", "state": "AL", "date": { "$date": "1951-06-10"}, "active": true }, { "name": "Uriel Barton", "age": 11, "phone": "940-799-9739", "email": "Reed@Ut.org", "address": "37448 West Kuwait Ln.", "city": "Wahoo", "state": "IN", "date": { "$date": "1998-06-23"}, "active": true }, { "name": "Keefe Ellison", "age": 70, "phone": "827-548-4413", "email": "Colorado@pharetra.net", "address": "33536 East Goose Creek Ct.", "city": "Wilmington", "state": "KS", "date": { "$date": "1990-05-23"}, "active": false }, { "name": "Hilda Odom", "age": 51, "phone": "524-364-0009", "email": "Wayne@varius.net", "address": "78582 Butler Ln.", "city": "Bandera", "state": "WI", "date": { "$date": "1965-02-17"}, "active": true }, { "name": "Jonah Rogers", "age": 63, "phone": "708-408-8297", "email": "Preston@ac.org", "address": "19770 West Algeria Ave.", "city": "Branson", "state": "KS", "date": { "$date": "1961-08-05"}, "active": true }, { "name": "Lisandra Norman", "age": 43, "phone": "489-890-2326", "email": "Griffith@netus.us", "address": "57229 North East Rutherford Blvd.", "city": "Tampa", "state": "NV", "date": { "$date": "1964-06-22"}, "active": true }, { "name": "Jack Benjamin", "age": 55, "phone": "028-767-1981", "email": "Dahlia@iaculis.edu", "address": "46431 South Portugal Blvd.", "city": "Auburn Hills", "state": "VT", "date": { "$date": "1955-08-07"}, "active": true }, { "name": "Salvador Howe", "age": 40, "phone": "635-216-3026", "email": "Alan@nostra.com", "address": "1059 West Bremerton Ct.", "city": "New Castle", "state": "VA", "date": { "$date": "1972-08-25"}, "active": true }, { "name": "Stephen Wilcox", "age": 26, "phone": "991-348-9994", "email": "Kristen@molestie.edu", "address": "65313 Albania Way", "city": "St. Marys", "state": "ND", "date": { "$date": "1958-12-12"}, "active": false }, { "name": "Wallace Horne", "age": 26, "phone": "075-020-6202", "email": "Allistair@Aliquam.edu", "address": "54821 Malibu Ct.", "city": "Rutland", "state": "KY", "date": { "$date": "1987-05-11"}, "active": false }, { "name": "Thaddeus Mcknight", "age": 34, "phone": "329-216-0888", "email": "Reagan@porttitor.us", "address": "48718 Guinea-bissau Ct.", "city": "Two Rivers", "state": "AK", "date": { "$date": "1991-01-08"}, "active": false }, { "name": "Quamar Spears", "age": 51, "phone": "172-823-6841", "email": "Howard@at.us", "address": "91688 West Jackson Ln.", "city": "Vallejo", "state": "SC", "date": { "$date": "1971-07-21"}, "active": true }, { "name": "Burke Garza", "age": 40, "phone": "262-631-9628", "email": "Cameran@penatibus.org", "address": "43423 North Gabon Ln.", "city": "South Bend", "state": "FL", "date": { "$date": "1979-05-18"}, "active": false }, { "name": "Malik Grimes", "age": 15, "phone": "976-796-8635", "email": "Felicia@penatibus.gov", "address": "72300 North Hackensack Ave.", "city": "South Bend", "state": "NV", "date": { "$date": "1955-11-29"}, "active": true }, { "name": "Cade Sharp", "age": 18, "phone": "379-356-9944", "email": "Tatyana@dui.net", "address": "73083 South Arvada Ln.", "city": "Orlando", "state": "OH", "date": { "$date": "1996-01-23"}, "active": true }, { "name": "Vivian Ray", "age": 32, "phone": "734-050-4066", "email": "Felicia@arcu.edu", "address": "7380 Macedonia Ct.", "city": "Loudon", "state": "KS", "date": { "$date": "2001-10-28"}, "active": true }, { "name": "Aladdin Avila", "age": 29, "phone": "825-161-0870", "email": "Kirsten@iaculis.us", "address": "94655 Monaco St.", "city": "Wilmington", "state": "MO", "date": { "$date": "1979-08-21"}, "active": true }, { "name": "Joseph Burnett", "age": 20, "phone": "552-109-6902", "email": "Garrison@eros.us", "address": "86694 North Andorra Ave.", "city": "Macomb", "state": "AK", "date": { "$date": "2001-11-23"}, "active": true }, { "name": "Lavinia Alexander", "age": 17, "phone": "956-121-9412", "email": "James@inceptos.net", "address": "24639 East Saint Kitts and Nevis Blvd.", "city": "Minneapolis", "state": "TX", "date": { "$date": "2000-01-18"}, "active": true }, { "name": "Inez Davidson", "age": 48, "phone": "968-673-9571", "email": "Desiree@Class.com", "address": "50621 Christmas Island Blvd.", "city": "Binghamton", "state": "CT", "date": { "$date": "1980-05-29"}, "active": true }, { "name": "Cecilia Chase", "age": 45, "phone": "551-297-8460", "email": "Kai@Class.edu", "address": "9363 West Hartland St.", "city": "Opelousas", "state": "MT", "date": { "$date": "1987-06-18"}, "active": true }, { "name": "Lareina Carroll", "age": 39, "phone": "962-682-4620", "email": "Thaddeus@venenatis.edu", "address": "17506 North Philippines Ct.", "city": "Mankato", "state": "IA", "date": { "$date": "2003-05-11"}, "active": true }, { "name": "Ingrid Bradshaw", "age": 48, "phone": "209-816-9997", "email": "Stuart@Praesent.edu", "address": "21367 East Saint Helena Way", "city": "Fort Dodge", "state": "AK", "date": { "$date": "1955-06-24"}, "active": true }, { "name": "Davis Herring", "age": 63, "phone": "878-666-9330", "email": "Brenden@consequat.us", "address": "66823 Saint Pierre and Miquelon Ct.", "city": "Ogden", "state": "NE", "date": { "$date": "1955-09-17"}, "active": false }, { "name": "Bevis House", "age": 20, "phone": "588-715-1714", "email": "Warren@porta.org", "address": "90292 South Delta Junction St.", "city": "Needham", "state": "TN", "date": { "$date": "1993-04-17"}, "active": true }, { "name": "Marny Townsend", "age": 13, "phone": "583-003-7776", "email": "Yvonne@feugiat.edu", "address": "64240 North Turkmenistan Ln.", "city": "Springdale", "state": "CO", "date": { "$date": "1997-08-08"}, "active": false }, { "name": "Colt Newman", "age": 26, "phone": "597-811-2980", "email": "Eagan@velit.gov", "address": "43799 Armenia Ct.", "city": "Oil City", "state": "AK", "date": { "$date": "1983-05-10"}, "active": true }, { "name": "Abdul Langley", "age": 9, "phone": "066-852-8781", "email": "Cathleen@eleifend.us", "address": "53867 East Bahrain Ave.", "city": "Chattanooga", "state": "NE", "date": { "$date": "1962-09-25"}, "active": true }, { "name": "Danielle Hinton", "age": 45, "phone": "935-410-8592", "email": "Jessica@Etiam.com", "address": "54778 West Costa Rica Blvd.", "city": "Muncie", "state": "SD", "date": { "$date": "1954-09-12"}, "active": false }, { "name": "Christian Meyer", "age": 42, "phone": "830-897-5986", "email": "Berk@libero.edu", "address": "37164 East Canada Ct.", "city": "Moorhead", "state": "NH", "date": { "$date": "1955-01-22"}, "active": true }, { "name": "Kato Mcfarland", "age": 62, "phone": "129-517-3412", "email": "Benjamin@mollis.net", "address": "19873 Oak Ridge Ct.", "city": "Boulder", "state": "CO", "date": { "$date": "1964-09-15"}, "active": true }, { "name": "Tashya Johnson", "age": 75, "phone": "071-749-0596", "email": "Eaton@cubilia.us", "address": "38513 North Micronesia Ln.", "city": "Beaver Falls", "state": "KY", "date": { "$date": "1997-10-28"}, "active": true }, { "name": "Ishmael Floyd", "age": 67, "phone": "651-861-4071", "email": "Kadeem@Suspendisse.us", "address": "72766 Afghanistan Ave.", "city": "Boulder", "state": "OK", "date": { "$date": "1965-02-21"}, "active": true }, { "name": "Price Holder", "age": 19, "phone": "651-000-7122", "email": "Uta@Nulla.edu", "address": "36584 East Antarctica Ln.", "city": "Thousand Oaks", "state": "AZ", "date": { "$date": "1983-06-29"}, "active": false }, { "name": "Quin Noble", "age": 25, "phone": "821-161-9159", "email": "Hayes@mollis.edu", "address": "6682 Uganda St.", "city": "Sutter Creek", "state": "ID", "date": { "$date": "1983-09-07"}, "active": true }, { "name": "Tyler Mendez", "age": 64, "phone": "667-130-9519", "email": "Uriel@ac.us", "address": "832 Tonga Blvd.", "city": "Enfield", "state": "HI", "date": { "$date": "1978-01-27"}, "active": true }, { "name": "Olivia Cooper", "age": 18, "phone": "599-338-6977", "email": "Pandora@magna.us", "address": "81866 South Hermosa Beach St.", "city": "Murfreesboro", "state": "PA", "date": { "$date": "1975-01-27"}, "active": false }, { "name": "Ella Davenport", "age": 11, "phone": "253-078-5232", "email": "Idola@mauris.edu", "address": "61897 East Aruba Way", "city": "Brownsville", "state": "IL", "date": { "$date": "2002-04-07"}, "active": true }, { "name": "Amaya Hull", "age": 73, "phone": "864-011-5091", "email": "Branden@hymenaeos.net", "address": "97486 Bowie Ln.", "city": "White Plains", "state": "NE", "date": { "$date": "1966-06-30"}, "active": true }, { "name": "Amena Serrano", "age": 33, "phone": "325-425-0015", "email": "Graiden@nunc.net", "address": "25002 Qatar St.", "city": "Sheboygan", "state": "OH", "date": { "$date": "1999-12-12"}, "active": true }, { "name": "Uta Moss", "age": 62, "phone": "323-026-9017", "email": "Lewis@litora.com", "address": "58644 East Carbondale Way", "city": "Agat", "state": "ID", "date": { "$date": "1953-08-03"}, "active": true }, { "name": "Nehru Charles", "age": 23, "phone": "585-933-6989", "email": "April@a.gov", "address": "75641 South Turkmenistan Way", "city": "Rock Springs", "state": "CO", "date": { "$date": "1985-09-30"}, "active": true }, { "name": "Yvonne Wise", "age": 53, "phone": "345-257-7994", "email": "Moana@venenatis.com", "address": "72757 North Aruba Blvd.", "city": "East Rutherford", "state": "KY", "date": { "$date": "1975-06-26"}, "active": true }, { "name": "Lucas Cooper", "age": 54, "phone": "563-457-8902", "email": "Richard@nisi.org", "address": "17600 Madagascar Way", "city": "Boulder Junction", "state": "MT", "date": { "$date": "1995-03-21"}, "active": false }, { "name": "April Foster", "age": 70, "phone": "569-228-6883", "email": "Zelda@arcu.gov", "address": "29787 Mankato Ave.", "city": "Coatesville", "state": "PA", "date": { "$date": "1997-03-28"}, "active": true }, { "name": "Ian Mcknight", "age": 39, "phone": "123-802-5373", "email": "Hermione@aptent.org", "address": "75725 North Charlotte Amalie Ct.", "city": "Chula Vista", "state": "OH", "date": { "$date": "1978-10-10"}, "active": false }, { "name": "Sybill Patel", "age": 47, "phone": "792-165-8723", "email": "Hashim@ligula.org", "address": "72188 West South Africa Blvd.", "city": "North Chicago", "state": "MN", "date": { "$date": "1969-02-23"}, "active": true }, { "name": "Jermaine Rosales", "age": 24, "phone": "400-848-6794", "email": "Maile@imperdiet.us", "address": "32622 East Joliet Ln.", "city": "Farmington", "state": "OK", "date": { "$date": "1995-01-14"}, "active": true }, { "name": "Aimee Schroeder", "age": 25, "phone": "763-952-3334", "email": "Cairo@lorem.net", "address": "98831 South Christmas Island Ave.", "city": "Peoria", "state": "VA", "date": { "$date": "1982-06-19"}, "active": true }, { "name": "Illana Dunn", "age": 47, "phone": "330-754-1530", "email": "Troy@luctus.net", "address": "99363 North Barbados Blvd.", "city": "McAlester", "state": "HI", "date": { "$date": "1952-04-19"}, "active": true }, { "name": "Keith Barker", "age": 47, "phone": "151-518-1395", "email": "Delilah@tempor.org", "address": "29738 East Palau St.", "city": "Mentor", "state": "IL", "date": { "$date": "1985-07-22"}, "active": true }, { "name": "Yael Richard", "age": 75, "phone": "532-298-3598", "email": "Cody@nostra.edu", "address": "80104 North Biddeford Way", "city": "Clearwater", "state": "AZ", "date": { "$date": "1994-08-29"}, "active": true }, { "name": "Austin Hahn", "age": 10, "phone": "456-792-5138", "email": "Erich@massa.us", "address": "40299 West Macao Blvd.", "city": "North Las Vegas", "state": "IL", "date": { "$date": "1964-10-24"}, "active": true }, { "name": "Duncan Burns", "age": 57, "phone": "386-622-0561", "email": "Halee@nonummy.edu", "address": "88012 Cook Islands Ave.", "city": "Glen Cove", "state": "WA", "date": { "$date": "1996-04-14"}, "active": false }, { "name": "Libby Dalton", "age": 11, "phone": "325-552-8049", "email": "Kalia@felis.com", "address": "83165 South Guyana Ave.", "city": "Dalton", "state": "MN", "date": { "$date": "1973-03-28"}, "active": true }, { "name": "Nyssa Gould", "age": 43, "phone": "556-678-9489", "email": "Denton@gravida.gov", "address": "88677 Oman St.", "city": "Charleston", "state": "AK", "date": { "$date": "2000-02-25"}, "active": true }, { "name": "Holly George", "age": 39, "phone": "597-820-6522", "email": "Stewart@ultrices.com", "address": "36622 South Niue Blvd.", "city": "Newark", "state": "VT", "date": { "$date": "1993-08-14"}, "active": true }, { "name": "Sonya Griffith", "age": 11, "phone": "070-995-1297", "email": "Stuart@velit.net", "address": "9954 South Niagara Falls Ct.", "city": "Marlborough", "state": "NM", "date": { "$date": "1956-03-09"}, "active": true }, { "name": "Yuli Dickerson", "age": 22, "phone": "665-018-4968", "email": "Dylan@Morbi.org", "address": "76672 West Hamilton St.", "city": "Slidell", "state": "NC", "date": { "$date": "1965-06-12"}, "active": true }, { "name": "Yvette Mays", "age": 50, "phone": "188-416-2246", "email": "Aline@dapibus.us", "address": "85885 West Bahamas Ave.", "city": "Merizo", "state": "ID", "date": { "$date": "2000-04-15"}, "active": true }, { "name": "Marny Pope", "age": 43, "phone": "536-646-4267", "email": "Dennis@eros.us", "address": "95905 North Lebanon Ln.", "city": "Methuen", "state": "CO", "date": { "$date": "1979-12-20"}, "active": true }, { "name": "Caryn Mcclain", "age": 67, "phone": "600-434-7349", "email": "Kibo@sociosqu.com", "address": "40084 Culver City St.", "city": "Kettering", "state": "MO", "date": { "$date": "1999-01-05"}, "active": true }, { "name": "Hedy Cardenas", "age": 22, "phone": "261-033-8840", "email": "Keelie@elementum.com", "address": "97152 East Netherlands Antilles Way", "city": "Covina", "state": "IA", "date": { "$date": "1956-08-30"}, "active": false }, { "name": "Nita Valenzuela", "age": 62, "phone": "783-060-6281", "email": "Tamekah@morbi.gov", "address": "42187 South Farmer City Blvd.", "city": "Webster Groves", "state": "KY", "date": { "$date": "1974-12-18"}, "active": false }, { "name": "Mollie Peters", "age": 34, "phone": "678-181-0340", "email": "Isabella@Class.us", "address": "93736 Lebanon Ct.", "city": "La Crosse", "state": "AZ", "date": { "$date": "1997-09-11"}, "active": true }, { "name": "Fuller Medina", "age": 14, "phone": "326-029-4111", "email": "Veda@felis.org", "address": "87286 French Polynesia Ave.", "city": "Hickory", "state": "ND", "date": { "$date": "1953-03-06"}, "active": true }, { "name": "Dean Bond", "age": 36, "phone": "829-957-0450", "email": "Orlando@metus.net", "address": "38003 North Chile Ct.", "city": "Nogales", "state": "CA", "date": { "$date": "1990-09-14"}, "active": true }, { "name": "Octavia Valdez", "age": 18, "phone": "407-029-6242", "email": "Nigel@pede.us", "address": "1415 North China St.", "city": "Santa Barbara", "state": "MI", "date": { "$date": "1973-10-13"}, "active": false }, { "name": "Tamara Morrison", "age": 17, "phone": "624-669-0421", "email": "Chase@sit.com", "address": "42412 West Pitcairn Way", "city": "San Juan Capistrano", "state": "MT", "date": { "$date": "2001-02-07"}, "active": true }, { "name": "Castor Doyle", "age": 73, "phone": "623-707-6933", "email": "Colleen@varius.com", "address": "41167 South Hermosa Beach Ln.", "city": "Rialto", "state": "ME", "date": { "$date": "1974-05-10"}, "active": true }, { "name": "Hayley Salas", "age": 20, "phone": "256-678-9757", "email": "Herman@eleifend.gov", "address": "68000 South Iraq St.", "city": "Baldwin Park", "state": "NY", "date": { "$date": "1988-04-08"}, "active": true }, { "name": "Ira Roach", "age": 41, "phone": "349-724-8405", "email": "Morgan@nisi.gov", "address": "20658 West Bahrain Ln.", "city": "Deadwood", "state": "CA", "date": { "$date": "1977-09-21"}, "active": true }, { "name": "Fay Vega", "age": 66, "phone": "409-941-6994", "email": "Gisela@libero.net", "address": "65281 South Russian Federation Way", "city": "Pine Bluff", "state": "TN", "date": { "$date": "1965-11-01"}, "active": true }, { "name": "Ross Everett", "age": 44, "phone": "075-856-4315", "email": "Jerry@Suspendisse.edu", "address": "75950 South Cambodia St.", "city": "Cape Coral", "state": "ID", "date": { "$date": "1973-08-21"}, "active": false }, { "name": "Ralph Whitaker", "age": 31, "phone": "864-786-2365", "email": "Brooke@pede.gov", "address": "84765 East Turks and Caicos Islands Ct.", "city": "Culver City", "state": "WA", "date": { "$date": "1965-10-13"}, "active": true }, { "name": "Jack Barrett", "age": 5, "phone": "894-969-6178", "email": "Dahlia@dis.gov", "address": "27184 South Cayman Islands Ln.", "city": "Lomita", "state": "MT", "date": { "$date": "1992-02-01"}, "active": true }, { "name": "Beau Casey", "age": 45, "phone": "980-535-4001", "email": "Hilel@magnis.org", "address": "38240 West Greenfield Ave.", "city": "Montpelier", "state": "IN", "date": { "$date": "1982-02-07"}, "active": false }, { "name": "Richard Logan", "age": 74, "phone": "290-432-9223", "email": "Quintessa@tortor.us", "address": "33322 West Slovakia Ave.", "city": "Greenfield", "state": "MS", "date": { "$date": "1993-10-23"}, "active": true }, { "name": "Indigo Bradley", "age": 59, "phone": "147-678-3392", "email": "Lacota@consectetuer.net", "address": "25771 South Rwanda Ave.", "city": "Basin", "state": "OH", "date": { "$date": "1961-11-21"}, "active": true }, { "name": "Lyle Oneill", "age": 36, "phone": "205-667-5739", "email": "Bertha@pretium.net", "address": "75714 East Lawton Ln.", "city": "Staunton", "state": "NV", "date": { "$date": "1960-01-29"}, "active": true }, { "name": "Kathleen Macias", "age": 71, "phone": "854-763-2695", "email": "Miriam@iaculis.net", "address": "94728 North Canada Blvd.", "city": "New Kensington", "state": "IL", "date": { "$date": "1981-01-06"}, "active": false }, { "name": "Oprah Garner", "age": 57, "phone": "772-285-9970", "email": "Noah@nonummy.edu", "address": "86247 North DeKalb Ave.", "city": "Bandon", "state": "LA", "date": { "$date": "1958-04-25"}, "active": true }, { "name": "Rashad Stafford", "age": 72, "phone": "369-511-8139", "email": "Lee@sit.com", "address": "42788 North Kenya Ave.", "city": "Danbury", "state": "OK", "date": { "$date": "1966-07-30"}, "active": false }, { "name": "Keegan Pate", "age": 18, "phone": "505-946-7967", "email": "Blythe@lorem.edu", "address": "22502 Iran", "city": "Islamic Republic of Way", "state": "DE", "date": { "$date": "1981-01-13"}, "active": true }, { "name": "Justina Bentley", "age": 52, "phone": "142-046-0629", "email": "Emerald@aliquam.org", "address": "70162 South Pakistan Blvd.", "city": "Placentia", "state": "ID", "date": { "$date": "1990-11-13"}, "active": true }, { "name": "September Mejia", "age": 75, "phone": "579-194-3234", "email": "Irma@mauris.us", "address": "50945 Gibraltar Way", "city": "Orange", "state": "CO", "date": { "$date": "1978-04-10"}, "active": true }, { "name": "Ingrid Lara", "age": 17, "phone": "786-769-7093", "email": "Colette@ullamcorper.net", "address": "90765 North Thailand Ave.", "city": "The Dalles", "state": "TX", "date": { "$date": "1970-12-18"}, "active": true }, { "name": "Aladdin Hopkins", "age": 52, "phone": "284-464-7264", "email": "Lamar@conubia.edu", "address": "42541 West Turks and Caicos Islands Ln.", "city": "Atlanta", "state": "NC", "date": { "$date": "1974-08-29"}, "active": true }, { "name": "Yael Martin", "age": 47, "phone": "462-158-8358", "email": "Lillian@lacinia.gov", "address": "43071 North Barbados Blvd.", "city": "Bandera", "state": "DE", "date": { "$date": "1999-07-29"}, "active": true }, { "name": "David Mccall", "age": 9, "phone": "092-219-0278", "email": "Miranda@litora.org", "address": "82836 West Kenya Way", "city": "Kearney", "state": "VA", "date": { "$date": "1994-02-20"}, "active": true }, { "name": "Bertha Barlow", "age": 71, "phone": "737-287-8528", "email": "Erin@aliquam.net", "address": "78983 East Lynwood St.", "city": "Chesapeake", "state": "KY", "date": { "$date": "1972-04-26"}, "active": true }, { "name": "Kenyon Silva", "age": 20, "phone": "774-631-0855", "email": "Abel@primis.us", "address": "5682 North Kingston Ct.", "city": "Long Beach", "state": "MA", "date": { "$date": "1994-06-28"}, "active": false }, { "name": "Justine Collins", "age": 46, "phone": "698-280-1158", "email": "Ramona@mauris.edu", "address": "35080 East Guatemala Blvd.", "city": "Centennial", "state": "IL", "date": { "$date": "2003-02-10"}, "active": false }, { "name": "Jaden Ortiz", "age": 66, "phone": "838-330-8126", "email": "Murphy@est.org", "address": "94215 North Jamaica Way", "city": "Kingston", "state": "MO", "date": { "$date": "1954-02-18"}, "active": true }, { "name": "Kiayada James", "age": 44, "phone": "462-607-1481", "email": "Janna@tellus.us", "address": "48722 East Belgium Ave.", "city": "Little Falls", "state": "MS", "date": { "$date": "1984-07-01"}, "active": true }, { "name": "Baker Brennan", "age": 32, "phone": "187-670-8408", "email": "Axel@lorem.com", "address": "70909 West Cook Islands Ave.", "city": "Lynn", "state": "WI", "date": { "$date": "1950-09-11"}, "active": true }, { "name": "Zahir Harmon", "age": 61, "phone": "019-795-6797", "email": "Demetrius@egestas.us", "address": "47433 Sierra Leone Blvd.", "city": "La Puente", "state": "NV", "date": { "$date": "1977-03-10"}, "active": true }, { "name": "Paki Weiss", "age": 37, "phone": "400-715-6214", "email": "Libby@mauris.com", "address": "87792 South Bessemer Way", "city": "Dayton", "state": "NV", "date": { "$date": "2004-08-17"}, "active": false }, { "name": "Aurelia Wilcox", "age": 60, "phone": "094-806-9049", "email": "Elliott@ultrices.us", "address": "82780 North Afghanistan Way", "city": "Hawthorne", "state": "TN", "date": { "$date": "1977-04-18"}, "active": true }, { "name": "Noble Beach", "age": 70, "phone": "560-938-5625", "email": "Theodore@in.us", "address": "31449 North Saint Lucia St.", "city": "Rancho Santa Margarita", "state": "ME", "date": { "$date": "1982-06-29"}, "active": true }, { "name": "Aaron Nguyen", "age": 61, "phone": "748-408-5708", "email": "Chastity@In.com", "address": "63049 North Belgium Ct.", "city": "Suffolk", "state": "PA", "date": { "$date": "1953-05-15"}, "active": false }, { "name": "Paki Porter", "age": 34, "phone": "488-635-7936", "email": "Patience@tristique.com", "address": "77213 East Albania Ln.", "city": "Grand Rapids", "state": "NC", "date": { "$date": "1970-02-15"}, "active": true }, { "name": "Stacey Rush", "age": 65, "phone": "542-219-2592", "email": "Vera@urna.net", "address": "6325 East Pakistan Way", "city": "Lafayette", "state": "AL", "date": { "$date": "1992-05-08"}, "active": true }, { "name": "Finn Collins", "age": 52, "phone": "008-710-0247", "email": "Seth@aliquam.us", "address": "22061 Antigua and Barbuda St.", "city": "Scottsdale", "state": "MI", "date": { "$date": "1999-04-09"}, "active": false }, { "name": "Kitra Carroll", "age": 37, "phone": "286-061-2328", "email": "Evan@sociosqu.com", "address": "80029 South Chad Blvd.", "city": "Shelton", "state": "ME", "date": { "$date": "1975-09-07"}, "active": true }, { "name": "Kasper Dixon", "age": 47, "phone": "779-971-4502", "email": "Mia@aptent.gov", "address": "1207 United States Minor Outlying Islands Way", "city": "Kennewick", "state": "NC", "date": { "$date": "1978-11-18"}, "active": true }, { "name": "Harding Ramsey", "age": 34, "phone": "885-545-8232", "email": "Jenette@est.org", "address": "50607 North New Brunswick Ct.", "city": "Fajardo", "state": "NY", "date": { "$date": "1991-01-17"}, "active": false }, { "name": "Lillith Wright", "age": 37, "phone": "580-141-3231", "email": "Abraham@vehicula.us", "address": "18919 East Spain Ct.", "city": "Denver", "state": "CA", "date": { "$date": "2002-07-21"}, "active": true }, { "name": "Todd Brady", "age": 65, "phone": "096-288-2937", "email": "Brendan@Lorem.net", "address": "24397 High Point Blvd.", "city": "Thibodaux", "state": "IA", "date": { "$date": "1961-10-09"}, "active": true }, { "name": "Victor Mckenzie", "age": 65, "phone": "074-066-3219", "email": "Nayda@volutpat.us", "address": "32771 West Heard Island and Mcdonald Islands St.", "city": "Bay St. Louis", "state": "NJ", "date": { "$date": "1982-01-17"}, "active": true }, { "name": "Josiah Barber", "age": 40, "phone": "997-957-1386", "email": "Geraldine@natoque.gov", "address": "8516 South Canada Ave.", "city": "Enfield", "state": "MT", "date": { "$date": "1959-03-12"}, "active": true }, { "name": "Hall Bauer", "age": 67, "phone": "542-171-5100", "email": "Aretha@fermentum.com", "address": "15032 West Murray Ave.", "city": "Aspen", "state": "ME", "date": { "$date": "1955-05-16"}, "active": false }, { "name": "Talon Munoz", "age": 47, "phone": "896-752-9509", "email": "Hashim@sollicitudin.net", "address": "94643 Solomon Islands Way", "city": "Rye", "state": "ND", "date": { "$date": "1993-06-02"}, "active": false }, { "name": "Irene Dotson", "age": 38, "phone": "653-006-3698", "email": "Scott@dignissim.com", "address": "8342 East Saudi Arabia Blvd.", "city": "Durant", "state": "NM", "date": { "$date": "1950-01-16"}, "active": true }, { "name": "Brady Rojas", "age": 60, "phone": "928-544-6670", "email": "Sydnee@felis.gov", "address": "18785 East Corry Blvd.", "city": "Laguna Woods", "state": "CT", "date": { "$date": "1976-03-25"}, "active": true }, { "name": "Natalie Cervantes", "age": 26, "phone": "244-811-0918", "email": "Scott@euismod.us", "address": "15825 West Saint Vincent and The Grenadines Ln.", "city": "West Allis", "state": "MI", "date": { "$date": "1963-08-01"}, "active": true }, { "name": "Galvin Keller", "age": 49, "phone": "855-632-7084", "email": "Damon@lorem.org", "address": "90842 West Cambodia Ct.", "city": "Pueblo", "state": "RI", "date": { "$date": "1973-09-23"}, "active": false }, { "name": "Caldwell Olsen", "age": 45, "phone": "960-267-4399", "email": "Keith@enim.us", "address": "67304 Lithuania Ave.", "city": "Gloucester", "state": "CT", "date": { "$date": "1993-03-07"}, "active": true }, { "name": "Jeanette Bond", "age": 9, "phone": "293-718-6497", "email": "Holmes@Lorem.us", "address": "99009 Cape May Ave.", "city": "Minot", "state": "MI", "date": { "$date": "1988-09-12"}, "active": true }, { "name": "Dai Zimmerman", "age": 36, "phone": "908-708-9370", "email": "Anne@eget.com", "address": "43437 East Alpharetta Ct.", "city": "Dunkirk", "state": "WV", "date": { "$date": "2001-04-25"}, "active": true }, { "name": "Hop Buckner", "age": 28, "phone": "576-232-0760", "email": "Leo@lectus.edu", "address": "54269 North Guinea-bissau Ave.", "city": "Dover", "state": "NY", "date": { "$date": "1951-06-10"}, "active": true }, { "name": "Micah Patton", "age": 68, "phone": "000-671-5981", "email": "Hiroko@condimentum.edu", "address": "2831 West Mayotte St.", "city": "Newport News", "state": "NY", "date": { "$date": "1982-08-27"}, "active": true }, { "name": "Maile Dean", "age": 49, "phone": "895-145-4662", "email": "Malik@metus.gov", "address": "35861 North Peru Ln.", "city": "Grand Junction", "state": "ID", "date": { "$date": "1963-09-22"}, "active": false }, { "name": "Xena Baldwin", "age": 67, "phone": "968-120-0488", "email": "Tyrone@magnis.edu", "address": "1580 North Kazakhstan Ave.", "city": "Lower Burrell", "state": "AL", "date": { "$date": "1979-02-16"}, "active": false }, { "name": "Aristotle Norris", "age": 26, "phone": "653-889-7111", "email": "Shoshana@hendrerit.com", "address": "41382 South Danville St.", "city": "West Hollywood", "state": "DE", "date": { "$date": "1989-12-10"}, "active": true }, { "name": "Lev Johnson", "age": 25, "phone": "448-377-3957", "email": "Adara@sodales.us", "address": "2286 Charleston Ct.", "city": "Lima", "state": "NY", "date": { "$date": "1997-05-10"}, "active": false }, { "name": "Carlos Fulton", "age": 67, "phone": "758-048-0407", "email": "Dustin@Lorem.net", "address": "45056 Agawam Ct.", "city": "Seward", "state": "VA", "date": { "$date": "1984-03-26"}, "active": false }, { "name": "Ulric Duncan", "age": 41, "phone": "757-676-3053", "email": "Tad@dis.edu", "address": "59491 North Kenya Blvd.", "city": "Midwest City", "state": "CT", "date": { "$date": "1991-08-12"}, "active": true }, { "name": "Piper Weeks", "age": 71, "phone": "596-701-8192", "email": "Nora@pharetra.edu", "address": "21368 North Timor-leste Blvd.", "city": "Port Huron", "state": "KS", "date": { "$date": "1980-06-14"}, "active": true }, { "name": "Norman Cochran", "age": 67, "phone": "865-389-9246", "email": "Thor@nisl.gov", "address": "73537 South Afghanistan Ct.", "city": "Hattiesburg", "state": "FL", "date": { "$date": "1988-08-26"}, "active": false }, { "name": "Signe Todd", "age": 72, "phone": "397-851-8508", "email": "Wallace@Nullam.edu", "address": "83304 South Belarus Ln.", "city": "Pocatello", "state": "NJ", "date": { "$date": "2003-10-31"}, "active": false }, { "name": "Cody Dean", "age": 58, "phone": "185-310-6384", "email": "Leigh@Morbi.org", "address": "23947 South South Georgia and The South Sandwich Islands St.", "city": "Middlebury", "state": "UT", "date": { "$date": "1956-03-03"}, "active": true }, { "name": "Orson Underwood", "age": 46, "phone": "349-884-4721", "email": "Rhea@ut.us", "address": "16932 South Brunei Darussalam Ln.", "city": "Valdez", "state": "OH", "date": { "$date": "1987-07-08"}, "active": true }, { "name": "Ginger Espinoza", "age": 35, "phone": "730-021-8297", "email": "Julian@vitae.gov", "address": "49801 North Nicaragua St.", "city": "Arcadia", "state": "TX", "date": { "$date": "1993-06-23"}, "active": true }, { "name": "Asher Stephenson", "age": 57, "phone": "328-837-8258", "email": "Raven@Aliquam.gov", "address": "8335 North Zimbabwe Way", "city": "Kearns", "state": "NC", "date": { "$date": "1987-08-26"}, "active": true }, { "name": "Vera Oneill", "age": 46, "phone": "555-191-0314", "email": "Eric@blandit.gov", "address": "7276 East International Falls Ave.", "city": "Half Moon Bay", "state": "AK", "date": { "$date": "1958-04-05"}, "active": false }, { "name": "Halee Trevino", "age": 68, "phone": "963-424-1490", "email": "Vera@posuere.gov", "address": "21212 South Chile Ct.", "city": "Mobile", "state": "ND", "date": { "$date": "1984-08-19"}, "active": true }, { "name": "Idola Boone", "age": 75, "phone": "560-884-2300", "email": "Nerea@lectus.org", "address": "42509 Nanticoke Ln.", "city": "Arcadia", "state": "AK", "date": { "$date": "1990-03-23"}, "active": true }, { "name": "Hope Bond", "age": 60, "phone": "479-625-6255", "email": "Zachary@Praesent.gov", "address": "18933 Vanuatu Ln.", "city": "Eden Prairie", "state": "ND", "date": { "$date": "1954-03-13"}, "active": true }, { "name": "Rina Blevins", "age": 63, "phone": "558-743-3915", "email": "Desirae@ante.edu", "address": "44512 Liberia Ave.", "city": "Meridian", "state": "NV", "date": { "$date": "1973-04-21"}, "active": true }, { "name": "Christopher Cox", "age": 62, "phone": "903-650-8451", "email": "Sarah@senectus.us", "address": "7187 East Burkina Faso Ln.", "city": "Wilmington", "state": "UT", "date": { "$date": "1972-03-18"}, "active": false }, { "name": "Calista Kramer", "age": 34, "phone": "949-517-6156", "email": "Ursa@nisi.org", "address": "62921 South Bentonville Ln.", "city": "Pittsburgh", "state": "NH", "date": { "$date": "1970-03-21"}, "active": true }, { "name": "Donovan Branch", "age": 63, "phone": "964-649-0978", "email": "Karen@est.edu", "address": "21425 West Angola St.", "city": "Turlock", "state": "OK", "date": { "$date": "1980-08-05"}, "active": true }, { "name": "Dillon Best", "age": 22, "phone": "430-581-1232", "email": "Paul@primis.org", "address": "15463 East Samoa St.", "city": "Wilson", "state": "MA", "date": { "$date": "1988-05-20"}, "active": false }, { "name": "Davis Oneill", "age": 7, "phone": "099-623-8236", "email": "Kelsey@cubilia.gov", "address": "53336 Botswana St.", "city": "Vacaville", "state": "NV", "date": { "$date": "1965-10-16"}, "active": true }, { "name": "Amena Kline", "age": 51, "phone": "381-863-1476", "email": "Mariko@ac.edu", "address": "23328 South Bangladesh St.", "city": "Pembroke Pines", "state": "RI", "date": { "$date": "1967-05-18"}, "active": true }, { "name": "Aphrodite Gentry", "age": 62, "phone": "638-858-5510", "email": "Quemby@odio.com", "address": "84789 North Lake Charles Way", "city": "Woburn", "state": "AK", "date": { "$date": "1957-09-27"}, "active": false }, { "name": "Yael Espinoza", "age": 24, "phone": "423-421-1024", "email": "Aline@conubia.org", "address": "869 East Seychelles Blvd.", "city": "Dover", "state": "NY", "date": { "$date": "1989-07-29"}, "active": false }, { "name": "Emerson Wright", "age": 35, "phone": "730-536-7145", "email": "Carson@nulla.gov", "address": "69635 East Somalia Ct.", "city": "Aguadilla", "state": "PA", "date": { "$date": "2001-09-07"}, "active": true }, { "name": "Chaim Morton", "age": 16, "phone": "087-166-6689", "email": "Wesley@Nunc.gov", "address": "3849 East Dominican Republic Ln.", "city": "Idabel", "state": "AL", "date": { "$date": "1985-06-02"}, "active": true }, { "name": "Gloria Hayes", "age": 74, "phone": "642-131-9923", "email": "Fatima@Proin.com", "address": "21476 East Antigua and Barbuda Way", "city": "Dayton", "state": "SC", "date": { "$date": "1965-05-29"}, "active": false }, { "name": "Samantha Sexton", "age": 31, "phone": "406-998-3598", "email": "Abel@id.us", "address": "18214 West Georgia Way", "city": "Cedar Rapids", "state": "NE", "date": { "$date": "1986-04-11"}, "active": true }, { "name": "Sebastian Hopper", "age": 52, "phone": "434-091-0238", "email": "Kimberly@ante.edu", "address": "28535 South Russian Federation Ct.", "city": "Jefferson City", "state": "DC", "date": { "$date": "1959-05-23"}, "active": true }, { "name": "Daquan Morris", "age": 8, "phone": "747-540-9626", "email": "Lucas@porttitor.net", "address": "76044 South Philippines St.", "city": "Wilmington", "state": "IA", "date": { "$date": "2004-02-24"}, "active": false }, { "name": "Griffin Daniel", "age": 46, "phone": "233-769-9573", "email": "Sarah@nunc.net", "address": "27203 North Spain Way", "city": "Bridgeport", "state": "CT", "date": { "$date": "1990-12-08"}, "active": true }, { "name": "Melyssa Marquez", "age": 60, "phone": "644-579-8226", "email": "Carter@inceptos.com", "address": "36299 South Barbados Ln.", "city": "Paducah", "state": "HI", "date": { "$date": "1994-07-15"}, "active": true }, { "name": "Bell Mclaughlin", "age": 25, "phone": "066-244-8311", "email": "Shelby@volutpat.edu", "address": "7017 West Augusta Ln.", "city": "Broken Arrow", "state": "SC", "date": { "$date": "1997-09-26"}, "active": true }, { "name": "Tashya Pennington", "age": 24, "phone": "051-402-5292", "email": "Uta@cubilia.com", "address": "9559 North Dallas St.", "city": "Bradbury", "state": "ND", "date": { "$date": "2001-04-28"}, "active": false }, { "name": "Kimberly Dominguez", "age": 67, "phone": "180-907-2666", "email": "Keelie@taciti.us", "address": "73312 East Angola Ln.", "city": "Seal Beach", "state": "WV", "date": { "$date": "2004-10-07"}, "active": true }, { "name": "Jordan Spears", "age": 46, "phone": "647-051-0803", "email": "Benjamin@Aliquam.net", "address": "679 South Anguilla Ln.", "city": "Darlington", "state": "MN", "date": { "$date": "1980-07-24"}, "active": true }, { "name": "Coby Solomon", "age": 30, "phone": "265-867-3662", "email": "Maxwell@mauris.gov", "address": "78174 Papua New Guinea St.", "city": "Meridian", "state": "AK", "date": { "$date": "1968-01-17"}, "active": false }, { "name": "Kai Dyer", "age": 19, "phone": "640-941-7881", "email": "Phelan@nulla.com", "address": "98990 Nicaragua Ln.", "city": "Vail", "state": "MN", "date": { "$date": "1994-02-11"}, "active": true }, { "name": "Jerry Wolf", "age": 49, "phone": "733-692-9115", "email": "Alden@gravida.us", "address": "26415 South Cambodia Ct.", "city": "Rehoboth Beach", "state": "CT", "date": { "$date": "1997-08-19"}, "active": false }, { "name": "Jade Barr", "age": 13, "phone": "267-039-3200", "email": "Lawrence@sem.org", "address": "68793 Maldives Ave.", "city": "Huntington Park", "state": "OK", "date": { "$date": "1966-11-18"}, "active": false }, { "name": "Teegan Bonner", "age": 52, "phone": "930-629-5635", "email": "Chester@pretium.net", "address": "33305 South Indonesia Ln.", "city": "Paramount", "state": "CO", "date": { "$date": "1959-05-12"}, "active": true }, { "name": "Miranda Macias", "age": 28, "phone": "597-488-1112", "email": "Erasmus@Phasellus.com", "address": "16569 East Fort Wayne Way", "city": "Tupelo", "state": "AZ", "date": { "$date": "1992-06-15"}, "active": true }, { "name": "Althea Carter", "age": 68, "phone": "590-306-2808", "email": "Hashim@Suspendisse.net", "address": "30748 North Beverly Hills Ln.", "city": "Miami", "state": "GA", "date": { "$date": "1985-03-08"}, "active": true }, { "name": "John Steele", "age": 48, "phone": "571-981-2325", "email": "Jarrod@augue.net", "address": "20782 South Virgin Islands", "city": "Caguas", "state": "WV", "date": { "$date": "1972-02-10"}, "active": true }, { "name": "Erica Alexander", "age": 57, "phone": "616-410-7298", "email": "Yael@euismod.gov", "address": "92970 South Heard Island and Mcdonald Islands Ct.", "city": "Fitchburg", "state": "MN", "date": { "$date": "1977-01-23"}, "active": true }, { "name": "Abbot Oneal", "age": 36, "phone": "534-198-0785", "email": "Wilma@pretium.gov", "address": "16337 North Luxembourg St.", "city": "Rock Island", "state": "SD", "date": { "$date": "1981-05-31"}, "active": true }, { "name": "Tanya Jensen", "age": 25, "phone": "612-405-7853", "email": "Lacey@pede.us", "address": "40822 South Goose Creek St.", "city": "New Albany", "state": "NY", "date": { "$date": "1979-09-01"}, "active": true }, { "name": "Charde Roy", "age": 23, "phone": "533-868-0794", "email": "Lisandra@Sed.gov", "address": "37440 North Eritrea Ln.", "city": "San Luis Obispo", "state": "UT", "date": { "$date": "1988-04-26"}, "active": false }, { "name": "Emery Trujillo", "age": 60, "phone": "885-742-3098", "email": "Brenden@accumsan.gov", "address": "289 North Miami Beach Ln.", "city": "Naperville", "state": "NM", "date": { "$date": "1957-10-05"}, "active": true }, { "name": "Fiona Hensley", "age": 21, "phone": "905-848-5518", "email": "Maris@metus.com", "address": "44934 Argentina Ct.", "city": "Boulder City", "state": "KS", "date": { "$date": "1962-09-22"}, "active": false }, { "name": "William Mccall", "age": 25, "phone": "827-335-0003", "email": "Lev@molestie.gov", "address": "89127 Kenya Ave.", "city": "Gloversville", "state": "AK", "date": { "$date": "1975-04-02"}, "active": false }, { "name": "Ruby Guy", "age": 24, "phone": "706-004-3279", "email": "Farrah@Aliquam.net", "address": "49200 Bahrain Blvd.", "city": "Wisconsin Rapids", "state": "CO", "date": { "$date": "1976-09-26"}, "active": true }, { "name": "Mara Spencer", "age": 28, "phone": "731-735-4440", "email": "Xandra@nonummy.com", "address": "42242 East Iran", "city": "Muskogee", "state": "WV", "date": { "$date": "1957-03-03"}, "active": true }, { "name": "Graham Cook", "age": 48, "phone": "331-929-8960", "email": "Allistair@Etiam.com", "address": "78341 West Fort Collins Ave.", "city": "Plymouth", "state": "SC", "date": { "$date": "1951-04-12"}, "active": true }, { "name": "Gay Coleman", "age": 63, "phone": "812-235-1512", "email": "Timon@Fusce.com", "address": "59134 East Enid St.", "city": "Palo Alto", "state": "WA", "date": { "$date": "1965-02-21"}, "active": true }, { "name": "Harper Huffman", "age": 6, "phone": "326-107-0135", "email": "Hoyt@cursus.edu", "address": "28487 West Guinea Ct.", "city": "Wausau", "state": "ME", "date": { "$date": "1953-04-17"}, "active": true }, { "name": "Boris Hopper", "age": 36, "phone": "709-836-0888", "email": "Kylan@risus.org", "address": "80413 North Angola Ln.", "city": "Chickasha", "state": "DE", "date": { "$date": "1985-10-02"}, "active": true }, { "name": "Lesley Wolfe", "age": 42, "phone": "741-048-6009", "email": "Kibo@hymenaeos.org", "address": "84198 East El Salvador St.", "city": "Billings", "state": "NH", "date": { "$date": "1967-10-03"}, "active": true }, { "name": "Wallace Noel", "age": 55, "phone": "163-150-4242", "email": "Farrah@elementum.net", "address": "60741 North Somalia Blvd.", "city": "Worland", "state": "NE", "date": { "$date": "1952-10-17"}, "active": true }, { "name": "Herman Wilkerson", "age": 16, "phone": "239-333-1556", "email": "Owen@sagittis.gov", "address": "46724 Altoona Blvd.", "city": "Dearborn", "state": "OH", "date": { "$date": "1959-06-28"}, "active": true }, { "name": "Tashya Mercado", "age": 7, "phone": "804-761-4037", "email": "Tarik@montes.com", "address": "40005 South Italy Ave.", "city": "Rutland", "state": "MO", "date": { "$date": "1958-01-02"}, "active": true }, { "name": "Ashely Haynes", "age": 62, "phone": "530-326-9384", "email": "Carter@laoreet.net", "address": "26128 South Palestinian Territory", "city": "Claremore", "state": "AZ", "date": { "$date": "2000-12-13"}, "active": true }, { "name": "Paula Burgess", "age": 67, "phone": "099-475-4697", "email": "Jordan@tempor.com", "address": "57874 South British Indian Ocean Territory St.", "city": "Chicago", "state": "MT", "date": { "$date": "1991-12-29"}, "active": true }, { "name": "Maryam Moreno", "age": 51, "phone": "960-676-4242", "email": "Berk@Vestibulum.edu", "address": "85039 South Citrus Heights Way", "city": "Jersey City", "state": "NC", "date": { "$date": "1989-02-18"}, "active": true }, { "name": "Palmer Guerrero", "age": 50, "phone": "862-512-9438", "email": "Kirk@Aenean.net", "address": "6422 East Bosnia and Herzegovina Blvd.", "city": "Farmington", "state": "SC", "date": { "$date": "1962-10-04"}, "active": true }, { "name": "Tate Moore", "age": 36, "phone": "732-267-6188", "email": "Colby@risus.org", "address": "77073 East Monaco Ct.", "city": "Beloit", "state": "SC", "date": { "$date": "1986-12-18"}, "active": false }, { "name": "Tyrone Obrien", "age": 74, "phone": "214-482-7370", "email": "Hayley@penatibus.com", "address": "25551 West Congo St.", "city": "Cohoes", "state": "HI", "date": { "$date": "1986-11-15"}, "active": true }, { "name": "Lila Velasquez", "age": 9, "phone": "278-260-7206", "email": "Baker@ante.net", "address": "19153 South Morocco Way", "city": "La Jolla", "state": "UT", "date": { "$date": "1963-08-31"}, "active": true }, { "name": "Hector Haney", "age": 54, "phone": "230-545-4309", "email": "Marcia@fringilla.us", "address": "20844 East Armenia Ct.", "city": "Hartford", "state": "PA", "date": { "$date": "1975-12-15"}, "active": true }, { "name": "Curran Frye", "age": 46, "phone": "913-824-1847", "email": "Anthony@venenatis.org", "address": "49445 New Kensington Ave.", "city": "Hornell", "state": "AZ", "date": { "$date": "1978-02-19"}, "active": false }, { "name": "Ria Joseph", "age": 48, "phone": "530-229-6669", "email": "Brenda@ultrices.edu", "address": "88001 West Beckley Ct.", "city": "Irving", "state": "UT", "date": { "$date": "1998-07-05"}, "active": true }, { "name": "Ella Sandoval", "age": 12, "phone": "077-574-8950", "email": "Melinda@dignissim.edu", "address": "71108 Norfolk Island St.", "city": "West Jordan", "state": "IA", "date": { "$date": "1978-03-15"}, "active": true }, { "name": "Shana Rice", "age": 15, "phone": "314-136-2990", "email": "Melissa@ad.com", "address": "3217 East Austria Way", "city": "Morrison", "state": "WV", "date": { "$date": "1988-09-22"}, "active": true }, { "name": "Caleb Ratliff", "age": 36, "phone": "712-187-7920", "email": "Cassady@cursus.com", "address": "27823 West Juneau Ln.", "city": "Santa Clarita", "state": "OH", "date": { "$date": "1994-05-10"}, "active": true }, { "name": "Mannix Stone", "age": 37, "phone": "071-790-6470", "email": "Cameron@vitae.us", "address": "53237 East Greece Blvd.", "city": "Idaho Falls", "state": "UT", "date": { "$date": "1970-02-21"}, "active": true }, { "name": "Jackson Montgomery", "age": 7, "phone": "764-660-1626", "email": "Sigourney@ut.edu", "address": "31844 South Burlington Ave.", "city": "Detroit", "state": "RI", "date": { "$date": "1989-06-11"}, "active": false }, { "name": "Zachary Marquez", "age": 12, "phone": "079-410-6004", "email": "Aiko@Pellentesque.us", "address": "1210 South Edina St.", "city": "Lodi", "state": "NY", "date": { "$date": "1953-04-17"}, "active": true }, { "name": "Arden Short", "age": 12, "phone": "342-992-3925", "email": "Dai@pulvinar.org", "address": "26699 Burundi Ln.", "city": "San Dimas", "state": "ME", "date": { "$date": "1968-03-30"}, "active": true }, { "name": "Madonna Webb", "age": 31, "phone": "767-690-8015", "email": "Chantale@Duis.us", "address": "41294 North Lithuania Ct.", "city": "Marshall", "state": "MO", "date": { "$date": "1950-03-12"}, "active": true }, { "name": "Kane Walls", "age": 68, "phone": "609-161-3534", "email": "Farrah@risus.com", "address": "30687 South Asheville Way", "city": "Johnstown", "state": "CO", "date": { "$date": "1956-09-19"}, "active": true }, { "name": "Freya Collier", "age": 21, "phone": "665-910-9219", "email": "Kaitlin@Phasellus.gov", "address": "88476 West Belize St.", "city": "Corpus Christi", "state": "NH", "date": { "$date": "1971-03-18"}, "active": true }, { "name": "Howard Hudson", "age": 66, "phone": "437-224-6975", "email": "Gannon@dictum.gov", "address": "31072 East Senegal Ln.", "city": "El Segundo", "state": "IN", "date": { "$date": "2000-06-18"}, "active": false }, { "name": "Cassandra Marquez", "age": 12, "phone": "158-153-1794", "email": "Buckminster@euismod.org", "address": "83222 Angola Blvd.", "city": "Beckley", "state": "PA", "date": { "$date": "1962-10-20"}, "active": false }, { "name": "Hunter Leon", "age": 75, "phone": "466-356-2743", "email": "Wanda@Pellentesque.net", "address": "78104 American Samoa St.", "city": "Perth Amboy", "state": "NE", "date": { "$date": "1996-10-02"}, "active": true }, { "name": "Quinlan Coleman", "age": 11, "phone": "722-443-4221", "email": "Galena@viverra.com", "address": "73132 East Angola St.", "city": "Wausau", "state": "KY", "date": { "$date": "1993-08-12"}, "active": true }, { "name": "Janna Roy", "age": 31, "phone": "099-582-4110", "email": "Alice@aliquet.edu", "address": "11998 French Guiana Way", "city": "Monterey", "state": "OH", "date": { "$date": "1986-11-19"}, "active": false }, { "name": "Ethan Carrillo", "age": 25, "phone": "660-870-0714", "email": "Odysseus@ligula.edu", "address": "36060 North Guyana Blvd.", "city": "Agoura Hills", "state": "WI", "date": { "$date": "1975-09-15"}, "active": false }, { "name": "Charity Doyle", "age": 30, "phone": "016-861-4596", "email": "Chadwick@Class.gov", "address": "58089 Cleveland Ct.", "city": "Sunbury", "state": "AZ", "date": { "$date": "1963-11-08"}, "active": true }, { "name": "Haley Cardenas", "age": 55, "phone": "118-307-5706", "email": "Burton@velit.us", "address": "58263 Malawi Ct.", "city": "Rancho Santa Margarita", "state": "DC", "date": { "$date": "1987-12-22"}, "active": false }, { "name": "Harper Kelly", "age": 45, "phone": "147-136-5132", "email": "Ruth@sodales.us", "address": "93398 South Cape Verde Ct.", "city": "Rancho Cucamonga", "state": "ME", "date": { "$date": "1991-11-12"}, "active": false }, { "name": "Gregory Gilbert", "age": 6, "phone": "436-338-9745", "email": "Cooper@sociosqu.net", "address": "74435 North Chicago St.", "city": "Staunton", "state": "NV", "date": { "$date": "1997-03-01"}, "active": true }, { "name": "Lysandra Luna", "age": 17, "phone": "797-612-7490", "email": "Amir@sed.net", "address": "90209 West Batavia Blvd.", "city": "Cape Coral", "state": "OH", "date": { "$date": "1973-03-13"}, "active": true }, { "name": "Nita Lindsay", "age": 66, "phone": "331-086-1298", "email": "Rama@Nunc.org", "address": "82704 South Sierra Leone St.", "city": "Abilene", "state": "HI", "date": { "$date": "1996-11-13"}, "active": true }, { "name": "Josiah Stewart", "age": 66, "phone": "821-313-8139", "email": "Karyn@rhoncus.edu", "address": "26020 South Turks and Caicos Islands Ct.", "city": "Pembroke Pines", "state": "CO", "date": { "$date": "1950-05-20"}, "active": false }, { "name": "Allegra England", "age": 8, "phone": "914-564-2844", "email": "Judah@consequat.edu", "address": "77439 West Rwanda Ave.", "city": "Mechanicville", "state": "WV", "date": { "$date": "1957-02-19"}, "active": true }, { "name": "Orli Barlow", "age": 57, "phone": "041-487-3984", "email": "Walter@tempor.gov", "address": "63145 Colombia Ln.", "city": "Houma", "state": "MI", "date": { "$date": "1991-01-19"}, "active": false }, { "name": "Oren Hopper", "age": 68, "phone": "584-667-6665", "email": "Vincent@dolor.gov", "address": "72696 Cameroon St.", "city": "Biloxi", "state": "NJ", "date": { "$date": "2003-02-06"}, "active": true }, { "name": "Nevada Acevedo", "age": 68, "phone": "266-405-4028", "email": "Aline@amet.edu", "address": "66141 East Des Moines Blvd.", "city": "Vallejo", "state": "LA", "date": { "$date": "1977-12-15"}, "active": false }, { "name": "Sylvester Maddox", "age": 67, "phone": "048-258-0873", "email": "Fletcher@lobortis.edu", "address": "39984 East Cape Verde Ave.", "city": "Warner Robins", "state": "CO", "date": { "$date": "2003-01-12"}, "active": true }, { "name": "Marvin Herring", "age": 35, "phone": "094-531-9220", "email": "Buckminster@pharetra.us", "address": "84175 West British Indian Ocean Territory Blvd.", "city": "Ardmore", "state": "KY", "date": { "$date": "1963-08-25"}, "active": false }, { "name": "Molly Owen", "age": 66, "phone": "244-380-0894", "email": "Chaim@porttitor.org", "address": "13255 New Zealand Ave.", "city": "Rhinelander", "state": "NM", "date": { "$date": "1969-11-13"}, "active": false }, { "name": "Griffith Bentley", "age": 67, "phone": "363-439-1018", "email": "Gavin@sociis.net", "address": "37773 South Buffalo Way", "city": "Salisbury", "state": "DC", "date": { "$date": "1966-10-31"}, "active": true }, { "name": "Gary Trevino", "age": 42, "phone": "894-365-1239", "email": "Fletcher@neque.edu", "address": "64013 Helena Way", "city": "St. Marys", "state": "WY", "date": { "$date": "1972-02-14"}, "active": false }, { "name": "Reed Boone", "age": 61, "phone": "749-504-5983", "email": "Hunter@pulvinar.net", "address": "42576 United Kingdom St.", "city": "Homer", "state": "RI", "date": { "$date": "1953-08-20"}, "active": true }, { "name": "Brendan Maxwell", "age": 23, "phone": "341-974-7694", "email": "Jasper@pede.us", "address": "71531 Algeria St.", "city": "Butler", "state": "IA", "date": { "$date": "1982-09-29"}, "active": true }, { "name": "Branden Valencia", "age": 12, "phone": "101-859-6030", "email": "Lester@eget.us", "address": "82792 East Kent Ave.", "city": "Victoria", "state": "TX", "date": { "$date": "2003-11-10"}, "active": true }, { "name": "Henry Snow", "age": 26, "phone": "319-246-4399", "email": "Charde@Etiam.org", "address": "18744 North Moraga Ave.", "city": "Peabody", "state": "FL", "date": { "$date": "1955-12-29"}, "active": true }, { "name": "Ulric Banks", "age": 65, "phone": "868-891-9890", "email": "Sharon@metus.gov", "address": "20960 West Bossier City Way", "city": "Harrisburg", "state": "KY", "date": { "$date": "1976-06-07"}, "active": true }, { "name": "Celeste Talley", "age": 27, "phone": "040-007-6535", "email": "Alexis@arcu.com", "address": "1274 West United States Minor Outlying Islands Ln.", "city": "Barre", "state": "VT", "date": { "$date": "1958-03-11"}, "active": false }, { "name": "Shannon Byrd", "age": 16, "phone": "761-583-6527", "email": "Angela@at.org", "address": "90146 South Hayward Ln.", "city": "Sioux Falls", "state": "KY", "date": { "$date": "1970-04-15"}, "active": false }, { "name": "Hope Hudson", "age": 53, "phone": "781-913-8262", "email": "Rudyard@In.gov", "address": "15152 North Mauritania Blvd.", "city": "Pascagoula", "state": "CT", "date": { "$date": "1993-05-12"}, "active": true }, { "name": "Kelly Case", "age": 46, "phone": "874-838-6162", "email": "Deacon@lorem.net", "address": "3731 Ecuador St.", "city": "St. Marys", "state": "AL", "date": { "$date": "2004-08-17"}, "active": true }, { "name": "Charde Park", "age": 14, "phone": "577-478-7588", "email": "Tamekah@In.gov", "address": "9243 South New Castle Ave.", "city": "Springfield", "state": "OK", "date": { "$date": "1966-12-01"}, "active": false }, { "name": "Melissa Yang", "age": 5, "phone": "502-202-3899", "email": "Gary@Class.us", "address": "23098 Bouvet Island St.", "city": "Statesboro", "state": "IA", "date": { "$date": "1978-03-07"}, "active": true }, { "name": "Madeline Brock", "age": 44, "phone": "204-549-9233", "email": "Laith@Vestibulum.com", "address": "9383 West Poland St.", "city": "Santa Rosa", "state": "MD", "date": { "$date": "2001-12-28"}, "active": true }, { "name": "Reese Coffey", "age": 24, "phone": "882-256-1375", "email": "Iola@In.edu", "address": "64179 East Oman St.", "city": "Plymouth", "state": "NM", "date": { "$date": "1993-10-14"}, "active": true }, { "name": "Hop Keith", "age": 57, "phone": "975-376-0420", "email": "Macon@dis.edu", "address": "12083 North Micronesia Ct.", "city": "Livonia", "state": "MO", "date": { "$date": "1995-12-23"}, "active": true }, { "name": "Nicholas Becker", "age": 24, "phone": "550-402-9789", "email": "Idona@viverra.org", "address": "32116 East Viet Nam Ct.", "city": "Janesville", "state": "KS", "date": { "$date": "1958-05-22"}, "active": true }, { "name": "Scarlett Mccarty", "age": 46, "phone": "764-334-8696", "email": "Rhiannon@cursus.edu", "address": "26357 East Cuba Way", "city": "Dickinson", "state": "IN", "date": { "$date": "1971-03-13"}, "active": true }, { "name": "Britanney Barnett", "age": 25, "phone": "558-810-1839", "email": "Wayne@orci.us", "address": "78380 West Greece Blvd.", "city": "Allentown", "state": "KY", "date": { "$date": "1959-12-11"}, "active": true }, { "name": "Graiden Dickson", "age": 75, "phone": "643-396-5789", "email": "Karina@massa.net", "address": "19574 West Bethlehem Way", "city": "Thibodaux", "state": "MS", "date": { "$date": "1992-09-15"}, "active": true }, { "name": "Anika Sexton", "age": 13, "phone": "537-484-7656", "email": "Fay@facilisis.com", "address": "90143 South Clemson Ln.", "city": "Vallejo", "state": "CA", "date": { "$date": "1984-10-16"}, "active": false }, { "name": "Kameko Hardin", "age": 39, "phone": "977-409-4034", "email": "Shea@luctus.gov", "address": "75604 South Barbados Ct.", "city": "Warner Robins", "state": "RI", "date": { "$date": "1966-11-05"}, "active": true }, { "name": "Robert Davis", "age": 8, "phone": "525-957-0669", "email": "Candace@elementum.edu", "address": "68128 North Svalbard and Jan Mayen Ct.", "city": "Bloomington", "state": "ND", "date": { "$date": "1958-11-15"}, "active": true }, { "name": "Lance Mercer", "age": 58, "phone": "943-334-3417", "email": "Hedley@aptent.net", "address": "26834 Hanahan Ct.", "city": "Mobile", "state": "NH", "date": { "$date": "1998-04-09"}, "active": true }, { "name": "Ariel Pugh", "age": 69, "phone": "893-196-1809", "email": "Teagan@in.com", "address": "78703 East Council Bluffs Ave.", "city": "Springdale", "state": "NE", "date": { "$date": "1973-02-26"}, "active": true }, { "name": "Piper Young", "age": 25, "phone": "342-033-0736", "email": "Wayne@penatibus.edu", "address": "46849 South Canandaigua Ave.", "city": "Corpus Christi", "state": "IN", "date": { "$date": "1993-10-11"}, "active": false }, { "name": "Erich Kent", "age": 75, "phone": "255-773-2533", "email": "Alana@pede.net", "address": "85114 North Paraguay Ave.", "city": "Edmond", "state": "OR", "date": { "$date": "1996-05-13"}, "active": true }, { "name": "Lewis Holloway", "age": 69, "phone": "957-209-3282", "email": "Jasper@tellus.net", "address": "44958 North Taiwan", "city": "Powell", "state": "MS", "date": { "$date": "1980-05-14"}, "active": true }, { "name": "Alana Fox", "age": 51, "phone": "267-039-7349", "email": "Chantale@dapibus.gov", "address": "36258 Argentina Ave.", "city": "Forrest City", "state": "PA", "date": { "$date": "1969-04-27"}, "active": true }, { "name": "Lunea Griffin", "age": 21, "phone": "393-071-0781", "email": "Kristen@ornare.net", "address": "80336 North Panama Way", "city": "Alameda", "state": "VA", "date": { "$date": "1987-01-27"}, "active": true }, { "name": "Destiny Shepherd", "age": 6, "phone": "379-365-0431", "email": "Idona@vulputate.net", "address": "16196 South Mali Ave.", "city": "Mankato", "state": "WY", "date": { "$date": "1958-12-08"}, "active": true }, { "name": "Carla Mcdowell", "age": 37, "phone": "188-058-3184", "email": "Jacob@habitant.org", "address": "9258 South Congo Ln.", "city": "Wisconsin Dells", "state": "MO", "date": { "$date": "1962-04-16"}, "active": false }, { "name": "Daphne Grant", "age": 53, "phone": "995-161-1468", "email": "Karina@netus.gov", "address": "71395 Azerbaijan Blvd.", "city": "Vineland", "state": "DC", "date": { "$date": "1975-07-06"}, "active": true }, { "name": "Rudyard Molina", "age": 42, "phone": "578-421-2752", "email": "Macaulay@in.edu", "address": "4026 North San Marino Way", "city": "Williamsburg", "state": "GA", "date": { "$date": "1968-06-09"}, "active": true }, { "name": "Bell Salas", "age": 71, "phone": "628-043-3572", "email": "Elton@ipsum.us", "address": "24093 East Kalamazoo Ave.", "city": "Hidden Hills", "state": "KS", "date": { "$date": "1969-07-18"}, "active": true }, { "name": "Benedict Patton", "age": 17, "phone": "443-372-8872", "email": "Denton@congue.us", "address": "36164 West Guinea Ln.", "city": "Fort Smith", "state": "TX", "date": { "$date": "1960-11-22"}, "active": false }, { "name": "Mia Macdonald", "age": 15, "phone": "318-192-2972", "email": "Mallory@aliquet.gov", "address": "9601 South Italy Way", "city": "Nogales", "state": "LA", "date": { "$date": "1988-12-13"}, "active": true }, { "name": "Nero Brooks", "age": 41, "phone": "534-896-6256", "email": "Ezekiel@massa.org", "address": "45959 South Estonia Ln.", "city": "Sunbury", "state": "HI", "date": { "$date": "1973-09-23"}, "active": true }, { "name": "Venus Sanford", "age": 23, "phone": "199-762-3563", "email": "Nina@congue.org", "address": "73657 North Guánica Ct.", "city": "Brookings", "state": "MI", "date": { "$date": "1974-10-06"}, "active": true }, { "name": "Adam Neal", "age": 35, "phone": "017-738-1835", "email": "Rudyard@sagittis.us", "address": "97271 Guadeloupe Ln.", "city": "Johnstown", "state": "SC", "date": { "$date": "1965-02-04"}, "active": true }, { "name": "Brody Hunt", "age": 61, "phone": "847-275-8967", "email": "Lareina@nibh.edu", "address": "381 Highland Park St.", "city": "Stillwater", "state": "DC", "date": { "$date": "1989-09-07"}, "active": true }, { "name": "Aiko Campbell", "age": 58, "phone": "957-515-9103", "email": "Deanna@Donec.net", "address": "66685 Australia Way", "city": "Guthrie", "state": "NV", "date": { "$date": "2002-03-04"}, "active": true }, { "name": "Evelyn Baldwin", "age": 66, "phone": "089-997-3371", "email": "Garrison@eros.gov", "address": "12165 East Bulgaria Ln.", "city": "Providence", "state": "CA", "date": { "$date": "1981-09-20"}, "active": true }, { "name": "Stacey Quinn", "age": 39, "phone": "223-653-4757", "email": "Scott@porttitor.org", "address": "46350 East Canada Blvd.", "city": "Des Moines", "state": "IA", "date": { "$date": "1971-06-04"}, "active": true }, { "name": "Davis Hinton", "age": 72, "phone": "616-094-2296", "email": "Drake@Quisque.edu", "address": "65300 East Bangladesh Way", "city": "Durango", "state": "ME", "date": { "$date": "1962-09-20"}, "active": true }, { "name": "Raphael Berger", "age": 37, "phone": "518-858-1523", "email": "Rooney@dolor.net", "address": "11569 West Gambia Way", "city": "Derby", "state": "MA", "date": { "$date": "1979-09-09"}, "active": true }, { "name": "Nasim Hess", "age": 19, "phone": "439-540-7180", "email": "Vera@commodo.us", "address": "68461 South Germany Ln.", "city": "Klamath Falls", "state": "FL", "date": { "$date": "1977-05-14"}, "active": true }, { "name": "Hamilton Rios", "age": 41, "phone": "977-751-7984", "email": "Naida@eu.org", "address": "62656 West Cairo Ln.", "city": "Egg Harbor", "state": "UT", "date": { "$date": "1979-01-22"}, "active": true }, { "name": "Hedda Kelly", "age": 31, "phone": "857-072-1844", "email": "Jaime@congue.net", "address": "13841 West Ghana Way", "city": "Ketchikan", "state": "IL", "date": { "$date": "1954-01-08"}, "active": false }, { "name": "Shannon Valentine", "age": 33, "phone": "187-470-9143", "email": "Quintessa@Quisque.gov", "address": "71610 South Anguilla Ave.", "city": "Plano", "state": "MT", "date": { "$date": "1958-03-15"}, "active": true }, { "name": "Stephen Bryant", "age": 29, "phone": "219-196-3526", "email": "Julian@lorem.net", "address": "2222 East Benin Ct.", "city": "Bandon", "state": "MD", "date": { "$date": "1954-07-01"}, "active": true }, { "name": "Gareth Zamora", "age": 16, "phone": "084-010-2259", "email": "Sage@sagittis.net", "address": "48928 South Everett St.", "city": "Oneonta", "state": "IN", "date": { "$date": "1992-08-21"}, "active": true }, { "name": "Barrett Vance", "age": 33, "phone": "442-638-9753", "email": "Quemby@blandit.edu", "address": "46393 North Heard Island and Mcdonald Islands Blvd.", "city": "Sierra Vista", "state": "NH", "date": { "$date": "2000-05-14"}, "active": true }, { "name": "Georgia Durham", "age": 49, "phone": "628-549-3797", "email": "Hashim@parturient.com", "address": "38861 British Indian Ocean Territory Ln.", "city": "Green Bay", "state": "CO", "date": { "$date": "1974-04-10"}, "active": true }, { "name": "Daniel Bauer", "age": 74, "phone": "777-452-1833", "email": "Sybill@dolor.com", "address": "29077 East Ghana Ln.", "city": "Revere", "state": "DC", "date": { "$date": "1956-01-01"}, "active": true }, { "name": "Amir Townsend", "age": 66, "phone": "121-793-6656", "email": "Bert@ultrices.us", "address": "69808 West Cudahy St.", "city": "York", "state": "CT", "date": { "$date": "1965-10-14"}, "active": true }, { "name": "Christopher Rogers", "age": 35, "phone": "639-506-8633", "email": "Karen@sociis.edu", "address": "59652 North Saint Kitts and Nevis Ct.", "city": "Revere", "state": "CA", "date": { "$date": "1977-01-18"}, "active": true }, { "name": "Naomi Callahan", "age": 17, "phone": "862-274-6831", "email": "Shoshana@in.edu", "address": "23174 South Cameroon Way", "city": "Avalon", "state": "ID", "date": { "$date": "1951-08-29"}, "active": true }, { "name": "Murphy Nielsen", "age": 33, "phone": "263-678-4020", "email": "Stacey@tristique.edu", "address": "18467 Burbank St.", "city": "Martinsburg", "state": "TN", "date": { "$date": "1983-07-17"}, "active": true }, { "name": "Cameran Mcclure", "age": 43, "phone": "593-024-6769", "email": "Rhiannon@nascetur.us", "address": "29386 North Morocco Way", "city": "Port Arthur", "state": "MN", "date": { "$date": "1979-11-21"}, "active": false }, { "name": "Joseph Webster", "age": 11, "phone": "287-684-6405", "email": "Reagan@per.us", "address": "48555 West Bahrain Way", "city": "Hot Springs", "state": "DE", "date": { "$date": "2003-09-08"}, "active": true }, { "name": "Cherokee Silva", "age": 68, "phone": "683-852-1073", "email": "Bernard@odio.com", "address": "24165 North Easton Blvd.", "city": "Martinsburg", "state": "AK", "date": { "$date": "1992-07-07"}, "active": true }, { "name": "Edward Pope", "age": 30, "phone": "036-364-0109", "email": "Talon@accumsan.edu", "address": "68430 West Nepal Way", "city": "Fremont", "state": "ID", "date": { "$date": "1955-01-05"}, "active": false }, { "name": "Brenda Turner", "age": 20, "phone": "454-658-6412", "email": "Dale@non.us", "address": "77548 East Missoula Blvd.", "city": "Staunton", "state": "MA", "date": { "$date": "1979-05-17"}, "active": false }, { "name": "Colby Baldwin", "age": 52, "phone": "650-446-1083", "email": "Jemima@Cum.us", "address": "26321 Broken Arrow Ave.", "city": "Montebello", "state": "MS", "date": { "$date": "1958-05-27"}, "active": false }, { "name": "Erin Love", "age": 65, "phone": "200-759-4789", "email": "Yvonne@facilisis.gov", "address": "47575 West College Park Way", "city": "Hartland", "state": "MN", "date": { "$date": "1989-03-12"}, "active": false }, { "name": "Joan Cole", "age": 33, "phone": "511-986-7125", "email": "Jack@et.edu", "address": "82361 West Lafayette Ct.", "city": "Beverly", "state": "GA", "date": { "$date": "1980-11-08"}, "active": true }, { "name": "Rhona Perry", "age": 38, "phone": "595-106-2015", "email": "Rhoda@pulvinar.us", "address": "61834 South Chile Ave.", "city": "Twin Falls", "state": "NY", "date": { "$date": "1956-07-18"}, "active": true }, { "name": "Naida Horton", "age": 48, "phone": "115-397-0849", "email": "Cailin@consectetuer.org", "address": "37545 Turks and Caicos Islands Blvd.", "city": "Kingsport", "state": "TN", "date": { "$date": "1987-02-12"}, "active": true }, { "name": "Tarik Burris", "age": 53, "phone": "941-422-3333", "email": "Ian@turpis.net", "address": "74835 South Uganda Way", "city": "Kenner", "state": "TX", "date": { "$date": "1958-02-02"}, "active": true }, { "name": "Constance Chandler", "age": 45, "phone": "149-620-2712", "email": "Janna@montes.net", "address": "44784 North Del Rio St.", "city": "Ketchikan", "state": "DE", "date": { "$date": "1992-01-30"}, "active": false }, { "name": "Mollie Stafford", "age": 13, "phone": "596-456-3613", "email": "Curran@nulla.net", "address": "51660 East Jordan St.", "city": "Bradford", "state": "VA", "date": { "$date": "1959-06-11"}, "active": true }, { "name": "Drake Durham", "age": 57, "phone": "983-793-0856", "email": "Nasim@hymenaeos.com", "address": "65115 Brea Blvd.", "city": "Revere", "state": "NV", "date": { "$date": "1964-02-23"}, "active": false }, { "name": "Liberty Mckenzie", "age": 32, "phone": "241-416-5550", "email": "Ferris@Duis.net", "address": "91930 West Costa Rica Ln.", "city": "Chicago", "state": "AL", "date": { "$date": "1982-05-13"}, "active": false }, { "name": "Derek Nolan", "age": 58, "phone": "647-075-0190", "email": "Samantha@consectetuer.net", "address": "78083 West Bolivia Way", "city": "Mesa", "state": "UT", "date": { "$date": "2004-06-02"}, "active": true }, { "name": "Daquan Holland", "age": 6, "phone": "216-342-7850", "email": "Xavier@sociosqu.edu", "address": "96968 East Albania Ave.", "city": "Olean", "state": "HI", "date": { "$date": "1977-05-27"}, "active": true }, { "name": "Carla Chang", "age": 23, "phone": "681-159-7501", "email": "Kaitlin@lobortis.gov", "address": "77191 South Korea St.", "city": "Cape Coral", "state": "IA", "date": { "$date": "1967-09-14"}, "active": false }, { "name": "Jena Goodwin", "age": 45, "phone": "507-565-9025", "email": "Cooper@gravida.edu", "address": "35054 East Belize St.", "city": "Lock Haven", "state": "ME", "date": { "$date": "1964-06-05"}, "active": false }, { "name": "Tanek Cox", "age": 46, "phone": "114-116-5319", "email": "Delilah@id.gov", "address": "54323 East Hollister Way", "city": "Allentown", "state": "NJ", "date": { "$date": "1980-11-16"}, "active": false }, { "name": "Moses Cherry", "age": 66, "phone": "307-747-6446", "email": "Helen@odio.edu", "address": "50460 Colombia Blvd.", "city": "Virginia Beach", "state": "WI", "date": { "$date": "2004-04-11"}, "active": true }, { "name": "Kasper Nash", "age": 14, "phone": "123-157-9662", "email": "Callum@metus.org", "address": "39864 Dixon Ct.", "city": "Thousand Oaks", "state": "NY", "date": { "$date": "2000-06-29"}, "active": true }, { "name": "Simone Trujillo", "age": 9, "phone": "750-724-4036", "email": "Amelia@porttitor.net", "address": "515 Cuba St.", "city": "Camden", "state": "FL", "date": { "$date": "1979-11-25"}, "active": true }, { "name": "Eric Britt", "age": 35, "phone": "861-460-8437", "email": "Sacha@aliquet.us", "address": "6100 South Cocos (Keeling) Islands Ln.", "city": "Sitka", "state": "SD", "date": { "$date": "1987-07-09"}, "active": false }, { "name": "Daria Sexton", "age": 46, "phone": "756-552-2759", "email": "Howard@justo.gov", "address": "72652 West Barbados Ave.", "city": "Brown Deer", "state": "WY", "date": { "$date": "1973-07-11"}, "active": true }, { "name": "Vaughan Jarvis", "age": 8, "phone": "589-544-8675", "email": "Burke@amet.com", "address": "4681 South Central African Republic Ct.", "city": "Corpus Christi", "state": "RI", "date": { "$date": "1965-02-24"}, "active": false }, { "name": "Felix Clay", "age": 61, "phone": "426-465-6465", "email": "Ashton@sem.com", "address": "25340 Afghanistan Blvd.", "city": "Selma", "state": "SC", "date": { "$date": "1971-08-07"}, "active": true }, { "name": "Ali Watkins", "age": 33, "phone": "723-715-1395", "email": "Phelan@netus.com", "address": "68638 East Honduras Way", "city": "Oklahoma City", "state": "MA", "date": { "$date": "1986-11-01"}, "active": false }, { "name": "Wang Huber", "age": 8, "phone": "011-333-0132", "email": "Alvin@per.org", "address": "74577 South Colombia Way", "city": "Homer", "state": "MA", "date": { "$date": "1950-09-19"}, "active": true }, { "name": "Graham Vazquez", "age": 51, "phone": "372-903-6665", "email": "Dante@viverra.gov", "address": "70231 North Clovis Ct.", "city": "Sierra Madre", "state": "CA", "date": { "$date": "1979-07-19"}, "active": true }, { "name": "Brooke Horn", "age": 63, "phone": "515-211-5393", "email": "Dante@primis.gov", "address": "70790 Kuwait Ct.", "city": "Albany", "state": "UT", "date": { "$date": "1996-10-16"}, "active": false }, { "name": "Mufutau Gamble", "age": 21, "phone": "346-497-9737", "email": "Roanna@ornare.edu", "address": "76285 South Slovakia Ln.", "city": "Champaign", "state": "MA", "date": { "$date": "1981-09-08"}, "active": false }, { "name": "Laith Sanchez", "age": 53, "phone": "404-909-8228", "email": "April@nisl.com", "address": "65317 West Manassas Ln.", "city": "Bayamon", "state": "WY", "date": { "$date": "1997-02-11"}, "active": false }, { "name": "Sage Winters", "age": 14, "phone": "782-900-4392", "email": "Tatyana@amet.edu", "address": "57521 West French Southern Territories Ln.", "city": "Danbury", "state": "SD", "date": { "$date": "1979-02-19"}, "active": false }, { "name": "Colt Brewer", "age": 49, "phone": "839-703-4641", "email": "Neil@fringilla.org", "address": "25892 West American Samoa Ct.", "city": "Moore", "state": "KY", "date": { "$date": "1977-06-04"}, "active": true }, { "name": "Ashton Marquez", "age": 21, "phone": "358-542-2049", "email": "Beatrice@convallis.com", "address": "41134 Uruguay Ct.", "city": "Klamath Falls", "state": "IL", "date": { "$date": "1953-06-13"}, "active": false }, { "name": "Hadley Whitfield", "age": 54, "phone": "939-467-2189", "email": "Emma@dapibus.us", "address": "88279 West Commerce Ave.", "city": "Thomasville", "state": "AK", "date": { "$date": "1950-03-07"}, "active": false }, { "name": "Acton Sexton", "age": 59, "phone": "414-531-6075", "email": "Jennifer@sagittis.us", "address": "59494 North Faroe Islands Ct.", "city": "Tupelo", "state": "IA", "date": { "$date": "1958-08-01"}, "active": true }, { "name": "Joelle Drake", "age": 55, "phone": "162-333-4333", "email": "Austin@et.com", "address": "97672 Bulgaria Ct.", "city": "Santa Cruz", "state": "MD", "date": { "$date": "1965-07-08"}, "active": true }, { "name": "Reese Hartman", "age": 63, "phone": "860-950-4582", "email": "Priscilla@a.com", "address": "75167 Bouvet Island Ave.", "city": "Charlotte", "state": "IL", "date": { "$date": "1993-11-05"}, "active": true }, { "name": "Celeste Mendez", "age": 45, "phone": "192-285-1773", "email": "Patricia@primis.com", "address": "94397 North Isle of Palms Ct.", "city": "Rancho Palos Verdes", "state": "IL", "date": { "$date": "1985-04-04"}, "active": true }, { "name": "Peter Delaney", "age": 9, "phone": "199-149-1545", "email": "Tatiana@volutpat.com", "address": "24496 East Barbados Blvd.", "city": "Plattsburgh", "state": "ND", "date": { "$date": "1980-04-18"}, "active": false }, { "name": "Octavius Cobb", "age": 19, "phone": "385-259-3019", "email": "Jamal@nulla.com", "address": "29374 Monaco Ct.", "city": "Worcester", "state": "WI", "date": { "$date": "1961-10-23"}, "active": true }, { "name": "Stacy Kelly", "age": 33, "phone": "999-665-0229", "email": "Renee@lobortis.com", "address": "33464 South Haiti St.", "city": "Yazoo City", "state": "IN", "date": { "$date": "1957-11-19"}, "active": true }, { "name": "Neville Leonard", "age": 59, "phone": "767-017-6410", "email": "Rina@non.us", "address": "4684 South Morocco Blvd.", "city": "Calabasas", "state": "MD", "date": { "$date": "1967-07-06"}, "active": true }, { "name": "Diana Mayer", "age": 71, "phone": "616-811-6711", "email": "Ivory@sem.org", "address": "62554 Rwanda Blvd.", "city": "Superior", "state": "AK", "date": { "$date": "1981-04-07"}, "active": false }, { "name": "Veronica Adams", "age": 40, "phone": "109-926-4800", "email": "Leonard@in.gov", "address": "6151 South Indonesia Ln.", "city": "Kalamazoo", "state": "MT", "date": { "$date": "1968-07-03"}, "active": true }, { "name": "Serina Waller", "age": 43, "phone": "708-692-0733", "email": "Alyssa@nonummy.org", "address": "27255 East Poland Ave.", "city": "Binghamton", "state": "IN", "date": { "$date": "2001-09-20"}, "active": false }, { "name": "Luke Cherry", "age": 5, "phone": "339-232-1341", "email": "Anthony@nibh.gov", "address": "56109 West Philippines Blvd.", "city": "Cumberland", "state": "WA", "date": { "$date": "1958-02-05"}, "active": true }, { "name": "Virginia Briggs", "age": 61, "phone": "442-741-9513", "email": "Giselle@Aenean.org", "address": "68570 South Guyana St.", "city": "La Mirada", "state": "AK", "date": { "$date": "1957-06-27"}, "active": true }, { "name": "Madonna Woodard", "age": 25, "phone": "293-586-3678", "email": "Violet@vestibulum.gov", "address": "71007 North Netherlands Antilles St.", "city": "Jackson", "state": "TN", "date": { "$date": "1955-08-05"}, "active": false }, { "name": "Cole Joyce", "age": 56, "phone": "492-646-8390", "email": "Gay@nonummy.com", "address": "50361 Cameroon Blvd.", "city": "Lancaster", "state": "KY", "date": { "$date": "1963-05-16"}, "active": true }, { "name": "Demetria Bernard", "age": 75, "phone": "034-016-5305", "email": "Justina@eu.net", "address": "21970 East Bermuda Way", "city": "Sturgis", "state": "NY", "date": { "$date": "1963-07-10"}, "active": true }, { "name": "Meredith Kemp", "age": 10, "phone": "266-621-7961", "email": "Ethan@primis.us", "address": "14997 Australia St.", "city": "Boston", "state": "OK", "date": { "$date": "2004-01-01"}, "active": true }, { "name": "Thomas Hernandez", "age": 14, "phone": "253-740-3660", "email": "Hadassah@ante.gov", "address": "70092 North Angola Way", "city": "Bismarck", "state": "WV", "date": { "$date": "1957-06-05"}, "active": true }, { "name": "Gretchen Hester", "age": 56, "phone": "702-215-1821", "email": "Matthew@lacinia.net", "address": "53708 Norfolk Island Way", "city": "Bay St. Louis", "state": "AZ", "date": { "$date": "1998-08-22"}, "active": true }, { "name": "Brooke Moon", "age": 57, "phone": "367-873-6878", "email": "Jesse@velit.us", "address": "78749 East Gadsden St.", "city": "Akron", "state": "GA", "date": { "$date": "1952-10-19"}, "active": false }, { "name": "Raja Gibbs", "age": 52, "phone": "341-579-4460", "email": "Fulton@Class.org", "address": "5285 North Sri Lanka Blvd.", "city": "Atwater", "state": "CO", "date": { "$date": "1977-10-19"}, "active": true }, { "name": "Deborah Walker", "age": 60, "phone": "302-032-7237", "email": "Idona@risus.us", "address": "68250 West Solomon Islands St.", "city": "Kankakee", "state": "OR", "date": { "$date": "1956-04-29"}, "active": true }, { "name": "Wilma Jacobs", "age": 73, "phone": "370-265-6307", "email": "Miranda@accumsan.gov", "address": "35778 Caguas Way", "city": "New Bedford", "state": "CO", "date": { "$date": "1984-01-27"}, "active": true }, { "name": "Diana Marsh", "age": 66, "phone": "473-989-7549", "email": "Ocean@nisl.org", "address": "88540 South Montserrat Way", "city": "Parkersburg", "state": "CT", "date": { "$date": "1974-12-11"}, "active": true }, { "name": "Candace Forbes", "age": 52, "phone": "539-206-7580", "email": "Dominic@Morbi.edu", "address": "75683 East Canada Ct.", "city": "Gardner", "state": "IN", "date": { "$date": "1967-09-30"}, "active": true }, { "name": "Rosalyn Sanders", "age": 40, "phone": "017-511-3785", "email": "Merritt@elit.us", "address": "59020 East Swaziland Ave.", "city": "Cedar Rapids", "state": "NJ", "date": { "$date": "1964-03-24"}, "active": false }, { "name": "Chanda Townsend", "age": 64, "phone": "234-887-5925", "email": "Eric@aliquam.org", "address": "87143 West Central African Republic Way", "city": "Boulder Junction", "state": "MA", "date": { "$date": "1972-07-14"}, "active": true }, { "name": "Barbara Hayes", "age": 5, "phone": "218-138-3493", "email": "Reuben@litora.gov", "address": "8585 Dunkirk Blvd.", "city": "Rochester", "state": "PA", "date": { "$date": "1973-06-12"}, "active": true }, { "name": "Kirby Melendez", "age": 48, "phone": "905-536-9562", "email": "Dane@erat.com", "address": "25780 East Lesotho St.", "city": "Seal Beach", "state": "ME", "date": { "$date": "2003-03-11"}, "active": true }, { "name": "Ferris Jarvis", "age": 16, "phone": "774-540-7692", "email": "Simon@nostra.gov", "address": "77571 South Peru Ct.", "city": "West Bend", "state": "WV", "date": { "$date": "1967-10-17"}, "active": false }, { "name": "Ciaran Walsh", "age": 10, "phone": "760-759-5523", "email": "Tate@erat.org", "address": "18937 East Fontana Ave.", "city": "Darlington", "state": "PA", "date": { "$date": "1990-11-14"}, "active": true }, { "name": "Mason Slater", "age": 8, "phone": "676-671-2218", "email": "Maite@bibendum.edu", "address": "5181 South Estonia Way", "city": "Miami Beach", "state": "NY", "date": { "$date": "1977-01-30"}, "active": true }, { "name": "Flynn Brooks", "age": 68, "phone": "561-410-4218", "email": "Olivia@nec.org", "address": "6675 Benin Ln.", "city": "Helena", "state": "IA", "date": { "$date": "1975-05-12"}, "active": true }, { "name": "Rae Hudson", "age": 60, "phone": "165-009-5907", "email": "Tyrone@arcu.gov", "address": "46503 West Cincinnati Way", "city": "Corinth", "state": "UT", "date": { "$date": "1965-08-24"}, "active": true }, { "name": "Odysseus Banks", "age": 31, "phone": "399-466-5441", "email": "Marvin@leo.com", "address": "73972 South Guyana Ave.", "city": "Winston-Salem", "state": "FL", "date": { "$date": "1993-04-22"}, "active": true }, { "name": "Troy Pollard", "age": 16, "phone": "005-286-3103", "email": "Gray@morbi.org", "address": "10748 South Dominican Republic Ln.", "city": "Quincy", "state": "OH", "date": { "$date": "2000-12-04"}, "active": true }, { "name": "Stewart Vinson", "age": 32, "phone": "206-893-2379", "email": "Martina@neque.edu", "address": "90427 South Belarus Blvd.", "city": "Newton", "state": "NE", "date": { "$date": "1968-11-30"}, "active": true }, { "name": "Skyler Stephenson", "age": 55, "phone": "178-427-0522", "email": "Thaddeus@aliquam.edu", "address": "28713 Marshall Islands Ct.", "city": "Huntington", "state": "AZ", "date": { "$date": "1954-09-26"}, "active": false }, { "name": "Jenna Russell", "age": 49, "phone": "928-876-8844", "email": "Alea@molestie.org", "address": "18123 South South Georgia and The South Sandwich Islands Ave.", "city": "Laughlin", "state": "WA", "date": { "$date": "1964-11-18"}, "active": false }, { "name": "Dieter Serrano", "age": 61, "phone": "386-394-2988", "email": "Haviva@Mauris.net", "address": "46457 West Thailand Ave.", "city": "Newburyport", "state": "SD", "date": { "$date": "1982-07-13"}, "active": true }, { "name": "Illiana Kennedy", "age": 50, "phone": "201-430-0129", "email": "Troy@massa.com", "address": "32324 Belarus St.", "city": "Salem", "state": "IL", "date": { "$date": "1958-10-16"}, "active": true }, { "name": "Heidi Simpson", "age": 34, "phone": "737-141-8844", "email": "Sydnee@non.com", "address": "29409 South Ecuador Ln.", "city": "Leominster", "state": "ME", "date": { "$date": "1993-11-26"}, "active": true }, { "name": "Alexa Mccoy", "age": 6, "phone": "812-532-2383", "email": "Brian@torquent.net", "address": "15142 West Tokelau Ave.", "city": "Homer", "state": "NM", "date": { "$date": "1971-03-05"}, "active": true }, { "name": "Wallace Marks", "age": 19, "phone": "953-364-4374", "email": "Dolan@diam.edu", "address": "9088 China Blvd.", "city": "Franklin", "state": "NJ", "date": { "$date": "1956-05-11"}, "active": false }, { "name": "Amir Vaughn", "age": 20, "phone": "088-228-0095", "email": "Delilah@Quisque.us", "address": "86600 South Macedonia St.", "city": "Pembroke Pines", "state": "VT", "date": { "$date": "1996-08-03"}, "active": true }, { "name": "Halee Boyer", "age": 67, "phone": "817-527-9511", "email": "Forrest@tincidunt.gov", "address": "94536 East Bulgaria Ct.", "city": "Tustin", "state": "TN", "date": { "$date": "1971-10-26"}, "active": true }, { "name": "Malachi Day", "age": 25, "phone": "674-711-3901", "email": "Len@amet.org", "address": "94700 North Saint Kitts and Nevis St.", "city": "Moraga", "state": "MN", "date": { "$date": "1998-04-08"}, "active": true }, { "name": "Calista Bates", "age": 73, "phone": "626-730-4535", "email": "Graiden@taciti.net", "address": "95607 West Brazil Blvd.", "city": "Richland", "state": "KY", "date": { "$date": "1950-07-14"}, "active": true }, { "name": "Erich Rhodes", "age": 10, "phone": "282-913-9187", "email": "Reagan@imperdiet.us", "address": "49854 East Georgetown Ct.", "city": "San Bernardino", "state": "ME", "date": { "$date": "1974-10-08"}, "active": true }, { "name": "Elton Merritt", "age": 29, "phone": "100-993-4389", "email": "Evangeline@gravida.net", "address": "77703 West Clovis Way", "city": "Jonesboro", "state": "ID", "date": { "$date": "1977-03-06"}, "active": true }, { "name": "Signe Lopez", "age": 39, "phone": "757-276-8483", "email": "Francesca@per.com", "address": "50537 North Farrell Blvd.", "city": "Daly City", "state": "MA", "date": { "$date": "1961-04-26"}, "active": true }, { "name": "Harrison Myers", "age": 10, "phone": "805-698-8717", "email": "Ciara@Curabitur.net", "address": "708 West Afghanistan Ln.", "city": "Kingston", "state": "NJ", "date": { "$date": "1990-03-06"}, "active": true }, { "name": "Germaine Oneill", "age": 29, "phone": "590-763-9241", "email": "Dean@convallis.com", "address": "18300 South Afghanistan Way", "city": "Westfield", "state": "ME", "date": { "$date": "1994-12-20"}, "active": true }, { "name": "Melvin Saunders", "age": 23, "phone": "873-646-0583", "email": "Armand@venenatis.us", "address": "27677 North Switzerland Ct.", "city": "Lahaina", "state": "DC", "date": { "$date": "1957-03-04"}, "active": true }, { "name": "Eric Cain", "age": 43, "phone": "050-527-8112", "email": "Paul@sodales.edu", "address": "56501 North Samoa St.", "city": "New Castle", "state": "IN", "date": { "$date": "1957-10-23"}, "active": true }, { "name": "Teagan Merrill", "age": 46, "phone": "671-546-4600", "email": "Winifred@purus.org", "address": "50665 West Cayman Islands St.", "city": "Redondo Beach", "state": "MT", "date": { "$date": "1976-04-15"}, "active": true }, { "name": "Camille Bernard", "age": 27, "phone": "278-909-3382", "email": "Jennifer@in.com", "address": "54096 South Central African Republic Ave.", "city": "Alhambra", "state": "AZ", "date": { "$date": "1964-04-04"}, "active": true }, { "name": "Jesse Coffey", "age": 62, "phone": "563-975-0781", "email": "Hayes@imperdiet.com", "address": "57846 South Uganda Ave.", "city": "Tallahassee", "state": "MS", "date": { "$date": "1970-02-18"}, "active": true }, { "name": "Zeus Page", "age": 35, "phone": "845-416-3535", "email": "Maisie@cursus.edu", "address": "59924 Syrian Arab Republic Ct.", "city": "Plantation", "state": "MI", "date": { "$date": "1986-12-22"}, "active": false }, { "name": "Francis Mcgowan", "age": 21, "phone": "933-797-2034", "email": "Scott@aliquam.us", "address": "5215 South Sri Lanka Ct.", "city": "Two Rivers", "state": "OK", "date": { "$date": "1994-10-23"}, "active": true }, { "name": "Jamal Sanford", "age": 20, "phone": "045-004-1639", "email": "Damon@Pellentesque.gov", "address": "80719 North Anchorage Blvd.", "city": "Manchester", "state": "VT", "date": { "$date": "1959-08-21"}, "active": true }, { "name": "Zoe Mccray", "age": 63, "phone": "394-005-4476", "email": "Timon@conubia.org", "address": "16388 Antarctica Blvd.", "city": "Cruz Bay", "state": "WI", "date": { "$date": "1983-01-20"}, "active": true }, { "name": "Alfonso Stevens", "age": 51, "phone": "318-171-1095", "email": "Xander@ante.org", "address": "43833 East Cook Islands Ct.", "city": "Quincy", "state": "NH", "date": { "$date": "1954-11-02"}, "active": true }, { "name": "Cody Roach", "age": 31, "phone": "851-746-2741", "email": "Mechelle@eu.net", "address": "48770 South Belize Blvd.", "city": "La Mirada", "state": "OH", "date": { "$date": "1961-10-02"}, "active": true }, { "name": "Perry Banks", "age": 23, "phone": "642-257-3743", "email": "Galvin@tempor.com", "address": "63078 West Burundi Ln.", "city": "Bangor", "state": "DE", "date": { "$date": "1951-07-28"}, "active": true }, { "name": "Remedios Tyler", "age": 29, "phone": "206-548-6716", "email": "Nadine@Pellentesque.com", "address": "94064 South Coos Bay St.", "city": "Council Bluffs", "state": "TN", "date": { "$date": "1957-02-12"}, "active": false }, { "name": "Kenneth Pollard", "age": 39, "phone": "002-440-9036", "email": "Gabriel@accumsan.gov", "address": "46172 Turkmenistan Ave.", "city": "Elkhart", "state": "NH", "date": { "$date": "1986-12-14"}, "active": true }, { "name": "Asher Cunningham", "age": 46, "phone": "525-018-4824", "email": "Tarik@massa.gov", "address": "31806 South United Arab Emirates Ln.", "city": "Grand Island", "state": "AK", "date": { "$date": "1973-02-15"}, "active": true }, { "name": "Gloria Dudley", "age": 36, "phone": "274-109-4893", "email": "Oleg@commodo.net", "address": "41348 North Burkina Faso Ln.", "city": "Dover", "state": "CA", "date": { "$date": "1959-09-22"}, "active": false }, { "name": "Myles Stanton", "age": 75, "phone": "192-057-4149", "email": "Sylvester@ut.gov", "address": "95718 West Burkina Faso Ct.", "city": "Modesto", "state": "MT", "date": { "$date": "1995-11-25"}, "active": true }, { "name": "Zephr Church", "age": 61, "phone": "337-084-6291", "email": "Jordan@congue.us", "address": "7781 Paraguay Ct.", "city": "Palm Springs", "state": "MA", "date": { "$date": "1963-12-12"}, "active": true }, { "name": "Nathaniel Levine", "age": 53, "phone": "324-034-6656", "email": "Ferris@non.edu", "address": "307 South Morrison Ct.", "city": "Two Rivers", "state": "NY", "date": { "$date": "1994-01-13"}, "active": false }, { "name": "Naida Combs", "age": 35, "phone": "242-603-2887", "email": "Samantha@Proin.edu", "address": "97475 West Durango Ln.", "city": "Goose Creek", "state": "MA", "date": { "$date": "1996-08-17"}, "active": true }, { "name": "Guinevere Harding", "age": 51, "phone": "650-768-8657", "email": "Neville@Curabitur.gov", "address": "9458 New Albany Blvd.", "city": "Rancho Cordova", "state": "OR", "date": { "$date": "1953-07-01"}, "active": false }, { "name": "Dieter Charles", "age": 52, "phone": "499-733-4058", "email": "Ray@massa.us", "address": "8897 West La Palma Way", "city": "Winnemucca", "state": "UT", "date": { "$date": "1987-05-10"}, "active": false }, { "name": "Wyoming Bullock", "age": 29, "phone": "800-216-5494", "email": "Ifeoma@Suspendisse.net", "address": "78554 West Bosnia and Herzegovina Ln.", "city": "Oil City", "state": "AZ", "date": { "$date": "1950-06-21"}, "active": false }, { "name": "Nero Terry", "age": 33, "phone": "665-490-0611", "email": "Erich@ut.edu", "address": "58542 East Evanston Ct.", "city": "Rye", "state": "AL", "date": { "$date": "1963-01-17"}, "active": false }, { "name": "Chloe Langley", "age": 14, "phone": "375-357-9014", "email": "Cedric@Nullam.com", "address": "82170 South Bakersfield Ave.", "city": "Toledo", "state": "SC", "date": { "$date": "2001-08-07"}, "active": false }, { "name": "Tana Brady", "age": 28, "phone": "953-103-8504", "email": "Knox@justo.edu", "address": "46169 North Algeria Blvd.", "city": "Spokane Valley", "state": "CT", "date": { "$date": "1973-09-26"}, "active": true }, { "name": "Christine Whitfield", "age": 68, "phone": "803-905-8756", "email": "Judith@aliquam.org", "address": "7677 North Yemen Blvd.", "city": "Manitowoc", "state": "PA", "date": { "$date": "1961-06-24"}, "active": true }, { "name": "Brennan Randall", "age": 6, "phone": "007-654-7334", "email": "Iliana@mi.com", "address": "95133 South Broken Arrow Ct.", "city": "Garden Grove", "state": "IL", "date": { "$date": "1958-10-09"}, "active": false }, { "name": "Penelope Aguirre", "age": 12, "phone": "994-116-0542", "email": "Griffin@tellus.org", "address": "59967 East Bermuda Way", "city": "Reedsport", "state": "IL", "date": { "$date": "1990-12-28"}, "active": true }, { "name": "Gillian Daniel", "age": 10, "phone": "599-452-3632", "email": "Vanna@blandit.com", "address": "77404 North Chandler Ct.", "city": "Terre Haute", "state": "AK", "date": { "$date": "1987-08-03"}, "active": false }, { "name": "Russell Lucas", "age": 16, "phone": "741-411-6167", "email": "Eliana@ante.edu", "address": "41186 Bloomington Ave.", "city": "Laughlin", "state": "KY", "date": { "$date": "1960-04-01"}, "active": false }, { "name": "Magee Hanson", "age": 5, "phone": "404-209-0855", "email": "India@In.net", "address": "45236 East Chad Blvd.", "city": "Signal Hill", "state": "NH", "date": { "$date": "1964-08-19"}, "active": false }, { "name": "Lynn Douglas", "age": 10, "phone": "155-153-9533", "email": "Sigourney@facilisi.org", "address": "36969 North Belarus Way", "city": "Latrobe", "state": "TX", "date": { "$date": "1991-05-06"}, "active": false }, { "name": "Vincent Mccoy", "age": 15, "phone": "614-935-7951", "email": "Ezra@inceptos.gov", "address": "99093 East Saint Vincent and The Grenadines Ct.", "city": "Paramount", "state": "RI", "date": { "$date": "1985-10-13"}, "active": true }, { "name": "Nero Waller", "age": 54, "phone": "928-931-6470", "email": "Hope@ante.gov", "address": "66068 North Grand Junction Ct.", "city": "Modesto", "state": "AK", "date": { "$date": "1969-06-23"}, "active": false }, { "name": "Clementine Conner", "age": 57, "phone": "816-309-1719", "email": "Iris@magna.com", "address": "78637 West Gambia Ct.", "city": "Marlborough", "state": "OH", "date": { "$date": "1999-04-25"}, "active": true }, { "name": "Drew Mcclure", "age": 53, "phone": "982-565-7601", "email": "Barbara@Duis.gov", "address": "95254 Zambia St.", "city": "Elizabeth City", "state": "OH", "date": { "$date": "1981-09-12"}, "active": true }, { "name": "Keefe Wilkinson", "age": 72, "phone": "940-004-7016", "email": "Clio@magnis.us", "address": "6660 Bahamas Ln.", "city": "Victoria", "state": "OH", "date": { "$date": "1992-11-04"}, "active": true }, { "name": "Vladimir Frye", "age": 72, "phone": "613-567-4008", "email": "Naida@varius.edu", "address": "44351 South Faroe Islands Way", "city": "Mount Pleasant", "state": "AL", "date": { "$date": "1988-06-27"}, "active": true }, { "name": "Quinn Pollard", "age": 12, "phone": "639-205-4867", "email": "Tatyana@quis.net", "address": "88645 North Nepal Ln.", "city": "Lowell", "state": "OR", "date": { "$date": "1986-02-08"}, "active": true }, { "name": "Moses Keller", "age": 6, "phone": "163-243-9747", "email": "Lucian@nibh.net", "address": "49241 West Haiti Ln.", "city": "Lahaina", "state": "WA", "date": { "$date": "1969-04-09"}, "active": true }, { "name": "Dolan Huffman", "age": 10, "phone": "783-674-5639", "email": "Rahim@magnis.edu", "address": "48182 North Clearwater Way", "city": "Vacaville", "state": "MA", "date": { "$date": "1973-12-25"}, "active": true }, { "name": "Lillith Kaufman", "age": 55, "phone": "721-349-6494", "email": "Phyllis@augue.gov", "address": "38567 South Grand Junction Ct.", "city": "El Segundo", "state": "WY", "date": { "$date": "1997-07-20"}, "active": false }, { "name": "Renee Bauer", "age": 24, "phone": "256-900-5301", "email": "Olivia@Fusce.gov", "address": "13907 East Butler St.", "city": "Juneau", "state": "VT", "date": { "$date": "1973-09-06"}, "active": true }, { "name": "Stone Odonnell", "age": 53, "phone": "342-540-4307", "email": "Michelle@amet.edu", "address": "36126 West French Southern Territories Ln.", "city": "Chico", "state": "NJ", "date": { "$date": "2002-11-11"}, "active": true }, { "name": "Meredith Swanson", "age": 18, "phone": "747-728-3222", "email": "Harrison@dui.gov", "address": "86429 South Geneva Blvd.", "city": "Northampton", "state": "MS", "date": { "$date": "1965-08-25"}, "active": true }, { "name": "Imani Kidd", "age": 55, "phone": "812-608-9359", "email": "Violet@Nam.net", "address": "73110 North Latvia Way", "city": "Sioux City", "state": "CT", "date": { "$date": "1974-03-03"}, "active": false }, { "name": "Uta Hurley", "age": 31, "phone": "380-704-1755", "email": "Erich@primis.gov", "address": "67151 South Cocos (Keeling) Islands St.", "city": "Salem", "state": "SD", "date": { "$date": "1996-12-21"}, "active": false }, { "name": "Rama Tillman", "age": 36, "phone": "054-056-9901", "email": "Noelani@urna.org", "address": "40207 North Congo St.", "city": "Kemmerer", "state": "UT", "date": { "$date": "1971-04-13"}, "active": false }, { "name": "Declan Mendez", "age": 65, "phone": "971-080-5279", "email": "Yoko@lacinia.com", "address": "45976 East Tokelau Way", "city": "Lockport", "state": "RI", "date": { "$date": "1991-01-09"}, "active": false }, { "name": "Zeph Trujillo", "age": 71, "phone": "749-560-1042", "email": "Noelani@sagittis.com", "address": "99667 East Butte Ln.", "city": "Monterey Park", "state": "HI", "date": { "$date": "1955-06-05"}, "active": true }, { "name": "Francis Merritt", "age": 18, "phone": "640-174-2885", "email": "Kennedy@mauris.org", "address": "15256 South Armenia Way", "city": "Carrollton", "state": "CO", "date": { "$date": "1966-05-03"}, "active": true }, { "name": "Christine Mullins", "age": 14, "phone": "127-178-8864", "email": "Justin@eleifend.org", "address": "8950 West Bermuda Ln.", "city": "North Tonawanda", "state": "WV", "date": { "$date": "1996-06-29"}, "active": true }, { "name": "Clark Mercado", "age": 17, "phone": "970-832-1753", "email": "Louis@imperdiet.net", "address": "4746 Canada Ave.", "city": "Pendleton", "state": "CO", "date": { "$date": "1973-09-27"}, "active": true }, { "name": "Shannon Finley", "age": 72, "phone": "880-365-9957", "email": "Amos@auctor.gov", "address": "87392 North Glendale Ct.", "city": "Brown Deer", "state": "NM", "date": { "$date": "1956-09-06"}, "active": true }, { "name": "Ivana Mcbride", "age": 17, "phone": "411-118-4074", "email": "Vaughan@metus.net", "address": "69407 North Tokelau St.", "city": "Charleston", "state": "MS", "date": { "$date": "1962-07-26"}, "active": false }, { "name": "Palmer Cabrera", "age": 40, "phone": "647-166-6204", "email": "Chloe@leo.net", "address": "97103 Pakistan Ln.", "city": "Klamath Falls", "state": "MA", "date": { "$date": "1996-01-07"}, "active": false }, { "name": "Sean Mitchell", "age": 39, "phone": "267-813-1678", "email": "Jeanette@senectus.gov", "address": "20186 Burundi Ct.", "city": "Compton", "state": "VA", "date": { "$date": "2004-02-09"}, "active": true }, { "name": "Reece Washington", "age": 8, "phone": "109-786-0470", "email": "Imogene@aptent.net", "address": "47583 South Mongolia Way", "city": "Lancaster", "state": "WY", "date": { "$date": "1978-12-21"}, "active": true }, { "name": "Abra Roman", "age": 25, "phone": "062-353-9509", "email": "Isaac@primis.org", "address": "21198 Montserrat Ct.", "city": "Greensboro", "state": "WI", "date": { "$date": "1998-12-11"}, "active": true }, { "name": "Brent Boyd", "age": 60, "phone": "676-193-5864", "email": "Amos@dapibus.com", "address": "23868 North Marshfield Ln.", "city": "Meriden", "state": "DE", "date": { "$date": "1989-11-19"}, "active": false }, { "name": "Skyler Lewis", "age": 34, "phone": "720-651-6681", "email": "Upton@senectus.gov", "address": "39066 Saint Helena Way", "city": "Needham", "state": "IL", "date": { "$date": "1961-03-26"}, "active": false }, { "name": "Bo Lindsey", "age": 57, "phone": "862-305-2723", "email": "Lawrence@montes.us", "address": "86331 West Aruba Ave.", "city": "Yigo", "state": "MN", "date": { "$date": "1991-02-24"}, "active": true }, { "name": "Penelope Avila", "age": 37, "phone": "901-611-4425", "email": "Nelle@purus.org", "address": "54395 Denmark Ct.", "city": "Gilette", "state": "KY", "date": { "$date": "2001-12-27"}, "active": true }, { "name": "Serina Bishop", "age": 31, "phone": "148-671-3224", "email": "Wanda@ullamcorper.edu", "address": "58028 East Falkland Islands (Malvinas) Ave.", "city": "Valparaiso", "state": "VT", "date": { "$date": "1979-11-27"}, "active": false }, { "name": "India Lawrence", "age": 35, "phone": "185-825-7515", "email": "Declan@Quisque.edu", "address": "42175 West Brunei Darussalam Ln.", "city": "Hermitage", "state": "VA", "date": { "$date": "1962-11-14"}, "active": true }, { "name": "Madison Payne", "age": 56, "phone": "138-619-7953", "email": "Blythe@nulla.com", "address": "92545 Chino Hills Ct.", "city": "High Point", "state": "WV", "date": { "$date": "1972-09-17"}, "active": true }, { "name": "Dacey Wells", "age": 6, "phone": "060-667-0380", "email": "Amena@purus.org", "address": "40468 South Azerbaijan Ct.", "city": "South Pasadena", "state": "NV", "date": { "$date": "1989-09-07"}, "active": true }, { "name": "Breanna Banks", "age": 47, "phone": "073-207-7093", "email": "Charles@arcu.gov", "address": "97489 South Portugal Ln.", "city": "Saratoga Springs", "state": "AL", "date": { "$date": "1960-10-31"}, "active": true }, { "name": "Perry Kaufman", "age": 33, "phone": "701-562-9314", "email": "Peter@Nunc.com", "address": "42278 British Indian Ocean Territory Ct.", "city": "Lawrence", "state": "AK", "date": { "$date": "2000-08-12"}, "active": true }, { "name": "Kennedy Simpson", "age": 54, "phone": "390-291-6580", "email": "Dacey@Vestibulum.edu", "address": "9120 East Indio Blvd.", "city": "Eden Prairie", "state": "MI", "date": { "$date": "2002-06-14"}, "active": true }, { "name": "Wallace Floyd", "age": 65, "phone": "254-115-0391", "email": "Ursa@Nunc.com", "address": "81824 Iceland Ln.", "city": "Ventura", "state": "NJ", "date": { "$date": "1972-07-16"}, "active": true }, { "name": "Shellie Schmidt", "age": 37, "phone": "078-671-4208", "email": "Lev@consequat.org", "address": "96124 South Niue St.", "city": "Asbury Park", "state": "VT", "date": { "$date": "1974-04-19"}, "active": false }, { "name": "Raven Stevenson", "age": 50, "phone": "013-440-9294", "email": "Hakeem@primis.edu", "address": "31027 Somalia St.", "city": "Columbia", "state": "ID", "date": { "$date": "1962-10-11"}, "active": true }, { "name": "Gemma Melendez", "age": 33, "phone": "283-801-4887", "email": "Yeo@Nam.net", "address": "33705 Moldova St.", "city": "Moline", "state": "MI", "date": { "$date": "2004-04-13"}, "active": true }, { "name": "Nita Cabrera", "age": 50, "phone": "848-338-9332", "email": "Jared@pellentesque.us", "address": "76466 East Sudan Ct.", "city": "Charlotte Amalie", "state": "HI", "date": { "$date": "1982-08-02"}, "active": false }, { "name": "Gwendolyn Petersen", "age": 75, "phone": "566-007-1575", "email": "Virginia@dolor.edu", "address": "3267 South Bulgaria Way", "city": "Alpharetta", "state": "AK", "date": { "$date": "1952-07-07"}, "active": false }, { "name": "Hunter Flowers", "age": 64, "phone": "478-224-7014", "email": "Fletcher@imperdiet.com", "address": "71760 East Bakersfield Way", "city": "New York", "state": "VT", "date": { "$date": "1974-01-24"}, "active": true }, { "name": "Hamish Hartman", "age": 73, "phone": "050-852-7248", "email": "Libby@consectetuer.us", "address": "9272 Corpus Christi St.", "city": "Costa Mesa", "state": "WI", "date": { "$date": "1998-09-05"}, "active": true }, { "name": "Tanya Ramirez", "age": 43, "phone": "061-423-5544", "email": "Rajah@lorem.com", "address": "17944 South Cameroon Ln.", "city": "Pass Christian", "state": "NM", "date": { "$date": "1985-10-29"}, "active": false }, { "name": "Charissa Carr", "age": 10, "phone": "200-224-7251", "email": "Mari@elit.us", "address": "25021 Armenia Ln.", "city": "Marshfield", "state": "MA", "date": { "$date": "1956-01-06"}, "active": false }, { "name": "Dane Odom", "age": 53, "phone": "281-659-0658", "email": "Lucius@vel.net", "address": "52491 North Saint Helena Ln.", "city": "Centennial", "state": "ND", "date": { "$date": "1955-03-27"}, "active": true }, { "name": "Signe Shannon", "age": 72, "phone": "549-120-5578", "email": "Lacota@mattis.net", "address": "58751 East Sao Tome and Principe Ct.", "city": "Salisbury", "state": "CT", "date": { "$date": "2004-07-14"}, "active": true }, { "name": "Sean Morales", "age": 46, "phone": "832-170-2337", "email": "Dexter@adipiscing.org", "address": "50775 South Denmark St.", "city": "Detroit", "state": "OH", "date": { "$date": "1964-06-30"}, "active": true }, { "name": "Harding Sims", "age": 59, "phone": "510-866-0437", "email": "Donna@natoque.us", "address": "76272 East Netherlands Antilles St.", "city": "Laramie", "state": "AK", "date": { "$date": "1999-06-21"}, "active": true }, { "name": "Willow Bird", "age": 11, "phone": "525-238-3905", "email": "Nathan@facilisi.edu", "address": "7973 South Saint Vincent and The Grenadines Ave.", "city": "Joplin", "state": "TN", "date": { "$date": "1985-10-25"}, "active": true }, { "name": "Jelani Underwood", "age": 58, "phone": "153-766-6228", "email": "Athena@sagittis.edu", "address": "36314 South Antigua and Barbuda St.", "city": "Phenix City", "state": "AK", "date": { "$date": "1981-10-11"}, "active": true } ] ================================================ FILE: LiteDB.Tests/Resources/zip.json ================================================ [ { "_id": "01001", "city": "AGAWAM", "loc": [ -72.622739, 42.070206 ], "pop": 15338, "state": "MA" }, { "_id": "01002", "city": "CUSHMAN", "loc": [ -72.51564999999999, 42.377017 ], "pop": 36963, "state": "MA" }, { "_id": "01005", "city": "BARRE", "loc": [ -72.10835400000001, 42.409698 ], "pop": 4546, "state": "MA" }, { "_id": "01007", "city": "BELCHERTOWN", "loc": [ -72.41095300000001, 42.275103 ], "pop": 10579, "state": "MA" }, { "_id": "01008", "city": "BLANDFORD", "loc": [ -72.936114, 42.182949 ], "pop": 1240, "state": "MA" }, { "_id": "01010", "city": "BRIMFIELD", "loc": [ -72.188455, 42.116543 ], "pop": 3706, "state": "MA" }, { "_id": "01011", "city": "CHESTER", "loc": [ -72.988761, 42.279421 ], "pop": 1688, "state": "MA" }, { "_id": "01012", "city": "CHESTERFIELD", "loc": [ -72.833309, 42.38167 ], "pop": 177, "state": "MA" }, { "_id": "01013", "city": "CHICOPEE", "loc": [ -72.607962, 42.162046 ], "pop": 23396, "state": "MA" }, { "_id": "01020", "city": "CHICOPEE", "loc": [ -72.576142, 42.176443 ], "pop": 31495, "state": "MA" }, { "_id": "01022", "city": "WESTOVER AFB", "loc": [ -72.558657, 42.196672 ], "pop": 1764, "state": "MA" }, { "_id": "01026", "city": "CUMMINGTON", "loc": [ -72.905767, 42.435296 ], "pop": 1484, "state": "MA" }, { "_id": "01027", "city": "MOUNT TOM", "loc": [ -72.67992099999999, 42.264319 ], "pop": 16864, "state": "MA" }, { "_id": "01028", "city": "EAST LONGMEADOW", "loc": [ -72.505565, 42.067203 ], "pop": 13367, "state": "MA" }, { "_id": "01030", "city": "FEEDING HILLS", "loc": [ -72.675077, 42.07182 ], "pop": 11985, "state": "MA" }, { "_id": "01031", "city": "GILBERTVILLE", "loc": [ -72.19858499999999, 42.332194 ], "pop": 2385, "state": "MA" }, { "_id": "01032", "city": "GOSHEN", "loc": [ -72.844092, 42.466234 ], "pop": 122, "state": "MA" }, { "_id": "01033", "city": "GRANBY", "loc": [ -72.52000099999999, 42.255704 ], "pop": 5526, "state": "MA" }, { "_id": "01034", "city": "TOLLAND", "loc": [ -72.908793, 42.070234 ], "pop": 1652, "state": "MA" }, { "_id": "01035", "city": "HADLEY", "loc": [ -72.571499, 42.36062 ], "pop": 4231, "state": "MA" }, { "_id": "01036", "city": "HAMPDEN", "loc": [ -72.43182299999999, 42.064756 ], "pop": 4709, "state": "MA" }, { "_id": "01038", "city": "HATFIELD", "loc": [ -72.61673500000001, 42.38439 ], "pop": 3184, "state": "MA" }, { "_id": "01039", "city": "HAYDENVILLE", "loc": [ -72.70317799999999, 42.381799 ], "pop": 1387, "state": "MA" }, { "_id": "01040", "city": "HOLYOKE", "loc": [ -72.626193, 42.202007 ], "pop": 43704, "state": "MA" }, { "_id": "01050", "city": "HUNTINGTON", "loc": [ -72.873341, 42.265301 ], "pop": 2084, "state": "MA" }, { "_id": "01053", "city": "LEEDS", "loc": [ -72.70340299999999, 42.354292 ], "pop": 1350, "state": "MA" }, { "_id": "01054", "city": "LEVERETT", "loc": [ -72.499334, 42.46823 ], "pop": 1748, "state": "MA" }, { "_id": "01056", "city": "LUDLOW", "loc": [ -72.471012, 42.172823 ], "pop": 18820, "state": "MA" }, { "_id": "01057", "city": "MONSON", "loc": [ -72.31963399999999, 42.101017 ], "pop": 8194, "state": "MA" }, { "_id": "01060", "city": "FLORENCE", "loc": [ -72.654245, 42.324662 ], "pop": 27939, "state": "MA" }, { "_id": "01068", "city": "OAKHAM", "loc": [ -72.051265, 42.348033 ], "pop": 1503, "state": "MA" }, { "_id": "01069", "city": "PALMER", "loc": [ -72.328785, 42.176233 ], "pop": 9778, "state": "MA" }, { "_id": "01070", "city": "PLAINFIELD", "loc": [ -72.918289, 42.514393 ], "pop": 571, "state": "MA" }, { "_id": "01071", "city": "RUSSELL", "loc": [ -72.840343, 42.147063 ], "pop": 608, "state": "MA" }, { "_id": "01072", "city": "SHUTESBURY", "loc": [ -72.421342, 42.481968 ], "pop": 1533, "state": "MA" }, { "_id": "01073", "city": "SOUTHAMPTON", "loc": [ -72.719381, 42.224697 ], "pop": 4478, "state": "MA" }, { "_id": "01075", "city": "SOUTH HADLEY", "loc": [ -72.581137, 42.237537 ], "pop": 16699, "state": "MA" }, { "_id": "01077", "city": "SOUTHWICK", "loc": [ -72.770588, 42.051099 ], "pop": 7667, "state": "MA" }, { "_id": "01080", "city": "THREE RIVERS", "loc": [ -72.362352, 42.181894 ], "pop": 2425, "state": "MA" }, { "_id": "01081", "city": "WALES", "loc": [ -72.20459200000001, 42.062734 ], "pop": 1732, "state": "MA" }, { "_id": "01082", "city": "WARE", "loc": [ -72.258285, 42.261831 ], "pop": 9808, "state": "MA" }, { "_id": "01085", "city": "MONTGOMERY", "loc": [ -72.754318, 42.129484 ], "pop": 40117, "state": "MA" }, { "_id": "01089", "city": "WEST SPRINGFIELD", "loc": [ -72.641109, 42.115066 ], "pop": 27537, "state": "MA" }, { "_id": "01092", "city": "WEST WARREN", "loc": [ -72.203639, 42.20734 ], "pop": 4441, "state": "MA" }, { "_id": "01095", "city": "WILBRAHAM", "loc": [ -72.446415, 42.124506 ], "pop": 12635, "state": "MA" }, { "_id": "01096", "city": "WILLIAMSBURG", "loc": [ -72.77798900000001, 42.408522 ], "pop": 2295, "state": "MA" }, { "_id": "01098", "city": "WORTHINGTON", "loc": [ -72.931427, 42.384293 ], "pop": 877, "state": "MA" }, { "_id": "01103", "city": "SPRINGFIELD", "loc": [ -72.588735, 42.1029 ], "pop": 2323, "state": "MA" }, { "_id": "01104", "city": "SPRINGFIELD", "loc": [ -72.577769, 42.128848 ], "pop": 22115, "state": "MA" }, { "_id": "01105", "city": "SPRINGFIELD", "loc": [ -72.578312, 42.099931 ], "pop": 14970, "state": "MA" }, { "_id": "01106", "city": "LONGMEADOW", "loc": [ -72.5676, 42.050658 ], "pop": 15688, "state": "MA" }, { "_id": "01107", "city": "SPRINGFIELD", "loc": [ -72.606544, 42.117907 ], "pop": 12739, "state": "MA" }, { "_id": "01108", "city": "SPRINGFIELD", "loc": [ -72.558432, 42.085314 ], "pop": 25519, "state": "MA" }, { "_id": "01109", "city": "SPRINGFIELD", "loc": [ -72.554349, 42.114455 ], "pop": 32635, "state": "MA" }, { "_id": "01118", "city": "SPRINGFIELD", "loc": [ -72.527445, 42.092937 ], "pop": 14618, "state": "MA" }, { "_id": "01119", "city": "SPRINGFIELD", "loc": [ -72.51211000000001, 42.12473 ], "pop": 13040, "state": "MA" }, { "_id": "01128", "city": "SPRINGFIELD", "loc": [ -72.48890299999999, 42.094397 ], "pop": 3272, "state": "MA" }, { "_id": "01129", "city": "SPRINGFIELD", "loc": [ -72.487622, 42.122263 ], "pop": 6831, "state": "MA" }, { "_id": "01151", "city": "INDIAN ORCHARD", "loc": [ -72.505048, 42.153225 ], "pop": 8702, "state": "MA" }, { "_id": "01201", "city": "PITTSFIELD", "loc": [ -73.24708800000001, 42.453086 ], "pop": 50655, "state": "MA" }, { "_id": "01220", "city": "ADAMS", "loc": [ -73.117225, 42.622319 ], "pop": 9901, "state": "MA" }, { "_id": "01222", "city": "ASHLEY FALLS", "loc": [ -73.320195, 42.059552 ], "pop": 561, "state": "MA" }, { "_id": "01223", "city": "BECKET", "loc": [ -73.12032499999999, 42.359363 ], "pop": 1070, "state": "MA" }, { "_id": "01225", "city": "CHESHIRE", "loc": [ -73.15796400000001, 42.561059 ], "pop": 3094, "state": "MA" }, { "_id": "01226", "city": "DALTON", "loc": [ -73.160259, 42.475046 ], "pop": 7357, "state": "MA" }, { "_id": "01230", "city": "GREAT BARRINGTON", "loc": [ -73.36065000000001, 42.195922 ], "pop": 10603, "state": "MA" }, { "_id": "01235", "city": "PERU", "loc": [ -73.092433, 42.434604 ], "pop": 2559, "state": "MA" }, { "_id": "01236", "city": "HOUSATONIC", "loc": [ -73.374544, 42.265296 ], "pop": 802, "state": "MA" }, { "_id": "01237", "city": "HANCOCK", "loc": [ -73.24873700000001, 42.541961 ], "pop": 2328, "state": "MA" }, { "_id": "01238", "city": "LEE", "loc": [ -73.231696, 42.298994 ], "pop": 6916, "state": "MA" }, { "_id": "01240", "city": "LENOX", "loc": [ -73.271322, 42.364241 ], "pop": 5001, "state": "MA" }, { "_id": "01243", "city": "MIDDLEFIELD", "loc": [ -73.006226, 42.34795 ], "pop": 384, "state": "MA" }, { "_id": "01245", "city": "WEST OTIS", "loc": [ -73.213452, 42.187847 ], "pop": 329, "state": "MA" }, { "_id": "01247", "city": "CLARKSBURG", "loc": [ -73.10999, 42.69865 ], "pop": 19054, "state": "MA" }, { "_id": "01253", "city": "OTIS", "loc": [ -73.082093, 42.18988 ], "pop": 1060, "state": "MA" }, { "_id": "01254", "city": "RICHMOND", "loc": [ -73.364457, 42.378398 ], "pop": 1134, "state": "MA" }, { "_id": "01255", "city": "SANDISFIELD", "loc": [ -73.116285, 42.109429 ], "pop": 651, "state": "MA" }, { "_id": "01256", "city": "SAVOY", "loc": [ -73.023281, 42.576964 ], "pop": 632, "state": "MA" }, { "_id": "01257", "city": "SHEFFIELD", "loc": [ -73.361091, 42.100102 ], "pop": 1839, "state": "MA" }, { "_id": "01258", "city": "SOUTH EGREMONT", "loc": [ -73.456575, 42.101153 ], "pop": 135, "state": "MA" }, { "_id": "01259", "city": "SOUTHFIELD", "loc": [ -73.26093299999999, 42.078014 ], "pop": 622, "state": "MA" }, { "_id": "01262", "city": "STOCKBRIDGE", "loc": [ -73.32226300000001, 42.30104 ], "pop": 2200, "state": "MA" }, { "_id": "01266", "city": "WEST STOCKBRIDGE", "loc": [ -73.38251, 42.334752 ], "pop": 1173, "state": "MA" }, { "_id": "01267", "city": "WILLIAMSTOWN", "loc": [ -73.20363999999999, 42.708883 ], "pop": 8220, "state": "MA" }, { "_id": "01270", "city": "WINDSOR", "loc": [ -73.04661, 42.509494 ], "pop": 770, "state": "MA" }, { "_id": "01301", "city": "LEYDEN", "loc": [ -72.60184700000001, 42.601222 ], "pop": 18968, "state": "MA" }, { "_id": "01330", "city": "ASHFIELD", "loc": [ -72.810998, 42.523207 ], "pop": 1535, "state": "MA" }, { "_id": "01331", "city": "NEW SALEM", "loc": [ -72.21464400000001, 42.592065 ], "pop": 14077, "state": "MA" }, { "_id": "01337", "city": "LEYDEN", "loc": [ -72.563439, 42.683784 ], "pop": 2426, "state": "MA" }, { "_id": "01338", "city": "BUCKLAND", "loc": [ -72.764124, 42.615174 ], "pop": 16, "state": "MA" }, { "_id": "01339", "city": "HAWLEY", "loc": [ -72.880162, 42.621802 ], "pop": 1325, "state": "MA" }, { "_id": "01340", "city": "COLRAIN", "loc": [ -72.726508, 42.67905 ], "pop": 2050, "state": "MA" }, { "_id": "01341", "city": "CONWAY", "loc": [ -72.702473, 42.513832 ], "pop": 1524, "state": "MA" }, { "_id": "01342", "city": "DEERFIELD", "loc": [ -72.60723400000001, 42.540636 ], "pop": 1281, "state": "MA" }, { "_id": "01344", "city": "ERVING", "loc": [ -72.41663800000001, 42.604957 ], "pop": 635, "state": "MA" }, { "_id": "01346", "city": "HEATH", "loc": [ -72.839101, 42.685347 ], "pop": 174, "state": "MA" }, { "_id": "01349", "city": "MILLERS FALLS", "loc": [ -72.494626, 42.576206 ], "pop": 1893, "state": "MA" }, { "_id": "01350", "city": "MONROE", "loc": [ -72.960156, 42.723885 ], "pop": 97, "state": "MA" }, { "_id": "01351", "city": "MONTAGUE", "loc": [ -72.532837, 42.542864 ], "pop": 1699, "state": "MA" }, { "_id": "01355", "city": "NEW SALEM", "loc": [ -72.306241, 42.514643 ], "pop": 456, "state": "MA" }, { "_id": "01360", "city": "NORTHFIELD", "loc": [ -72.45099500000001, 42.688705 ], "pop": 2829, "state": "MA" }, { "_id": "01364", "city": "NEW SALEM", "loc": [ -72.30586700000001, 42.591231 ], "pop": 8544, "state": "MA" }, { "_id": "01366", "city": "PETERSHAM", "loc": [ -72.18934900000001, 42.489761 ], "pop": 1131, "state": "MA" }, { "_id": "01367", "city": "ROWE", "loc": [ -72.925776, 42.695289 ], "pop": 630, "state": "MA" }, { "_id": "01370", "city": "SHELBURNE FALLS", "loc": [ -72.739059, 42.602203 ], "pop": 4525, "state": "MA" }, { "_id": "01373", "city": "SOUTH DEERFIELD", "loc": [ -72.615268, 42.475616 ], "pop": 5118, "state": "MA" }, { "_id": "01375", "city": "SUNDERLAND", "loc": [ -72.56756900000001, 42.453947 ], "pop": 3399, "state": "MA" }, { "_id": "01376", "city": "TURNERS FALLS", "loc": [ -72.54701, 42.606521 ], "pop": 7100, "state": "MA" }, { "_id": "01379", "city": "WENDELL", "loc": [ -72.400851, 42.565644 ], "pop": 393, "state": "MA" }, { "_id": "01420", "city": "FITCHBURG", "loc": [ -71.803133, 42.579563 ], "pop": 41194, "state": "MA" }, { "_id": "01430", "city": "ASHBURNHAM", "loc": [ -71.92666, 42.649614 ], "pop": 5433, "state": "MA" }, { "_id": "01431", "city": "ASHBY", "loc": [ -71.817369, 42.674462 ], "pop": 2649, "state": "MA" }, { "_id": "01432", "city": "AYER", "loc": [ -71.578763, 42.55914 ], "pop": 6871, "state": "MA" }, { "_id": "01433", "city": "FT DEVENS", "loc": [ -71.621819, 42.532416 ], "pop": 8480, "state": "MA" }, { "_id": "01436", "city": "BALDWINVILLE", "loc": [ -72.06464699999999, 42.593568 ], "pop": 4386, "state": "MA" }, { "_id": "01440", "city": "GARDNER", "loc": [ -71.9898, 42.57405 ], "pop": 20125, "state": "MA" }, { "_id": "01450", "city": "GROTON", "loc": [ -71.55837099999999, 42.612351 ], "pop": 7504, "state": "MA" }, { "_id": "01451", "city": "HARVARD", "loc": [ -71.575293, 42.498565 ], "pop": 4445, "state": "MA" }, { "_id": "01452", "city": "HUBBARDSTON", "loc": [ -72.001159, 42.486538 ], "pop": 2797, "state": "MA" }, { "_id": "01453", "city": "LEOMINSTER", "loc": [ -71.756308, 42.52744 ], "pop": 38145, "state": "MA" }, { "_id": "01460", "city": "LITTLETON", "loc": [ -71.487667, 42.540132 ], "pop": 7066, "state": "MA" }, { "_id": "01462", "city": "LUNENBURG", "loc": [ -71.726642, 42.58843 ], "pop": 9117, "state": "MA" }, { "_id": "01463", "city": "PEPPERELL", "loc": [ -71.59339199999999, 42.668888 ], "pop": 10178, "state": "MA" }, { "_id": "01464", "city": "SHIRLEY CENTER", "loc": [ -71.646444, 42.558653 ], "pop": 6118, "state": "MA" }, { "_id": "01468", "city": "TEMPLETON", "loc": [ -72.064971, 42.545976 ], "pop": 2058, "state": "MA" }, { "_id": "01469", "city": "TOWNSEND", "loc": [ -71.689646, 42.652511 ], "pop": 6112, "state": "MA" }, { "_id": "01473", "city": "WESTMINSTER", "loc": [ -71.909599, 42.548319 ], "pop": 6191, "state": "MA" }, { "_id": "01474", "city": "W TOWNSEND", "loc": [ -71.74057000000001, 42.670404 ], "pop": 2452, "state": "MA" }, { "_id": "01475", "city": "WINCHENDON", "loc": [ -72.047524, 42.678943 ], "pop": 8805, "state": "MA" }, { "_id": "01501", "city": "AUBURN", "loc": [ -71.839144, 42.205502 ], "pop": 15007, "state": "MA" }, { "_id": "01503", "city": "BERLIN", "loc": [ -71.635634, 42.384438 ], "pop": 2293, "state": "MA" }, { "_id": "01504", "city": "BLACKSTONE", "loc": [ -71.52691, 42.028708 ], "pop": 8023, "state": "MA" }, { "_id": "01505", "city": "BOYLSTON", "loc": [ -71.731042, 42.337727 ], "pop": 3517, "state": "MA" }, { "_id": "01506", "city": "BROOKFIELD", "loc": [ -72.098887, 42.199141 ], "pop": 2968, "state": "MA" }, { "_id": "01507", "city": "CHARLTON", "loc": [ -71.96638400000001, 42.137902 ], "pop": 9576, "state": "MA" }, { "_id": "01510", "city": "CLINTON", "loc": [ -71.682847, 42.418147 ], "pop": 13269, "state": "MA" }, { "_id": "01515", "city": "EAST BROOKFIELD", "loc": [ -72.048078, 42.219308 ], "pop": 2033, "state": "MA" }, { "_id": "01516", "city": "EAST DOUGLAS", "loc": [ -71.72661100000001, 42.060566 ], "pop": 5594, "state": "MA" }, { "_id": "01518", "city": "FISKDALE", "loc": [ -72.11776399999999, 42.122762 ], "pop": 774, "state": "MA" }, { "_id": "01519", "city": "GRAFTON", "loc": [ -71.686848, 42.200371 ], "pop": 4910, "state": "MA" }, { "_id": "01520", "city": "HOLDEN", "loc": [ -71.84142, 42.341983 ], "pop": 12051, "state": "MA" }, { "_id": "01521", "city": "HOLLAND", "loc": [ -72.15437300000001, 42.040264 ], "pop": 747, "state": "MA" }, { "_id": "01522", "city": "JEFFERSON", "loc": [ -71.87058, 42.375519 ], "pop": 2478, "state": "MA" }, { "_id": "01523", "city": "LANCASTER", "loc": [ -71.686831, 42.450984 ], "pop": 6018, "state": "MA" }, { "_id": "01524", "city": "LEICESTER", "loc": [ -71.918829, 42.237047 ], "pop": 6527, "state": "MA" }, { "_id": "01527", "city": "MILLBURY", "loc": [ -71.764438, 42.196779 ], "pop": 12228, "state": "MA" }, { "_id": "01529", "city": "MILLVILLE", "loc": [ -71.579813, 42.033102 ], "pop": 2236, "state": "MA" }, { "_id": "01531", "city": "NEW BRAINTREE", "loc": [ -72.13064199999999, 42.31977 ], "pop": 881, "state": "MA" }, { "_id": "01532", "city": "NORTHBOROUGH", "loc": [ -71.646372, 42.318242 ], "pop": 11930, "state": "MA" }, { "_id": "01534", "city": "NORTHBRIDGE", "loc": [ -71.65636600000001, 42.1494 ], "pop": 4564, "state": "MA" }, { "_id": "01535", "city": "NORTH BROOKFIELD", "loc": [ -72.08212899999999, 42.266455 ], "pop": 4755, "state": "MA" }, { "_id": "01536", "city": "NORTH GRAFTON", "loc": [ -71.70369100000001, 42.229726 ], "pop": 5401, "state": "MA" }, { "_id": "01537", "city": "NORTH OXFORD", "loc": [ -71.885953, 42.16549 ], "pop": 3031, "state": "MA" }, { "_id": "01540", "city": "OXFORD", "loc": [ -71.86867700000001, 42.11285 ], "pop": 9557, "state": "MA" }, { "_id": "01541", "city": "PRINCETON", "loc": [ -71.876245, 42.450812 ], "pop": 3189, "state": "MA" }, { "_id": "01542", "city": "ROCHDALE", "loc": [ -71.906882, 42.199685 ], "pop": 1154, "state": "MA" }, { "_id": "01543", "city": "RUTLAND", "loc": [ -71.94895099999999, 42.376199 ], "pop": 4936, "state": "MA" }, { "_id": "01545", "city": "SHREWSBURY", "loc": [ -71.72050299999999, 42.284801 ], "pop": 24146, "state": "MA" }, { "_id": "01550", "city": "SOUTHBRIDGE", "loc": [ -72.035347, 42.075024 ], "pop": 17816, "state": "MA" }, { "_id": "01560", "city": "SOUTH GRAFTON", "loc": [ -71.692725, 42.176042 ], "pop": 2719, "state": "MA" }, { "_id": "01562", "city": "SPENCER", "loc": [ -71.990617, 42.244103 ], "pop": 11598, "state": "MA" }, { "_id": "01564", "city": "STERLING", "loc": [ -71.775192, 42.435351 ], "pop": 6481, "state": "MA" }, { "_id": "01566", "city": "STURBRIDGE", "loc": [ -72.084233, 42.112619 ], "pop": 7001, "state": "MA" }, { "_id": "01568", "city": "WEST UPTON", "loc": [ -71.608014, 42.173275 ], "pop": 4682, "state": "MA" }, { "_id": "01569", "city": "UXBRIDGE", "loc": [ -71.632869, 42.074426 ], "pop": 10364, "state": "MA" }, { "_id": "01570", "city": "DUDLEY HILL", "loc": [ -71.839467, 42.047574 ], "pop": 3735, "state": "MA" }, { "_id": "01571", "city": "DUDLEY", "loc": [ -71.89322799999999, 42.048894 ], "pop": 22001, "state": "MA" }, { "_id": "01581", "city": "WESTBOROUGH", "loc": [ -71.617604, 42.267891 ], "pop": 14132, "state": "MA" }, { "_id": "01583", "city": "WEST BOYLSTON", "loc": [ -71.783822, 42.35836 ], "pop": 6611, "state": "MA" }, { "_id": "01585", "city": "WEST BROOKFIELD", "loc": [ -72.15113700000001, 42.244137 ], "pop": 3528, "state": "MA" }, { "_id": "01588", "city": "WHITINSVILLE", "loc": [ -71.664357, 42.115319 ], "pop": 8807, "state": "MA" }, { "_id": "01590", "city": "WILKINSONVILLE", "loc": [ -71.74841600000001, 42.140586 ], "pop": 6719, "state": "MA" }, { "_id": "01602", "city": "WORCESTER", "loc": [ -71.841678, 42.270251 ], "pop": 19988, "state": "MA" }, { "_id": "01603", "city": "WORCESTER", "loc": [ -71.83799500000001, 42.245033 ], "pop": 18605, "state": "MA" }, { "_id": "01604", "city": "WORCESTER", "loc": [ -71.774626, 42.254084 ], "pop": 29036, "state": "MA" }, { "_id": "01605", "city": "WORCESTER", "loc": [ -71.78879499999999, 42.289391 ], "pop": 25695, "state": "MA" }, { "_id": "01606", "city": "WORCESTER", "loc": [ -71.79577399999999, 42.311029 ], "pop": 18213, "state": "MA" }, { "_id": "01607", "city": "WORCESTER", "loc": [ -71.793837, 42.230294 ], "pop": 9048, "state": "MA" }, { "_id": "01608", "city": "WORCESTER", "loc": [ -71.800262, 42.262425 ], "pop": 3646, "state": "MA" }, { "_id": "01609", "city": "WORCESTER", "loc": [ -71.81745600000001, 42.275387 ], "pop": 21905, "state": "MA" }, { "_id": "01610", "city": "WORCESTER", "loc": [ -71.81079800000001, 42.249186 ], "pop": 23720, "state": "MA" }, { "_id": "01611", "city": "CHERRY VALLEY", "loc": [ -71.874971, 42.237287 ], "pop": 2510, "state": "MA" }, { "_id": "01612", "city": "PAXTON", "loc": [ -71.92023399999999, 42.306646 ], "pop": 4047, "state": "MA" }, { "_id": "01701", "city": "FRAMINGHAM", "loc": [ -71.42548600000001, 42.300665 ], "pop": 65046, "state": "MA" }, { "_id": "01718", "city": "VILLAGE OF NAGOG", "loc": [ -71.422354, 42.514941 ], "pop": 2330, "state": "MA" }, { "_id": "01719", "city": "BOXBORO", "loc": [ -71.51822900000001, 42.486876 ], "pop": 3343, "state": "MA" }, { "_id": "01720", "city": "ACTON", "loc": [ -71.448255, 42.475076 ], "pop": 15514, "state": "MA" }, { "_id": "01721", "city": "ASHLAND", "loc": [ -71.458347, 42.253909 ], "pop": 12066, "state": "MA" }, { "_id": "01730", "city": "BEDFORD", "loc": [ -71.276796, 42.484287 ], "pop": 16147, "state": "MA" }, { "_id": "01740", "city": "BOLTON", "loc": [ -71.60759299999999, 42.436523 ], "pop": 3134, "state": "MA" }, { "_id": "01741", "city": "CARLISLE", "loc": [ -71.35189200000001, 42.528562 ], "pop": 4333, "state": "MA" }, { "_id": "01742", "city": "CONCORD", "loc": [ -71.374741, 42.456701 ], "pop": 17076, "state": "MA" }, { "_id": "01745", "city": "SOUTHBOROUGH", "loc": [ -71.502256, 42.293221 ], "pop": 506, "state": "MA" }, { "_id": "01746", "city": "HOLLISTON", "loc": [ -71.436059, 42.202641 ], "pop": 12917, "state": "MA" }, { "_id": "01747", "city": "HOPEDALE", "loc": [ -71.537601, 42.126796 ], "pop": 5649, "state": "MA" }, { "_id": "01748", "city": "HOPKINTON", "loc": [ -71.53017800000001, 42.219046 ], "pop": 9191, "state": "MA" }, { "_id": "01749", "city": "HUDSON", "loc": [ -71.560896, 42.391796 ], "pop": 17233, "state": "MA" }, { "_id": "01752", "city": "MARLBOROUGH", "loc": [ -71.54335500000001, 42.350861 ], "pop": 31813, "state": "MA" }, { "_id": "01754", "city": "MAYNARD", "loc": [ -71.454975, 42.432118 ], "pop": 10325, "state": "MA" }, { "_id": "01756", "city": "MENDON", "loc": [ -71.549882, 42.096744 ], "pop": 4010, "state": "MA" }, { "_id": "01757", "city": "MILFORD", "loc": [ -71.527402, 42.151142 ], "pop": 25372, "state": "MA" }, { "_id": "01760", "city": "NATICK", "loc": [ -71.35741, 42.287476 ], "pop": 30432, "state": "MA" }, { "_id": "01770", "city": "SHERBORN", "loc": [ -71.37871699999999, 42.233088 ], "pop": 3998, "state": "MA" }, { "_id": "01772", "city": "SOUTHBOROUGH", "loc": [ -71.531997, 42.293919 ], "pop": 6122, "state": "MA" }, { "_id": "01773", "city": "LINCOLN", "loc": [ -71.313723, 42.421723 ], "pop": 4515, "state": "MA" }, { "_id": "01775", "city": "STOW", "loc": [ -71.515019, 42.430785 ], "pop": 5328, "state": "MA" }, { "_id": "01776", "city": "SUDBURY", "loc": [ -71.42815899999999, 42.383655 ], "pop": 14358, "state": "MA" }, { "_id": "01778", "city": "WAYLAND", "loc": [ -71.35878099999999, 42.348629 ], "pop": 11874, "state": "MA" }, { "_id": "01801", "city": "WOBURN", "loc": [ -71.157404, 42.482894 ], "pop": 36152, "state": "MA" }, { "_id": "01803", "city": "BURLINGTON", "loc": [ -71.20043699999999, 42.508942 ], "pop": 23093, "state": "MA" }, { "_id": "01810", "city": "ANDOVER", "loc": [ -71.156481, 42.64956 ], "pop": 29161, "state": "MA" }, { "_id": "01821", "city": "BILLERICA", "loc": [ -71.25175400000001, 42.551874 ], "pop": 28899, "state": "MA" }, { "_id": "01824", "city": "SOUTH CHELMSFORD", "loc": [ -71.35752100000001, 42.59356 ], "pop": 24457, "state": "MA" }, { "_id": "01826", "city": "DRACUT", "loc": [ -71.318592, 42.676422 ], "pop": 25594, "state": "MA" }, { "_id": "01827", "city": "DUNSTABLE", "loc": [ -71.49520099999999, 42.673917 ], "pop": 2166, "state": "MA" }, { "_id": "01830", "city": "HAVERHILL", "loc": [ -71.072057, 42.785605 ], "pop": 22445, "state": "MA" }, { "_id": "01832", "city": "HAVERHILL", "loc": [ -71.10951900000001, 42.779154 ], "pop": 16860, "state": "MA" }, { "_id": "01833", "city": "GEORGETOWN", "loc": [ -70.98223900000001, 42.728067 ], "pop": 6384, "state": "MA" }, { "_id": "01834", "city": "GROVELAND", "loc": [ -71.027018, 42.753027 ], "pop": 5214, "state": "MA" }, { "_id": "01835", "city": "BRADFORD", "loc": [ -71.08548999999999, 42.758597 ], "pop": 12078, "state": "MA" }, { "_id": "01840", "city": "LAWRENCE", "loc": [ -71.16381, 42.707958 ], "pop": 2728, "state": "MA" }, { "_id": "01841", "city": "LAWRENCE", "loc": [ -71.16699699999999, 42.711545 ], "pop": 45555, "state": "MA" }, { "_id": "01843", "city": "LAWRENCE", "loc": [ -71.160506, 42.691053 ], "pop": 22285, "state": "MA" }, { "_id": "01844", "city": "METHUEN", "loc": [ -71.181031, 42.728019 ], "pop": 39664, "state": "MA" }, { "_id": "01845", "city": "NORTH ANDOVER", "loc": [ -71.109004, 42.682583 ], "pop": 22792, "state": "MA" }, { "_id": "01850", "city": "LOWELL", "loc": [ -71.30507799999999, 42.656035 ], "pop": 15434, "state": "MA" }, { "_id": "01851", "city": "LOWELL", "loc": [ -71.332882, 42.631548 ], "pop": 28154, "state": "MA" }, { "_id": "01852", "city": "LOWELL", "loc": [ -71.298331, 42.634413 ], "pop": 33379, "state": "MA" }, { "_id": "01854", "city": "LOWELL", "loc": [ -71.335464, 42.649254 ], "pop": 26472, "state": "MA" }, { "_id": "01860", "city": "MERRIMAC", "loc": [ -71.00465800000001, 42.834629 ], "pop": 5196, "state": "MA" }, { "_id": "01862", "city": "NORTH BILLERICA", "loc": [ -71.290217, 42.575694 ], "pop": 8720, "state": "MA" }, { "_id": "01863", "city": "NORTH CHELMSFORD", "loc": [ -71.390834, 42.634737 ], "pop": 7878, "state": "MA" }, { "_id": "01864", "city": "NORTH READING", "loc": [ -71.094711, 42.581898 ], "pop": 12002, "state": "MA" }, { "_id": "01867", "city": "READING", "loc": [ -71.109021, 42.527986 ], "pop": 22539, "state": "MA" }, { "_id": "01876", "city": "TEWKSBURY", "loc": [ -71.223224, 42.60283 ], "pop": 27269, "state": "MA" }, { "_id": "01879", "city": "TYNGSBORO", "loc": [ -71.415766, 42.672383 ], "pop": 8643, "state": "MA" }, { "_id": "01880", "city": "WAKEFIELD", "loc": [ -71.068471, 42.500886 ], "pop": 24830, "state": "MA" }, { "_id": "01886", "city": "GRANITEVILLE", "loc": [ -71.438143, 42.589959 ], "pop": 16430, "state": "MA" }, { "_id": "01887", "city": "WILMINGTON", "loc": [ -71.17230600000001, 42.558143 ], "pop": 17647, "state": "MA" }, { "_id": "01890", "city": "WINCHESTER", "loc": [ -71.14407, 42.453028 ], "pop": 20232, "state": "MA" }, { "_id": "01901", "city": "LYNN", "loc": [ -70.945516, 42.463378 ], "pop": 1187, "state": "MA" }, { "_id": "01902", "city": "LYNN", "loc": [ -70.94198900000001, 42.469814 ], "pop": 41625, "state": "MA" }, { "_id": "01904", "city": "EAST LYNN", "loc": [ -70.96279800000001, 42.487453 ], "pop": 17073, "state": "MA" }, { "_id": "01905", "city": "WEST LYNN", "loc": [ -70.97382500000001, 42.46453 ], "pop": 21360, "state": "MA" }, { "_id": "01906", "city": "SAUGUS", "loc": [ -71.011093, 42.463344 ], "pop": 25487, "state": "MA" }, { "_id": "01907", "city": "SWAMPSCOTT", "loc": [ -70.909774, 42.474611 ], "pop": 13650, "state": "MA" }, { "_id": "01908", "city": "NAHANT", "loc": [ -70.927739, 42.426098 ], "pop": 3828, "state": "MA" }, { "_id": "01913", "city": "AMESBURY", "loc": [ -70.93668099999999, 42.855879 ], "pop": 14970, "state": "MA" }, { "_id": "01915", "city": "BEVERLY", "loc": [ -70.875939, 42.560825 ], "pop": 38259, "state": "MA" }, { "_id": "01921", "city": "BOXFORD", "loc": [ -71.01137199999999, 42.679719 ], "pop": 6249, "state": "MA" }, { "_id": "01922", "city": "BYFIELD", "loc": [ -70.935053, 42.756792 ], "pop": 2006, "state": "MA" }, { "_id": "01923", "city": "DANVERS", "loc": [ -70.94246099999999, 42.569402 ], "pop": 23977, "state": "MA" }, { "_id": "01929", "city": "ESSEX", "loc": [ -70.782794, 42.628629 ], "pop": 3260, "state": "MA" }, { "_id": "01930", "city": "GLOUCESTER", "loc": [ -70.672149, 42.620836 ], "pop": 28716, "state": "MA" }, { "_id": "01938", "city": "IPSWICH", "loc": [ -70.84935299999999, 42.680877 ], "pop": 11864, "state": "MA" }, { "_id": "01940", "city": "LYNNFIELD", "loc": [ -71.033873, 42.532711 ], "pop": 11274, "state": "MA" }, { "_id": "01944", "city": "MANCHESTER", "loc": [ -70.76743399999999, 42.57963 ], "pop": 5286, "state": "MA" }, { "_id": "01945", "city": "MARBLEHEAD", "loc": [ -70.865291, 42.498431 ], "pop": 19971, "state": "MA" }, { "_id": "01949", "city": "MIDDLETON", "loc": [ -71.013004, 42.594184 ], "pop": 4921, "state": "MA" }, { "_id": "01950", "city": "NEWBURYPORT", "loc": [ -70.884668, 42.812964 ], "pop": 16317, "state": "MA" }, { "_id": "01951", "city": "NEWBURY", "loc": [ -70.84737699999999, 42.783475 ], "pop": 3710, "state": "MA" }, { "_id": "01952", "city": "SALISBURY", "loc": [ -70.858822, 42.850678 ], "pop": 6879, "state": "MA" }, { "_id": "01960", "city": "PEABODY", "loc": [ -70.96119400000001, 42.532579 ], "pop": 47685, "state": "MA" }, { "_id": "01966", "city": "ROCKPORT", "loc": [ -70.619424, 42.657973 ], "pop": 7482, "state": "MA" }, { "_id": "01969", "city": "ROWLEY", "loc": [ -70.90696, 42.713753 ], "pop": 4368, "state": "MA" }, { "_id": "01970", "city": "SALEM", "loc": [ -70.90034300000001, 42.515114 ], "pop": 37642, "state": "MA" }, { "_id": "01982", "city": "SOUTH HAMILTON", "loc": [ -70.856132, 42.618478 ], "pop": 7288, "state": "MA" }, { "_id": "01983", "city": "TOPSFIELD", "loc": [ -70.948843, 42.641546 ], "pop": 5763, "state": "MA" }, { "_id": "01984", "city": "WENHAM", "loc": [ -70.87862199999999, 42.60166 ], "pop": 4148, "state": "MA" }, { "_id": "01985", "city": "WEST NEWBURY", "loc": [ -70.977811, 42.794865 ], "pop": 3421, "state": "MA" }, { "_id": "02019", "city": "BELLINGHAM", "loc": [ -71.476829, 42.074573 ], "pop": 14873, "state": "MA" }, { "_id": "02021", "city": "CANTON", "loc": [ -71.135536, 42.164454 ], "pop": 18530, "state": "MA" }, { "_id": "02025", "city": "COHASSET", "loc": [ -70.812788, 42.239484 ], "pop": 7075, "state": "MA" }, { "_id": "02026", "city": "DEDHAM", "loc": [ -71.163741, 42.243685 ], "pop": 23782, "state": "MA" }, { "_id": "02030", "city": "DOVER", "loc": [ -71.285363, 42.236233 ], "pop": 4915, "state": "MA" }, { "_id": "02032", "city": "EAST WALPOLE", "loc": [ -71.2179, 42.15324 ], "pop": 3844, "state": "MA" }, { "_id": "02035", "city": "FOXBORO", "loc": [ -71.24412700000001, 42.064938 ], "pop": 14293, "state": "MA" }, { "_id": "02038", "city": "FRANKLIN", "loc": [ -71.40578600000001, 42.09347 ], "pop": 22128, "state": "MA" }, { "_id": "02043", "city": "HINGHAM", "loc": [ -70.891051, 42.224485 ], "pop": 19821, "state": "MA" }, { "_id": "02045", "city": "HULL", "loc": [ -70.87544200000001, 42.285346 ], "pop": 10466, "state": "MA" }, { "_id": "02048", "city": "MANSFIELD", "loc": [ -71.217775, 42.021238 ], "pop": 16676, "state": "MA" }, { "_id": "02050", "city": "MARSHFIELD", "loc": [ -70.69931, 42.106177 ], "pop": 21782, "state": "MA" }, { "_id": "02052", "city": "MEDFIELD", "loc": [ -71.304813, 42.184525 ], "pop": 10531, "state": "MA" }, { "_id": "02053", "city": "MEDWAY", "loc": [ -71.42171500000001, 42.151363 ], "pop": 9902, "state": "MA" }, { "_id": "02054", "city": "MILLIS", "loc": [ -71.360693, 42.166938 ], "pop": 7613, "state": "MA" }, { "_id": "02056", "city": "NORFOLK", "loc": [ -71.32693399999999, 42.117746 ], "pop": 9259, "state": "MA" }, { "_id": "02061", "city": "NORWELL", "loc": [ -70.82172, 42.159574 ], "pop": 9279, "state": "MA" }, { "_id": "02062", "city": "NORWOOD", "loc": [ -71.20331299999999, 42.186843 ], "pop": 28700, "state": "MA" }, { "_id": "02066", "city": "SCITUATE", "loc": [ -70.752476, 42.203235 ], "pop": 16535, "state": "MA" }, { "_id": "02067", "city": "SHARON", "loc": [ -71.175872, 42.109388 ], "pop": 15873, "state": "MA" }, { "_id": "02071", "city": "SOUTH WALPOLE", "loc": [ -71.275235, 42.099203 ], "pop": 752, "state": "MA" }, { "_id": "02072", "city": "STOUGHTON", "loc": [ -71.10735699999999, 42.125279 ], "pop": 26777, "state": "MA" }, { "_id": "02081", "city": "WALPOLE", "loc": [ -71.254391, 42.144413 ], "pop": 15615, "state": "MA" }, { "_id": "02090", "city": "WESTWOOD", "loc": [ -71.210426, 42.214824 ], "pop": 12557, "state": "MA" }, { "_id": "02093", "city": "WRENTHAM", "loc": [ -71.339568, 42.061746 ], "pop": 9006, "state": "MA" }, { "_id": "02108", "city": "BOSTON", "loc": [ -71.068432, 42.357603 ], "pop": 3697, "state": "MA" }, { "_id": "02109", "city": "BOSTON", "loc": [ -71.053386, 42.362963 ], "pop": 3926, "state": "MA" }, { "_id": "02110", "city": "BOSTON", "loc": [ -71.051417, 42.357636 ], "pop": 957, "state": "MA" }, { "_id": "02111", "city": "BOSTON", "loc": [ -71.0629, 42.350348 ], "pop": 3759, "state": "MA" }, { "_id": "02113", "city": "BOSTON", "loc": [ -71.055958, 42.365656 ], "pop": 6698, "state": "MA" }, { "_id": "02114", "city": "BOSTON", "loc": [ -71.06823, 42.361111 ], "pop": 10246, "state": "MA" }, { "_id": "02115", "city": "BOSTON", "loc": [ -71.092215, 42.342706 ], "pop": 25597, "state": "MA" }, { "_id": "02116", "city": "BOSTON", "loc": [ -71.076798, 42.349201 ], "pop": 17459, "state": "MA" }, { "_id": "02118", "city": "ROXBURY", "loc": [ -71.075627, 42.340154 ], "pop": 21914, "state": "MA" }, { "_id": "02119", "city": "ROXBURY", "loc": [ -71.086923, 42.322414 ], "pop": 25207, "state": "MA" }, { "_id": "02120", "city": "ROXBURY", "loc": [ -71.097978, 42.332844 ], "pop": 14212, "state": "MA" }, { "_id": "02121", "city": "DORCHESTER", "loc": [ -71.08305, 42.307503 ], "pop": 25602, "state": "MA" }, { "_id": "02122", "city": "DORCHESTER", "loc": [ -71.05830400000001, 42.297278 ], "pop": 21266, "state": "MA" }, { "_id": "02124", "city": "DORCHESTER", "loc": [ -71.072898, 42.287984 ], "pop": 48560, "state": "MA" }, { "_id": "02125", "city": "DORCHESTER", "loc": [ -71.061924, 42.315305 ], "pop": 31393, "state": "MA" }, { "_id": "02126", "city": "MATTAPAN", "loc": [ -71.09387099999999, 42.273889 ], "pop": 27808, "state": "MA" }, { "_id": "02127", "city": "SOUTH BOSTON", "loc": [ -71.043792, 42.333454 ], "pop": 29170, "state": "MA" }, { "_id": "02128", "city": "EAST BOSTON", "loc": [ -71.028682, 42.378137 ], "pop": 32941, "state": "MA" }, { "_id": "02129", "city": "CHARLESTOWN", "loc": [ -71.062715, 42.377815 ], "pop": 14775, "state": "MA" }, { "_id": "02130", "city": "JAMAICA PLAIN", "loc": [ -71.11149500000001, 42.312596 ], "pop": 36571, "state": "MA" }, { "_id": "02131", "city": "ROSLINDALE", "loc": [ -71.129543, 42.283615 ], "pop": 32677, "state": "MA" }, { "_id": "02132", "city": "WEST ROXBURY", "loc": [ -71.158868, 42.27868 ], "pop": 26366, "state": "MA" }, { "_id": "02134", "city": "ALLSTON", "loc": [ -71.13286600000001, 42.353519 ], "pop": 23775, "state": "MA" }, { "_id": "02135", "city": "BRIGHTON", "loc": [ -71.156599, 42.34779 ], "pop": 35011, "state": "MA" }, { "_id": "02136", "city": "HYDE PARK", "loc": [ -71.126052, 42.253989 ], "pop": 24260, "state": "MA" }, { "_id": "02138", "city": "CAMBRIDGE", "loc": [ -71.12561100000001, 42.377045 ], "pop": 33841, "state": "MA" }, { "_id": "02139", "city": "CAMBRIDGE", "loc": [ -71.10415500000001, 42.364688 ], "pop": 33149, "state": "MA" }, { "_id": "02140", "city": "NORTH CAMBRIDGE", "loc": [ -71.129379, 42.391366 ], "pop": 16313, "state": "MA" }, { "_id": "02141", "city": "EAST CAMBRIDGE", "loc": [ -71.08827700000001, 42.370701 ], "pop": 10392, "state": "MA" }, { "_id": "02142", "city": "CAMBRIDGE", "loc": [ -71.083011, 42.362025 ], "pop": 1336, "state": "MA" }, { "_id": "02143", "city": "SOMERVILLE", "loc": [ -71.102814, 42.382945 ], "pop": 25597, "state": "MA" }, { "_id": "02144", "city": "SOMERVILLE", "loc": [ -71.12205899999999, 42.40032 ], "pop": 26374, "state": "MA" }, { "_id": "02145", "city": "SOMERVILLE", "loc": [ -71.092944, 42.390678 ], "pop": 24422, "state": "MA" }, { "_id": "02146", "city": "BROOKLINE", "loc": [ -71.128917, 42.339158 ], "pop": 56614, "state": "MA" }, { "_id": "02148", "city": "MALDEN", "loc": [ -71.060507, 42.42911 ], "pop": 54114, "state": "MA" }, { "_id": "02149", "city": "EVERETT", "loc": [ -71.05144799999999, 42.411199 ], "pop": 35493, "state": "MA" }, { "_id": "02150", "city": "CHELSEA", "loc": [ -71.032521, 42.396252 ], "pop": 28790, "state": "MA" }, { "_id": "02151", "city": "REVERE", "loc": [ -71.00516500000001, 42.413767 ], "pop": 42766, "state": "MA" }, { "_id": "02152", "city": "WINTHROP", "loc": [ -70.98004299999999, 42.376294 ], "pop": 18907, "state": "MA" }, { "_id": "02154", "city": "NORTH WALTHAM", "loc": [ -71.236497, 42.382492 ], "pop": 57871, "state": "MA" }, { "_id": "02155", "city": "MEDFORD", "loc": [ -71.10868600000001, 42.417335 ], "pop": 57338, "state": "MA" }, { "_id": "02158", "city": "NEWTONVILLE", "loc": [ -71.1902, 42.353835 ], "pop": 13271, "state": "MA" }, { "_id": "02159", "city": "NEWTON CENTER", "loc": [ -71.191839, 42.318889 ], "pop": 18726, "state": "MA" }, { "_id": "02160", "city": "NEWTONVILLE", "loc": [ -71.208771, 42.351961 ], "pop": 8872, "state": "MA" }, { "_id": "02161", "city": "NEWTON HIGHLANDS", "loc": [ -71.20934699999999, 42.318512 ], "pop": 6657, "state": "MA" }, { "_id": "02162", "city": "NEWTONVILLE", "loc": [ -71.258025, 42.330296 ], "pop": 1427, "state": "MA" }, { "_id": "02163", "city": "CAMBRIDGE", "loc": [ -71.141879, 42.364005 ], "pop": 0, "state": "MA" }, { "_id": "02164", "city": "NEWTON UPPER FAL", "loc": [ -71.221615, 42.312562 ], "pop": 2597, "state": "MA" }, { "_id": "02165", "city": "NEWTONVILLE", "loc": [ -71.22795000000001, 42.352366 ], "pop": 12027, "state": "MA" }, { "_id": "02166", "city": "AUBURNDALE", "loc": [ -71.247598, 42.345928 ], "pop": 6123, "state": "MA" }, { "_id": "02167", "city": "BOSTON COLLEGE", "loc": [ -71.16271999999999, 42.31903 ], "pop": 15619, "state": "MA" }, { "_id": "02168", "city": "WABAN", "loc": [ -71.23070300000001, 42.327049 ], "pop": 5759, "state": "MA" }, { "_id": "02169", "city": "QUINCY", "loc": [ -70.997816, 42.249133 ], "pop": 48920, "state": "MA" }, { "_id": "02170", "city": "QUINCY", "loc": [ -71.01864399999999, 42.26713 ], "pop": 18330, "state": "MA" }, { "_id": "02171", "city": "QUINCY", "loc": [ -71.024141, 42.282519 ], "pop": 18251, "state": "MA" }, { "_id": "02172", "city": "EAST WATERTOWN", "loc": [ -71.180266, 42.371497 ], "pop": 33930, "state": "MA" }, { "_id": "02173", "city": "LEXINGTON", "loc": [ -71.225916, 42.445384 ], "pop": 28994, "state": "MA" }, { "_id": "02174", "city": "ARLINGTON", "loc": [ -71.16251699999999, 42.417098 ], "pop": 44539, "state": "MA" }, { "_id": "02176", "city": "MELROSE", "loc": [ -71.063191, 42.458066 ], "pop": 28228, "state": "MA" }, { "_id": "02178", "city": "BELMONT", "loc": [ -71.17464699999999, 42.389656 ], "pop": 24733, "state": "MA" }, { "_id": "02180", "city": "STONEHAM", "loc": [ -71.09780000000001, 42.482778 ], "pop": 22147, "state": "MA" }, { "_id": "02181", "city": "WELLESLEY", "loc": [ -71.287966, 42.305593 ], "pop": 26615, "state": "MA" }, { "_id": "02184", "city": "BRAINTREE", "loc": [ -70.99630399999999, 42.209284 ], "pop": 33836, "state": "MA" }, { "_id": "02186", "city": "MILTON", "loc": [ -71.077051, 42.253663 ], "pop": 25558, "state": "MA" }, { "_id": "02188", "city": "WEYMOUTH", "loc": [ -70.958248, 42.211327 ], "pop": 13187, "state": "MA" }, { "_id": "02189", "city": "WEYMOUTH", "loc": [ -70.93167099999999, 42.211606 ], "pop": 14055, "state": "MA" }, { "_id": "02190", "city": "WEYMOUTH", "loc": [ -70.94869, 42.172817 ], "pop": 17668, "state": "MA" }, { "_id": "02191", "city": "WEYMOUTH", "loc": [ -70.944318, 42.243564 ], "pop": 9153, "state": "MA" }, { "_id": "02192", "city": "NEEDHAM", "loc": [ -71.23517200000001, 42.278908 ], "pop": 19570, "state": "MA" }, { "_id": "02193", "city": "WESTON", "loc": [ -71.300291, 42.359422 ], "pop": 10221, "state": "MA" }, { "_id": "02194", "city": "NEEDHAM", "loc": [ -71.234363, 42.297702 ], "pop": 8006, "state": "MA" }, { "_id": "02199", "city": "BOSTON", "loc": [ -71.082543, 42.347873 ], "pop": 886, "state": "MA" }, { "_id": "02210", "city": "BOSTON", "loc": [ -71.046511, 42.348921 ], "pop": 308, "state": "MA" }, { "_id": "02215", "city": "BOSTON", "loc": [ -71.102689, 42.347088 ], "pop": 17769, "state": "MA" }, { "_id": "02322", "city": "AVON", "loc": [ -71.043738, 42.125825 ], "pop": 4594, "state": "MA" }, { "_id": "02324", "city": "BRIDGEWATER", "loc": [ -70.97234, 41.977341 ], "pop": 21198, "state": "MA" }, { "_id": "02330", "city": "CARVER", "loc": [ -70.767754, 41.888265 ], "pop": 10573, "state": "MA" }, { "_id": "02332", "city": "DUXBURY", "loc": [ -70.716257, 42.039936 ], "pop": 13913, "state": "MA" }, { "_id": "02333", "city": "EAST BRIDGEWATER", "loc": [ -70.944964, 42.031478 ], "pop": 11104, "state": "MA" }, { "_id": "02338", "city": "HALIFAX", "loc": [ -70.84479399999999, 42.000159 ], "pop": 6526, "state": "MA" }, { "_id": "02339", "city": "HANOVER", "loc": [ -70.857006, 42.121406 ], "pop": 11912, "state": "MA" }, { "_id": "02341", "city": "HANSON", "loc": [ -70.865053, 42.061627 ], "pop": 9037, "state": "MA" }, { "_id": "02343", "city": "HOLBROOK", "loc": [ -71.008273, 42.14641 ], "pop": 11041, "state": "MA" }, { "_id": "02346", "city": "MIDDLEBORO", "loc": [ -70.892965, 41.888396 ], "pop": 17867, "state": "MA" }, { "_id": "02347", "city": "LAKEVILLE", "loc": [ -70.958195, 41.837377 ], "pop": 7785, "state": "MA" }, { "_id": "02351", "city": "ABINGTON", "loc": [ -70.95429300000001, 42.116715 ], "pop": 13849, "state": "MA" }, { "_id": "02356", "city": "NORTH EASTON", "loc": [ -71.112337, 42.058956 ], "pop": 10397, "state": "MA" }, { "_id": "02359", "city": "PEMBROKE", "loc": [ -70.80440400000001, 42.062072 ], "pop": 14535, "state": "MA" }, { "_id": "02360", "city": "PLYMOUTH", "loc": [ -70.642004, 41.910404 ], "pop": 45629, "state": "MA" }, { "_id": "02364", "city": "KINGSTON", "loc": [ -70.740993, 41.995022 ], "pop": 9045, "state": "MA" }, { "_id": "02367", "city": "PLYMPTON", "loc": [ -70.804582, 41.96549 ], "pop": 2384, "state": "MA" }, { "_id": "02368", "city": "RANDOLPH", "loc": [ -71.05139200000001, 42.173587 ], "pop": 30057, "state": "MA" }, { "_id": "02370", "city": "ROCKLAND", "loc": [ -70.913263, 42.129286 ], "pop": 16123, "state": "MA" }, { "_id": "02375", "city": "SOUTH EASTON", "loc": [ -71.098814, 42.025704 ], "pop": 9247, "state": "MA" }, { "_id": "02379", "city": "WEST BRIDGEWATER", "loc": [ -71.016054, 42.025511 ], "pop": 6440, "state": "MA" }, { "_id": "02382", "city": "WHITMAN", "loc": [ -70.93812699999999, 42.081603 ], "pop": 13208, "state": "MA" }, { "_id": "02401", "city": "BROCKTON", "loc": [ -71.03434799999999, 42.081571 ], "pop": 59498, "state": "MA" }, { "_id": "02402", "city": "BROCKTON", "loc": [ -71.001947, 42.088396 ], "pop": 33290, "state": "MA" }, { "_id": "02532", "city": "ONSET", "loc": [ -70.59316800000001, 41.752918 ], "pop": 12047, "state": "MA" }, { "_id": "02535", "city": "CHILMARK", "loc": [ -70.741613, 41.357523 ], "pop": 952, "state": "MA" }, { "_id": "02536", "city": "TEATICKET", "loc": [ -70.565174, 41.58504 ], "pop": 15976, "state": "MA" }, { "_id": "02537", "city": "EAST SANDWICH", "loc": [ -70.46822, 41.684603 ], "pop": 7254, "state": "MA" }, { "_id": "02538", "city": "EAST WAREHAM", "loc": [ -70.653237, 41.768247 ], "pop": 4778, "state": "MA" }, { "_id": "02539", "city": "EDGARTOWN", "loc": [ -70.53389300000001, 41.388856 ], "pop": 3062, "state": "MA" }, { "_id": "02540", "city": "FALMOUTH", "loc": [ -70.621663, 41.564754 ], "pop": 8588, "state": "MA" }, { "_id": "02542", "city": "OTIS A F B", "loc": [ -70.57383, 41.660927 ], "pop": 2078, "state": "MA" }, { "_id": "02543", "city": "WOODS HOLE", "loc": [ -70.66431, 41.526272 ], "pop": 833, "state": "MA" }, { "_id": "02554", "city": "NANTUCKET", "loc": [ -70.093216, 41.272529 ], "pop": 6012, "state": "MA" }, { "_id": "02556", "city": "NORTH FALMOUTH", "loc": [ -70.623043, 41.641677 ], "pop": 2651, "state": "MA" }, { "_id": "02559", "city": "POCASSET", "loc": [ -70.610512, 41.688115 ], "pop": 3907, "state": "MA" }, { "_id": "02563", "city": "SANDWICH", "loc": [ -70.469325, 41.698304 ], "pop": 9007, "state": "MA" }, { "_id": "02568", "city": "VINEYARD HAVEN", "loc": [ -70.593737, 41.449955 ], "pop": 5924, "state": "MA" }, { "_id": "02571", "city": "WAREHAM", "loc": [ -70.71159400000001, 41.754084 ], "pop": 9304, "state": "MA" }, { "_id": "02575", "city": "WEST TISBURY", "loc": [ -70.65580199999999, 41.413717 ], "pop": 1603, "state": "MA" }, { "_id": "02576", "city": "WEST WAREHAM", "loc": [ -70.764179, 41.779617 ], "pop": 3919, "state": "MA" }, { "_id": "02601", "city": "WEST YARMOUTH", "loc": [ -70.298176, 41.653682 ], "pop": 14543, "state": "MA" }, { "_id": "02630", "city": "BARNSTABLE", "loc": [ -70.300067, 41.698289 ], "pop": 1776, "state": "MA" }, { "_id": "02631", "city": "BREWSTER", "loc": [ -70.069868, 41.749179 ], "pop": 8535, "state": "MA" }, { "_id": "02632", "city": "CENTERVILLE", "loc": [ -70.353196, 41.660585 ], "pop": 10636, "state": "MA" }, { "_id": "02633", "city": "SOUTH CHATHAM", "loc": [ -69.98075799999999, 41.687634 ], "pop": 4744, "state": "MA" }, { "_id": "02635", "city": "COTUIT", "loc": [ -70.433431, 41.696025 ], "pop": 3266, "state": "MA" }, { "_id": "02638", "city": "DENNIS", "loc": [ -70.19105399999999, 41.732166 ], "pop": 3216, "state": "MA" }, { "_id": "02639", "city": "DENNIS PORT", "loc": [ -70.132711, 41.664873 ], "pop": 2510, "state": "MA" }, { "_id": "02642", "city": "EASTHAM", "loc": [ -69.984865, 41.840781 ], "pop": 4582, "state": "MA" }, { "_id": "02644", "city": "FORESTDALE", "loc": [ -70.51431700000001, 41.682695 ], "pop": 2712, "state": "MA" }, { "_id": "02645", "city": "HARWICH", "loc": [ -70.057929, 41.70082 ], "pop": 7363, "state": "MA" }, { "_id": "02646", "city": "HARWICH PORT", "loc": [ -70.07675500000001, 41.67128 ], "pop": 1843, "state": "MA" }, { "_id": "02648", "city": "MARSTONS MILLS", "loc": [ -70.416321, 41.670274 ], "pop": 5777, "state": "MA" }, { "_id": "02649", "city": "MASHPEE", "loc": [ -70.485361, 41.618116 ], "pop": 4469, "state": "MA" }, { "_id": "02650", "city": "NORTH CHATHAM", "loc": [ -69.966607, 41.70298 ], "pop": 995, "state": "MA" }, { "_id": "02652", "city": "NORTH TRURO", "loc": [ -70.08750999999999, 42.033779 ], "pop": 834, "state": "MA" }, { "_id": "02653", "city": "ORLEANS", "loc": [ -69.982198, 41.779161 ], "pop": 5860, "state": "MA" }, { "_id": "02655", "city": "OSTERVILLE", "loc": [ -70.383726, 41.63005 ], "pop": 2330, "state": "MA" }, { "_id": "02657", "city": "PROVINCETOWN", "loc": [ -70.186504, 42.053364 ], "pop": 3561, "state": "MA" }, { "_id": "02659", "city": "SOUTH CHATHAM", "loc": [ -70.024106, 41.680126 ], "pop": 840, "state": "MA" }, { "_id": "02660", "city": "SOUTH DENNIS", "loc": [ -70.15851000000001, 41.709711 ], "pop": 6680, "state": "MA" }, { "_id": "02664", "city": "BASS RIVER", "loc": [ -70.19731, 41.672805 ], "pop": 8514, "state": "MA" }, { "_id": "02666", "city": "TRURO", "loc": [ -70.05636199999999, 41.998792 ], "pop": 739, "state": "MA" }, { "_id": "02667", "city": "WELLFLEET", "loc": [ -70.018587, 41.928934 ], "pop": 2373, "state": "MA" }, { "_id": "02668", "city": "WEST BARNSTABLE", "loc": [ -70.371985, 41.700212 ], "pop": 2311, "state": "MA" }, { "_id": "02670", "city": "WEST DENNIS", "loc": [ -70.168092, 41.662557 ], "pop": 1347, "state": "MA" }, { "_id": "02671", "city": "WEST HARWICH", "loc": [ -70.113501, 41.669367 ], "pop": 1061, "state": "MA" }, { "_id": "02673", "city": "WEST YARMOUTH", "loc": [ -70.23629699999999, 41.661367 ], "pop": 6972, "state": "MA" }, { "_id": "02675", "city": "YARMOUTH PORT", "loc": [ -70.227014, 41.705149 ], "pop": 5735, "state": "MA" }, { "_id": "02702", "city": "ASSONET", "loc": [ -71.06073600000001, 41.797458 ], "pop": 3614, "state": "MA" }, { "_id": "02703", "city": "ATTLEBORO", "loc": [ -71.30092, 41.929599 ], "pop": 38528, "state": "MA" }, { "_id": "02713", "city": "CUTTYHUNK", "loc": [ -70.87854, 41.443601 ], "pop": 98, "state": "MA" }, { "_id": "02715", "city": "DIGHTON", "loc": [ -71.142723, 41.812505 ], "pop": 1828, "state": "MA" }, { "_id": "02717", "city": "EAST FREETOWN", "loc": [ -70.967709, 41.763455 ], "pop": 4883, "state": "MA" }, { "_id": "02718", "city": "EAST TAUNTON", "loc": [ -71.01922500000001, 41.873585 ], "pop": 4800, "state": "MA" }, { "_id": "02719", "city": "FAIRHAVEN", "loc": [ -70.889608, 41.640924 ], "pop": 16141, "state": "MA" }, { "_id": "02720", "city": "FALL RIVER", "loc": [ -71.13999099999999, 41.718221 ], "pop": 30600, "state": "MA" }, { "_id": "02721", "city": "FALL RIVER", "loc": [ -71.15742400000001, 41.688305 ], "pop": 26884, "state": "MA" }, { "_id": "02723", "city": "FALL RIVER", "loc": [ -71.133214, 41.692612 ], "pop": 16801, "state": "MA" }, { "_id": "02724", "city": "FALL RIVER", "loc": [ -71.17482200000001, 41.684975 ], "pop": 18141, "state": "MA" }, { "_id": "02725", "city": "SOMERSET", "loc": [ -71.177971, 41.722299 ], "pop": 2528, "state": "MA" }, { "_id": "02726", "city": "SOMERSET", "loc": [ -71.14920600000001, 41.756012 ], "pop": 15117, "state": "MA" }, { "_id": "02738", "city": "MARION", "loc": [ -70.761261, 41.709526 ], "pop": 4496, "state": "MA" }, { "_id": "02739", "city": "MATTAPOISETT", "loc": [ -70.816357, 41.661845 ], "pop": 5850, "state": "MA" }, { "_id": "02740", "city": "NEW BEDFORD", "loc": [ -70.9372, 41.634749 ], "pop": 46426, "state": "MA" }, { "_id": "02743", "city": "ACUSHNET", "loc": [ -70.908652, 41.6997 ], "pop": 9601, "state": "MA" }, { "_id": "02744", "city": "NEW BEDFORD", "loc": [ -70.916746, 41.612716 ], "pop": 13424, "state": "MA" }, { "_id": "02745", "city": "NEW BEDFORD", "loc": [ -70.935545, 41.691337 ], "pop": 23661, "state": "MA" }, { "_id": "02746", "city": "NEW BEDFORD", "loc": [ -70.93243, 41.659972 ], "pop": 16236, "state": "MA" }, { "_id": "02747", "city": "NORTH DARTMOUTH", "loc": [ -70.995769, 41.633789 ], "pop": 16383, "state": "MA" }, { "_id": "02748", "city": "PADANARAM VILLAG", "loc": [ -70.956521, 41.591728 ], "pop": 10980, "state": "MA" }, { "_id": "02760", "city": "NORTH ATTLEBORO", "loc": [ -71.329757, 41.977542 ], "pop": 22289, "state": "MA" }, { "_id": "02762", "city": "PLAINVILLE", "loc": [ -71.327454, 42.012403 ], "pop": 6874, "state": "MA" }, { "_id": "02763", "city": "NORTH ATTLEBORO", "loc": [ -71.31035300000001, 41.970979 ], "pop": 2737, "state": "MA" }, { "_id": "02764", "city": "NORTH DIGHTON", "loc": [ -71.148523, 41.852874 ], "pop": 3779, "state": "MA" }, { "_id": "02766", "city": "NORTON", "loc": [ -71.189441, 41.971801 ], "pop": 14329, "state": "MA" }, { "_id": "02767", "city": "RAYNHAM", "loc": [ -71.04685600000001, 41.932361 ], "pop": 9804, "state": "MA" }, { "_id": "02769", "city": "REHOBOTH", "loc": [ -71.254453, 41.85152 ], "pop": 7762, "state": "MA" }, { "_id": "02770", "city": "ROCHESTER", "loc": [ -70.85225699999999, 41.759082 ], "pop": 3270, "state": "MA" }, { "_id": "02771", "city": "SEEKONK", "loc": [ -71.322406, 41.837835 ], "pop": 13375, "state": "MA" }, { "_id": "02777", "city": "SWANSEA", "loc": [ -71.21216699999999, 41.74734 ], "pop": 15865, "state": "MA" }, { "_id": "02779", "city": "BERKLEY", "loc": [ -71.076534, 41.835325 ], "pop": 4438, "state": "MA" }, { "_id": "02780", "city": "TAUNTON", "loc": [ -71.10261, 41.905007 ], "pop": 44894, "state": "MA" }, { "_id": "02790", "city": "WESTPORT", "loc": [ -71.08900300000001, 41.621127 ], "pop": 14154, "state": "MA" }, { "_id": "02804", "city": "ASHAWAY", "loc": [ -71.783745, 41.423054 ], "pop": 2472, "state": "RI" }, { "_id": "02806", "city": "BARRINGTON", "loc": [ -71.317497, 41.744334 ], "pop": 15849, "state": "RI" }, { "_id": "02807", "city": "BLOCK ISLAND", "loc": [ -71.574825, 41.171546 ], "pop": 836, "state": "RI" }, { "_id": "02808", "city": "BRADFORD", "loc": [ -71.746453, 41.411448 ], "pop": 2184, "state": "RI" }, { "_id": "02809", "city": "BRISTOL", "loc": [ -71.26755799999999, 41.68247 ], "pop": 21625, "state": "RI" }, { "_id": "02812", "city": "RICHMOND", "loc": [ -71.650279, 41.46941 ], "pop": 1011, "state": "RI" }, { "_id": "02813", "city": "CHARLESTOWN", "loc": [ -71.661455, 41.400749 ], "pop": 6663, "state": "RI" }, { "_id": "02814", "city": "CHEPACHET", "loc": [ -71.679483, 41.91549 ], "pop": 8191, "state": "RI" }, { "_id": "02815", "city": "CLAYVILLE", "loc": [ -71.67058900000001, 41.777762 ], "pop": 45, "state": "RI" }, { "_id": "02816", "city": "COVENTRY", "loc": [ -71.57679400000001, 41.69143 ], "pop": 29842, "state": "RI" }, { "_id": "02817", "city": "WEST GREENWICH", "loc": [ -71.64354899999999, 41.639977 ], "pop": 3246, "state": "RI" }, { "_id": "02818", "city": "EAST GREENWICH", "loc": [ -71.474009, 41.649777 ], "pop": 16180, "state": "RI" }, { "_id": "02822", "city": "EXETER", "loc": [ -71.607626, 41.574031 ], "pop": 3774, "state": "RI" }, { "_id": "02825", "city": "FOSTER", "loc": [ -71.71874800000001, 41.781455 ], "pop": 5175, "state": "RI" }, { "_id": "02827", "city": "GREENE", "loc": [ -71.735607, 41.706151 ], "pop": 1241, "state": "RI" }, { "_id": "02828", "city": "GREENVILLE", "loc": [ -71.556923, 41.873409 ], "pop": 6945, "state": "RI" }, { "_id": "02830", "city": "HARRISVILLE", "loc": [ -71.65340500000001, 41.976379 ], "pop": 6384, "state": "RI" }, { "_id": "02831", "city": "HOPE", "loc": [ -71.56122499999999, 41.751603 ], "pop": 3653, "state": "RI" }, { "_id": "02832", "city": "RICHMOND", "loc": [ -71.73486200000001, 41.506974 ], "pop": 3466, "state": "RI" }, { "_id": "02835", "city": "JAMESTOWN", "loc": [ -71.376108, 41.516405 ], "pop": 4999, "state": "RI" }, { "_id": "02836", "city": "RICHMOND", "loc": [ -71.683992, 41.477694 ], "pop": 183, "state": "RI" }, { "_id": "02837", "city": "LITTLE COMPTON", "loc": [ -71.161215, 41.52204 ], "pop": 3341, "state": "RI" }, { "_id": "02838", "city": "MANVILLE", "loc": [ -71.474113, 41.96888 ], "pop": 3259, "state": "RI" }, { "_id": "02840", "city": "MIDDLETOWN", "loc": [ -71.30347999999999, 41.504502 ], "pop": 47687, "state": "RI" }, { "_id": "02852", "city": "NORTH KINGSTOWN", "loc": [ -71.46249400000001, 41.589426 ], "pop": 22325, "state": "RI" }, { "_id": "02857", "city": "NORTH SCITUATE", "loc": [ -71.62418700000001, 41.8439 ], "pop": 9563, "state": "RI" }, { "_id": "02858", "city": "OAKLAND", "loc": [ -71.64292500000001, 41.963637 ], "pop": 462, "state": "RI" }, { "_id": "02859", "city": "PASCOAG", "loc": [ -71.70986600000001, 41.962728 ], "pop": 7156, "state": "RI" }, { "_id": "02860", "city": "PAWTUCKET", "loc": [ -71.39071300000001, 41.872873 ], "pop": 45442, "state": "RI" }, { "_id": "02861", "city": "PAWTUCKET", "loc": [ -71.35600100000001, 41.881384 ], "pop": 27013, "state": "RI" }, { "_id": "02863", "city": "CENTRAL FALLS", "loc": [ -71.394527, 41.888263 ], "pop": 17380, "state": "RI" }, { "_id": "02864", "city": "CUMBERLAND", "loc": [ -71.415419, 41.948352 ], "pop": 29327, "state": "RI" }, { "_id": "02865", "city": "LINCOLN", "loc": [ -71.434777, 41.908906 ], "pop": 14765, "state": "RI" }, { "_id": "02871", "city": "PORTSMOUTH", "loc": [ -71.25201800000001, 41.594397 ], "pop": 16707, "state": "RI" }, { "_id": "02872", "city": "PRUDENCE ISLAND", "loc": [ -71.31182699999999, 41.613606 ], "pop": 150, "state": "RI" }, { "_id": "02874", "city": "SAUNDERSTOWN", "loc": [ -71.44269300000001, 41.510528 ], "pop": 3196, "state": "RI" }, { "_id": "02876", "city": "SLATERSVILLE", "loc": [ -71.5682, 42.001478 ], "pop": 639, "state": "RI" }, { "_id": "02877", "city": "SLOCUM", "loc": [ -71.53716900000001, 41.521237 ], "pop": 1114, "state": "RI" }, { "_id": "02878", "city": "TIVERTON", "loc": [ -71.180823, 41.633839 ], "pop": 14310, "state": "RI" }, { "_id": "02879", "city": "NARRAGANSETT", "loc": [ -71.525138, 41.430195 ], "pop": 13422, "state": "RI" }, { "_id": "02881", "city": "KINGSTON", "loc": [ -71.529239, 41.480295 ], "pop": 7683, "state": "RI" }, { "_id": "02882", "city": "NARRAGANSETT", "loc": [ -71.46164, 41.435313 ], "pop": 13596, "state": "RI" }, { "_id": "02883", "city": "PEACE DALE", "loc": [ -71.500057, 41.45157 ], "pop": 1652, "state": "RI" }, { "_id": "02885", "city": "WARREN", "loc": [ -71.27016500000001, 41.725618 ], "pop": 11385, "state": "RI" }, { "_id": "02886", "city": "WARWICK", "loc": [ -71.447591, 41.702601 ], "pop": 40845, "state": "RI" }, { "_id": "02888", "city": "WARWICK", "loc": [ -71.40836, 41.74936 ], "pop": 20869, "state": "RI" }, { "_id": "02889", "city": "WARWICK", "loc": [ -71.390146, 41.714069 ], "pop": 20849, "state": "RI" }, { "_id": "02891", "city": "WESTERLY", "loc": [ -71.81264299999999, 41.369128 ], "pop": 20290, "state": "RI" }, { "_id": "02892", "city": "RICHMOND", "loc": [ -71.599076, 41.506716 ], "pop": 3943, "state": "RI" }, { "_id": "02893", "city": "WEST WARWICK", "loc": [ -71.518349, 41.700433 ], "pop": 27821, "state": "RI" }, { "_id": "02894", "city": "WOOD RIVER JUNCT", "loc": [ -71.709512, 41.453771 ], "pop": 684, "state": "RI" }, { "_id": "02895", "city": "NORTH SMITHFIELD", "loc": [ -71.513683, 41.99948 ], "pop": 53733, "state": "RI" }, { "_id": "02898", "city": "RICHMOND", "loc": [ -71.68397299999999, 41.523362 ], "pop": 1508, "state": "RI" }, { "_id": "02903", "city": "PROVIDENCE", "loc": [ -71.415801, 41.820002 ], "pop": 9093, "state": "RI" }, { "_id": "02904", "city": "CENTREDALE", "loc": [ -71.438102, 41.860461 ], "pop": 28119, "state": "RI" }, { "_id": "02905", "city": "CRANSTON", "loc": [ -71.40314600000001, 41.786568 ], "pop": 24885, "state": "RI" }, { "_id": "02906", "city": "PROVIDENCE", "loc": [ -71.397065, 41.835104 ], "pop": 31069, "state": "RI" }, { "_id": "02907", "city": "CRANSTON", "loc": [ -71.42403899999999, 41.800842 ], "pop": 25668, "state": "RI" }, { "_id": "02908", "city": "PROVIDENCE", "loc": [ -71.437684, 41.838294 ], "pop": 35933, "state": "RI" }, { "_id": "02909", "city": "CRANSTON", "loc": [ -71.448165, 41.816777 ], "pop": 34261, "state": "RI" }, { "_id": "02910", "city": "CRANSTON", "loc": [ -71.43833100000001, 41.776572 ], "pop": 21128, "state": "RI" }, { "_id": "02911", "city": "CENTREDALE", "loc": [ -71.474058, 41.853412 ], "pop": 13858, "state": "RI" }, { "_id": "02914", "city": "EAST PROVIDENCE", "loc": [ -71.368785, 41.813777 ], "pop": 22965, "state": "RI" }, { "_id": "02915", "city": "RIVERSIDE", "loc": [ -71.35424399999999, 41.772313 ], "pop": 18934, "state": "RI" }, { "_id": "02916", "city": "RUMFORD", "loc": [ -71.35593799999999, 41.842472 ], "pop": 8550, "state": "RI" }, { "_id": "02917", "city": "SMITHFIELD", "loc": [ -71.52066600000001, 41.896382 ], "pop": 12213, "state": "RI" }, { "_id": "02919", "city": "CRANSTON", "loc": [ -71.497646, 41.826431 ], "pop": 26575, "state": "RI" }, { "_id": "02920", "city": "CRANSTON", "loc": [ -71.465889, 41.77157 ], "pop": 37385, "state": "RI" }, { "_id": "02921", "city": "CRANSTON", "loc": [ -71.506102, 41.761357 ], "pop": 6502, "state": "RI" }, { "_id": "03031", "city": "AMHERST", "loc": [ -71.607536, 42.856944 ], "pop": 8998, "state": "NH" }, { "_id": "03032", "city": "AUBURN", "loc": [ -71.344892, 42.992529 ], "pop": 4085, "state": "NH" }, { "_id": "03033", "city": "BROOKLINE", "loc": [ -71.666254, 42.738442 ], "pop": 2410, "state": "NH" }, { "_id": "03034", "city": "CANDIA", "loc": [ -71.304857, 43.058514 ], "pop": 3557, "state": "NH" }, { "_id": "03036", "city": "CHESTER", "loc": [ -71.244962, 42.967756 ], "pop": 2691, "state": "NH" }, { "_id": "03037", "city": "DEERFIELD", "loc": [ -71.25126400000001, 43.137756 ], "pop": 3124, "state": "NH" }, { "_id": "03038", "city": "DERRY", "loc": [ -71.30197099999999, 42.887404 ], "pop": 29556, "state": "NH" }, { "_id": "03042", "city": "EPPING", "loc": [ -71.076367, 43.041052 ], "pop": 6797, "state": "NH" }, { "_id": "03043", "city": "FRANCESTOWN", "loc": [ -71.81131000000001, 42.991952 ], "pop": 1219, "state": "NH" }, { "_id": "03044", "city": "FREMONT", "loc": [ -71.121836, 42.984016 ], "pop": 2677, "state": "NH" }, { "_id": "03045", "city": "DUNBARTON", "loc": [ -71.56264, 43.018224 ], "pop": 9428, "state": "NH" }, { "_id": "03047", "city": "GREENFIELD", "loc": [ -71.872755, 42.949277 ], "pop": 1422, "state": "NH" }, { "_id": "03048", "city": "MASON", "loc": [ -71.784487, 42.7489 ], "pop": 3443, "state": "NH" }, { "_id": "03049", "city": "HOLLIS", "loc": [ -71.577206, 42.748513 ], "pop": 5705, "state": "NH" }, { "_id": "03051", "city": "HUDSON", "loc": [ -71.412144, 42.769038 ], "pop": 26489, "state": "NH" }, { "_id": "03053", "city": "LONDONDERRY", "loc": [ -71.37719, 42.865555 ], "pop": 19687, "state": "NH" }, { "_id": "03054", "city": "MERRIMACK", "loc": [ -71.51278000000001, 42.866689 ], "pop": 21632, "state": "NH" }, { "_id": "03055", "city": "MILFORD", "loc": [ -71.660569, 42.828497 ], "pop": 11795, "state": "NH" }, { "_id": "03057", "city": "MONT VERNON", "loc": [ -71.676243, 42.897597 ], "pop": 1812, "state": "NH" }, { "_id": "03060", "city": "NASHUA", "loc": [ -71.466684, 42.756395 ], "pop": 41438, "state": "NH" }, { "_id": "03062", "city": "NASHUA", "loc": [ -71.489282, 42.723472 ], "pop": 23927, "state": "NH" }, { "_id": "03063", "city": "NASHUA", "loc": [ -71.513156, 42.771686 ], "pop": 14891, "state": "NH" }, { "_id": "03070", "city": "NEW BOSTON", "loc": [ -71.686402, 42.97217 ], "pop": 2701, "state": "NH" }, { "_id": "03071", "city": "NEW IPSWICH", "loc": [ -71.870318, 42.751142 ], "pop": 4014, "state": "NH" }, { "_id": "03076", "city": "PELHAM", "loc": [ -71.304551, 42.72881 ], "pop": 6012, "state": "NH" }, { "_id": "03077", "city": "RAYMOND", "loc": [ -71.191159, 43.032512 ], "pop": 9005, "state": "NH" }, { "_id": "03079", "city": "SALEM", "loc": [ -71.21760999999999, 42.78465 ], "pop": 25746, "state": "NH" }, { "_id": "03082", "city": "LYNDEBOROUGH", "loc": [ -71.774373, 42.895449 ], "pop": 1294, "state": "NH" }, { "_id": "03084", "city": "TEMPLE", "loc": [ -71.85234699999999, 42.820035 ], "pop": 1194, "state": "NH" }, { "_id": "03086", "city": "WILTON", "loc": [ -71.75406599999999, 42.836761 ], "pop": 3122, "state": "NH" }, { "_id": "03087", "city": "WINDHAM", "loc": [ -71.306735, 42.805106 ], "pop": 9000, "state": "NH" }, { "_id": "03101", "city": "MANCHESTER", "loc": [ -71.463255, 42.992858 ], "pop": 2697, "state": "NH" }, { "_id": "03102", "city": "MANCHESTER", "loc": [ -71.488433, 42.99442 ], "pop": 29308, "state": "NH" }, { "_id": "03103", "city": "MANCHESTER", "loc": [ -71.449325, 42.965563 ], "pop": 36613, "state": "NH" }, { "_id": "03104", "city": "MANCHESTER", "loc": [ -71.448233, 43.007307 ], "pop": 29950, "state": "NH" }, { "_id": "03106", "city": "HOOKSETT", "loc": [ -71.444446, 43.061708 ], "pop": 8668, "state": "NH" }, { "_id": "03109", "city": "MANCHESTER", "loc": [ -71.41347399999999, 42.971349 ], "pop": 7884, "state": "NH" }, { "_id": "03110", "city": "BEDFORD", "loc": [ -71.52127, 42.940307 ], "pop": 12468, "state": "NH" }, { "_id": "03216", "city": "ANDOVER", "loc": [ -71.78295199999999, 43.428668 ], "pop": 1638, "state": "NH" }, { "_id": "03217", "city": "ASHLAND", "loc": [ -71.61208499999999, 43.703428 ], "pop": 2056, "state": "NH" }, { "_id": "03218", "city": "BARNSTEAD", "loc": [ -71.286946, 43.36513 ], "pop": 793, "state": "NH" }, { "_id": "03220", "city": "BELMONT", "loc": [ -71.488991, 43.451189 ], "pop": 2997, "state": "NH" }, { "_id": "03221", "city": "BRADFORD", "loc": [ -71.98504800000001, 43.294343 ], "pop": 3273, "state": "NH" }, { "_id": "03222", "city": "BRISTOL", "loc": [ -71.750664, 43.611994 ], "pop": 4288, "state": "NH" }, { "_id": "03223", "city": "BEEBE RIVER", "loc": [ -71.63614200000001, 43.888507 ], "pop": 2802, "state": "NH" }, { "_id": "03224", "city": "CANTERBURY", "loc": [ -71.557008, 43.357041 ], "pop": 2085, "state": "NH" }, { "_id": "03225", "city": "CENTER BARNSTEAD", "loc": [ -71.24244, 43.356563 ], "pop": 2307, "state": "NH" }, { "_id": "03226", "city": "CENTER HARBOR", "loc": [ -71.47973, 43.710688 ], "pop": 470, "state": "NH" }, { "_id": "03227", "city": "CENTER SANDWICH", "loc": [ -71.450614, 43.816169 ], "pop": 615, "state": "NH" }, { "_id": "03229", "city": "HOPKINTON", "loc": [ -71.696299, 43.218898 ], "pop": 6071, "state": "NH" }, { "_id": "03230", "city": "DANBURY", "loc": [ -71.869074, 43.5115 ], "pop": 1098, "state": "NH" }, { "_id": "03231", "city": "EAST ANDOVER", "loc": [ -71.75960600000001, 43.47766 ], "pop": 177, "state": "NH" }, { "_id": "03232", "city": "EAST HEBRON", "loc": [ -71.76790699999999, 43.696969 ], "pop": 47, "state": "NH" }, { "_id": "03234", "city": "EPSOM", "loc": [ -71.35457599999999, 43.217398 ], "pop": 2931, "state": "NH" }, { "_id": "03235", "city": "FRANKLIN", "loc": [ -71.64912200000001, 43.442569 ], "pop": 9780, "state": "NH" }, { "_id": "03237", "city": "GILMANTON", "loc": [ -71.412063, 43.417476 ], "pop": 1308, "state": "NH" }, { "_id": "03240", "city": "GRAFTON", "loc": [ -71.96338900000001, 43.572743 ], "pop": 890, "state": "NH" }, { "_id": "03241", "city": "HEBRON", "loc": [ -71.82696, 43.718571 ], "pop": 657, "state": "NH" }, { "_id": "03242", "city": "HENNIKER", "loc": [ -71.815921, 43.179091 ], "pop": 4151, "state": "NH" }, { "_id": "03243", "city": "HILL", "loc": [ -71.729168, 43.527422 ], "pop": 778, "state": "NH" }, { "_id": "03244", "city": "HILLSBORO", "loc": [ -71.902818, 43.120709 ], "pop": 5246, "state": "NH" }, { "_id": "03246", "city": "GILFORD", "loc": [ -71.452907, 43.538713 ], "pop": 24409, "state": "NH" }, { "_id": "03251", "city": "LINCOLN", "loc": [ -71.672707, 44.058159 ], "pop": 1229, "state": "NH" }, { "_id": "03253", "city": "MEREDITH", "loc": [ -71.51132699999999, 43.650208 ], "pop": 5959, "state": "NH" }, { "_id": "03254", "city": "MOULTONBOROUGH", "loc": [ -71.392245, 43.728133 ], "pop": 3208, "state": "NH" }, { "_id": "03256", "city": "NEW HAMPTON", "loc": [ -71.643513, 43.618393 ], "pop": 1214, "state": "NH" }, { "_id": "03257", "city": "NEW LONDON", "loc": [ -71.985674, 43.414501 ], "pop": 3280, "state": "NH" }, { "_id": "03259", "city": "NORTH SANDWICH", "loc": [ -71.385025, 43.845182 ], "pop": 338, "state": "NH" }, { "_id": "03261", "city": "NORTHWOOD", "loc": [ -71.200423, 43.206965 ], "pop": 3013, "state": "NH" }, { "_id": "03262", "city": "NORTH WOODSTOCK", "loc": [ -71.697684, 44.019831 ], "pop": 1091, "state": "NH" }, { "_id": "03263", "city": "PITTSFIELD", "loc": [ -71.33302999999999, 43.287384 ], "pop": 5806, "state": "NH" }, { "_id": "03264", "city": "PLYMOUTH", "loc": [ -71.684714, 43.763524 ], "pop": 8980, "state": "NH" }, { "_id": "03266", "city": "RUMNEY", "loc": [ -71.84801899999999, 43.804389 ], "pop": 1912, "state": "NH" }, { "_id": "03268", "city": "SALISBURY", "loc": [ -71.70446800000001, 43.406652 ], "pop": 140, "state": "NH" }, { "_id": "03269", "city": "SANBORNTON", "loc": [ -71.600348, 43.549552 ], "pop": 699, "state": "NH" }, { "_id": "03275", "city": "ALLENSTOWN", "loc": [ -71.439663, 43.147554 ], "pop": 11565, "state": "NH" }, { "_id": "03276", "city": "TILTON", "loc": [ -71.57741300000001, 43.46033 ], "pop": 7356, "state": "NH" }, { "_id": "03278", "city": "WARNER", "loc": [ -71.83534899999999, 43.303512 ], "pop": 3265, "state": "NH" }, { "_id": "03279", "city": "WARREN", "loc": [ -71.89013, 43.944667 ], "pop": 886, "state": "NH" }, { "_id": "03280", "city": "WASHINGTON", "loc": [ -72.082407, 43.174705 ], "pop": 628, "state": "NH" }, { "_id": "03281", "city": "WEARE", "loc": [ -71.70376, 43.071422 ], "pop": 7481, "state": "NH" }, { "_id": "03282", "city": "WENTWORTH", "loc": [ -71.909651, 43.868456 ], "pop": 556, "state": "NH" }, { "_id": "03284", "city": "WEST SPRINGFIELD", "loc": [ -72.057855, 43.491615 ], "pop": 788, "state": "NH" }, { "_id": "03287", "city": "WILMOT FLAT", "loc": [ -71.900983, 43.432177 ], "pop": 931, "state": "NH" }, { "_id": "03290", "city": "NOTTINGHAM", "loc": [ -71.110983, 43.119632 ], "pop": 598, "state": "NH" }, { "_id": "03291", "city": "WEST NOTTINGHAM", "loc": [ -71.111006, 43.133971 ], "pop": 27, "state": "NH" }, { "_id": "03301", "city": "CONCORD", "loc": [ -71.527734, 43.218525 ], "pop": 34035, "state": "NH" }, { "_id": "03303", "city": "BOSCAWEN", "loc": [ -71.612723, 43.285285 ], "pop": 12046, "state": "NH" }, { "_id": "03304", "city": "BOW", "loc": [ -71.544814, 43.138788 ], "pop": 5500, "state": "NH" }, { "_id": "03431", "city": "SURRY", "loc": [ -72.28954, 42.943127 ], "pop": 23882, "state": "NH" }, { "_id": "03440", "city": "ANTRIM", "loc": [ -71.938698, 43.059547 ], "pop": 3379, "state": "NH" }, { "_id": "03441", "city": "ASHUELOT", "loc": [ -72.434899, 42.785057 ], "pop": 285, "state": "NH" }, { "_id": "03442", "city": "BENNINGTON", "loc": [ -71.91534, 43.010309 ], "pop": 1236, "state": "NH" }, { "_id": "03443", "city": "CHESTERFIELD", "loc": [ -72.487219, 42.900785 ], "pop": 1455, "state": "NH" }, { "_id": "03444", "city": "DUBLIN", "loc": [ -72.050538, 42.897198 ], "pop": 1474, "state": "NH" }, { "_id": "03445", "city": "EAST SULLIVAN", "loc": [ -72.191778, 42.994005 ], "pop": 169, "state": "NH" }, { "_id": "03446", "city": "EAST SWANZEY", "loc": [ -72.249298, 42.884137 ], "pop": 796, "state": "NH" }, { "_id": "03447", "city": "FITZWILLIAM", "loc": [ -72.145014, 42.7611 ], "pop": 2016, "state": "NH" }, { "_id": "03448", "city": "GILSUM", "loc": [ -72.263272, 43.043105 ], "pop": 745, "state": "NH" }, { "_id": "03449", "city": "HANCOCK", "loc": [ -71.981858, 42.976817 ], "pop": 1526, "state": "NH" }, { "_id": "03450", "city": "HARRISVILLE", "loc": [ -72.09724300000001, 42.939874 ], "pop": 981, "state": "NH" }, { "_id": "03451", "city": "HINSDALE", "loc": [ -72.501474, 42.802714 ], "pop": 3936, "state": "NH" }, { "_id": "03452", "city": "JAFFREY", "loc": [ -72.027514, 42.81779 ], "pop": 5334, "state": "NH" }, { "_id": "03455", "city": "MARLBOROUGH", "loc": [ -72.201292, 42.898804 ], "pop": 1927, "state": "NH" }, { "_id": "03456", "city": "MARLOW", "loc": [ -72.21087900000001, 43.132585 ], "pop": 650, "state": "NH" }, { "_id": "03457", "city": "MUNSONVILLE", "loc": [ -72.133702, 42.998646 ], "pop": 535, "state": "NH" }, { "_id": "03458", "city": "PETERBOROUGH", "loc": [ -71.94696399999999, 42.88559 ], "pop": 5713, "state": "NH" }, { "_id": "03461", "city": "RINDGE", "loc": [ -72.01903799999999, 42.754391 ], "pop": 4968, "state": "NH" }, { "_id": "03462", "city": "SPOFFORD", "loc": [ -72.41027699999999, 42.911973 ], "pop": 1266, "state": "NH" }, { "_id": "03464", "city": "STODDARD", "loc": [ -72.108811, 43.073944 ], "pop": 622, "state": "NH" }, { "_id": "03465", "city": "TROY", "loc": [ -72.184753, 42.82697 ], "pop": 2097, "state": "NH" }, { "_id": "03466", "city": "WEST CHESTERFIEL", "loc": [ -72.511216, 42.873152 ], "pop": 391, "state": "NH" }, { "_id": "03467", "city": "WESTMORELAND", "loc": [ -72.435784, 42.968999 ], "pop": 1596, "state": "NH" }, { "_id": "03469", "city": "WEST SWANZEY", "loc": [ -72.29768799999999, 42.870313 ], "pop": 5440, "state": "NH" }, { "_id": "03470", "city": "RICHMOND", "loc": [ -72.36367199999999, 42.773922 ], "pop": 4625, "state": "NH" }, { "_id": "03561", "city": "LITTLETON", "loc": [ -71.776816, 44.311187 ], "pop": 6663, "state": "NH" }, { "_id": "03570", "city": "BERLIN", "loc": [ -71.18923599999999, 44.48107 ], "pop": 12892, "state": "NH" }, { "_id": "03574", "city": "BETHLEHEM", "loc": [ -71.682929, 44.280846 ], "pop": 1885, "state": "NH" }, { "_id": "03576", "city": "COLEBROOK", "loc": [ -71.47934100000001, 44.907776 ], "pop": 4232, "state": "NH" }, { "_id": "03579", "city": "ERROL", "loc": [ -71.143612, 44.800273 ], "pop": 366, "state": "NH" }, { "_id": "03580", "city": "FRANCONIA", "loc": [ -71.751822, 44.205273 ], "pop": 1090, "state": "NH" }, { "_id": "03581", "city": "GORHAM", "loc": [ -71.17998299999999, 44.399601 ], "pop": 3610, "state": "NH" }, { "_id": "03582", "city": "GROVETON", "loc": [ -71.506421, 44.598367 ], "pop": 2527, "state": "NH" }, { "_id": "03583", "city": "JEFFERSON", "loc": [ -71.45183400000001, 44.399907 ], "pop": 986, "state": "NH" }, { "_id": "03584", "city": "LANCASTER", "loc": [ -71.55911500000001, 44.492074 ], "pop": 3825, "state": "NH" }, { "_id": "03585", "city": "LISBON", "loc": [ -71.896565, 44.214837 ], "pop": 2295, "state": "NH" }, { "_id": "03588", "city": "MILAN", "loc": [ -71.181031, 44.586968 ], "pop": 987, "state": "NH" }, { "_id": "03590", "city": "NORTH STRATFORD", "loc": [ -71.564368, 44.714915 ], "pop": 927, "state": "NH" }, { "_id": "03592", "city": "PITTSBURG", "loc": [ -71.36359299999999, 45.086564 ], "pop": 1104, "state": "NH" }, { "_id": "03598", "city": "WHITEFIELD", "loc": [ -71.603453, 44.36811 ], "pop": 3139, "state": "NH" }, { "_id": "03602", "city": "ALSTEAD", "loc": [ -72.328052, 43.126484 ], "pop": 1721, "state": "NH" }, { "_id": "03603", "city": "CHARLESTOWN", "loc": [ -72.40638, 43.257339 ], "pop": 4678, "state": "NH" }, { "_id": "03605", "city": "EAST LEMPSTER", "loc": [ -72.16620500000001, 43.21863 ], "pop": 323, "state": "NH" }, { "_id": "03607", "city": "SOUTH ACWORTH", "loc": [ -72.341053, 43.176942 ], "pop": 1008, "state": "NH" }, { "_id": "03608", "city": "WALPOLE", "loc": [ -72.41548899999999, 43.076533 ], "pop": 2466, "state": "NH" }, { "_id": "03609", "city": "NORTH WALPOLE", "loc": [ -72.44825299999999, 43.142759 ], "pop": 744, "state": "NH" }, { "_id": "03740", "city": "BATH", "loc": [ -71.95674099999999, 44.173419 ], "pop": 155, "state": "NH" }, { "_id": "03741", "city": "CANAAN", "loc": [ -72.029724, 43.660092 ], "pop": 3065, "state": "NH" }, { "_id": "03743", "city": "CLAREMONT", "loc": [ -72.342186, 43.367942 ], "pop": 14820, "state": "NH" }, { "_id": "03745", "city": "CORNISH", "loc": [ -72.339426, 43.496339 ], "pop": 2275, "state": "NH" }, { "_id": "03748", "city": "ENFIELD", "loc": [ -72.127014, 43.625584 ], "pop": 4118, "state": "NH" }, { "_id": "03750", "city": "ETNA", "loc": [ -72.212479, 43.711333 ], "pop": 944, "state": "NH" }, { "_id": "03752", "city": "GOSHEN", "loc": [ -72.124117, 43.302623 ], "pop": 742, "state": "NH" }, { "_id": "03753", "city": "GRANTHAM", "loc": [ -72.133437, 43.510324 ], "pop": 1247, "state": "NH" }, { "_id": "03755", "city": "HANOVER", "loc": [ -72.28496, 43.704532 ], "pop": 7070, "state": "NH" }, { "_id": "03765", "city": "HAVERHILL", "loc": [ -72.057276, 44.039438 ], "pop": 498, "state": "NH" }, { "_id": "03766", "city": "LEBANON", "loc": [ -72.242818, 43.644688 ], "pop": 9032, "state": "NH" }, { "_id": "03768", "city": "LYME", "loc": [ -72.161993, 43.791327 ], "pop": 2172, "state": "NH" }, { "_id": "03770", "city": "MERIDEN", "loc": [ -72.275644, 43.529873 ], "pop": 126, "state": "NH" }, { "_id": "03771", "city": "MONROE", "loc": [ -72.02502800000001, 44.273358 ], "pop": 760, "state": "NH" }, { "_id": "03773", "city": "NEWPORT", "loc": [ -72.183789, 43.353228 ], "pop": 8073, "state": "NH" }, { "_id": "03774", "city": "NORTH HAVERHILL", "loc": [ -72.01911200000001, 44.097841 ], "pop": 1744, "state": "NH" }, { "_id": "03777", "city": "ORFORD", "loc": [ -72.097846, 43.894101 ], "pop": 1008, "state": "NH" }, { "_id": "03779", "city": "PIERMONT", "loc": [ -72.081299, 43.990572 ], "pop": 431, "state": "NH" }, { "_id": "03780", "city": "PIKE", "loc": [ -72.009587, 44.025511 ], "pop": 751, "state": "NH" }, { "_id": "03781", "city": "PLAINFIELD", "loc": [ -72.270398, 43.551919 ], "pop": 1314, "state": "NH" }, { "_id": "03782", "city": "SUNAPEE", "loc": [ -72.095044, 43.386816 ], "pop": 2570, "state": "NH" }, { "_id": "03784", "city": "WEST LEBANON", "loc": [ -72.300735, 43.64401 ], "pop": 3784, "state": "NH" }, { "_id": "03785", "city": "WOODSVILLE", "loc": [ -71.989215, 44.138549 ], "pop": 2292, "state": "NH" }, { "_id": "03801", "city": "NEWINGTON", "loc": [ -70.780412, 43.066524 ], "pop": 27430, "state": "NH" }, { "_id": "03809", "city": "ALTON", "loc": [ -71.229709, 43.46302 ], "pop": 2939, "state": "NH" }, { "_id": "03810", "city": "ALTON BAY", "loc": [ -71.24888, 43.484468 ], "pop": 157, "state": "NH" }, { "_id": "03811", "city": "ATKINSON", "loc": [ -71.16030000000001, 42.836981 ], "pop": 5145, "state": "NH" }, { "_id": "03812", "city": "BARTLETT", "loc": [ -71.2491, 44.08656 ], "pop": 1379, "state": "NH" }, { "_id": "03813", "city": "CENTER CONWAY", "loc": [ -71.060677, 43.98776 ], "pop": 2394, "state": "NH" }, { "_id": "03814", "city": "CENTER OSSIPEE", "loc": [ -71.134882, 43.768189 ], "pop": 2492, "state": "NH" }, { "_id": "03815", "city": "CENTER STRAFFORD", "loc": [ -71.107122, 43.262888 ], "pop": 436, "state": "NH" }, { "_id": "03816", "city": "CENTER TUFTONBOR", "loc": [ -71.26505899999999, 43.690205 ], "pop": 885, "state": "NH" }, { "_id": "03817", "city": "CHOCORUA", "loc": [ -71.24071600000001, 43.890851 ], "pop": 70, "state": "NH" }, { "_id": "03818", "city": "CONWAY", "loc": [ -71.15028, 43.974161 ], "pop": 1875, "state": "NH" }, { "_id": "03819", "city": "DANVILLE", "loc": [ -71.120985, 42.923432 ], "pop": 2471, "state": "NH" }, { "_id": "03820", "city": "MADBURY", "loc": [ -70.88488099999999, 43.190006 ], "pop": 27182, "state": "NH" }, { "_id": "03824", "city": "LEE", "loc": [ -70.952333, 43.133821 ], "pop": 15487, "state": "NH" }, { "_id": "03825", "city": "BARRINGTON", "loc": [ -71.03767499999999, 43.2027 ], "pop": 5842, "state": "NH" }, { "_id": "03826", "city": "EAST HAMPSTEAD", "loc": [ -71.127978, 42.887656 ], "pop": 1880, "state": "NH" }, { "_id": "03827", "city": "SOUTH HAMPTON", "loc": [ -70.976904, 42.911289 ], "pop": 3197, "state": "NH" }, { "_id": "03830", "city": "EAST WAKEFIELD", "loc": [ -71.007712, 43.641022 ], "pop": 675, "state": "NH" }, { "_id": "03833", "city": "BRENTWOOD", "loc": [ -70.96430599999999, 42.977169 ], "pop": 14374, "state": "NH" }, { "_id": "03835", "city": "FARMINGTON", "loc": [ -71.06469300000001, 43.388373 ], "pop": 4676, "state": "NH" }, { "_id": "03836", "city": "FREEDOM", "loc": [ -71.062815, 43.817242 ], "pop": 935, "state": "NH" }, { "_id": "03837", "city": "GILMANTON IRON W", "loc": [ -71.330315, 43.425281 ], "pop": 1301, "state": "NH" }, { "_id": "03838", "city": "GLEN", "loc": [ -71.192457, 44.101777 ], "pop": 84, "state": "NH" }, { "_id": "03839", "city": "GONIC", "loc": [ -70.976642, 43.268374 ], "pop": 4474, "state": "NH" }, { "_id": "03840", "city": "GREENLAND", "loc": [ -70.847476, 43.035294 ], "pop": 2450, "state": "NH" }, { "_id": "03841", "city": "HAMPSTEAD", "loc": [ -71.175802, 42.881957 ], "pop": 5291, "state": "NH" }, { "_id": "03842", "city": "HAMPTON", "loc": [ -70.824336, 42.935883 ], "pop": 12278, "state": "NH" }, { "_id": "03844", "city": "HAMPTON FALLS", "loc": [ -70.887608, 42.926323 ], "pop": 1503, "state": "NH" }, { "_id": "03845", "city": "INTERVALE", "loc": [ -71.119415, 44.095479 ], "pop": 1811, "state": "NH" }, { "_id": "03846", "city": "JACKSON", "loc": [ -71.187808, 44.166989 ], "pop": 689, "state": "NH" }, { "_id": "03848", "city": "KINGSTON", "loc": [ -71.063914, 42.913258 ], "pop": 6111, "state": "NH" }, { "_id": "03849", "city": "MADISON", "loc": [ -71.125412, 43.915206 ], "pop": 1669, "state": "NH" }, { "_id": "03852", "city": "MILTON MILLS", "loc": [ -70.969729, 43.502494 ], "pop": 514, "state": "NH" }, { "_id": "03853", "city": "MIRROR LAKE", "loc": [ -71.272858, 43.636552 ], "pop": 696, "state": "NH" }, { "_id": "03854", "city": "NEW CASTLE", "loc": [ -70.719922, 43.068114 ], "pop": 840, "state": "NH" }, { "_id": "03855", "city": "NEW DURHAM", "loc": [ -71.140828, 43.443045 ], "pop": 2148, "state": "NH" }, { "_id": "03857", "city": "NEWMARKET", "loc": [ -70.95531699999999, 43.072628 ], "pop": 9049, "state": "NH" }, { "_id": "03858", "city": "NEWTON", "loc": [ -71.04202100000001, 42.867805 ], "pop": 2944, "state": "NH" }, { "_id": "03860", "city": "NORTH CONWAY", "loc": [ -71.123811, 44.033613 ], "pop": 3458, "state": "NH" }, { "_id": "03862", "city": "NORTH HAMPTON", "loc": [ -70.82673800000001, 42.977625 ], "pop": 3637, "state": "NH" }, { "_id": "03864", "city": "OSSIPEE", "loc": [ -71.11287299999999, 43.694506 ], "pop": 1490, "state": "NH" }, { "_id": "03865", "city": "PLAISTOW", "loc": [ -71.093397, 42.835551 ], "pop": 7124, "state": "NH" }, { "_id": "03867", "city": "ROCHESTER", "loc": [ -71.055753, 43.309203 ], "pop": 3793, "state": "NH" }, { "_id": "03868", "city": "EAST ROCHESTER", "loc": [ -70.968581, 43.31256 ], "pop": 20616, "state": "NH" }, { "_id": "03869", "city": "ROLLINSFORD", "loc": [ -70.833207, 43.226936 ], "pop": 2395, "state": "NH" }, { "_id": "03870", "city": "RYE", "loc": [ -70.765153, 43.009468 ], "pop": 4415, "state": "NH" }, { "_id": "03872", "city": "SANBORNVILLE", "loc": [ -71.020005, 43.551278 ], "pop": 2382, "state": "NH" }, { "_id": "03873", "city": "SANDOWN", "loc": [ -71.18606, 42.930819 ], "pop": 4060, "state": "NH" }, { "_id": "03874", "city": "SEABROOK", "loc": [ -70.86463999999999, 42.88536 ], "pop": 6503, "state": "NH" }, { "_id": "03875", "city": "SILVER LAKE", "loc": [ -71.190501, 43.878974 ], "pop": 640, "state": "NH" }, { "_id": "03878", "city": "SOMERSWORTH", "loc": [ -70.87558900000001, 43.252546 ], "pop": 11170, "state": "NH" }, { "_id": "03882", "city": "SOUTH EFFINGHAM", "loc": [ -71.002109, 43.721216 ], "pop": 201, "state": "NH" }, { "_id": "03883", "city": "SOUTH TAMWORTH", "loc": [ -71.311654, 43.833613 ], "pop": 188, "state": "NH" }, { "_id": "03884", "city": "STRAFFORD", "loc": [ -71.162475, 43.250575 ], "pop": 1618, "state": "NH" }, { "_id": "03885", "city": "STRATHAM", "loc": [ -70.899714, 43.019432 ], "pop": 4967, "state": "NH" }, { "_id": "03886", "city": "TAMWORTH", "loc": [ -71.264454, 43.862049 ], "pop": 1285, "state": "NH" }, { "_id": "03887", "city": "UNION", "loc": [ -71.02085700000001, 43.4382 ], "pop": 4229, "state": "NH" }, { "_id": "03890", "city": "WEST OSSIPEE", "loc": [ -71.205141, 43.835956 ], "pop": 362, "state": "NH" }, { "_id": "03894", "city": "WOLFEBORO", "loc": [ -71.190843, 43.594996 ], "pop": 5586, "state": "NH" }, { "_id": "03901", "city": "BERWICK", "loc": [ -70.85503799999999, 43.28992 ], "pop": 5942, "state": "ME" }, { "_id": "03902", "city": "CAPE NEDDICK", "loc": [ -70.639685, 43.213318 ], "pop": 953, "state": "ME" }, { "_id": "03903", "city": "ELIOT", "loc": [ -70.78221600000001, 43.130943 ], "pop": 6506, "state": "ME" }, { "_id": "03904", "city": "KITTERY", "loc": [ -70.742876, 43.092128 ], "pop": 3537, "state": "ME" }, { "_id": "03905", "city": "KITTERY POINT", "loc": [ -70.712108, 43.097571 ], "pop": 4589, "state": "ME" }, { "_id": "03906", "city": "NORTH BERWICK", "loc": [ -70.72117299999999, 43.325401 ], "pop": 6465, "state": "ME" }, { "_id": "03907", "city": "OGUNQUIT", "loc": [ -70.597176, 43.228457 ], "pop": 852, "state": "ME" }, { "_id": "03908", "city": "SOUTH BERWICK", "loc": [ -70.785949, 43.229201 ], "pop": 5982, "state": "ME" }, { "_id": "03909", "city": "YORK", "loc": [ -70.657826, 43.154447 ], "pop": 8477, "state": "ME" }, { "_id": "04001", "city": "ACTON", "loc": [ -70.93068700000001, 43.549405 ], "pop": 767, "state": "ME" }, { "_id": "04002", "city": "ALFRED", "loc": [ -70.69608700000001, 43.487503 ], "pop": 4730, "state": "ME" }, { "_id": "04003", "city": "BAILEY ISLAND", "loc": [ -69.995175, 43.734147 ], "pop": 464, "state": "ME" }, { "_id": "04005", "city": "ARUNDEL", "loc": [ -70.47192800000001, 43.483647 ], "pop": 23646, "state": "ME" }, { "_id": "04006", "city": "BIDDEFORD POOL", "loc": [ -70.352024, 43.442722 ], "pop": 269, "state": "ME" }, { "_id": "04008", "city": "BOWDOINHAM", "loc": [ -69.91884899999999, 44.036806 ], "pop": 4328, "state": "ME" }, { "_id": "04009", "city": "BRIDGTON", "loc": [ -70.724081, 44.052049 ], "pop": 3980, "state": "ME" }, { "_id": "04010", "city": "BROWNFIELD", "loc": [ -70.90322500000001, 43.971316 ], "pop": 1148, "state": "ME" }, { "_id": "04011", "city": "BIRCH ISLAND", "loc": [ -69.95546899999999, 43.897591 ], "pop": 22557, "state": "ME" }, { "_id": "04013", "city": "BUSTINS ISLAND", "loc": [ -70.042247, 43.79602 ], "pop": 0, "state": "ME" }, { "_id": "04015", "city": "CASCO", "loc": [ -70.52601300000001, 43.959623 ], "pop": 3010, "state": "ME" }, { "_id": "04016", "city": "CENTER LOVELL", "loc": [ -70.883618, 44.168139 ], "pop": 148, "state": "ME" }, { "_id": "04017", "city": "CHEBEAGUE ISLAND", "loc": [ -70.116878, 43.735363 ], "pop": 337, "state": "ME" }, { "_id": "04019", "city": "CLIFF ISLAND", "loc": [ -70.107097, 43.695547 ], "pop": 87, "state": "ME" }, { "_id": "04020", "city": "CORNISH", "loc": [ -70.77843300000001, 43.779612 ], "pop": 1736, "state": "ME" }, { "_id": "04021", "city": "CUMBERLAND CENTE", "loc": [ -70.2484, 43.809818 ], "pop": 8544, "state": "ME" }, { "_id": "04022", "city": "DENMARK", "loc": [ -70.79240900000001, 43.975499 ], "pop": 679, "state": "ME" }, { "_id": "04024", "city": "EAST BALDWIN", "loc": [ -70.692159, 43.864604 ], "pop": 976, "state": "ME" }, { "_id": "04027", "city": "WEST LEBANON", "loc": [ -70.91098599999999, 43.410304 ], "pop": 5224, "state": "ME" }, { "_id": "04029", "city": "NORTH SEBAGO", "loc": [ -70.633865, 43.882247 ], "pop": 597, "state": "ME" }, { "_id": "04030", "city": "EAST WATERBORO", "loc": [ -70.69062599999999, 43.599537 ], "pop": 1153, "state": "ME" }, { "_id": "04032", "city": "FREEPORT", "loc": [ -70.113854, 43.851093 ], "pop": 8081, "state": "ME" }, { "_id": "04037", "city": "FRYEBURG", "loc": [ -70.966841, 44.031278 ], "pop": 2551, "state": "ME" }, { "_id": "04038", "city": "GORHAM", "loc": [ -70.467968, 43.684329 ], "pop": 13642, "state": "ME" }, { "_id": "04039", "city": "GRAY", "loc": [ -70.342939, 43.894202 ], "pop": 5383, "state": "ME" }, { "_id": "04040", "city": "HARRISON", "loc": [ -70.65385499999999, 44.107099 ], "pop": 2274, "state": "ME" }, { "_id": "04041", "city": "HIRAM", "loc": [ -70.853076, 43.862217 ], "pop": 1905, "state": "ME" }, { "_id": "04042", "city": "HOLLIS CENTER", "loc": [ -70.605074, 43.594578 ], "pop": 2243, "state": "ME" }, { "_id": "04043", "city": "KENNEBUNK", "loc": [ -70.547802, 43.388055 ], "pop": 7826, "state": "ME" }, { "_id": "04046", "city": "KENNEBUNKPORT", "loc": [ -70.47286699999999, 43.392288 ], "pop": 5220, "state": "ME" }, { "_id": "04047", "city": "KEZAR FALLS", "loc": [ -70.892717, 43.785361 ], "pop": 852, "state": "ME" }, { "_id": "04048", "city": "LIMERICK", "loc": [ -70.786556, 43.696265 ], "pop": 2982, "state": "ME" }, { "_id": "04049", "city": "LIMINGTON", "loc": [ -70.675178, 43.726031 ], "pop": 776, "state": "ME" }, { "_id": "04050", "city": "LONG ISLAND", "loc": [ -70.15509, 43.692014 ], "pop": 201, "state": "ME" }, { "_id": "04051", "city": "LOVELL", "loc": [ -70.929951, 44.161404 ], "pop": 763, "state": "ME" }, { "_id": "04053", "city": "MEREPOINT", "loc": [ -70.00346999999999, 43.843496 ], "pop": 269, "state": "ME" }, { "_id": "04055", "city": "NAPLES", "loc": [ -70.598754, 43.968121 ], "pop": 2868, "state": "ME" }, { "_id": "04058", "city": "NORTH FRYEBURG", "loc": [ -70.981286, 44.132936 ], "pop": 185, "state": "ME" }, { "_id": "04060", "city": "NORTH SHAPLEIGH", "loc": [ -70.874392, 43.583458 ], "pop": 302, "state": "ME" }, { "_id": "04061", "city": "NORTH WATERBORO", "loc": [ -70.729799, 43.639976 ], "pop": 1516, "state": "ME" }, { "_id": "04062", "city": "WINDHAM", "loc": [ -70.414281, 43.795771 ], "pop": 13482, "state": "ME" }, { "_id": "04064", "city": "OLD ORCHARD BEAC", "loc": [ -70.392053, 43.517449 ], "pop": 8451, "state": "ME" }, { "_id": "04066", "city": "ORRS ISLAND", "loc": [ -69.966793, 43.77267 ], "pop": 861, "state": "ME" }, { "_id": "04068", "city": "PORTER", "loc": [ -70.924266, 43.826216 ], "pop": 985, "state": "ME" }, { "_id": "04069", "city": "POWNAL", "loc": [ -70.195497, 43.890042 ], "pop": 1690, "state": "ME" }, { "_id": "04071", "city": "RAYMOND", "loc": [ -70.449834, 43.921917 ], "pop": 3516, "state": "ME" }, { "_id": "04072", "city": "SACO", "loc": [ -70.454632, 43.520946 ], "pop": 16192, "state": "ME" }, { "_id": "04073", "city": "SANFORD", "loc": [ -70.75847899999999, 43.428541 ], "pop": 15723, "state": "ME" }, { "_id": "04074", "city": "SCARBOROUGH", "loc": [ -70.345668, 43.583476 ], "pop": 12550, "state": "ME" }, { "_id": "04075", "city": "SEBAGO LAKE", "loc": [ -70.573454, 43.758355 ], "pop": 4141, "state": "ME" }, { "_id": "04076", "city": "SHAPLEIGH", "loc": [ -70.828619, 43.567353 ], "pop": 314, "state": "ME" }, { "_id": "04077", "city": "SOUTH CASCO", "loc": [ -70.51293800000001, 43.876736 ], "pop": 250, "state": "ME" }, { "_id": "04079", "city": "SOUTH HARPSWELL", "loc": [ -69.993709, 43.781932 ], "pop": 1767, "state": "ME" }, { "_id": "04081", "city": "SOUTH WATERFORD", "loc": [ -70.792061, 44.151256 ], "pop": 439, "state": "ME" }, { "_id": "04083", "city": "SPRINGVALE", "loc": [ -70.806445, 43.471499 ], "pop": 5472, "state": "ME" }, { "_id": "04084", "city": "STANDISH", "loc": [ -70.48065699999999, 43.814211 ], "pop": 1592, "state": "ME" }, { "_id": "04085", "city": "STEEP FALLS", "loc": [ -70.645627, 43.757137 ], "pop": 2060, "state": "ME" }, { "_id": "04086", "city": "PEJEPSCOT", "loc": [ -69.964479, 43.941286 ], "pop": 8535, "state": "ME" }, { "_id": "04087", "city": "WATERBORO", "loc": [ -70.743115, 43.566097 ], "pop": 1797, "state": "ME" }, { "_id": "04090", "city": "WELLS", "loc": [ -70.59688300000001, 43.314352 ], "pop": 5590, "state": "ME" }, { "_id": "04091", "city": "WEST BALDWIN", "loc": [ -70.749015, 43.829873 ], "pop": 770, "state": "ME" }, { "_id": "04092", "city": "WESTBROOK", "loc": [ -70.35803300000001, 43.684268 ], "pop": 16121, "state": "ME" }, { "_id": "04093", "city": "WEST BUXTON", "loc": [ -70.601546, 43.661586 ], "pop": 4910, "state": "ME" }, { "_id": "04095", "city": "MAPLEWOOD", "loc": [ -70.913476, 43.643417 ], "pop": 1126, "state": "ME" }, { "_id": "04096", "city": "YARMOUTH", "loc": [ -70.174958, 43.800933 ], "pop": 3068, "state": "ME" }, { "_id": "04101", "city": "PORTLAND", "loc": [ -70.258864, 43.660564 ], "pop": 17147, "state": "ME" }, { "_id": "04102", "city": "PORTLAND", "loc": [ -70.28981, 43.660168 ], "pop": 17660, "state": "ME" }, { "_id": "04103", "city": "PORTLAND", "loc": [ -70.2876, 43.687568 ], "pop": 28461, "state": "ME" }, { "_id": "04105", "city": "FALMOUTH", "loc": [ -70.26253, 43.734038 ], "pop": 7609, "state": "ME" }, { "_id": "04106", "city": "SOUTH PORTLAND", "loc": [ -70.270878, 43.631847 ], "pop": 23131, "state": "ME" }, { "_id": "04107", "city": "CAPE ELIZABETH", "loc": [ -70.230099, 43.601735 ], "pop": 8854, "state": "ME" }, { "_id": "04108", "city": "PEAKS ISLAND", "loc": [ -70.194017, 43.658921 ], "pop": 775, "state": "ME" }, { "_id": "04109", "city": "CUSHING ISLAND", "loc": [ -70.202201, 43.674971 ], "pop": 28, "state": "ME" }, { "_id": "04110", "city": "CUMBERLAND FORES", "loc": [ -70.188333, 43.774485 ], "pop": 2879, "state": "ME" }, { "_id": "04210", "city": "AUBURN", "loc": [ -70.238978, 44.094785 ], "pop": 24160, "state": "ME" }, { "_id": "04216", "city": "ANDOVER", "loc": [ -70.79666, 44.663703 ], "pop": 878, "state": "ME" }, { "_id": "04217", "city": "BETHEL", "loc": [ -70.803685, 44.416176 ], "pop": 2775, "state": "ME" }, { "_id": "04219", "city": "BRYANT POND", "loc": [ -70.643468, 44.395714 ], "pop": 1563, "state": "ME" }, { "_id": "04220", "city": "BUCKFIELD", "loc": [ -70.36829299999999, 44.287676 ], "pop": 1551, "state": "ME" }, { "_id": "04221", "city": "CANTON", "loc": [ -70.321719, 44.418894 ], "pop": 1673, "state": "ME" }, { "_id": "04223", "city": "DANVILLE", "loc": [ -70.27205499999999, 44.036528 ], "pop": 1086, "state": "ME" }, { "_id": "04224", "city": "DIXFIELD", "loc": [ -70.424099, 44.554799 ], "pop": 3032, "state": "ME" }, { "_id": "04225", "city": "DRYDEN", "loc": [ -70.223962, 44.600218 ], "pop": 4520, "state": "ME" }, { "_id": "04226", "city": "EAST ANDOVER", "loc": [ -70.729555, 44.603011 ], "pop": 154, "state": "ME" }, { "_id": "04228", "city": "EAST LIVERMORE", "loc": [ -70.130334, 44.399402 ], "pop": 560, "state": "ME" }, { "_id": "04231", "city": "EAST STONEHAM", "loc": [ -70.852936, 44.238201 ], "pop": 429, "state": "ME" }, { "_id": "04235", "city": "FRYE", "loc": [ -70.565319, 44.599482 ], "pop": 28, "state": "ME" }, { "_id": "04236", "city": "GREENE", "loc": [ -70.145532, 44.189059 ], "pop": 3661, "state": "ME" }, { "_id": "04237", "city": "HANOVER", "loc": [ -70.716735, 44.495875 ], "pop": 272, "state": "ME" }, { "_id": "04238", "city": "HEBRON", "loc": [ -70.37536900000001, 44.202136 ], "pop": 826, "state": "ME" }, { "_id": "04239", "city": "JAY", "loc": [ -70.209883, 44.515994 ], "pop": 4631, "state": "ME" }, { "_id": "04240", "city": "LEWISTON", "loc": [ -70.191619, 44.098538 ], "pop": 40173, "state": "ME" }, { "_id": "04250", "city": "LISBON", "loc": [ -70.113933, 44.025511 ], "pop": 3633, "state": "ME" }, { "_id": "04252", "city": "LISBON FALLS", "loc": [ -70.073375, 43.997759 ], "pop": 8095, "state": "ME" }, { "_id": "04254", "city": "LIVERMORE FALLS", "loc": [ -70.193614, 44.445756 ], "pop": 4845, "state": "ME" }, { "_id": "04256", "city": "MECHANIC FALLS", "loc": [ -70.368206, 44.099957 ], "pop": 6247, "state": "ME" }, { "_id": "04257", "city": "MEXICO", "loc": [ -70.535797, 44.562776 ], "pop": 3316, "state": "ME" }, { "_id": "04259", "city": "MONMOUTH", "loc": [ -70.02627, 44.22083 ], "pop": 1838, "state": "ME" }, { "_id": "04260", "city": "NEW GLOUCESTER", "loc": [ -70.297381, 43.960835 ], "pop": 3916, "state": "ME" }, { "_id": "04261", "city": "NEWRY", "loc": [ -70.79261099999999, 44.407937 ], "pop": 300, "state": "ME" }, { "_id": "04263", "city": "LEEDS", "loc": [ -70.125277, 44.28343 ], "pop": 1669, "state": "ME" }, { "_id": "04265", "city": "NORTH MONMOUTH", "loc": [ -70.036686, 44.275328 ], "pop": 616, "state": "ME" }, { "_id": "04266", "city": "NORTH TURNER", "loc": [ -70.256147, 44.335031 ], "pop": 953, "state": "ME" }, { "_id": "04267", "city": "NORTH WATERFORD", "loc": [ -70.717393, 44.206511 ], "pop": 1168, "state": "ME" }, { "_id": "04268", "city": "NORWAY", "loc": [ -70.560135, 44.212654 ], "pop": 5258, "state": "ME" }, { "_id": "04270", "city": "OXFORD", "loc": [ -70.509799, 44.11183 ], "pop": 2822, "state": "ME" }, { "_id": "04273", "city": "POLAND", "loc": [ -70.41181899999999, 44.059187 ], "pop": 179, "state": "ME" }, { "_id": "04274", "city": "POLAND SPRING", "loc": [ -70.37966400000001, 44.021162 ], "pop": 1375, "state": "ME" }, { "_id": "04275", "city": "ROXBURY", "loc": [ -70.609188, 44.65657 ], "pop": 548, "state": "ME" }, { "_id": "04276", "city": "RUMFORD", "loc": [ -70.564475, 44.543446 ], "pop": 7035, "state": "ME" }, { "_id": "04278", "city": "RUMFORD CENTER", "loc": [ -70.700058, 44.592334 ], "pop": 92, "state": "ME" }, { "_id": "04279", "city": "RUMFORD POINT", "loc": [ -70.700276, 44.557104 ], "pop": 36, "state": "ME" }, { "_id": "04280", "city": "SABATTUS", "loc": [ -70.074792, 44.113269 ], "pop": 4809, "state": "ME" }, { "_id": "04281", "city": "SOUTH PARIS", "loc": [ -70.50117899999999, 44.216674 ], "pop": 6054, "state": "ME" }, { "_id": "04282", "city": "TURNER", "loc": [ -70.249444, 44.255669 ], "pop": 3365, "state": "ME" }, { "_id": "04284", "city": "WAYNE", "loc": [ -70.0712, 44.349283 ], "pop": 546, "state": "ME" }, { "_id": "04285", "city": "WELD", "loc": [ -70.42489999999999, 44.701624 ], "pop": 430, "state": "ME" }, { "_id": "04289", "city": "WEST PARIS", "loc": [ -70.573167, 44.32527 ], "pop": 2149, "state": "ME" }, { "_id": "04290", "city": "PERU", "loc": [ -70.443459, 44.494408 ], "pop": 1541, "state": "ME" }, { "_id": "04291", "city": "WEST POLAND", "loc": [ -70.450166, 44.047167 ], "pop": 733, "state": "ME" }, { "_id": "04292", "city": "WEST SUMNER", "loc": [ -70.43231400000001, 44.372804 ], "pop": 761, "state": "ME" }, { "_id": "04294", "city": "WILTON", "loc": [ -70.296064, 44.59107 ], "pop": 227, "state": "ME" }, { "_id": "04330", "city": "AUGUSTA", "loc": [ -69.766548, 44.323228 ], "pop": 25195, "state": "ME" }, { "_id": "04341", "city": "COOPERS MILLS", "loc": [ -69.507672, 44.258823 ], "pop": 1082, "state": "ME" }, { "_id": "04342", "city": "DRESDEN", "loc": [ -69.745726, 44.078507 ], "pop": 1336, "state": "ME" }, { "_id": "04344", "city": "FARMINGDALE", "loc": [ -69.791313, 44.25233 ], "pop": 2917, "state": "ME" }, { "_id": "04345", "city": "GARDINER", "loc": [ -69.785774, 44.207029 ], "pop": 8387, "state": "ME" }, { "_id": "04346", "city": "RANDOLPH", "loc": [ -69.774918, 44.228704 ], "pop": 6619, "state": "ME" }, { "_id": "04347", "city": "HALLOWELL", "loc": [ -69.80573800000001, 44.286414 ], "pop": 2613, "state": "ME" }, { "_id": "04348", "city": "JEFFERSON", "loc": [ -69.483895, 44.189419 ], "pop": 1488, "state": "ME" }, { "_id": "04349", "city": "KENTS HILL", "loc": [ -70.074822, 44.438259 ], "pop": 755, "state": "ME" }, { "_id": "04350", "city": "LITCHFIELD", "loc": [ -69.958071, 44.163437 ], "pop": 2354, "state": "ME" }, { "_id": "04351", "city": "MANCHESTER", "loc": [ -69.884657, 44.308375 ], "pop": 603, "state": "ME" }, { "_id": "04352", "city": "MOUNT VERNON", "loc": [ -69.990336, 44.499342 ], "pop": 1396, "state": "ME" }, { "_id": "04353", "city": "NORTH WHITEFIELD", "loc": [ -69.602164, 44.217844 ], "pop": 1931, "state": "ME" }, { "_id": "04354", "city": "PALERMO", "loc": [ -69.43337, 44.384282 ], "pop": 752, "state": "ME" }, { "_id": "04355", "city": "READFIELD", "loc": [ -69.95063399999999, 44.403221 ], "pop": 1725, "state": "ME" }, { "_id": "04357", "city": "RICHMOND", "loc": [ -69.821077, 44.104213 ], "pop": 3072, "state": "ME" }, { "_id": "04358", "city": "SOUTH CHINA", "loc": [ -69.58036, 44.395334 ], "pop": 182, "state": "ME" }, { "_id": "04361", "city": "WEEKS MILLS", "loc": [ -69.541738, 44.407543 ], "pop": 2942, "state": "ME" }, { "_id": "04363", "city": "WINDSOR", "loc": [ -69.58058699999999, 44.300878 ], "pop": 1618, "state": "ME" }, { "_id": "04364", "city": "WINTHROP", "loc": [ -69.973128, 44.314031 ], "pop": 7929, "state": "ME" }, { "_id": "04401", "city": "BANGOR", "loc": [ -68.791839, 44.824199 ], "pop": 40434, "state": "ME" }, { "_id": "04406", "city": "ABBOT VILLAGE", "loc": [ -69.52513999999999, 45.279838 ], "pop": 1193, "state": "ME" }, { "_id": "04408", "city": "AURORA", "loc": [ -68.295929, 44.886113 ], "pop": 141, "state": "ME" }, { "_id": "04410", "city": "BRADFORD", "loc": [ -68.923491, 45.08552 ], "pop": 1103, "state": "ME" }, { "_id": "04411", "city": "BRADLEY", "loc": [ -68.626328, 44.901454 ], "pop": 1136, "state": "ME" }, { "_id": "04412", "city": "BREWER", "loc": [ -68.753896, 44.787433 ], "pop": 9021, "state": "ME" }, { "_id": "04413", "city": "BROOKTON", "loc": [ -67.70782800000001, 45.5686 ], "pop": 236, "state": "ME" }, { "_id": "04414", "city": "BROWNVILLE", "loc": [ -69.042331, 45.341229 ], "pop": 1426, "state": "ME" }, { "_id": "04416", "city": "BUCKSPORT", "loc": [ -68.77682299999999, 44.601546 ], "pop": 5340, "state": "ME" }, { "_id": "04417", "city": "BURLINGTON", "loc": [ -68.442701, 45.218438 ], "pop": 643, "state": "ME" }, { "_id": "04418", "city": "CARDVILLE", "loc": [ -68.60327700000001, 45.077599 ], "pop": 1309, "state": "ME" }, { "_id": "04419", "city": "CARMEL", "loc": [ -68.99415, 44.805315 ], "pop": 3328, "state": "ME" }, { "_id": "04422", "city": "CHARLESTON", "loc": [ -69.086856, 45.067017 ], "pop": 1819, "state": "ME" }, { "_id": "04423", "city": "COSTIGAN", "loc": [ -68.61296900000001, 44.975336 ], "pop": 1895, "state": "ME" }, { "_id": "04424", "city": "DANFORTH", "loc": [ -67.86877800000001, 45.668654 ], "pop": 965, "state": "ME" }, { "_id": "04426", "city": "DOVER FOXCROFT", "loc": [ -69.204472, 45.18774 ], "pop": 5924, "state": "ME" }, { "_id": "04427", "city": "EAST CORINTH", "loc": [ -69.008532, 44.983655 ], "pop": 2177, "state": "ME" }, { "_id": "04428", "city": "EAST EDDINGTON", "loc": [ -68.61883, 44.820642 ], "pop": 2263, "state": "ME" }, { "_id": "04429", "city": "EAST HOLDEN", "loc": [ -68.648307, 44.742209 ], "pop": 4472, "state": "ME" }, { "_id": "04430", "city": "EAST MILLINOCKET", "loc": [ -68.572822, 45.629967 ], "pop": 2198, "state": "ME" }, { "_id": "04431", "city": "EAST ORLAND", "loc": [ -68.70174, 44.57249 ], "pop": 1281, "state": "ME" }, { "_id": "04433", "city": "ENFIELD", "loc": [ -68.605802, 45.266477 ], "pop": 1483, "state": "ME" }, { "_id": "04434", "city": "ETNA", "loc": [ -69.13222500000001, 44.793232 ], "pop": 966, "state": "ME" }, { "_id": "04435", "city": "EXETER", "loc": [ -69.107934, 44.967927 ], "pop": 561, "state": "ME" }, { "_id": "04438", "city": "FRANKFORT", "loc": [ -68.933981, 44.59794 ], "pop": 1141, "state": "ME" }, { "_id": "04441", "city": "GREENVILLE", "loc": [ -69.58437600000001, 45.471566 ], "pop": 2054, "state": "ME" }, { "_id": "04442", "city": "GREENVILLE JUNCT", "loc": [ -69.63752599999999, 45.488394 ], "pop": 99, "state": "ME" }, { "_id": "04443", "city": "GUILFORD", "loc": [ -69.397491, 45.173455 ], "pop": 2833, "state": "ME" }, { "_id": "04444", "city": "HAMPDEN", "loc": [ -68.87305000000001, 44.741073 ], "pop": 6756, "state": "ME" }, { "_id": "04446", "city": "HAYNESVILLE", "loc": [ -67.98858, 45.837991 ], "pop": 244, "state": "ME" }, { "_id": "04448", "city": "SEBOEIS", "loc": [ -68.669252, 45.247813 ], "pop": 1628, "state": "ME" }, { "_id": "04449", "city": "HUDSON", "loc": [ -68.88783100000001, 44.991415 ], "pop": 1048, "state": "ME" }, { "_id": "04450", "city": "KENDUSKEAG", "loc": [ -68.934179, 44.918251 ], "pop": 1234, "state": "ME" }, { "_id": "04451", "city": "KINGMAN", "loc": [ -68.23662, 45.598433 ], "pop": 378, "state": "ME" }, { "_id": "04453", "city": "LAGRANGE", "loc": [ -68.83448, 45.178918 ], "pop": 707, "state": "ME" }, { "_id": "04455", "city": "LEE", "loc": [ -68.290885, 45.363504 ], "pop": 832, "state": "ME" }, { "_id": "04456", "city": "LEVANT", "loc": [ -68.98367, 44.884279 ], "pop": 1627, "state": "ME" }, { "_id": "04457", "city": "LINCOLN", "loc": [ -68.507693, 45.350832 ], "pop": 4715, "state": "ME" }, { "_id": "04458", "city": "LINCOLN CENTER", "loc": [ -68.457065, 45.431731 ], "pop": 1556, "state": "ME" }, { "_id": "04459", "city": "MATTAWAMKEAG", "loc": [ -68.35195, 45.526387 ], "pop": 841, "state": "ME" }, { "_id": "04460", "city": "MEDWAY", "loc": [ -68.52270900000001, 45.60704 ], "pop": 1986, "state": "ME" }, { "_id": "04461", "city": "MILFORD", "loc": [ -68.629597, 44.939263 ], "pop": 1732, "state": "ME" }, { "_id": "04462", "city": "MILLINOCKET", "loc": [ -68.710117, 45.659563 ], "pop": 7265, "state": "ME" }, { "_id": "04463", "city": "DERBY", "loc": [ -68.977098, 45.250697 ], "pop": 3091, "state": "ME" }, { "_id": "04464", "city": "MONSON", "loc": [ -69.48798600000001, 45.298088 ], "pop": 263, "state": "ME" }, { "_id": "04468", "city": "OLD TOWN", "loc": [ -68.67496, 44.943044 ], "pop": 9290, "state": "ME" }, { "_id": "04471", "city": "NORTH AMITY", "loc": [ -67.83774099999999, 45.805639 ], "pop": 138, "state": "ME" }, { "_id": "04472", "city": "ORLAND", "loc": [ -68.731312, 44.545818 ], "pop": 524, "state": "ME" }, { "_id": "04473", "city": "ORONO", "loc": [ -68.675466, 44.892472 ], "pop": 10484, "state": "ME" }, { "_id": "04474", "city": "ORRINGTON", "loc": [ -68.78759700000001, 44.726347 ], "pop": 3309, "state": "ME" }, { "_id": "04475", "city": "PASSADUMKEAG", "loc": [ -68.604328, 45.183687 ], "pop": 428, "state": "ME" }, { "_id": "04476", "city": "PENOBSCOT", "loc": [ -68.757409, 44.434371 ], "pop": 2290, "state": "ME" }, { "_id": "04478", "city": "ROCKWOOD", "loc": [ -69.822442, 45.659329 ], "pop": 367, "state": "ME" }, { "_id": "04479", "city": "SANGERVILLE", "loc": [ -69.321772, 45.140571 ], "pop": 984, "state": "ME" }, { "_id": "04487", "city": "SPRINGFIELD", "loc": [ -68.11075599999999, 45.42638 ], "pop": 985, "state": "ME" }, { "_id": "04488", "city": "STETSON", "loc": [ -69.106877, 44.884337 ], "pop": 738, "state": "ME" }, { "_id": "04490", "city": "TOPSFIELD", "loc": [ -67.747253, 45.430403 ], "pop": 274, "state": "ME" }, { "_id": "04491", "city": "VANCEBORO", "loc": [ -67.463419, 45.558761 ], "pop": 217, "state": "ME" }, { "_id": "04492", "city": "WAITE", "loc": [ -67.64281200000001, 45.357741 ], "pop": 233, "state": "ME" }, { "_id": "04495", "city": "WINN", "loc": [ -68.357465, 45.456786 ], "pop": 479, "state": "ME" }, { "_id": "04496", "city": "WINTERPORT", "loc": [ -68.886174, 44.655247 ], "pop": 3175, "state": "ME" }, { "_id": "04497", "city": "WYTOPITLOCK", "loc": [ -68.105541, 45.664476 ], "pop": 384, "state": "ME" }, { "_id": "04530", "city": "BATH", "loc": [ -69.826565, 43.906155 ], "pop": 12628, "state": "ME" }, { "_id": "04537", "city": "BOOTHBAY", "loc": [ -69.62732200000001, 43.894497 ], "pop": 1701, "state": "ME" }, { "_id": "04538", "city": "CAPITOL ISLAND", "loc": [ -69.61844000000001, 43.854559 ], "pop": 2800, "state": "ME" }, { "_id": "04539", "city": "BRISTOL", "loc": [ -69.495367, 43.951864 ], "pop": 1220, "state": "ME" }, { "_id": "04541", "city": "CHAMBERLAIN", "loc": [ -69.49861799999999, 43.884154 ], "pop": 482, "state": "ME" }, { "_id": "04543", "city": "DAMARISCOTTA", "loc": [ -69.504237, 44.029313 ], "pop": 1217, "state": "ME" }, { "_id": "04544", "city": "EAST BOOTHBAY", "loc": [ -69.593903, 43.826241 ], "pop": 156, "state": "ME" }, { "_id": "04547", "city": "FRIENDSHIP", "loc": [ -69.29160400000001, 44.006741 ], "pop": 2085, "state": "ME" }, { "_id": "04548", "city": "MAC MAHAN", "loc": [ -69.747424, 43.819649 ], "pop": 936, "state": "ME" }, { "_id": "04551", "city": "MEDOMAK", "loc": [ -69.43066399999999, 44.006292 ], "pop": 540, "state": "ME" }, { "_id": "04553", "city": "NEWCASTLE", "loc": [ -69.533113, 44.049866 ], "pop": 1551, "state": "ME" }, { "_id": "04554", "city": "NEW HARBOR", "loc": [ -69.50793400000001, 43.860541 ], "pop": 362, "state": "ME" }, { "_id": "04555", "city": "NOBLEBORO", "loc": [ -69.482786, 44.094301 ], "pop": 1455, "state": "ME" }, { "_id": "04556", "city": "EDGECOMB", "loc": [ -69.619742, 43.979179 ], "pop": 1238, "state": "ME" }, { "_id": "04558", "city": "PEMAQUID", "loc": [ -69.528919, 43.892389 ], "pop": 103, "state": "ME" }, { "_id": "04562", "city": "PHIPPSBURG", "loc": [ -69.814982, 43.768816 ], "pop": 426, "state": "ME" }, { "_id": "04563", "city": "CUSHING", "loc": [ -69.27206099999999, 43.986741 ], "pop": 12, "state": "ME" }, { "_id": "04564", "city": "ROUND POND", "loc": [ -69.46617000000001, 43.924983 ], "pop": 159, "state": "ME" }, { "_id": "04565", "city": "SEBASCO ESTATES", "loc": [ -69.857557, 43.769342 ], "pop": 479, "state": "ME" }, { "_id": "04567", "city": "SMALL POINT", "loc": [ -69.84116299999999, 43.731724 ], "pop": 66, "state": "ME" }, { "_id": "04568", "city": "SOUTH BRISTOL", "loc": [ -69.561367, 43.867714 ], "pop": 476, "state": "ME" }, { "_id": "04570", "city": "SQUIRREL ISLAND", "loc": [ -69.63097399999999, 43.809031 ], "pop": 3, "state": "ME" }, { "_id": "04571", "city": "TREVETT", "loc": [ -69.674601, 43.893508 ], "pop": 338, "state": "ME" }, { "_id": "04572", "city": "WALDOBORO", "loc": [ -69.374537, 44.104601 ], "pop": 4702, "state": "ME" }, { "_id": "04573", "city": "WALPOLE", "loc": [ -69.55165, 43.946235 ], "pop": 349, "state": "ME" }, { "_id": "04574", "city": "WASHINGTON", "loc": [ -69.384237, 44.269281 ], "pop": 1261, "state": "ME" }, { "_id": "04576", "city": "WEST SOUTHPORT", "loc": [ -69.667343, 43.823775 ], "pop": 642, "state": "ME" }, { "_id": "04578", "city": "WISCASSET", "loc": [ -69.682576, 44.007444 ], "pop": 5928, "state": "ME" }, { "_id": "04579", "city": "WOOLWICH", "loc": [ -69.789098, 43.950317 ], "pop": 1781, "state": "ME" }, { "_id": "04605", "city": "ELLSWORTH", "loc": [ -68.412093, 44.554824 ], "pop": 10671, "state": "ME" }, { "_id": "04606", "city": "ADDISON", "loc": [ -67.714573, 44.583038 ], "pop": 1114, "state": "ME" }, { "_id": "04607", "city": "GOULDSBORO", "loc": [ -68.08985699999999, 44.473054 ], "pop": 1064, "state": "ME" }, { "_id": "04609", "city": "BAR HARBOR", "loc": [ -68.24479100000001, 44.373799 ], "pop": 5513, "state": "ME" }, { "_id": "04611", "city": "BEALS", "loc": [ -67.605554, 44.512967 ], "pop": 667, "state": "ME" }, { "_id": "04612", "city": "BERNARD", "loc": [ -68.35803, 44.241543 ], "pop": 186, "state": "ME" }, { "_id": "04613", "city": "BIRCH HARBOR", "loc": [ -68.03168599999999, 44.384195 ], "pop": 229, "state": "ME" }, { "_id": "04614", "city": "BLUE HILL", "loc": [ -68.58851300000001, 44.434265 ], "pop": 1417, "state": "ME" }, { "_id": "04615", "city": "BLUE HILL FALLS", "loc": [ -68.590282, 44.390244 ], "pop": 375, "state": "ME" }, { "_id": "04616", "city": "BROOKLIN", "loc": [ -68.556518, 44.254134 ], "pop": 260, "state": "ME" }, { "_id": "04617", "city": "BROOKSVILLE", "loc": [ -68.731279, 44.375635 ], "pop": 594, "state": "ME" }, { "_id": "04618", "city": "BUCKS HARBOR", "loc": [ -67.396382, 44.624762 ], "pop": 402, "state": "ME" }, { "_id": "04619", "city": "CALAIS", "loc": [ -67.26408000000001, 45.171478 ], "pop": 3963, "state": "ME" }, { "_id": "04622", "city": "CHERRYFIELD", "loc": [ -67.943617, 44.622791 ], "pop": 1341, "state": "ME" }, { "_id": "04623", "city": "COLUMBIA FALLS", "loc": [ -67.75341, 44.66988 ], "pop": 960, "state": "ME" }, { "_id": "04624", "city": "COREA", "loc": [ -67.985032, 44.405281 ], "pop": 507, "state": "ME" }, { "_id": "04626", "city": "CUTLER", "loc": [ -67.249869, 44.67531 ], "pop": 779, "state": "ME" }, { "_id": "04627", "city": "DEER ISLE", "loc": [ -68.644839, 44.233951 ], "pop": 949, "state": "ME" }, { "_id": "04628", "city": "DENNYSVILLE", "loc": [ -67.224431, 44.896105 ], "pop": 684, "state": "ME" }, { "_id": "04630", "city": "EAST MACHIAS", "loc": [ -67.38206599999999, 44.742362 ], "pop": 1574, "state": "ME" }, { "_id": "04631", "city": "EASTPORT", "loc": [ -67.00739, 44.919966 ], "pop": 2514, "state": "ME" }, { "_id": "04634", "city": "FRANKLIN", "loc": [ -68.241653, 44.608734 ], "pop": 1433, "state": "ME" }, { "_id": "04640", "city": "HANCOCK", "loc": [ -68.2402, 44.50459 ], "pop": 769, "state": "ME" }, { "_id": "04642", "city": "HARBORSIDE", "loc": [ -68.800901, 44.338584 ], "pop": 122, "state": "ME" }, { "_id": "04643", "city": "HARRINGTON", "loc": [ -67.814722, 44.612218 ], "pop": 986, "state": "ME" }, { "_id": "04645", "city": "ISLE AU HAUT", "loc": [ -68.620598, 44.056057 ], "pop": 46, "state": "ME" }, { "_id": "04648", "city": "JONESBORO", "loc": [ -67.577692, 44.658153 ], "pop": 585, "state": "ME" }, { "_id": "04649", "city": "JONESPORT", "loc": [ -67.604403, 44.550936 ], "pop": 1520, "state": "ME" }, { "_id": "04650", "city": "LITTLE DEER ISLE", "loc": [ -68.70666300000001, 44.285213 ], "pop": 235, "state": "ME" }, { "_id": "04652", "city": "LUBEC", "loc": [ -67.04601599999999, 44.834772 ], "pop": 2349, "state": "ME" }, { "_id": "04653", "city": "BASS HARBOR", "loc": [ -68.380387, 44.1993 ], "pop": 827, "state": "ME" }, { "_id": "04654", "city": "MACHIAS", "loc": [ -67.481996, 44.72154 ], "pop": 3766, "state": "ME" }, { "_id": "04655", "city": "MACHIASPORT", "loc": [ -67.40727699999999, 44.682039 ], "pop": 602, "state": "ME" }, { "_id": "04656", "city": "MANSET", "loc": [ -68.314408, 44.262573 ], "pop": 445, "state": "ME" }, { "_id": "04657", "city": "MEDDYBEMPS", "loc": [ -67.382852, 45.019306 ], "pop": 242, "state": "ME" }, { "_id": "04658", "city": "MILBRIDGE", "loc": [ -67.884433, 44.536601 ], "pop": 1587, "state": "ME" }, { "_id": "04660", "city": "MOUNT DESERT", "loc": [ -68.352253, 44.311547 ], "pop": 2184, "state": "ME" }, { "_id": "04661", "city": "NORTH BROOKLIN", "loc": [ -68.577326, 44.308469 ], "pop": 674, "state": "ME" }, { "_id": "04666", "city": "PEMBROKE", "loc": [ -67.200204, 44.965396 ], "pop": 1151, "state": "ME" }, { "_id": "04667", "city": "PERRY", "loc": [ -67.092882, 44.988824 ], "pop": 781, "state": "ME" }, { "_id": "04668", "city": "PRINCETON", "loc": [ -67.600826, 45.213091 ], "pop": 1918, "state": "ME" }, { "_id": "04669", "city": "PROSPECT HARBOR", "loc": [ -68.02794299999999, 44.419489 ], "pop": 385, "state": "ME" }, { "_id": "04671", "city": "ROBBINSTON", "loc": [ -67.14330099999999, 45.067007 ], "pop": 495, "state": "ME" }, { "_id": "04673", "city": "SARGENTVILLE", "loc": [ -68.70522099999999, 44.3345 ], "pop": 43, "state": "ME" }, { "_id": "04676", "city": "SEDGWICK", "loc": [ -68.637659, 44.33552 ], "pop": 908, "state": "ME" }, { "_id": "04677", "city": "SORRENTO", "loc": [ -68.178665, 44.490696 ], "pop": 295, "state": "ME" }, { "_id": "04678", "city": "SOUTH GOULDSBORO", "loc": [ -68.030406, 44.47163 ], "pop": 58, "state": "ME" }, { "_id": "04679", "city": "SOUTHWEST HARBOR", "loc": [ -68.326471, 44.2823 ], "pop": 927, "state": "ME" }, { "_id": "04680", "city": "STEUBEN", "loc": [ -67.95031899999999, 44.497082 ], "pop": 773, "state": "ME" }, { "_id": "04681", "city": "STONINGTON", "loc": [ -68.674617, 44.175197 ], "pop": 1746, "state": "ME" }, { "_id": "04683", "city": "SUNSET", "loc": [ -68.707002, 44.217404 ], "pop": 149, "state": "ME" }, { "_id": "04684", "city": "SURRY", "loc": [ -68.506272, 44.488272 ], "pop": 1004, "state": "ME" }, { "_id": "04690", "city": "WEST TREMONT", "loc": [ -68.380365, 44.252778 ], "pop": 119, "state": "ME" }, { "_id": "04693", "city": "WINTER HARBOR", "loc": [ -68.084316, 44.390038 ], "pop": 1157, "state": "ME" }, { "_id": "04694", "city": "WOODLAND", "loc": [ -67.417519, 45.133234 ], "pop": 2909, "state": "ME" }, { "_id": "04730", "city": "HOULTON", "loc": [ -67.86301400000001, 46.11885 ], "pop": 10382, "state": "ME" }, { "_id": "04732", "city": "ASHLAND", "loc": [ -68.387608, 46.618438 ], "pop": 2022, "state": "ME" }, { "_id": "04733", "city": "BENEDICTA", "loc": [ -68.408855, 45.812484 ], "pop": 192, "state": "ME" }, { "_id": "04735", "city": "BRIDGEWATER", "loc": [ -67.841469, 46.422154 ], "pop": 652, "state": "ME" }, { "_id": "04736", "city": "CARIBOU", "loc": [ -68.020352, 46.870569 ], "pop": 10928, "state": "ME" }, { "_id": "04737", "city": "CLAYTON LAKE", "loc": [ -69.626445, 46.629805 ], "pop": 54, "state": "ME" }, { "_id": "04740", "city": "EASTON", "loc": [ -67.901777, 46.635697 ], "pop": 1056, "state": "ME" }, { "_id": "04742", "city": "FORT FAIRFIELD", "loc": [ -67.840204, 46.762272 ], "pop": 4474, "state": "ME" }, { "_id": "04743", "city": "FORT KENT", "loc": [ -68.590855, 47.196857 ], "pop": 6076, "state": "ME" }, { "_id": "04746", "city": "GRAND ISLE", "loc": [ -68.15423800000001, 47.304428 ], "pop": 318, "state": "ME" }, { "_id": "04747", "city": "ISLAND FALLS", "loc": [ -68.266722, 46.016866 ], "pop": 1444, "state": "ME" }, { "_id": "04749", "city": "LILLE", "loc": [ -68.110393, 47.263623 ], "pop": 253, "state": "ME" }, { "_id": "04750", "city": "LIMESTONE", "loc": [ -67.84508599999999, 46.924786 ], "pop": 2693, "state": "ME" }, { "_id": "04751", "city": "LORING AFB", "loc": [ -67.89858, 46.9416 ], "pop": 7844, "state": "ME" }, { "_id": "04756", "city": "MADAWASKA", "loc": [ -68.33280999999999, 47.329447 ], "pop": 5860, "state": "ME" }, { "_id": "04757", "city": "MAPLETON", "loc": [ -68.153584, 46.674634 ], "pop": 1982, "state": "ME" }, { "_id": "04758", "city": "MARS HILL", "loc": [ -67.862973, 46.522268 ], "pop": 2010, "state": "ME" }, { "_id": "04760", "city": "MONTICELLO", "loc": [ -67.84143899999999, 46.300658 ], "pop": 1174, "state": "ME" }, { "_id": "04762", "city": "NEW SWEDEN", "loc": [ -68.11545, 46.955916 ], "pop": 935, "state": "ME" }, { "_id": "04763", "city": "OAKFIELD", "loc": [ -68.129805, 46.108753 ], "pop": 1113, "state": "ME" }, { "_id": "04764", "city": "OXBOW", "loc": [ -68.521792, 46.401955 ], "pop": 76, "state": "ME" }, { "_id": "04765", "city": "PATTEN", "loc": [ -68.464669, 46.01316 ], "pop": 1595, "state": "ME" }, { "_id": "04768", "city": "PORTAGE", "loc": [ -68.487675, 46.775303 ], "pop": 445, "state": "ME" }, { "_id": "04769", "city": "PRESQUE ISLE", "loc": [ -68.01179, 46.684151 ], "pop": 11058, "state": "ME" }, { "_id": "04772", "city": "SAINT AGATHA", "loc": [ -68.32323700000001, 47.238655 ], "pop": 919, "state": "ME" }, { "_id": "04773", "city": "SAINT DAVID", "loc": [ -68.231368, 47.334328 ], "pop": 285, "state": "ME" }, { "_id": "04774", "city": "SAINT FRANCIS", "loc": [ -68.950309, 47.14071 ], "pop": 1048, "state": "ME" }, { "_id": "04776", "city": "SHERMAN MILLS", "loc": [ -68.369587, 45.877727 ], "pop": 1139, "state": "ME" }, { "_id": "04777", "city": "SHERMAN STATION", "loc": [ -68.461844, 45.885892 ], "pop": 527, "state": "ME" }, { "_id": "04779", "city": "SINCLAIR", "loc": [ -68.267922, 47.174384 ], "pop": 216, "state": "ME" }, { "_id": "04780", "city": "SMYRNA MILLS", "loc": [ -68.206363, 46.146412 ], "pop": 453, "state": "ME" }, { "_id": "04781", "city": "SOLDIER POND", "loc": [ -68.59808099999999, 47.151529 ], "pop": 484, "state": "ME" }, { "_id": "04783", "city": "STOCKHOLM", "loc": [ -68.208614, 47.064299 ], "pop": 665, "state": "ME" }, { "_id": "04785", "city": "VAN BUREN", "loc": [ -67.94589000000001, 47.158857 ], "pop": 3391, "state": "ME" }, { "_id": "04786", "city": "WASHBURN", "loc": [ -68.133836, 46.788271 ], "pop": 2783, "state": "ME" }, { "_id": "04787", "city": "WESTFIELD", "loc": [ -67.89736499999999, 46.508687 ], "pop": 854, "state": "ME" }, { "_id": "04841", "city": "ROCKLAND", "loc": [ -69.113938, 44.112326 ], "pop": 8975, "state": "ME" }, { "_id": "04843", "city": "CAMDEN", "loc": [ -69.07668200000001, 44.213718 ], "pop": 5060, "state": "ME" }, { "_id": "04847", "city": "HOPE", "loc": [ -69.146743, 44.258902 ], "pop": 143, "state": "ME" }, { "_id": "04848", "city": "ISLESBORO", "loc": [ -68.907346, 44.30823 ], "pop": 580, "state": "ME" }, { "_id": "04849", "city": "LINCOLNVILLE", "loc": [ -69.082446, 44.304825 ], "pop": 2458, "state": "ME" }, { "_id": "04852", "city": "MONHEGAN", "loc": [ -69.316429, 43.764222 ], "pop": 88, "state": "ME" }, { "_id": "04853", "city": "NORTH HAVEN", "loc": [ -68.866744, 44.143598 ], "pop": 333, "state": "ME" }, { "_id": "04854", "city": "OWLS HEAD", "loc": [ -69.089416, 44.073186 ], "pop": 1624, "state": "ME" }, { "_id": "04856", "city": "ROCKPORT", "loc": [ -69.090114, 44.188787 ], "pop": 1421, "state": "ME" }, { "_id": "04857", "city": "SAINT GEORGE", "loc": [ -69.201984, 43.998687 ], "pop": 225, "state": "ME" }, { "_id": "04858", "city": "SOUTH THOMASTON", "loc": [ -69.135937, 44.037785 ], "pop": 1172, "state": "ME" }, { "_id": "04859", "city": "SPRUCE HEAD", "loc": [ -69.17071, 44.010405 ], "pop": 719, "state": "ME" }, { "_id": "04860", "city": "TENANTS HARBOR", "loc": [ -69.23150099999999, 43.955473 ], "pop": 1322, "state": "ME" }, { "_id": "04861", "city": "THOMASTON", "loc": [ -69.18880299999999, 44.084568 ], "pop": 3560, "state": "ME" }, { "_id": "04862", "city": "UNION", "loc": [ -69.25243500000001, 44.242404 ], "pop": 3853, "state": "ME" }, { "_id": "04863", "city": "VINALHAVEN", "loc": [ -68.836816, 44.03968 ], "pop": 1139, "state": "ME" }, { "_id": "04864", "city": "WARREN", "loc": [ -69.247894, 44.127066 ], "pop": 2816, "state": "ME" }, { "_id": "04865", "city": "WEST ROCKPORT", "loc": [ -69.151049, 44.181966 ], "pop": 555, "state": "ME" }, { "_id": "04901", "city": "WINSLOW", "loc": [ -69.63591700000001, 44.547967 ], "pop": 24915, "state": "ME" }, { "_id": "04910", "city": "ALBION", "loc": [ -69.46828600000001, 44.535527 ], "pop": 2616, "state": "ME" }, { "_id": "04911", "city": "ANSON", "loc": [ -69.93085600000001, 44.783107 ], "pop": 1698, "state": "ME" }, { "_id": "04912", "city": "ATHENS", "loc": [ -69.669482, 44.938844 ], "pop": 897, "state": "ME" }, { "_id": "04915", "city": "BELFAST", "loc": [ -69.014753, 44.435436 ], "pop": 9637, "state": "ME" }, { "_id": "04917", "city": "BELGRADE", "loc": [ -69.860636, 44.46875 ], "pop": 1513, "state": "ME" }, { "_id": "04918", "city": "BELGRADE LAKES", "loc": [ -69.863681, 44.511103 ], "pop": 316, "state": "ME" }, { "_id": "04920", "city": "BINGHAM", "loc": [ -69.885721, 45.068241 ], "pop": 1712, "state": "ME" }, { "_id": "04921", "city": "BROOKS", "loc": [ -69.140393, 44.567807 ], "pop": 1846, "state": "ME" }, { "_id": "04922", "city": "BURNHAM", "loc": [ -69.380049, 44.684766 ], "pop": 961, "state": "ME" }, { "_id": "04923", "city": "CAMBRIDGE", "loc": [ -69.44193, 45.051281 ], "pop": 863, "state": "ME" }, { "_id": "04924", "city": "CANAAN", "loc": [ -69.54977700000001, 44.744976 ], "pop": 1083, "state": "ME" }, { "_id": "04925", "city": "CARATUNK", "loc": [ -69.93861699999999, 45.240999 ], "pop": 124, "state": "ME" }, { "_id": "04927", "city": "CLINTON", "loc": [ -69.52840500000001, 44.643995 ], "pop": 4598, "state": "ME" }, { "_id": "04928", "city": "CORINNA", "loc": [ -69.23234100000001, 44.926045 ], "pop": 2363, "state": "ME" }, { "_id": "04929", "city": "DETROIT", "loc": [ -69.316081, 44.777526 ], "pop": 751, "state": "ME" }, { "_id": "04930", "city": "DEXTER", "loc": [ -69.27965399999999, 45.020347 ], "pop": 5875, "state": "ME" }, { "_id": "04932", "city": "DIXMONT", "loc": [ -69.102532, 44.699078 ], "pop": 1660, "state": "ME" }, { "_id": "04936", "city": "EUSTIS", "loc": [ -70.457067, 45.162559 ], "pop": 539, "state": "ME" }, { "_id": "04937", "city": "BENTON STATION", "loc": [ -69.63321000000001, 44.609639 ], "pop": 6718, "state": "ME" }, { "_id": "04938", "city": "FARMINGTON", "loc": [ -70.13287800000001, 44.665339 ], "pop": 9133, "state": "ME" }, { "_id": "04941", "city": "FREEDOM", "loc": [ -69.319045, 44.463311 ], "pop": 1775, "state": "ME" }, { "_id": "04942", "city": "WELLINGTON", "loc": [ -69.56871, 45.003926 ], "pop": 1217, "state": "ME" }, { "_id": "04943", "city": "HARTLAND", "loc": [ -69.471754, 44.878155 ], "pop": 1821, "state": "ME" }, { "_id": "04945", "city": "JACKMAN", "loc": [ -70.249227, 45.635081 ], "pop": 1207, "state": "ME" }, { "_id": "04947", "city": "KINGFIELD", "loc": [ -70.183177, 44.985403 ], "pop": 1501, "state": "ME" }, { "_id": "04949", "city": "LIBERTY", "loc": [ -69.33058, 44.374085 ], "pop": 790, "state": "ME" }, { "_id": "04950", "city": "MADISON", "loc": [ -69.8449, 44.809623 ], "pop": 4725, "state": "ME" }, { "_id": "04951", "city": "MONROE", "loc": [ -69.03169, 44.592674 ], "pop": 616, "state": "ME" }, { "_id": "04952", "city": "MORRILL", "loc": [ -69.147105, 44.410693 ], "pop": 1433, "state": "ME" }, { "_id": "04953", "city": "NEWPORT", "loc": [ -69.267498, 44.839264 ], "pop": 3272, "state": "ME" }, { "_id": "04954", "city": "NEW PORTLAND", "loc": [ -70.092857, 44.885571 ], "pop": 312, "state": "ME" }, { "_id": "04955", "city": "NEW SHARON", "loc": [ -70.013927, 44.645803 ], "pop": 1175, "state": "ME" }, { "_id": "04956", "city": "NEW VINEYARD", "loc": [ -70.121953, 44.796658 ], "pop": 661, "state": "ME" }, { "_id": "04957", "city": "NORRIDGEWOCK", "loc": [ -69.830583, 44.68994 ], "pop": 4520, "state": "ME" }, { "_id": "04958", "city": "NORTH ANSON", "loc": [ -69.911946, 44.879662 ], "pop": 1967, "state": "ME" }, { "_id": "04961", "city": "NORTH NEW PORTLA", "loc": [ -70.043268, 44.95524 ], "pop": 537, "state": "ME" }, { "_id": "04962", "city": "NORTH VASSALBORO", "loc": [ -69.57808, 44.477748 ], "pop": 2457, "state": "ME" }, { "_id": "04963", "city": "OAKLAND", "loc": [ -69.740082, 44.51729 ], "pop": 8695, "state": "ME" }, { "_id": "04965", "city": "PALMYRA", "loc": [ -69.381084, 44.857578 ], "pop": 1093, "state": "ME" }, { "_id": "04966", "city": "PHILLIPS", "loc": [ -70.360079, 44.837486 ], "pop": 1930, "state": "ME" }, { "_id": "04967", "city": "PITTSFIELD", "loc": [ -69.40223, 44.787109 ], "pop": 4719, "state": "ME" }, { "_id": "04969", "city": "PLYMOUTH", "loc": [ -69.226562, 44.769938 ], "pop": 974, "state": "ME" }, { "_id": "04970", "city": "RANGELEY", "loc": [ -70.66584400000001, 44.96306 ], "pop": 1391, "state": "ME" }, { "_id": "04971", "city": "SAINT ALBANS", "loc": [ -69.399179, 44.929264 ], "pop": 1575, "state": "ME" }, { "_id": "04973", "city": "SEARSMONT", "loc": [ -69.219579, 44.377035 ], "pop": 422, "state": "ME" }, { "_id": "04974", "city": "SEARSPORT", "loc": [ -68.93112499999999, 44.487672 ], "pop": 1927, "state": "ME" }, { "_id": "04976", "city": "SKOWHEGAN", "loc": [ -69.697571, 44.777212 ], "pop": 10166, "state": "ME" }, { "_id": "04978", "city": "SMITHFIELD", "loc": [ -69.807496, 44.630107 ], "pop": 715, "state": "ME" }, { "_id": "04979", "city": "SOLON", "loc": [ -69.833018, 44.967605 ], "pop": 1236, "state": "ME" }, { "_id": "04981", "city": "STOCKTON SPRINGS", "loc": [ -68.855974, 44.514056 ], "pop": 1925, "state": "ME" }, { "_id": "04982", "city": "STRATTON", "loc": [ -70.431928, 45.123197 ], "pop": 262, "state": "ME" }, { "_id": "04983", "city": "STRONG", "loc": [ -70.222054, 44.82236 ], "pop": 1631, "state": "ME" }, { "_id": "04984", "city": "TEMPLE", "loc": [ -70.24263500000001, 44.695417 ], "pop": 560, "state": "ME" }, { "_id": "04985", "city": "WEST FORKS", "loc": [ -69.98405700000001, 45.383905 ], "pop": 86, "state": "ME" }, { "_id": "04986", "city": "THORNDIKE", "loc": [ -69.24865800000001, 44.574406 ], "pop": 962, "state": "ME" }, { "_id": "04987", "city": "TROY", "loc": [ -69.25488, 44.675657 ], "pop": 802, "state": "ME" }, { "_id": "04988", "city": "UNITY", "loc": [ -69.332778, 44.600676 ], "pop": 1817, "state": "ME" }, { "_id": "04989", "city": "VASSALBORO", "loc": [ -69.651904, 44.440455 ], "pop": 1929, "state": "ME" }, { "_id": "05001", "city": "WHITE RIVER JUNC", "loc": [ -72.350351, 43.663431 ], "pop": 9500, "state": "VT" }, { "_id": "05032", "city": "BETHEL", "loc": [ -72.652807, 43.819464 ], "pop": 2725, "state": "VT" }, { "_id": "05033", "city": "BRADFORD", "loc": [ -72.140638, 44.0006 ], "pop": 2480, "state": "VT" }, { "_id": "05034", "city": "BRIDGEWATER", "loc": [ -72.646704, 43.580428 ], "pop": 130, "state": "VT" }, { "_id": "05035", "city": "BRIDGEWATER CORN", "loc": [ -72.68221200000001, 43.602147 ], "pop": 662, "state": "VT" }, { "_id": "05036", "city": "BROOKFIELD", "loc": [ -72.595259, 44.032083 ], "pop": 453, "state": "VT" }, { "_id": "05037", "city": "BROWNSVILLE", "loc": [ -72.494405, 43.464584 ], "pop": 415, "state": "VT" }, { "_id": "05038", "city": "CHELSEA", "loc": [ -72.479303, 44.003931 ], "pop": 1022, "state": "VT" }, { "_id": "05039", "city": "CORINTH", "loc": [ -72.282241, 44.032533 ], "pop": 1035, "state": "VT" }, { "_id": "05040", "city": "EAST CORINTH", "loc": [ -72.215144, 44.061851 ], "pop": 279, "state": "VT" }, { "_id": "05041", "city": "EAST RANDOLPH", "loc": [ -72.54874599999999, 43.955297 ], "pop": 322, "state": "VT" }, { "_id": "05042", "city": "RYEGATE", "loc": [ -72.072669, 44.193453 ], "pop": 328, "state": "VT" }, { "_id": "05043", "city": "EAST THETFORD", "loc": [ -72.19668, 43.825757 ], "pop": 657, "state": "VT" }, { "_id": "05045", "city": "FAIRLEE", "loc": [ -72.190214, 43.90105 ], "pop": 1631, "state": "VT" }, { "_id": "05046", "city": "GROTON", "loc": [ -72.21754799999999, 44.220435 ], "pop": 862, "state": "VT" }, { "_id": "05048", "city": "HARTLAND", "loc": [ -72.41310300000001, 43.570764 ], "pop": 1730, "state": "VT" }, { "_id": "05051", "city": "NEWBURY", "loc": [ -72.107231, 44.096555 ], "pop": 1488, "state": "VT" }, { "_id": "05052", "city": "NORTH HARTLAND", "loc": [ -72.352591, 43.596721 ], "pop": 429, "state": "VT" }, { "_id": "05053", "city": "NORTH POMFRET", "loc": [ -72.494287, 43.720401 ], "pop": 254, "state": "VT" }, { "_id": "05055", "city": "NORWICH", "loc": [ -72.30162, 43.740373 ], "pop": 2969, "state": "VT" }, { "_id": "05056", "city": "PLYMOUTH", "loc": [ -72.710655, 43.498653 ], "pop": 319, "state": "VT" }, { "_id": "05058", "city": "POST MILLS", "loc": [ -72.26203099999999, 43.893288 ], "pop": 511, "state": "VT" }, { "_id": "05060", "city": "RANDOLPH", "loc": [ -72.67258, 43.944399 ], "pop": 4421, "state": "VT" }, { "_id": "05061", "city": "RANDOLPH CENTER", "loc": [ -72.596975, 43.9379 ], "pop": 1567, "state": "VT" }, { "_id": "05062", "city": "READING", "loc": [ -72.570446, 43.47935 ], "pop": 614, "state": "VT" }, { "_id": "05065", "city": "SHARON", "loc": [ -72.424283, 43.774843 ], "pop": 599, "state": "VT" }, { "_id": "05067", "city": "SOUTH POMFRET", "loc": [ -72.534907, 43.679665 ], "pop": 281, "state": "VT" }, { "_id": "05068", "city": "SOUTH ROYALTON", "loc": [ -72.523228, 43.808931 ], "pop": 3169, "state": "VT" }, { "_id": "05069", "city": "SOUTH RYEGATE", "loc": [ -72.129558, 44.211075 ], "pop": 730, "state": "VT" }, { "_id": "05070", "city": "SOUTH STRAFFORD", "loc": [ -72.36995899999999, 43.828238 ], "pop": 331, "state": "VT" }, { "_id": "05071", "city": "SOUTH WOODSTOCK", "loc": [ -72.538383, 43.560137 ], "pop": 406, "state": "VT" }, { "_id": "05072", "city": "STRAFFORD", "loc": [ -72.36363, 43.872306 ], "pop": 554, "state": "VT" }, { "_id": "05073", "city": "TAFTSVILLE", "loc": [ -72.467331, 43.629819 ], "pop": 35, "state": "VT" }, { "_id": "05075", "city": "THETFORD CENTER", "loc": [ -72.266204, 43.814883 ], "pop": 1014, "state": "VT" }, { "_id": "05077", "city": "TUNBRIDGE", "loc": [ -72.478578, 43.9169 ], "pop": 1352, "state": "VT" }, { "_id": "05079", "city": "VERSHIRE", "loc": [ -72.31901499999999, 43.961811 ], "pop": 565, "state": "VT" }, { "_id": "05081", "city": "WELLS RIVER", "loc": [ -72.052958, 44.152438 ], "pop": 473, "state": "VT" }, { "_id": "05083", "city": "WEST FAIRLEE", "loc": [ -72.26163, 43.92232 ], "pop": 153, "state": "VT" }, { "_id": "05084", "city": "WEST HARTFORD", "loc": [ -72.44461800000001, 43.716068 ], "pop": 135, "state": "VT" }, { "_id": "05086", "city": "WEST TOPSHAM", "loc": [ -72.270051, 44.119925 ], "pop": 1050, "state": "VT" }, { "_id": "05089", "city": "WINDSOR", "loc": [ -72.41099800000001, 43.476032 ], "pop": 5406, "state": "VT" }, { "_id": "05091", "city": "WOODSTOCK", "loc": [ -72.538455, 43.62482 ], "pop": 3742, "state": "VT" }, { "_id": "05101", "city": "BELLOWS FALLS", "loc": [ -72.466373, 43.148198 ], "pop": 5433, "state": "VT" }, { "_id": "05141", "city": "CAMBRIDGEPORT", "loc": [ -72.565511, 43.153363 ], "pop": 118, "state": "VT" }, { "_id": "05142", "city": "CAVENDISH", "loc": [ -72.609247, 43.376621 ], "pop": 258, "state": "VT" }, { "_id": "05143", "city": "CHESTER", "loc": [ -72.60312500000001, 43.283124 ], "pop": 3449, "state": "VT" }, { "_id": "05146", "city": "GRAFTON", "loc": [ -72.597229, 43.160095 ], "pop": 823, "state": "VT" }, { "_id": "05148", "city": "BROMLEY MTN", "loc": [ -72.801756, 43.223961 ], "pop": 986, "state": "VT" }, { "_id": "05149", "city": "LUDLOW", "loc": [ -72.70018399999999, 43.392909 ], "pop": 2420, "state": "VT" }, { "_id": "05150", "city": "NORTH SPRINGFIEL", "loc": [ -72.529096, 43.335452 ], "pop": 824, "state": "VT" }, { "_id": "05151", "city": "PERKINSVILLE", "loc": [ -72.50381299999999, 43.387885 ], "pop": 1181, "state": "VT" }, { "_id": "05152", "city": "PERU", "loc": [ -72.886797, 43.256532 ], "pop": 458, "state": "VT" }, { "_id": "05153", "city": "PROCTORSVILLE", "loc": [ -72.61962, 43.4005 ], "pop": 1065, "state": "VT" }, { "_id": "05154", "city": "SAXTONS RIVER", "loc": [ -72.508107, 43.137861 ], "pop": 681, "state": "VT" }, { "_id": "05155", "city": "SOUTH LONDONDERR", "loc": [ -72.811787, 43.183082 ], "pop": 546, "state": "VT" }, { "_id": "05156", "city": "SPRINGFIELD", "loc": [ -72.477769, 43.303433 ], "pop": 9231, "state": "VT" }, { "_id": "05161", "city": "WESTON", "loc": [ -72.79352299999999, 43.29409 ], "pop": 488, "state": "VT" }, { "_id": "05201", "city": "BENNINGTON", "loc": [ -73.19232100000001, 42.882658 ], "pop": 14757, "state": "VT" }, { "_id": "05250", "city": "ARLINGTON", "loc": [ -73.159364, 43.085681 ], "pop": 3006, "state": "VT" }, { "_id": "05251", "city": "DORSET", "loc": [ -73.07660300000001, 43.263561 ], "pop": 1402, "state": "VT" }, { "_id": "05252", "city": "EAST ARLINGTON", "loc": [ -73.138904, 43.063801 ], "pop": 443, "state": "VT" }, { "_id": "05253", "city": "EAST DORSET", "loc": [ -73.008146, 43.236982 ], "pop": 516, "state": "VT" }, { "_id": "05255", "city": "MANCHESTER CENTE", "loc": [ -73.052313, 43.175223 ], "pop": 3622, "state": "VT" }, { "_id": "05257", "city": "NORTH BENNINGTON", "loc": [ -73.237531, 42.92385 ], "pop": 2037, "state": "VT" }, { "_id": "05260", "city": "NORTH POWNAL", "loc": [ -73.25342999999999, 42.809775 ], "pop": 523, "state": "VT" }, { "_id": "05261", "city": "POWNAL", "loc": [ -73.21624, 42.787955 ], "pop": 2962, "state": "VT" }, { "_id": "05262", "city": "SHAFTSBURY", "loc": [ -73.21659099999999, 42.96144 ], "pop": 3363, "state": "VT" }, { "_id": "05301", "city": "BRATTLEBORO", "loc": [ -72.593322, 42.857353 ], "pop": 17522, "state": "VT" }, { "_id": "05340", "city": "BONDVILLE", "loc": [ -72.912768, 43.161831 ], "pop": 482, "state": "VT" }, { "_id": "05341", "city": "EAST DOVER", "loc": [ -72.78303200000001, 42.950508 ], "pop": 253, "state": "VT" }, { "_id": "05342", "city": "JACKSONVILLE", "loc": [ -72.807121, 42.777752 ], "pop": 406, "state": "VT" }, { "_id": "05343", "city": "JAMAICA", "loc": [ -72.794409, 43.104235 ], "pop": 603, "state": "VT" }, { "_id": "05345", "city": "NEWFANE", "loc": [ -72.678078, 42.97043 ], "pop": 1389, "state": "VT" }, { "_id": "05346", "city": "PUTNEY", "loc": [ -72.512272, 43.035561 ], "pop": 4971, "state": "VT" }, { "_id": "05350", "city": "READSBORO", "loc": [ -72.960886, 42.78367 ], "pop": 762, "state": "VT" }, { "_id": "05352", "city": "STAMFORD", "loc": [ -73.069068, 42.76962 ], "pop": 773, "state": "VT" }, { "_id": "05353", "city": "TOWNSHEND", "loc": [ -72.668676, 43.062174 ], "pop": 920, "state": "VT" }, { "_id": "05354", "city": "VERNON", "loc": [ -72.51154699999999, 42.756468 ], "pop": 1850, "state": "VT" }, { "_id": "05355", "city": "WARDSBORO", "loc": [ -72.807687, 43.032649 ], "pop": 573, "state": "VT" }, { "_id": "05356", "city": "MOUNT SNOW", "loc": [ -72.854235, 42.956029 ], "pop": 743, "state": "VT" }, { "_id": "05358", "city": "WEST HALIFAX", "loc": [ -72.750142, 42.776103 ], "pop": 202, "state": "VT" }, { "_id": "05359", "city": "WEST TOWNSHEND", "loc": [ -72.720985, 43.130044 ], "pop": 402, "state": "VT" }, { "_id": "05360", "city": "WEST WARDSBORO", "loc": [ -72.880537, 43.047221 ], "pop": 228, "state": "VT" }, { "_id": "05361", "city": "WHITINGHAM", "loc": [ -72.85600100000001, 42.790071 ], "pop": 921, "state": "VT" }, { "_id": "05362", "city": "WILLIAMSVILLE", "loc": [ -72.658406, 42.948151 ], "pop": 166, "state": "VT" }, { "_id": "05363", "city": "WILMINGTON", "loc": [ -72.861316, 42.881216 ], "pop": 2053, "state": "VT" }, { "_id": "05401", "city": "BURLINGTON", "loc": [ -73.219875, 44.484023 ], "pop": 39127, "state": "VT" }, { "_id": "05403", "city": "SOUTH BURLINGTON", "loc": [ -73.17961699999999, 44.451324 ], "pop": 12809, "state": "VT" }, { "_id": "05404", "city": "WINOOSKI", "loc": [ -73.18741300000001, 44.494898 ], "pop": 6649, "state": "VT" }, { "_id": "05405", "city": "UNIV OF VERMONT", "loc": [ -73.2002, 44.477733 ], "pop": 0, "state": "VT" }, { "_id": "05440", "city": "ALBURG", "loc": [ -73.280963, 44.968454 ], "pop": 1362, "state": "VT" }, { "_id": "05441", "city": "BAKERSFIELD", "loc": [ -72.796834, 44.790518 ], "pop": 973, "state": "VT" }, { "_id": "05443", "city": "BRISTOL", "loc": [ -73.071742, 44.146031 ], "pop": 6685, "state": "VT" }, { "_id": "05444", "city": "CAMBRIDGE", "loc": [ -72.865728, 44.651013 ], "pop": 3491, "state": "VT" }, { "_id": "05445", "city": "CHARLOTTE", "loc": [ -73.227969, 44.311277 ], "pop": 3009, "state": "VT" }, { "_id": "05446", "city": "COLCHESTER", "loc": [ -73.20221600000001, 44.535956 ], "pop": 14731, "state": "VT" }, { "_id": "05447", "city": "EAST BERKSHIRE", "loc": [ -72.706564, 44.929798 ], "pop": 94, "state": "VT" }, { "_id": "05448", "city": "EAST FAIRFIELD", "loc": [ -72.910995, 44.801805 ], "pop": 1076, "state": "VT" }, { "_id": "05450", "city": "ENOSBURG FALLS", "loc": [ -72.791037, 44.898491 ], "pop": 2268, "state": "VT" }, { "_id": "05452", "city": "ESSEX JUNCTION", "loc": [ -73.090644, 44.503466 ], "pop": 17050, "state": "VT" }, { "_id": "05454", "city": "FAIRFAX", "loc": [ -73.024078, 44.692387 ], "pop": 2990, "state": "VT" }, { "_id": "05455", "city": "FAIRFIELD", "loc": [ -73.022187, 44.784087 ], "pop": 359, "state": "VT" }, { "_id": "05456", "city": "FERRISBURG", "loc": [ -73.25857499999999, 44.212822 ], "pop": 951, "state": "VT" }, { "_id": "05457", "city": "FRANKLIN", "loc": [ -72.903694, 44.961408 ], "pop": 1475, "state": "VT" }, { "_id": "05458", "city": "GRAND ISLE", "loc": [ -73.30561, 44.719711 ], "pop": 1590, "state": "VT" }, { "_id": "05459", "city": "HIGHGATE CENTER", "loc": [ -73.015468, 44.940395 ], "pop": 1567, "state": "VT" }, { "_id": "05461", "city": "HINESBURG", "loc": [ -73.097955, 44.334621 ], "pop": 3187, "state": "VT" }, { "_id": "05462", "city": "HUNTINGTON", "loc": [ -72.996432, 44.322655 ], "pop": 2223, "state": "VT" }, { "_id": "05463", "city": "ISLE LA MOTTE", "loc": [ -73.339095, 44.874829 ], "pop": 408, "state": "VT" }, { "_id": "05464", "city": "SMUGGLERS NOTCH", "loc": [ -72.78057699999999, 44.662499 ], "pop": 300, "state": "VT" }, { "_id": "05465", "city": "JERICHO CENTER", "loc": [ -72.979398, 44.484318 ], "pop": 3449, "state": "VT" }, { "_id": "05468", "city": "MILTON", "loc": [ -73.131692, 44.648275 ], "pop": 10627, "state": "VT" }, { "_id": "05471", "city": "MONTGOMERY CENTE", "loc": [ -72.599352, 44.874606 ], "pop": 603, "state": "VT" }, { "_id": "05472", "city": "NEW HAVEN", "loc": [ -73.17346999999999, 44.112575 ], "pop": 858, "state": "VT" }, { "_id": "05473", "city": "NORTH FERRISBURG", "loc": [ -73.203254, 44.251461 ], "pop": 1126, "state": "VT" }, { "_id": "05474", "city": "NORTH HERO", "loc": [ -73.28416900000001, 44.829392 ], "pop": 502, "state": "VT" }, { "_id": "05476", "city": "RICHFORD", "loc": [ -72.690472, 44.971453 ], "pop": 3794, "state": "VT" }, { "_id": "05477", "city": "BOLTON VALLEY", "loc": [ -72.993256, 44.399846 ], "pop": 3758, "state": "VT" }, { "_id": "05478", "city": "SAINT ALBANS", "loc": [ -73.08902500000001, 44.811138 ], "pop": 13555, "state": "VT" }, { "_id": "05482", "city": "SHELBURNE", "loc": [ -73.217124, 44.389967 ], "pop": 5871, "state": "VT" }, { "_id": "05483", "city": "SHELDON", "loc": [ -72.952989, 44.887167 ], "pop": 1556, "state": "VT" }, { "_id": "05486", "city": "SOUTH HERO", "loc": [ -73.31134400000001, 44.640044 ], "pop": 1456, "state": "VT" }, { "_id": "05487", "city": "STARKSBORO", "loc": [ -73.0157, 44.2261 ], "pop": 1020, "state": "VT" }, { "_id": "05488", "city": "SWANTON", "loc": [ -73.12112399999999, 44.916754 ], "pop": 6570, "state": "VT" }, { "_id": "05489", "city": "UNDERHILL", "loc": [ -72.925845, 44.539069 ], "pop": 3637, "state": "VT" }, { "_id": "05491", "city": "VERGENNES", "loc": [ -73.279293, 44.132569 ], "pop": 6041, "state": "VT" }, { "_id": "05492", "city": "WATERVILLE", "loc": [ -72.759557, 44.712375 ], "pop": 532, "state": "VT" }, { "_id": "05494", "city": "WESTFORD", "loc": [ -73.006021, 44.618191 ], "pop": 1102, "state": "VT" }, { "_id": "05495", "city": "WILLISTON", "loc": [ -73.095704, 44.436745 ], "pop": 5592, "state": "VT" }, { "_id": "05602", "city": "MONTPELIER", "loc": [ -72.576992, 44.264082 ], "pop": 12475, "state": "VT" }, { "_id": "05640", "city": "ADAMANT", "loc": [ -72.504649, 44.35747 ], "pop": 456, "state": "VT" }, { "_id": "05641", "city": "BARRE", "loc": [ -72.493619, 44.194522 ], "pop": 14994, "state": "VT" }, { "_id": "05647", "city": "CABOT", "loc": [ -72.306443, 44.404215 ], "pop": 1043, "state": "VT" }, { "_id": "05648", "city": "CALAIS", "loc": [ -72.474113, 44.393438 ], "pop": 319, "state": "VT" }, { "_id": "05649", "city": "EAST BARRE", "loc": [ -72.446003, 44.158277 ], "pop": 381, "state": "VT" }, { "_id": "05650", "city": "EAST CALAIS", "loc": [ -72.439829, 44.355599 ], "pop": 746, "state": "VT" }, { "_id": "05651", "city": "EAST MONTPELIER", "loc": [ -72.492636, 44.282844 ], "pop": 1018, "state": "VT" }, { "_id": "05652", "city": "EDEN", "loc": [ -72.58629999999999, 44.734267 ], "pop": 913, "state": "VT" }, { "_id": "05653", "city": "EDEN MILLS", "loc": [ -72.513447, 44.693123 ], "pop": 155, "state": "VT" }, { "_id": "05654", "city": "GRANITEVILLE", "loc": [ -72.48452899999999, 44.157326 ], "pop": 2321, "state": "VT" }, { "_id": "05655", "city": "HYDE PARK", "loc": [ -72.594971, 44.622453 ], "pop": 2094, "state": "VT" }, { "_id": "05656", "city": "JOHNSON", "loc": [ -72.671154, 44.64204 ], "pop": 3156, "state": "VT" }, { "_id": "05658", "city": "MARSHFIELD", "loc": [ -72.374994, 44.321841 ], "pop": 1331, "state": "VT" }, { "_id": "05660", "city": "MORETOWN", "loc": [ -72.74939500000001, 44.259602 ], "pop": 1896, "state": "VT" }, { "_id": "05661", "city": "MORRISVILLE", "loc": [ -72.602625, 44.554335 ], "pop": 4935, "state": "VT" }, { "_id": "05663", "city": "RIVERTON", "loc": [ -72.659795, 44.149961 ], "pop": 6245, "state": "VT" }, { "_id": "05666", "city": "NORTH MONTPELIER", "loc": [ -72.482119, 44.256612 ], "pop": 469, "state": "VT" }, { "_id": "05667", "city": "PLAINFIELD", "loc": [ -72.42243000000001, 44.262164 ], "pop": 1304, "state": "VT" }, { "_id": "05669", "city": "ROXBURY", "loc": [ -72.720151, 44.084571 ], "pop": 575, "state": "VT" }, { "_id": "05672", "city": "STOWE", "loc": [ -72.69228200000001, 44.469512 ], "pop": 3433, "state": "VT" }, { "_id": "05673", "city": "WAITSFIELD", "loc": [ -72.828321, 44.188917 ], "pop": 1751, "state": "VT" }, { "_id": "05674", "city": "SUGARBUSH VALLEY", "loc": [ -72.848179, 44.114222 ], "pop": 1172, "state": "VT" }, { "_id": "05675", "city": "WASHGTIN", "loc": [ -72.430002, 44.086448 ], "pop": 1022, "state": "VT" }, { "_id": "05676", "city": "WATERBURY", "loc": [ -72.779768, 44.345103 ], "pop": 4751, "state": "VT" }, { "_id": "05677", "city": "WATERBURY CENTER", "loc": [ -72.708006, 44.382797 ], "pop": 1645, "state": "VT" }, { "_id": "05679", "city": "WILLIAMSTOWN", "loc": [ -72.53811, 44.118191 ], "pop": 2964, "state": "VT" }, { "_id": "05680", "city": "WOLCOTT", "loc": [ -72.484416, 44.555753 ], "pop": 1850, "state": "VT" }, { "_id": "05681", "city": "WOODBURY", "loc": [ -72.417766, 44.432507 ], "pop": 766, "state": "VT" }, { "_id": "05682", "city": "WORCESTER", "loc": [ -72.560925, 44.394389 ], "pop": 906, "state": "VT" }, { "_id": "05701", "city": "RUTLAND", "loc": [ -72.97077299999999, 43.614131 ], "pop": 22576, "state": "VT" }, { "_id": "05730", "city": "BELMONT", "loc": [ -72.825701, 43.428441 ], "pop": 223, "state": "VT" }, { "_id": "05732", "city": "HUBBARDTON", "loc": [ -73.206424, 43.622413 ], "pop": 914, "state": "VT" }, { "_id": "05733", "city": "BRANDON", "loc": [ -73.088182, 43.806467 ], "pop": 5027, "state": "VT" }, { "_id": "05734", "city": "BRIDPORT", "loc": [ -73.34755699999999, 43.95383 ], "pop": 641, "state": "VT" }, { "_id": "05735", "city": "CASTLETON", "loc": [ -73.17079699999999, 43.622312 ], "pop": 2897, "state": "VT" }, { "_id": "05736", "city": "CENTER RUTLAND", "loc": [ -73.016986, 43.602345 ], "pop": 299, "state": "VT" }, { "_id": "05737", "city": "CHITTENDEN", "loc": [ -72.936001, 43.703382 ], "pop": 526, "state": "VT" }, { "_id": "05738", "city": "CUTTINGSVILLE", "loc": [ -72.869089, 43.522084 ], "pop": 1101, "state": "VT" }, { "_id": "05739", "city": "DANBY", "loc": [ -73.01285, 43.358341 ], "pop": 1170, "state": "VT" }, { "_id": "05742", "city": "EAST WALLINGFORD", "loc": [ -72.88437500000001, 43.446063 ], "pop": 588, "state": "VT" }, { "_id": "05743", "city": "FAIR HAVEN", "loc": [ -73.27006799999999, 43.62345 ], "pop": 4283, "state": "VT" }, { "_id": "05744", "city": "FLORENCE", "loc": [ -73.078988, 43.709294 ], "pop": 257, "state": "VT" }, { "_id": "05746", "city": "GAYSVILLE", "loc": [ -72.731149, 43.752912 ], "pop": 198, "state": "VT" }, { "_id": "05747", "city": "GRANVILLE", "loc": [ -72.8245, 43.984912 ], "pop": 309, "state": "VT" }, { "_id": "05748", "city": "HANCOCK", "loc": [ -72.913285, 43.912525 ], "pop": 98, "state": "VT" }, { "_id": "05751", "city": "KILLINGTON", "loc": [ -72.79631000000001, 43.663364 ], "pop": 738, "state": "VT" }, { "_id": "05753", "city": "BREAD LOAF", "loc": [ -73.16613, 44.007042 ], "pop": 9990, "state": "VT" }, { "_id": "05757", "city": "MIDDLETOWN SPRIN", "loc": [ -73.11452, 43.484864 ], "pop": 966, "state": "VT" }, { "_id": "05758", "city": "MOUNT HOLLY", "loc": [ -72.795562, 43.44865 ], "pop": 693, "state": "VT" }, { "_id": "05759", "city": "NORTH CLARENDON", "loc": [ -72.956096, 43.552208 ], "pop": 2517, "state": "VT" }, { "_id": "05760", "city": "ORWELL", "loc": [ -73.294855, 43.783722 ], "pop": 1315, "state": "VT" }, { "_id": "05761", "city": "PAWLET", "loc": [ -73.14440399999999, 43.358679 ], "pop": 935, "state": "VT" }, { "_id": "05762", "city": "PITTSFIELD", "loc": [ -72.853376, 43.753823 ], "pop": 450, "state": "VT" }, { "_id": "05763", "city": "PITTSFORD", "loc": [ -73.013492, 43.71524 ], "pop": 2864, "state": "VT" }, { "_id": "05764", "city": "POULTNEY", "loc": [ -73.225281, 43.53321 ], "pop": 4012, "state": "VT" }, { "_id": "05765", "city": "PROCTOR", "loc": [ -73.03481600000001, 43.657951 ], "pop": 1868, "state": "VT" }, { "_id": "05766", "city": "RIPTON", "loc": [ -73.01873999999999, 43.992862 ], "pop": 433, "state": "VT" }, { "_id": "05767", "city": "ROCHESTER", "loc": [ -72.815917, 43.880382 ], "pop": 1551, "state": "VT" }, { "_id": "05769", "city": "SALISBURY", "loc": [ -73.100793, 43.90172 ], "pop": 1885, "state": "VT" }, { "_id": "05770", "city": "SHOREHAM", "loc": [ -73.305385, 43.886214 ], "pop": 946, "state": "VT" }, { "_id": "05772", "city": "STOCKBRIDGE", "loc": [ -72.78139400000001, 43.773808 ], "pop": 124, "state": "VT" }, { "_id": "05773", "city": "WALLINGFORD", "loc": [ -72.98772200000001, 43.4573 ], "pop": 2172, "state": "VT" }, { "_id": "05774", "city": "WELLS", "loc": [ -73.202684, 43.430456 ], "pop": 837, "state": "VT" }, { "_id": "05775", "city": "WEST PAWLET", "loc": [ -73.23132699999999, 43.36673 ], "pop": 604, "state": "VT" }, { "_id": "05776", "city": "WEST RUPERT", "loc": [ -73.20284700000001, 43.261792 ], "pop": 654, "state": "VT" }, { "_id": "05777", "city": "WEST RUTLAND", "loc": [ -73.04242000000001, 43.578072 ], "pop": 3415, "state": "VT" }, { "_id": "05778", "city": "LEICESTER JUNCTI", "loc": [ -73.213312, 43.874972 ], "pop": 615, "state": "VT" }, { "_id": "05819", "city": "SAINT JOHNSBURY", "loc": [ -72.005062, 44.427195 ], "pop": 8797, "state": "VT" }, { "_id": "05820", "city": "ALBANY", "loc": [ -72.34181, 44.734427 ], "pop": 782, "state": "VT" }, { "_id": "05821", "city": "BARNET", "loc": [ -72.078326, 44.317923 ], "pop": 1415, "state": "VT" }, { "_id": "05822", "city": "BARTON", "loc": [ -72.160005, 44.739465 ], "pop": 1270, "state": "VT" }, { "_id": "05824", "city": "CONCORD", "loc": [ -71.867554, 44.446055 ], "pop": 1242, "state": "VT" }, { "_id": "05825", "city": "COVENTRY", "loc": [ -72.254471, 44.880853 ], "pop": 722, "state": "VT" }, { "_id": "05826", "city": "CRAFTSBURY", "loc": [ -72.366007, 44.64341 ], "pop": 623, "state": "VT" }, { "_id": "05827", "city": "CRAFTSBURY COMMO", "loc": [ -72.41457800000001, 44.652917 ], "pop": 399, "state": "VT" }, { "_id": "05828", "city": "DANVILLE", "loc": [ -72.113319, 44.433241 ], "pop": 1482, "state": "VT" }, { "_id": "05829", "city": "DERBY", "loc": [ -72.13755500000001, 44.950182 ], "pop": 2607, "state": "VT" }, { "_id": "05830", "city": "DERBY LINE", "loc": [ -72.082367, 44.990183 ], "pop": 2040, "state": "VT" }, { "_id": "05832", "city": "EAST BURKE", "loc": [ -71.93567400000001, 44.607849 ], "pop": 875, "state": "VT" }, { "_id": "05833", "city": "EAST CHARLESTON", "loc": [ -71.97627, 44.829896 ], "pop": 246, "state": "VT" }, { "_id": "05836", "city": "EAST HARDWICK", "loc": [ -72.30335100000001, 44.528833 ], "pop": 493, "state": "VT" }, { "_id": "05837", "city": "EAST HAVEN", "loc": [ -71.867491, 44.651724 ], "pop": 269, "state": "VT" }, { "_id": "05839", "city": "GLOVER", "loc": [ -72.203819, 44.719979 ], "pop": 795, "state": "VT" }, { "_id": "05841", "city": "GREENSBORO", "loc": [ -72.285017, 44.595069 ], "pop": 461, "state": "VT" }, { "_id": "05842", "city": "GREENSBORO BEND", "loc": [ -72.252478, 44.548488 ], "pop": 405, "state": "VT" }, { "_id": "05843", "city": "HARDWICK", "loc": [ -72.36381799999999, 44.507026 ], "pop": 2450, "state": "VT" }, { "_id": "05845", "city": "IRASBURG", "loc": [ -72.276269, 44.808056 ], "pop": 907, "state": "VT" }, { "_id": "05846", "city": "ISLAND POND", "loc": [ -71.88396400000001, 44.809452 ], "pop": 1585, "state": "VT" }, { "_id": "05847", "city": "LOWELL", "loc": [ -72.450132, 44.796107 ], "pop": 594, "state": "VT" }, { "_id": "05850", "city": "LYNDON CENTER", "loc": [ -72.03106200000001, 44.54719 ], "pop": 519, "state": "VT" }, { "_id": "05851", "city": "LYNDONVILLE", "loc": [ -72.009168, 44.540766 ], "pop": 5417, "state": "VT" }, { "_id": "05853", "city": "MORGAN CTR", "loc": [ -71.994052, 44.90659 ], "pop": 497, "state": "VT" }, { "_id": "05855", "city": "NEWPORT", "loc": [ -72.20650500000001, 44.939344 ], "pop": 4773, "state": "VT" }, { "_id": "05857", "city": "NEWPORT CENTER", "loc": [ -72.29741199999999, 44.944175 ], "pop": 1367, "state": "VT" }, { "_id": "05858", "city": "NORTH CONCORD", "loc": [ -71.78666200000001, 44.550099 ], "pop": 191, "state": "VT" }, { "_id": "05859", "city": "JAY PEAK", "loc": [ -72.45723099999999, 44.961861 ], "pop": 370, "state": "VT" }, { "_id": "05860", "city": "ORLEANS", "loc": [ -72.165328, 44.80544 ], "pop": 2467, "state": "VT" }, { "_id": "05862", "city": "PEACHAM", "loc": [ -72.17703899999999, 44.335563 ], "pop": 627, "state": "VT" }, { "_id": "05866", "city": "SHEFFIELD", "loc": [ -72.12392699999999, 44.61784 ], "pop": 600, "state": "VT" }, { "_id": "05867", "city": "SUTTON", "loc": [ -72.02113300000001, 44.646543 ], "pop": 854, "state": "VT" }, { "_id": "05868", "city": "TROY", "loc": [ -72.39380800000001, 44.959381 ], "pop": 1609, "state": "VT" }, { "_id": "05871", "city": "WEST BURKE", "loc": [ -71.95717999999999, 44.663647 ], "pop": 885, "state": "VT" }, { "_id": "05872", "city": "WEST CHARLESTON", "loc": [ -72.05209000000001, 44.872894 ], "pop": 598, "state": "VT" }, { "_id": "05873", "city": "WEST DANVILLE", "loc": [ -72.21977099999999, 44.446509 ], "pop": 1130, "state": "VT" }, { "_id": "05874", "city": "WESTFIELD", "loc": [ -72.439628, 44.882457 ], "pop": 398, "state": "VT" }, { "_id": "05875", "city": "WEST GLOVER", "loc": [ -72.259936, 44.703145 ], "pop": 265, "state": "VT" }, { "_id": "05901", "city": "AVERILL", "loc": [ -71.70026799999999, 44.992304 ], "pop": 7, "state": "VT" }, { "_id": "05902", "city": "BEECHER FALLS", "loc": [ -71.519901, 45.006103 ], "pop": 579, "state": "VT" }, { "_id": "05903", "city": "CANAAN", "loc": [ -71.560214, 44.976439 ], "pop": 542, "state": "VT" }, { "_id": "05904", "city": "GILMAN", "loc": [ -71.71786, 44.413985 ], "pop": 322, "state": "VT" }, { "_id": "05905", "city": "GUILDHALL", "loc": [ -71.599057, 44.690218 ], "pop": 848, "state": "VT" }, { "_id": "05906", "city": "LUNENBURG", "loc": [ -71.69304, 44.466262 ], "pop": 854, "state": "VT" }, { "_id": "05907", "city": "NORTON", "loc": [ -71.78843999999999, 44.988781 ], "pop": 171, "state": "VT" }, { "_id": "06001", "city": "AVON", "loc": [ -72.865323, 41.790498 ], "pop": 13988, "state": "CT" }, { "_id": "06002", "city": "BLOOMFIELD", "loc": [ -72.72493, 41.831647 ], "pop": 19524, "state": "CT" }, { "_id": "06010", "city": "BRISTOL", "loc": [ -72.930193, 41.682293 ], "pop": 60670, "state": "CT" }, { "_id": "06013", "city": "BURLINGTON", "loc": [ -72.94438599999999, 41.757296 ], "pop": 7017, "state": "CT" }, { "_id": "06016", "city": "WINDSORVILLE", "loc": [ -72.543667, 41.911405 ], "pop": 5067, "state": "CT" }, { "_id": "06018", "city": "CANAAN", "loc": [ -73.323177, 42.024821 ], "pop": 2948, "state": "CT" }, { "_id": "06019", "city": "CANTON", "loc": [ -72.898731, 41.838401 ], "pop": 4125, "state": "CT" }, { "_id": "06020", "city": "CANTON CENTER", "loc": [ -72.90584699999999, 41.871586 ], "pop": 192, "state": "CT" }, { "_id": "06021", "city": "COLEBROOK", "loc": [ -73.104069, 42.028217 ], "pop": 203, "state": "CT" }, { "_id": "06022", "city": "COLLINSVILLE", "loc": [ -72.92827, 41.851319 ], "pop": 4630, "state": "CT" }, { "_id": "06023", "city": "EAST BERLIN", "loc": [ -72.719007, 41.61277 ], "pop": 1021, "state": "CT" }, { "_id": "06024", "city": "EAST CANAAN", "loc": [ -73.278462, 42.011686 ], "pop": 519, "state": "CT" }, { "_id": "06026", "city": "EAST GRANBY", "loc": [ -72.74588900000001, 41.932215 ], "pop": 4301, "state": "CT" }, { "_id": "06027", "city": "EAST HARTLAND", "loc": [ -72.92421299999999, 42.001617 ], "pop": 1833, "state": "CT" }, { "_id": "06029", "city": "ELLINGTON", "loc": [ -72.462599, 41.911417 ], "pop": 9070, "state": "CT" }, { "_id": "06031", "city": "FALLS VILLAGE", "loc": [ -73.351659, 41.95784 ], "pop": 1192, "state": "CT" }, { "_id": "06032", "city": "FARMINGTON", "loc": [ -72.841476, 41.72839 ], "pop": 14953, "state": "CT" }, { "_id": "06033", "city": "GLASTONBURY", "loc": [ -72.572705, 41.707329 ], "pop": 24287, "state": "CT" }, { "_id": "06035", "city": "GRANBY", "loc": [ -72.79937700000001, 41.960227 ], "pop": 6939, "state": "CT" }, { "_id": "06037", "city": "BERLIN", "loc": [ -72.770482, 41.620826 ], "pop": 15755, "state": "CT" }, { "_id": "06039", "city": "LAKEVILLE", "loc": [ -73.43765999999999, 41.951631 ], "pop": 2086, "state": "CT" }, { "_id": "06040", "city": "MANCHESTER", "loc": [ -72.52444, 41.777732 ], "pop": 51618, "state": "CT" }, { "_id": "06043", "city": "BOLTON", "loc": [ -72.43958000000001, 41.768888 ], "pop": 4569, "state": "CT" }, { "_id": "06051", "city": "NEW BRITAIN", "loc": [ -72.77220800000001, 41.666683 ], "pop": 28705, "state": "CT" }, { "_id": "06052", "city": "NEW BRITAIN", "loc": [ -72.798858, 41.658792 ], "pop": 8798, "state": "CT" }, { "_id": "06053", "city": "NEW BRITAIN", "loc": [ -72.790835, 41.686667 ], "pop": 37995, "state": "CT" }, { "_id": "06057", "city": "NEW HARTFORD", "loc": [ -73.010369, 41.846797 ], "pop": 4521, "state": "CT" }, { "_id": "06058", "city": "NORFOLK", "loc": [ -73.199197, 41.985386 ], "pop": 2060, "state": "CT" }, { "_id": "06059", "city": "NORTH CANTON", "loc": [ -72.90414, 41.923516 ], "pop": 783, "state": "CT" }, { "_id": "06060", "city": "NORTH GRANBY", "loc": [ -72.84093799999999, 42.021925 ], "pop": 1455, "state": "CT" }, { "_id": "06062", "city": "PLAINVILLE", "loc": [ -72.864373, 41.672653 ], "pop": 17320, "state": "CT" }, { "_id": "06063", "city": "PLEASANT VALLEY", "loc": [ -72.982675, 41.924873 ], "pop": 838, "state": "CT" }, { "_id": "06065", "city": "RIVERTON", "loc": [ -73.025469, 41.961395 ], "pop": 155, "state": "CT" }, { "_id": "06066", "city": "VERNON ROCKVILLE", "loc": [ -72.464855, 41.850073 ], "pop": 31966, "state": "CT" }, { "_id": "06067", "city": "ROCKY HILL", "loc": [ -72.663197, 41.658295 ], "pop": 16638, "state": "CT" }, { "_id": "06068", "city": "SALISBURY", "loc": [ -73.421492, 42.001452 ], "pop": 1686, "state": "CT" }, { "_id": "06069", "city": "SHARON", "loc": [ -73.457758, 41.871446 ], "pop": 2794, "state": "CT" }, { "_id": "06070", "city": "SIMSBURY", "loc": [ -72.82126700000001, 41.873712 ], "pop": 14589, "state": "CT" }, { "_id": "06071", "city": "SOMERS", "loc": [ -72.45826599999999, 41.997813 ], "pop": 9685, "state": "CT" }, { "_id": "06073", "city": "SOUTH GLASTONBUR", "loc": [ -72.55430800000001, 41.660682 ], "pop": 3614, "state": "CT" }, { "_id": "06074", "city": "SOUTH WINDSOR", "loc": [ -72.557585, 41.834081 ], "pop": 22090, "state": "CT" }, { "_id": "06076", "city": "STAFFORD SPRINGS", "loc": [ -72.289857, 41.966127 ], "pop": 12392, "state": "CT" }, { "_id": "06078", "city": "SUFFIELD", "loc": [ -72.641997, 41.990029 ], "pop": 8518, "state": "CT" }, { "_id": "06081", "city": "TARIFFVILLE", "loc": [ -72.767786, 41.907715 ], "pop": 1477, "state": "CT" }, { "_id": "06082", "city": "ENFIELD", "loc": [ -72.565218, 41.989016 ], "pop": 45558, "state": "CT" }, { "_id": "06084", "city": "TOLLAND", "loc": [ -72.37178900000001, 41.869647 ], "pop": 10973, "state": "CT" }, { "_id": "06085", "city": "UNIONVILLE", "loc": [ -72.887406, 41.747711 ], "pop": 5604, "state": "CT" }, { "_id": "06088", "city": "EAST WINDSOR", "loc": [ -72.60294500000001, 41.9099 ], "pop": 4988, "state": "CT" }, { "_id": "06089", "city": "WEATOGUE", "loc": [ -72.825254, 41.837152 ], "pop": 2308, "state": "CT" }, { "_id": "06090", "city": "WEST GRANBY", "loc": [ -72.855496, 41.965509 ], "pop": 948, "state": "CT" }, { "_id": "06092", "city": "WEST SIMSBURY", "loc": [ -72.857749, 41.871797 ], "pop": 3691, "state": "CT" }, { "_id": "06093", "city": "WEST SUFFIELD", "loc": [ -72.736232, 42.011464 ], "pop": 2912, "state": "CT" }, { "_id": "06095", "city": "WINDSOR", "loc": [ -72.663893, 41.856122 ], "pop": 27815, "state": "CT" }, { "_id": "06096", "city": "WINDSOR LOCKS", "loc": [ -72.645762, 41.926078 ], "pop": 12358, "state": "CT" }, { "_id": "06098", "city": "WINSTED", "loc": [ -73.06634099999999, 41.925214 ], "pop": 14584, "state": "CT" }, { "_id": "06103", "city": "HARTFORD", "loc": [ -72.675966, 41.767196 ], "pop": 1202, "state": "CT" }, { "_id": "06105", "city": "HARTFORD", "loc": [ -72.70100600000001, 41.769116 ], "pop": 20887, "state": "CT" }, { "_id": "06106", "city": "HARTFORD", "loc": [ -72.694734, 41.749841 ], "pop": 47841, "state": "CT" }, { "_id": "06107", "city": "W HARTFORD", "loc": [ -72.75322, 41.755553 ], "pop": 18466, "state": "CT" }, { "_id": "06108", "city": "EAST HARTFORD", "loc": [ -72.618014, 41.780291 ], "pop": 23698, "state": "CT" }, { "_id": "06109", "city": "WETHERSFIELD", "loc": [ -72.67630800000001, 41.701332 ], "pop": 25583, "state": "CT" }, { "_id": "06110", "city": "W HARTFORD", "loc": [ -72.73369099999999, 41.732566 ], "pop": 11817, "state": "CT" }, { "_id": "06111", "city": "MAPLE HILL", "loc": [ -72.729747, 41.686402 ], "pop": 29192, "state": "CT" }, { "_id": "06112", "city": "HARTFORD", "loc": [ -72.69641, 41.79053 ], "pop": 29714, "state": "CT" }, { "_id": "06114", "city": "HARTFORD", "loc": [ -72.68072600000001, 41.740293 ], "pop": 23302, "state": "CT" }, { "_id": "06117", "city": "W HARTFORD", "loc": [ -72.745689, 41.790021 ], "pop": 14774, "state": "CT" }, { "_id": "06118", "city": "EAST HARTFORD", "loc": [ -72.610265, 41.747211 ], "pop": 26754, "state": "CT" }, { "_id": "06119", "city": "W HARTFORD", "loc": [ -72.726799, 41.762765 ], "pop": 15066, "state": "CT" }, { "_id": "06120", "city": "HARTFORD", "loc": [ -72.67580700000001, 41.78596 ], "pop": 16739, "state": "CT" }, { "_id": "06226", "city": "WILLIMANTIC", "loc": [ -72.213396, 41.714918 ], "pop": 16023, "state": "CT" }, { "_id": "06231", "city": "AMSTON", "loc": [ -72.36460099999999, 41.628969 ], "pop": 2887, "state": "CT" }, { "_id": "06232", "city": "ANDOVER", "loc": [ -72.37671899999999, 41.733215 ], "pop": 2546, "state": "CT" }, { "_id": "06234", "city": "BROOKLYN", "loc": [ -71.95412899999999, 41.780747 ], "pop": 4835, "state": "CT" }, { "_id": "06235", "city": "CHAPLIN", "loc": [ -72.137197, 41.802584 ], "pop": 902, "state": "CT" }, { "_id": "06237", "city": "COLUMBIA", "loc": [ -72.30717, 41.697274 ], "pop": 4510, "state": "CT" }, { "_id": "06238", "city": "COVENTRY", "loc": [ -72.333249, 41.782195 ], "pop": 10776, "state": "CT" }, { "_id": "06239", "city": "DANIELSON", "loc": [ -71.880703, 41.798246 ], "pop": 12754, "state": "CT" }, { "_id": "06241", "city": "DAYVILLE", "loc": [ -71.868342, 41.854045 ], "pop": 5860, "state": "CT" }, { "_id": "06242", "city": "EASTFORD", "loc": [ -72.089451, 41.877104 ], "pop": 76, "state": "CT" }, { "_id": "06243", "city": "EAST KILLINGLY", "loc": [ -71.798534, 41.848756 ], "pop": 25, "state": "CT" }, { "_id": "06247", "city": "HAMPTON", "loc": [ -72.06797899999999, 41.761668 ], "pop": 2139, "state": "CT" }, { "_id": "06248", "city": "HEBRON", "loc": [ -72.39855300000001, 41.684161 ], "pop": 4192, "state": "CT" }, { "_id": "06249", "city": "LEBANON", "loc": [ -72.244035, 41.632988 ], "pop": 6043, "state": "CT" }, { "_id": "06250", "city": "MANSFIELD CENTER", "loc": [ -72.20111199999999, 41.769814 ], "pop": 4306, "state": "CT" }, { "_id": "06254", "city": "NORTH FRANKLIN", "loc": [ -72.142544, 41.616141 ], "pop": 1654, "state": "CT" }, { "_id": "06255", "city": "NORTH GROSVENORD", "loc": [ -71.902734, 41.987878 ], "pop": 5641, "state": "CT" }, { "_id": "06256", "city": "NORTH WINDHAM", "loc": [ -72.160106, 41.745144 ], "pop": 3825, "state": "CT" }, { "_id": "06259", "city": "POMFRET CENTER", "loc": [ -71.98201, 41.869683 ], "pop": 3325, "state": "CT" }, { "_id": "06260", "city": "PUTNAM", "loc": [ -71.896804, 41.91853 ], "pop": 9031, "state": "CT" }, { "_id": "06262", "city": "QUINEBAUG", "loc": [ -71.939137, 42.021747 ], "pop": 72, "state": "CT" }, { "_id": "06264", "city": "SCOTLAND", "loc": [ -72.07826300000001, 41.689849 ], "pop": 102, "state": "CT" }, { "_id": "06266", "city": "SOUTH WINDHAM", "loc": [ -72.16811199999999, 41.667724 ], "pop": 372, "state": "CT" }, { "_id": "06268", "city": "STORRS MANSFIELD", "loc": [ -72.257172, 41.805364 ], "pop": 16117, "state": "CT" }, { "_id": "06277", "city": "THOMPSON", "loc": [ -71.837587, 41.980285 ], "pop": 2960, "state": "CT" }, { "_id": "06278", "city": "WARRENVILLE", "loc": [ -72.15873000000001, 41.86434 ], "pop": 2720, "state": "CT" }, { "_id": "06279", "city": "WEST WILLINGTON", "loc": [ -72.272774, 41.873996 ], "pop": 5981, "state": "CT" }, { "_id": "06280", "city": "WINDHAM", "loc": [ -72.15261, 41.702652 ], "pop": 3337, "state": "CT" }, { "_id": "06281", "city": "WOODSTOCK", "loc": [ -72.00402699999999, 41.960218 ], "pop": 5698, "state": "CT" }, { "_id": "06282", "city": "WOODSTOCK VALLEY", "loc": [ -72.09366, 41.915296 ], "pop": 1099, "state": "CT" }, { "_id": "06320", "city": "NEW LONDON", "loc": [ -72.106245, 41.350718 ], "pop": 28367, "state": "CT" }, { "_id": "06330", "city": "BALTIC", "loc": [ -72.077499, 41.62629 ], "pop": 3188, "state": "CT" }, { "_id": "06331", "city": "CANTERBURY", "loc": [ -72.000985, 41.684403 ], "pop": 4345, "state": "CT" }, { "_id": "06333", "city": "EAST LYME", "loc": [ -72.23298699999999, 41.366806 ], "pop": 6095, "state": "CT" }, { "_id": "06334", "city": "BOZRAH", "loc": [ -72.17107799999999, 41.546515 ], "pop": 2297, "state": "CT" }, { "_id": "06335", "city": "GALES FERRY", "loc": [ -72.06719, 41.42852 ], "pop": 6994, "state": "CT" }, { "_id": "06336", "city": "GILMAN", "loc": [ -72.126623, 41.58117 ], "pop": 156, "state": "CT" }, { "_id": "06339", "city": "LEDYARD", "loc": [ -71.995626, 41.44014 ], "pop": 7602, "state": "CT" }, { "_id": "06340", "city": "GROTON", "loc": [ -72.057947, 41.357171 ], "pop": 32435, "state": "CT" }, { "_id": "06349", "city": "GROTON", "loc": [ -72.090058, 41.397648 ], "pop": 5398, "state": "CT" }, { "_id": "06351", "city": "JEWETT CITY", "loc": [ -71.98075900000001, 41.605182 ], "pop": 11674, "state": "CT" }, { "_id": "06353", "city": "MONTVILLE", "loc": [ -72.126476, 41.445331 ], "pop": 258, "state": "CT" }, { "_id": "06354", "city": "MOOSUP", "loc": [ -71.884962, 41.721031 ], "pop": 7048, "state": "CT" }, { "_id": "06355", "city": "MYSTIC", "loc": [ -71.97736399999999, 41.361626 ], "pop": 11183, "state": "CT" }, { "_id": "06357", "city": "NIANTIC", "loc": [ -72.210819, 41.3253 ], "pop": 9245, "state": "CT" }, { "_id": "06359", "city": "NORTH STONINGTON", "loc": [ -71.87270100000001, 41.453113 ], "pop": 4882, "state": "CT" }, { "_id": "06360", "city": "NORWICH", "loc": [ -72.08494, 41.537055 ], "pop": 30145, "state": "CT" }, { "_id": "06365", "city": "PRESTON", "loc": [ -72.021079, 41.522061 ], "pop": 11191, "state": "CT" }, { "_id": "06370", "city": "OAKDALE", "loc": [ -72.190358, 41.470573 ], "pop": 6505, "state": "CT" }, { "_id": "06371", "city": "OLD LYME", "loc": [ -72.30856199999999, 41.334745 ], "pop": 8484, "state": "CT" }, { "_id": "06374", "city": "PLAINFIELD", "loc": [ -71.92196800000001, 41.67753 ], "pop": 6533, "state": "CT" }, { "_id": "06375", "city": "QUAKER HILL", "loc": [ -72.11722, 41.40324 ], "pop": 2886, "state": "CT" }, { "_id": "06377", "city": "STERLING", "loc": [ -71.819588, 41.715629 ], "pop": 2324, "state": "CT" }, { "_id": "06378", "city": "STONINGTON", "loc": [ -71.915544, 41.366437 ], "pop": 5282, "state": "CT" }, { "_id": "06379", "city": "PAWCATUCK", "loc": [ -71.84776100000001, 41.373475 ], "pop": 8082, "state": "CT" }, { "_id": "06380", "city": "TAFTVILLE", "loc": [ -72.052877, 41.565263 ], "pop": 2538, "state": "CT" }, { "_id": "06382", "city": "UNCASVILLE", "loc": [ -72.112556, 41.462168 ], "pop": 9909, "state": "CT" }, { "_id": "06384", "city": "VOLUNTOWN", "loc": [ -71.855002, 41.583053 ], "pop": 3167, "state": "CT" }, { "_id": "06385", "city": "WATERFORD", "loc": [ -72.145816, 41.346853 ], "pop": 15217, "state": "CT" }, { "_id": "06390", "city": "FISHERS ISLAND", "loc": [ -72.01783399999999, 41.263934 ], "pop": 329, "state": "NY" }, { "_id": "06401", "city": "ANSONIA", "loc": [ -73.07421100000001, 41.342712 ], "pop": 18430, "state": "CT" }, { "_id": "06403", "city": "BEACON FALLS", "loc": [ -73.059656, 41.436917 ], "pop": 5083, "state": "CT" }, { "_id": "06405", "city": "BRANFORD", "loc": [ -72.810643, 41.279991 ], "pop": 27726, "state": "CT" }, { "_id": "06409", "city": "CENTERBROOK", "loc": [ -72.41731, 41.34743 ], "pop": 483, "state": "CT" }, { "_id": "06410", "city": "CHESHIRE", "loc": [ -72.90812699999999, 41.505473 ], "pop": 25684, "state": "CT" }, { "_id": "06412", "city": "CHESTER", "loc": [ -72.464293, 41.404903 ], "pop": 3417, "state": "CT" }, { "_id": "06413", "city": "CLINTON", "loc": [ -72.527973, 41.29117 ], "pop": 12772, "state": "CT" }, { "_id": "06415", "city": "COLCHESTER", "loc": [ -72.344123, 41.566198 ], "pop": 10978, "state": "CT" }, { "_id": "06416", "city": "CROMWELL", "loc": [ -72.66631700000001, 41.61049 ], "pop": 12286, "state": "CT" }, { "_id": "06417", "city": "DEEP RIVER", "loc": [ -72.44856799999999, 41.376478 ], "pop": 4332, "state": "CT" }, { "_id": "06418", "city": "DERBY", "loc": [ -73.080035, 41.322858 ], "pop": 12199, "state": "CT" }, { "_id": "06419", "city": "KILLINGWORTH", "loc": [ -72.571192, 41.369622 ], "pop": 4809, "state": "CT" }, { "_id": "06420", "city": "SALEM", "loc": [ -72.272454, 41.496627 ], "pop": 4041, "state": "CT" }, { "_id": "06422", "city": "DURHAM", "loc": [ -72.68752000000001, 41.464951 ], "pop": 5737, "state": "CT" }, { "_id": "06423", "city": "EAST HADDAM", "loc": [ -72.40587600000001, 41.469575 ], "pop": 3451, "state": "CT" }, { "_id": "06424", "city": "EAST HAMPTON", "loc": [ -72.509345, 41.576058 ], "pop": 10309, "state": "CT" }, { "_id": "06426", "city": "ESSEX", "loc": [ -72.39650399999999, 41.354944 ], "pop": 2710, "state": "CT" }, { "_id": "06430", "city": "FAIRFIELD", "loc": [ -73.257109, 41.166442 ], "pop": 40889, "state": "CT" }, { "_id": "06432", "city": "FAIRFIELD", "loc": [ -73.23540800000001, 41.201651 ], "pop": 8634, "state": "CT" }, { "_id": "06437", "city": "GUILFORD", "loc": [ -72.69678999999999, 41.31537 ], "pop": 19717, "state": "CT" }, { "_id": "06438", "city": "HADDAM", "loc": [ -72.504988, 41.462718 ], "pop": 2245, "state": "CT" }, { "_id": "06441", "city": "HIGGANUM", "loc": [ -72.575143, 41.468246 ], "pop": 4248, "state": "CT" }, { "_id": "06442", "city": "IVORYTON", "loc": [ -72.440387, 41.342101 ], "pop": 2748, "state": "CT" }, { "_id": "06443", "city": "MADISON", "loc": [ -72.61525399999999, 41.309019 ], "pop": 15488, "state": "CT" }, { "_id": "06447", "city": "MARLBOROUGH", "loc": [ -72.460871, 41.641226 ], "pop": 5535, "state": "CT" }, { "_id": "06450", "city": "MERIDEN", "loc": [ -72.799734, 41.533396 ], "pop": 59441, "state": "CT" }, { "_id": "06455", "city": "MIDDLEFIELD", "loc": [ -72.71862400000001, 41.516789 ], "pop": 2515, "state": "CT" }, { "_id": "06457", "city": "MIDDLETOWN", "loc": [ -72.66522500000001, 41.556895 ], "pop": 42846, "state": "CT" }, { "_id": "06460", "city": "MILFORD", "loc": [ -73.054948, 41.217466 ], "pop": 49940, "state": "CT" }, { "_id": "06468", "city": "MONROE", "loc": [ -73.224333, 41.331171 ], "pop": 16845, "state": "CT" }, { "_id": "06469", "city": "MOODUS", "loc": [ -72.441879, 41.507807 ], "pop": 2634, "state": "CT" }, { "_id": "06470", "city": "NEWTOWN", "loc": [ -73.316744, 41.393095 ], "pop": 12787, "state": "CT" }, { "_id": "06471", "city": "NORTH BRANFORD", "loc": [ -72.776034, 41.327985 ], "pop": 6767, "state": "CT" }, { "_id": "06472", "city": "NORTHFORD", "loc": [ -72.78090899999999, 41.396219 ], "pop": 6229, "state": "CT" }, { "_id": "06473", "city": "NORTH HAVEN", "loc": [ -72.85852, 41.382156 ], "pop": 22481, "state": "CT" }, { "_id": "06475", "city": "OLD SAYBROOK", "loc": [ -72.38502200000001, 41.291297 ], "pop": 9552, "state": "CT" }, { "_id": "06477", "city": "ORANGE", "loc": [ -73.02872499999999, 41.281527 ], "pop": 12828, "state": "CT" }, { "_id": "06478", "city": "OXFORD", "loc": [ -73.12961, 41.420237 ], "pop": 9286, "state": "CT" }, { "_id": "06479", "city": "PLANTSVILLE", "loc": [ -72.89903099999999, 41.579747 ], "pop": 10024, "state": "CT" }, { "_id": "06480", "city": "PORTLAND", "loc": [ -72.612797, 41.585223 ], "pop": 8673, "state": "CT" }, { "_id": "06481", "city": "ROCKFALL", "loc": [ -72.699674, 41.534094 ], "pop": 1330, "state": "CT" }, { "_id": "06482", "city": "SANDY HOOK", "loc": [ -73.24852199999999, 41.408706 ], "pop": 8046, "state": "CT" }, { "_id": "06483", "city": "SEYMOUR", "loc": [ -73.081745, 41.386209 ], "pop": 13660, "state": "CT" }, { "_id": "06484", "city": "SHELTON", "loc": [ -73.129439, 41.304689 ], "pop": 35447, "state": "CT" }, { "_id": "06488", "city": "SOUTHBURY", "loc": [ -73.22407699999999, 41.476695 ], "pop": 15818, "state": "CT" }, { "_id": "06489", "city": "SOUTHINGTON", "loc": [ -72.872681, 41.605221 ], "pop": 28567, "state": "CT" }, { "_id": "06490", "city": "SOUTHPORT", "loc": [ -73.290205, 41.14527 ], "pop": 3701, "state": "CT" }, { "_id": "06492", "city": "WALLINGFORD", "loc": [ -72.82217900000001, 41.459997 ], "pop": 40838, "state": "CT" }, { "_id": "06497", "city": "STRATFORD", "loc": [ -73.135594, 41.2044 ], "pop": 49495, "state": "CT" }, { "_id": "06498", "city": "WESTBROOK", "loc": [ -72.45631299999999, 41.292662 ], "pop": 5377, "state": "CT" }, { "_id": "06510", "city": "NEW HAVEN", "loc": [ -72.92706, 41.308701 ], "pop": 4448, "state": "CT" }, { "_id": "06511", "city": "NEW HAVEN", "loc": [ -72.931771, 41.318364 ], "pop": 54142, "state": "CT" }, { "_id": "06512", "city": "EAST HAVEN", "loc": [ -72.874144, 41.280522 ], "pop": 28963, "state": "CT" }, { "_id": "06513", "city": "EAST HAVEN", "loc": [ -72.882554, 41.314215 ], "pop": 31342, "state": "CT" }, { "_id": "06514", "city": "HAMDEN", "loc": [ -72.93613000000001, 41.361987 ], "pop": 23883, "state": "CT" }, { "_id": "06515", "city": "NEW HAVEN", "loc": [ -72.96644499999999, 41.329301 ], "pop": 18603, "state": "CT" }, { "_id": "06516", "city": "WEST HAVEN", "loc": [ -72.963842, 41.270079 ], "pop": 53642, "state": "CT" }, { "_id": "06517", "city": "HAMDEN", "loc": [ -72.91167799999999, 41.348393 ], "pop": 14604, "state": "CT" }, { "_id": "06518", "city": "HAMDEN", "loc": [ -72.911001, 41.409664 ], "pop": 13802, "state": "CT" }, { "_id": "06519", "city": "NEW HAVEN", "loc": [ -72.937307, 41.296284 ], "pop": 19410, "state": "CT" }, { "_id": "06524", "city": "BETHANY", "loc": [ -73.000704, 41.426194 ], "pop": 4730, "state": "CT" }, { "_id": "06525", "city": "WOODBRIDGE", "loc": [ -73.013902, 41.351668 ], "pop": 7802, "state": "CT" }, { "_id": "06604", "city": "BRIDGEPORT", "loc": [ -73.201859, 41.179574 ], "pop": 28219, "state": "CT" }, { "_id": "06605", "city": "BRIDGEPORT", "loc": [ -73.216251, 41.166796 ], "pop": 23800, "state": "CT" }, { "_id": "06606", "city": "BRIDGEPORT", "loc": [ -73.208619, 41.20907 ], "pop": 41879, "state": "CT" }, { "_id": "06607", "city": "BRIDGEPORT", "loc": [ -73.165048, 41.178382 ], "pop": 9292, "state": "CT" }, { "_id": "06608", "city": "BRIDGEPORT", "loc": [ -73.181141, 41.189466 ], "pop": 17721, "state": "CT" }, { "_id": "06610", "city": "BRIDGEPORT", "loc": [ -73.16877100000001, 41.200508 ], "pop": 20727, "state": "CT" }, { "_id": "06611", "city": "TRUMBULL", "loc": [ -73.211063, 41.25641 ], "pop": 32213, "state": "CT" }, { "_id": "06612", "city": "EASTON", "loc": [ -73.287108, 41.252328 ], "pop": 6213, "state": "CT" }, { "_id": "06702", "city": "WATERBURY", "loc": [ -73.038545, 41.556568 ], "pop": 4522, "state": "CT" }, { "_id": "06704", "city": "WATERBURY", "loc": [ -73.03180500000001, 41.575435 ], "pop": 26018, "state": "CT" }, { "_id": "06705", "city": "WATERBURY", "loc": [ -72.996268, 41.550328 ], "pop": 25128, "state": "CT" }, { "_id": "06706", "city": "WATERBURY", "loc": [ -73.03064000000001, 41.536261 ], "pop": 15431, "state": "CT" }, { "_id": "06708", "city": "WATERBURY", "loc": [ -73.06449499999999, 41.551102 ], "pop": 27661, "state": "CT" }, { "_id": "06710", "city": "WATERBURY", "loc": [ -73.04682099999999, 41.567503 ], "pop": 9921, "state": "CT" }, { "_id": "06712", "city": "PROSPECT", "loc": [ -72.978803, 41.502198 ], "pop": 7775, "state": "CT" }, { "_id": "06716", "city": "WOLCOTT", "loc": [ -72.982799, 41.596995 ], "pop": 13787, "state": "CT" }, { "_id": "06750", "city": "BANTAM", "loc": [ -73.252028, 41.721483 ], "pop": 1418, "state": "CT" }, { "_id": "06751", "city": "BETHLEHEM", "loc": [ -73.209098, 41.638683 ], "pop": 3071, "state": "CT" }, { "_id": "06752", "city": "BRIDGEWATER", "loc": [ -73.360936, 41.528684 ], "pop": 1654, "state": "CT" }, { "_id": "06754", "city": "WARREN", "loc": [ -73.36747200000001, 41.770084 ], "pop": 1278, "state": "CT" }, { "_id": "06755", "city": "GAYLORDSVILLE", "loc": [ -73.483524, 41.648635 ], "pop": 890, "state": "CT" }, { "_id": "06756", "city": "GOSHEN", "loc": [ -73.242876, 41.833452 ], "pop": 2314, "state": "CT" }, { "_id": "06757", "city": "KENT", "loc": [ -73.45834499999999, 41.731619 ], "pop": 2035, "state": "CT" }, { "_id": "06758", "city": "LAKESIDE", "loc": [ -73.238235, 41.69001 ], "pop": 997, "state": "CT" }, { "_id": "06759", "city": "LITCHFIELD", "loc": [ -73.200011, 41.754069 ], "pop": 5573, "state": "CT" }, { "_id": "06762", "city": "MIDDLEBURY", "loc": [ -73.11306999999999, 41.534277 ], "pop": 6338, "state": "CT" }, { "_id": "06763", "city": "MORRIS", "loc": [ -73.176509, 41.688121 ], "pop": 849, "state": "CT" }, { "_id": "06770", "city": "NAUGATUCK", "loc": [ -73.049342, 41.492039 ], "pop": 30625, "state": "CT" }, { "_id": "06776", "city": "NEW MILFORD", "loc": [ -73.412752, 41.581745 ], "pop": 22750, "state": "CT" }, { "_id": "06777", "city": "NEW PRESTON MARB", "loc": [ -73.349296, 41.689373 ], "pop": 1697, "state": "CT" }, { "_id": "06778", "city": "NORTHFIELD", "loc": [ -73.132079, 41.707382 ], "pop": 442, "state": "CT" }, { "_id": "06779", "city": "OAKVILLE", "loc": [ -73.087311, 41.590932 ], "pop": 8455, "state": "CT" }, { "_id": "06782", "city": "PLYMOUTH", "loc": [ -73.044887, 41.661121 ], "pop": 2910, "state": "CT" }, { "_id": "06783", "city": "ROXBURY", "loc": [ -73.299346, 41.5509 ], "pop": 1825, "state": "CT" }, { "_id": "06784", "city": "SHERMAN", "loc": [ -73.494694, 41.571366 ], "pop": 2808, "state": "CT" }, { "_id": "06785", "city": "SOUTH KENT", "loc": [ -73.46902300000001, 41.695051 ], "pop": 719, "state": "CT" }, { "_id": "06786", "city": "TERRYVILLE", "loc": [ -73.009214, 41.676197 ], "pop": 8912, "state": "CT" }, { "_id": "06787", "city": "THOMASTON", "loc": [ -73.08855699999999, 41.678643 ], "pop": 8179, "state": "CT" }, { "_id": "06790", "city": "TORRINGTON", "loc": [ -73.115579, 41.813065 ], "pop": 33969, "state": "CT" }, { "_id": "06791", "city": "HARWINTON", "loc": [ -73.072819, 41.770145 ], "pop": 5228, "state": "CT" }, { "_id": "06793", "city": "WASHINGTON DEPOT", "loc": [ -73.29351800000001, 41.634595 ], "pop": 1381, "state": "CT" }, { "_id": "06794", "city": "WASHINGTON DEPOT", "loc": [ -73.327352, 41.655924 ], "pop": 1323, "state": "CT" }, { "_id": "06795", "city": "WATERTOWN", "loc": [ -73.122122, 41.605654 ], "pop": 12021, "state": "CT" }, { "_id": "06796", "city": "WEST CORNWALL", "loc": [ -73.331271, 41.868888 ], "pop": 1042, "state": "CT" }, { "_id": "06798", "city": "WOODBURY", "loc": [ -73.208264, 41.552061 ], "pop": 8131, "state": "CT" }, { "_id": "06801", "city": "BETHEL", "loc": [ -73.40082700000001, 41.381298 ], "pop": 17538, "state": "CT" }, { "_id": "06804", "city": "BROOKFIELD", "loc": [ -73.397986, 41.46504 ], "pop": 14223, "state": "CT" }, { "_id": "06807", "city": "COS COB", "loc": [ -73.593498, 41.052952 ], "pop": 7000, "state": "CT" }, { "_id": "06810", "city": "DANBURY", "loc": [ -73.453165, 41.391663 ], "pop": 37764, "state": "CT" }, { "_id": "06811", "city": "DANBURY", "loc": [ -73.471587, 41.423983 ], "pop": 27609, "state": "CT" }, { "_id": "06812", "city": "NEW FAIRFIELD", "loc": [ -73.497784, 41.472999 ], "pop": 13013, "state": "CT" }, { "_id": "06820", "city": "DARIEN", "loc": [ -73.485254, 41.076759 ], "pop": 18062, "state": "CT" }, { "_id": "06830", "city": "BYRAM", "loc": [ -73.630047, 41.030238 ], "pop": 22685, "state": "CT" }, { "_id": "06831", "city": "GREENWICH", "loc": [ -73.65940500000001, 41.054885 ], "pop": 14545, "state": "CT" }, { "_id": "06840", "city": "NEW CANAAN", "loc": [ -73.494356, 41.151024 ], "pop": 17937, "state": "CT" }, { "_id": "06850", "city": "NORWALK", "loc": [ -73.435827, 41.12222 ], "pop": 17332, "state": "CT" }, { "_id": "06851", "city": "NORWALK", "loc": [ -73.40580199999999, 41.132346 ], "pop": 24412, "state": "CT" }, { "_id": "06853", "city": "NORWALK", "loc": [ -73.439667, 41.070243 ], "pop": 3979, "state": "CT" }, { "_id": "06854", "city": "NORWALK", "loc": [ -73.42848499999999, 41.095722 ], "pop": 25358, "state": "CT" }, { "_id": "06855", "city": "NORWALK", "loc": [ -73.40111899999999, 41.101382 ], "pop": 7311, "state": "CT" }, { "_id": "06870", "city": "OLD GREENWICH", "loc": [ -73.56725299999999, 41.035437 ], "pop": 6511, "state": "CT" }, { "_id": "06877", "city": "RIDGEFIELD", "loc": [ -73.49726800000001, 41.297683 ], "pop": 21691, "state": "CT" }, { "_id": "06878", "city": "RIVERSIDE", "loc": [ -73.581136, 41.037998 ], "pop": 7765, "state": "CT" }, { "_id": "06880", "city": "WESTPORT", "loc": [ -73.34957900000001, 41.143433 ], "pop": 24705, "state": "CT" }, { "_id": "06883", "city": "WESTON", "loc": [ -73.37147400000001, 41.219499 ], "pop": 8517, "state": "CT" }, { "_id": "06896", "city": "WEST REDDING", "loc": [ -73.3935, 41.306915 ], "pop": 7183, "state": "CT" }, { "_id": "06897", "city": "WILTON", "loc": [ -73.438323, 41.201761 ], "pop": 15795, "state": "CT" }, { "_id": "06901", "city": "STAMFORD", "loc": [ -73.539039, 41.053083 ], "pop": 5860, "state": "CT" }, { "_id": "06902", "city": "STAMFORD", "loc": [ -73.53742800000001, 41.052552 ], "pop": 54605, "state": "CT" }, { "_id": "06903", "city": "STAMFORD", "loc": [ -73.56835599999999, 41.135235 ], "pop": 14172, "state": "CT" }, { "_id": "06905", "city": "RIDGEWAY", "loc": [ -73.543757, 41.082576 ], "pop": 17839, "state": "CT" }, { "_id": "06906", "city": "STAMFORD", "loc": [ -73.523563, 41.069218 ], "pop": 7019, "state": "CT" }, { "_id": "06907", "city": "STAMFORD", "loc": [ -73.520297, 41.094206 ], "pop": 8498, "state": "CT" }, { "_id": "07001", "city": "AVENEL", "loc": [ -74.278522, 40.582568 ], "pop": 14953, "state": "NJ" }, { "_id": "07002", "city": "BAYONNE", "loc": [ -74.119169, 40.666399 ], "pop": 61444, "state": "NJ" }, { "_id": "07003", "city": "BLOOMFIELD", "loc": [ -74.18907400000001, 40.803456 ], "pop": 46131, "state": "NJ" }, { "_id": "07004", "city": "FAIRFIELD", "loc": [ -74.296027, 40.882178 ], "pop": 7567, "state": "NJ" }, { "_id": "07005", "city": "BOONTON", "loc": [ -74.414035, 40.911528 ], "pop": 13961, "state": "NJ" }, { "_id": "07006", "city": "WEST CALDWELL", "loc": [ -74.276771, 40.849059 ], "pop": 24946, "state": "NJ" }, { "_id": "07008", "city": "CARTERET", "loc": [ -74.231345, 40.582278 ], "pop": 19025, "state": "NJ" }, { "_id": "07009", "city": "CEDAR GROVE", "loc": [ -74.22967199999999, 40.85344 ], "pop": 11787, "state": "NJ" }, { "_id": "07010", "city": "CLIFFSIDE PARK", "loc": [ -73.987982, 40.822168 ], "pop": 20687, "state": "NJ" }, { "_id": "07011", "city": "CLIFTON", "loc": [ -74.142459, 40.878876 ], "pop": 31569, "state": "NJ" }, { "_id": "07012", "city": "CLIFTON", "loc": [ -74.16117199999999, 40.848835 ], "pop": 10107, "state": "NJ" }, { "_id": "07013", "city": "CLIFTON", "loc": [ -74.171144, 40.869334 ], "pop": 25503, "state": "NJ" }, { "_id": "07014", "city": "CLIFTON", "loc": [ -74.137682, 40.834375 ], "pop": 4288, "state": "NJ" }, { "_id": "07016", "city": "CRANFORD", "loc": [ -74.305685, 40.655357 ], "pop": 22866, "state": "NJ" }, { "_id": "07017", "city": "EAST ORANGE", "loc": [ -74.207723, 40.769614 ], "pop": 41737, "state": "NJ" }, { "_id": "07018", "city": "EAST ORANGE", "loc": [ -74.21982199999999, 40.755799 ], "pop": 32618, "state": "NJ" }, { "_id": "07020", "city": "EDGEWATER", "loc": [ -73.973821, 40.831654 ], "pop": 5001, "state": "NJ" }, { "_id": "07021", "city": "ESSEX FELLS", "loc": [ -74.27970500000001, 40.827924 ], "pop": 2102, "state": "NJ" }, { "_id": "07022", "city": "FAIRVIEW", "loc": [ -73.999967, 40.816985 ], "pop": 10682, "state": "NJ" }, { "_id": "07023", "city": "FANWOOD", "loc": [ -74.386762, 40.641856 ], "pop": 6528, "state": "NJ" }, { "_id": "07024", "city": "FORT LEE", "loc": [ -73.97445500000001, 40.850312 ], "pop": 32030, "state": "NJ" }, { "_id": "07026", "city": "GARFIELD", "loc": [ -74.108141, 40.878886 ], "pop": 26727, "state": "NJ" }, { "_id": "07027", "city": "GARWOOD", "loc": [ -74.323864, 40.65121 ], "pop": 4277, "state": "NJ" }, { "_id": "07028", "city": "GLEN RIDGE", "loc": [ -74.205477, 40.804015 ], "pop": 7751, "state": "NJ" }, { "_id": "07029", "city": "KEARNY", "loc": [ -74.155871, 40.74754 ], "pop": 15587, "state": "NJ" }, { "_id": "07030", "city": "HOBOKEN", "loc": [ -74.03286300000001, 40.7445 ], "pop": 33397, "state": "NJ" }, { "_id": "07031", "city": "NORTH ARLINGTON", "loc": [ -74.134288, 40.78977 ], "pop": 13629, "state": "NJ" }, { "_id": "07032", "city": "KEARNY", "loc": [ -74.147108, 40.76466 ], "pop": 34869, "state": "NJ" }, { "_id": "07033", "city": "KENILWORTH", "loc": [ -74.294419, 40.675869 ], "pop": 7516, "state": "NJ" }, { "_id": "07034", "city": "LAKE HIAWATHA", "loc": [ -74.38301300000001, 40.88252 ], "pop": 9361, "state": "NJ" }, { "_id": "07035", "city": "LINCOLN PARK", "loc": [ -74.29951199999999, 40.920769 ], "pop": 10814, "state": "NJ" }, { "_id": "07036", "city": "LINDEN", "loc": [ -74.255567, 40.635366 ], "pop": 37859, "state": "NJ" }, { "_id": "07039", "city": "LIVINGSTON", "loc": [ -74.3202, 40.789633 ], "pop": 26677, "state": "NJ" }, { "_id": "07040", "city": "MAPLEWOOD", "loc": [ -74.265573, 40.727906 ], "pop": 21588, "state": "NJ" }, { "_id": "07041", "city": "MILLBURN", "loc": [ -74.301469, 40.722798 ], "pop": 6501, "state": "NJ" }, { "_id": "07042", "city": "MONTCLAIR", "loc": [ -74.21646699999999, 40.81307 ], "pop": 24938, "state": "NJ" }, { "_id": "07043", "city": "MONTCLAIR", "loc": [ -74.201104, 40.843023 ], "pop": 11891, "state": "NJ" }, { "_id": "07044", "city": "VERONA", "loc": [ -74.242847, 40.831928 ], "pop": 13583, "state": "NJ" }, { "_id": "07045", "city": "MONTVILLE", "loc": [ -74.36456, 40.904914 ], "pop": 6571, "state": "NJ" }, { "_id": "07046", "city": "MOUNTAIN LAKES", "loc": [ -74.441487, 40.890447 ], "pop": 4250, "state": "NJ" }, { "_id": "07047", "city": "NORTH BERGEN", "loc": [ -74.017715, 40.793019 ], "pop": 50823, "state": "NJ" }, { "_id": "07050", "city": "ORANGE", "loc": [ -74.2355, 40.769223 ], "pop": 28789, "state": "NJ" }, { "_id": "07052", "city": "WEST ORANGE", "loc": [ -74.256765, 40.785926 ], "pop": 38639, "state": "NJ" }, { "_id": "07054", "city": "PARSIPPANY", "loc": [ -74.411663, 40.862106 ], "pop": 27179, "state": "NJ" }, { "_id": "07055", "city": "PASSAIC", "loc": [ -74.128348, 40.860132 ], "pop": 58325, "state": "NJ" }, { "_id": "07057", "city": "WALLINGTON", "loc": [ -74.10793700000001, 40.85356 ], "pop": 10816, "state": "NJ" }, { "_id": "07058", "city": "PINE BROOK", "loc": [ -74.350009, 40.874207 ], "pop": 4345, "state": "NJ" }, { "_id": "07059", "city": "WARREN", "loc": [ -74.510456, 40.631787 ], "pop": 10867, "state": "NJ" }, { "_id": "07060", "city": "NORTH PLAINFIELD", "loc": [ -74.425298, 40.61978 ], "pop": 43471, "state": "NJ" }, { "_id": "07062", "city": "NORTH PLAINFIELD", "loc": [ -74.406042, 40.631992 ], "pop": 12756, "state": "NJ" }, { "_id": "07063", "city": "NORTH PLAINFIELD", "loc": [ -74.445325, 40.604838 ], "pop": 14285, "state": "NJ" }, { "_id": "07064", "city": "PORT READING", "loc": [ -74.24664300000001, 40.570935 ], "pop": 4083, "state": "NJ" }, { "_id": "07065", "city": "RAHWAY", "loc": [ -74.281881, 40.608668 ], "pop": 25296, "state": "NJ" }, { "_id": "07066", "city": "CLARK", "loc": [ -74.310581, 40.620256 ], "pop": 14973, "state": "NJ" }, { "_id": "07067", "city": "COLONIA", "loc": [ -74.316368, 40.593743 ], "pop": 18488, "state": "NJ" }, { "_id": "07068", "city": "ROSELAND", "loc": [ -74.304688, 40.82034 ], "pop": 4820, "state": "NJ" }, { "_id": "07070", "city": "RUTHERFORD", "loc": [ -74.112146, 40.829245 ], "pop": 17790, "state": "NJ" }, { "_id": "07071", "city": "LYNDHURST", "loc": [ -74.12452999999999, 40.809433 ], "pop": 18423, "state": "NJ" }, { "_id": "07072", "city": "CARLSTADT", "loc": [ -74.09249800000001, 40.840298 ], "pop": 5541, "state": "NJ" }, { "_id": "07073", "city": "EAST RUTHERFORD", "loc": [ -74.104069, 40.838527 ], "pop": 7874, "state": "NJ" }, { "_id": "07074", "city": "MOONACHIE", "loc": [ -74.056646, 40.839352 ], "pop": 2817, "state": "NJ" }, { "_id": "07075", "city": "WOOD RIDGE", "loc": [ -74.087845, 40.849348 ], "pop": 7548, "state": "NJ" }, { "_id": "07076", "city": "SCOTCH PLAINS", "loc": [ -74.381663, 40.642162 ], "pop": 18514, "state": "NJ" }, { "_id": "07077", "city": "SEWAREN", "loc": [ -74.26073599999999, 40.554181 ], "pop": 2463, "state": "NJ" }, { "_id": "07078", "city": "SHORT HILLS", "loc": [ -74.327085, 40.73678 ], "pop": 12129, "state": "NJ" }, { "_id": "07079", "city": "SOUTH ORANGE", "loc": [ -74.257532, 40.746453 ], "pop": 16115, "state": "NJ" }, { "_id": "07080", "city": "SOUTH PLAINFIELD", "loc": [ -74.41469499999999, 40.583884 ], "pop": 20540, "state": "NJ" }, { "_id": "07081", "city": "SPRINGFIELD", "loc": [ -74.322705, 40.701461 ], "pop": 13452, "state": "NJ" }, { "_id": "07082", "city": "TOWACO", "loc": [ -74.34280699999999, 40.927691 ], "pop": 4355, "state": "NJ" }, { "_id": "07083", "city": "UNION", "loc": [ -74.267653, 40.695184 ], "pop": 46608, "state": "NJ" }, { "_id": "07087", "city": "WEEHAWKEN", "loc": [ -74.030558, 40.768153 ], "pop": 69646, "state": "NJ" }, { "_id": "07088", "city": "VAUXHALL", "loc": [ -74.28287400000001, 40.717927 ], "pop": 3481, "state": "NJ" }, { "_id": "07090", "city": "WESTFIELD", "loc": [ -74.345056, 40.647851 ], "pop": 31885, "state": "NJ" }, { "_id": "07092", "city": "MOUNTAINSIDE", "loc": [ -74.358785, 40.678461 ], "pop": 6660, "state": "NJ" }, { "_id": "07093", "city": "GUTTENBERG", "loc": [ -74.01285900000001, 40.788192 ], "pop": 44735, "state": "NJ" }, { "_id": "07094", "city": "SECAUCUS", "loc": [ -74.063416, 40.79101 ], "pop": 14061, "state": "NJ" }, { "_id": "07095", "city": "WOODBRIDGE", "loc": [ -74.284542, 40.555973 ], "pop": 15827, "state": "NJ" }, { "_id": "07102", "city": "NEWARK", "loc": [ -74.17650500000001, 40.73201 ], "pop": 10328, "state": "NJ" }, { "_id": "07103", "city": "NEWARK", "loc": [ -74.196364, 40.736975 ], "pop": 36949, "state": "NJ" }, { "_id": "07104", "city": "NEWARK", "loc": [ -74.1695, 40.766446 ], "pop": 47183, "state": "NJ" }, { "_id": "07105", "city": "NEWARK", "loc": [ -74.156346, 40.727086 ], "pop": 38104, "state": "NJ" }, { "_id": "07106", "city": "NEWARK", "loc": [ -74.233023, 40.741485 ], "pop": 35013, "state": "NJ" }, { "_id": "07107", "city": "NEWARK", "loc": [ -74.18816, 40.760656 ], "pop": 36649, "state": "NJ" }, { "_id": "07108", "city": "NEWARK", "loc": [ -74.201538, 40.723647 ], "pop": 29730, "state": "NJ" }, { "_id": "07109", "city": "BELLEVILLE", "loc": [ -74.16311899999999, 40.79458 ], "pop": 34924, "state": "NJ" }, { "_id": "07110", "city": "NUTLEY", "loc": [ -74.158934, 40.818548 ], "pop": 26441, "state": "NJ" }, { "_id": "07111", "city": "IRVINGTON", "loc": [ -74.23127100000001, 40.7261 ], "pop": 60986, "state": "NJ" }, { "_id": "07112", "city": "NEWARK", "loc": [ -74.21307299999999, 40.71071 ], "pop": 30356, "state": "NJ" }, { "_id": "07114", "city": "NEWARK", "loc": [ -74.189105, 40.708246 ], "pop": 11260, "state": "NJ" }, { "_id": "07201", "city": "ELIZABETH", "loc": [ -74.204335, 40.67169 ], "pop": 25826, "state": "NJ" }, { "_id": "07202", "city": "ELIZABETH", "loc": [ -74.22154399999999, 40.65652 ], "pop": 33981, "state": "NJ" }, { "_id": "07203", "city": "ROSELLE", "loc": [ -74.261044, 40.652972 ], "pop": 20159, "state": "NJ" }, { "_id": "07204", "city": "ROSELLE PARK", "loc": [ -74.267003, 40.665134 ], "pop": 12784, "state": "NJ" }, { "_id": "07205", "city": "HILLSIDE", "loc": [ -74.228065, 40.696811 ], "pop": 20860, "state": "NJ" }, { "_id": "07206", "city": "ELIZABETH", "loc": [ -74.192487, 40.653207 ], "pop": 23830, "state": "NJ" }, { "_id": "07208", "city": "ELIZABETH", "loc": [ -74.22392000000001, 40.674659 ], "pop": 26609, "state": "NJ" }, { "_id": "07302", "city": "JERSEY CITY", "loc": [ -74.04687800000001, 40.722126 ], "pop": 32876, "state": "NJ" }, { "_id": "07304", "city": "JERSEY CITY", "loc": [ -74.07535799999999, 40.717973 ], "pop": 42101, "state": "NJ" }, { "_id": "07305", "city": "JERSEY CITY", "loc": [ -74.088998, 40.702007 ], "pop": 58655, "state": "NJ" }, { "_id": "07306", "city": "JERSEY CITY", "loc": [ -74.06603800000001, 40.732125 ], "pop": 53257, "state": "NJ" }, { "_id": "07307", "city": "JERSEY CITY", "loc": [ -74.049752, 40.748167 ], "pop": 40704, "state": "NJ" }, { "_id": "07310", "city": "JERSEY CITY", "loc": [ -74.043149, 40.732354 ], "pop": 944, "state": "NJ" }, { "_id": "07401", "city": "ALLENDALE", "loc": [ -74.134185, 41.032654 ], "pop": 5907, "state": "NJ" }, { "_id": "07403", "city": "BLOOMINGDALE", "loc": [ -74.33375599999999, 41.012845 ], "pop": 7520, "state": "NJ" }, { "_id": "07405", "city": "KINNELON", "loc": [ -74.364065, 40.992118 ], "pop": 15325, "state": "NJ" }, { "_id": "07407", "city": "ELMWOOD PARK", "loc": [ -74.120896, 40.906896 ], "pop": 17649, "state": "NJ" }, { "_id": "07410", "city": "FAIR LAWN", "loc": [ -74.11660000000001, 40.934297 ], "pop": 30522, "state": "NJ" }, { "_id": "07416", "city": "FRANKLIN", "loc": [ -74.58649, 41.116355 ], "pop": 5380, "state": "NJ" }, { "_id": "07417", "city": "FRANKLIN LAKES", "loc": [ -74.211347, 41.008095 ], "pop": 9873, "state": "NJ" }, { "_id": "07418", "city": "GLENWOOD", "loc": [ -74.48848099999999, 41.235618 ], "pop": 2446, "state": "NJ" }, { "_id": "07419", "city": "HAMBURG", "loc": [ -74.587379, 41.146714 ], "pop": 4198, "state": "NJ" }, { "_id": "07420", "city": "HASKELL", "loc": [ -74.296542, 41.030111 ], "pop": 4813, "state": "NJ" }, { "_id": "07421", "city": "HEWITT", "loc": [ -74.368566, 41.170867 ], "pop": 6907, "state": "NJ" }, { "_id": "07422", "city": "HIGHLAND LAKES", "loc": [ -74.456442, 41.182622 ], "pop": 7615, "state": "NJ" }, { "_id": "07423", "city": "HO HO KUS", "loc": [ -74.102532, 41.000412 ], "pop": 3967, "state": "NJ" }, { "_id": "07424", "city": "WEST PATERSON", "loc": [ -74.21145, 40.885353 ], "pop": 22626, "state": "NJ" }, { "_id": "07430", "city": "MAHWAH", "loc": [ -74.155974, 41.074473 ], "pop": 17991, "state": "NJ" }, { "_id": "07432", "city": "MIDLAND PARK", "loc": [ -74.14090400000001, 40.995668 ], "pop": 6693, "state": "NJ" }, { "_id": "07435", "city": "NEWFOUNDLAND", "loc": [ -74.435857, 41.064691 ], "pop": 1624, "state": "NJ" }, { "_id": "07436", "city": "OAKLAND", "loc": [ -74.233754, 41.029436 ], "pop": 11997, "state": "NJ" }, { "_id": "07438", "city": "MILTON", "loc": [ -74.50880100000001, 41.028401 ], "pop": 10453, "state": "NJ" }, { "_id": "07439", "city": "OGDENSBURG", "loc": [ -74.59818799999999, 41.076707 ], "pop": 2722, "state": "NJ" }, { "_id": "07440", "city": "PEQUANNOCK", "loc": [ -74.29601, 40.947308 ], "pop": 4932, "state": "NJ" }, { "_id": "07442", "city": "POMPTON LAKES", "loc": [ -74.287566, 40.999284 ], "pop": 10539, "state": "NJ" }, { "_id": "07444", "city": "POMPTON PLAINS", "loc": [ -74.301602, 40.965515 ], "pop": 8028, "state": "NJ" }, { "_id": "07446", "city": "RAMSEY", "loc": [ -74.14446700000001, 41.057743 ], "pop": 13135, "state": "NJ" }, { "_id": "07450", "city": "RIDGEWOOD", "loc": [ -74.113134, 40.982023 ], "pop": 24452, "state": "NJ" }, { "_id": "07452", "city": "GLEN ROCK", "loc": [ -74.125367, 40.960183 ], "pop": 10942, "state": "NJ" }, { "_id": "07456", "city": "RINGWOOD", "loc": [ -74.265872, 41.092816 ], "pop": 12645, "state": "NJ" }, { "_id": "07457", "city": "RIVERDALE", "loc": [ -74.308756, 40.993109 ], "pop": 2365, "state": "NJ" }, { "_id": "07458", "city": "UPPER SADDLE RIV", "loc": [ -74.09677499999999, 41.053083 ], "pop": 10148, "state": "NJ" }, { "_id": "07460", "city": "STOCKHOLM", "loc": [ -74.528256, 41.099204 ], "pop": 3375, "state": "NJ" }, { "_id": "07461", "city": "SUSSEX", "loc": [ -74.59915599999999, 41.229211 ], "pop": 15969, "state": "NJ" }, { "_id": "07462", "city": "VERNON", "loc": [ -74.533196, 41.184981 ], "pop": 6460, "state": "NJ" }, { "_id": "07463", "city": "WALDWICK", "loc": [ -74.124259, 41.012968 ], "pop": 9720, "state": "NJ" }, { "_id": "07465", "city": "WANAQUE", "loc": [ -74.27896800000001, 41.054447 ], "pop": 4941, "state": "NJ" }, { "_id": "07470", "city": "WAYNE", "loc": [ -74.246565, 40.947112 ], "pop": 46815, "state": "NJ" }, { "_id": "07480", "city": "WEST MILFORD", "loc": [ -74.374996, 41.091513 ], "pop": 15417, "state": "NJ" }, { "_id": "07481", "city": "WYCKOFF", "loc": [ -74.166009, 40.997834 ], "pop": 15372, "state": "NJ" }, { "_id": "07501", "city": "PATERSON", "loc": [ -74.167141, 40.914273 ], "pop": 33364, "state": "NJ" }, { "_id": "07502", "city": "PATERSON", "loc": [ -74.19323799999999, 40.919926 ], "pop": 12698, "state": "NJ" }, { "_id": "07503", "city": "PATERSON", "loc": [ -74.15727200000001, 40.897046 ], "pop": 18683, "state": "NJ" }, { "_id": "07504", "city": "PATERSON", "loc": [ -74.145247, 40.912179 ], "pop": 12152, "state": "NJ" }, { "_id": "07505", "city": "PATERSON", "loc": [ -74.171947, 40.915581 ], "pop": 1837, "state": "NJ" }, { "_id": "07506", "city": "HAWTHORNE", "loc": [ -74.156897, 40.956355 ], "pop": 16920, "state": "NJ" }, { "_id": "07508", "city": "HALEDON", "loc": [ -74.182599, 40.945689 ], "pop": 19757, "state": "NJ" }, { "_id": "07512", "city": "TOTOWA", "loc": [ -74.21675, 40.904811 ], "pop": 10147, "state": "NJ" }, { "_id": "07513", "city": "PATERSON", "loc": [ -74.152862, 40.906994 ], "pop": 10088, "state": "NJ" }, { "_id": "07514", "city": "PATERSON", "loc": [ -74.146717, 40.924764 ], "pop": 18860, "state": "NJ" }, { "_id": "07522", "city": "PATERSON", "loc": [ -74.178078, 40.925168 ], "pop": 21813, "state": "NJ" }, { "_id": "07524", "city": "PATERSON", "loc": [ -74.155457, 40.930916 ], "pop": 11887, "state": "NJ" }, { "_id": "07601", "city": "HACKENSACK", "loc": [ -74.050301, 40.888191 ], "pop": 36963, "state": "NJ" }, { "_id": "07603", "city": "BOGOTA", "loc": [ -74.028122, 40.874441 ], "pop": 7824, "state": "NJ" }, { "_id": "07604", "city": "HASBROUCK HEIGHT", "loc": [ -74.075971, 40.862241 ], "pop": 11499, "state": "NJ" }, { "_id": "07605", "city": "LEONIA", "loc": [ -73.98787299999999, 40.862929 ], "pop": 8326, "state": "NJ" }, { "_id": "07606", "city": "SOUTH HACKENSACK", "loc": [ -74.045601, 40.863391 ], "pop": 2150, "state": "NJ" }, { "_id": "07607", "city": "MAYWOOD", "loc": [ -74.062916, 40.902412 ], "pop": 9473, "state": "NJ" }, { "_id": "07608", "city": "TETERBORO", "loc": [ -74.054204, 40.86175 ], "pop": 22, "state": "NJ" }, { "_id": "07620", "city": "ALPINE", "loc": [ -73.930842, 40.951097 ], "pop": 1716, "state": "NJ" }, { "_id": "07621", "city": "BERGENFIELD", "loc": [ -73.998918, 40.923837 ], "pop": 24613, "state": "NJ" }, { "_id": "07624", "city": "CLOSTER", "loc": [ -73.958985, 40.972051 ], "pop": 8101, "state": "NJ" }, { "_id": "07626", "city": "CRESSKILL", "loc": [ -73.96520599999999, 40.941847 ], "pop": 7633, "state": "NJ" }, { "_id": "07627", "city": "DEMAREST", "loc": [ -73.960221, 40.954775 ], "pop": 4718, "state": "NJ" }, { "_id": "07628", "city": "DUMONT", "loc": [ -73.99213899999999, 40.944692 ], "pop": 17187, "state": "NJ" }, { "_id": "07630", "city": "EMERSON", "loc": [ -74.028515, 40.975459 ], "pop": 6519, "state": "NJ" }, { "_id": "07631", "city": "ENGLEWOOD", "loc": [ -73.977182, 40.894251 ], "pop": 24869, "state": "NJ" }, { "_id": "07632", "city": "ENGLEWOOD CLIFFS", "loc": [ -73.954449, 40.882043 ], "pop": 5644, "state": "NJ" }, { "_id": "07640", "city": "HARRINGTON PARK", "loc": [ -73.980017, 40.991791 ], "pop": 4628, "state": "NJ" }, { "_id": "07641", "city": "HAWORTH", "loc": [ -73.987376, 40.960808 ], "pop": 3384, "state": "NJ" }, { "_id": "07642", "city": "HILLSDALE", "loc": [ -74.042625, 41.006945 ], "pop": 9771, "state": "NJ" }, { "_id": "07643", "city": "LITTLE FERRY", "loc": [ -74.040502, 40.849319 ], "pop": 9970, "state": "NJ" }, { "_id": "07644", "city": "LODI", "loc": [ -74.083827, 40.876363 ], "pop": 22345, "state": "NJ" }, { "_id": "07645", "city": "MONTVALE", "loc": [ -74.03836200000001, 41.049458 ], "pop": 6935, "state": "NJ" }, { "_id": "07646", "city": "NEW MILFORD", "loc": [ -74.01951699999999, 40.933115 ], "pop": 15799, "state": "NJ" }, { "_id": "07647", "city": "ROCKLEIGH", "loc": [ -73.952375, 41.011196 ], "pop": 4833, "state": "NJ" }, { "_id": "07648", "city": "NORWOOD", "loc": [ -73.95817, 40.995231 ], "pop": 4858, "state": "NJ" }, { "_id": "07649", "city": "ORADELL", "loc": [ -74.033525, 40.953456 ], "pop": 8069, "state": "NJ" }, { "_id": "07650", "city": "PALISADES PARK", "loc": [ -73.995436, 40.846238 ], "pop": 14536, "state": "NJ" }, { "_id": "07652", "city": "PARAMUS", "loc": [ -74.06724, 40.947683 ], "pop": 25085, "state": "NJ" }, { "_id": "07656", "city": "PARK RIDGE", "loc": [ -74.039574, 41.034349 ], "pop": 8120, "state": "NJ" }, { "_id": "07657", "city": "RIDGEFIELD", "loc": [ -74.001531, 40.832568 ], "pop": 9753, "state": "NJ" }, { "_id": "07660", "city": "RIDGEFIELD PARK", "loc": [ -74.02296200000001, 40.856218 ], "pop": 12454, "state": "NJ" }, { "_id": "07661", "city": "RIVER EDGE", "loc": [ -74.03924000000001, 40.926476 ], "pop": 10603, "state": "NJ" }, { "_id": "07662", "city": "SADDLE BROOK", "loc": [ -74.091296, 40.904928 ], "pop": 18883, "state": "NJ" }, { "_id": "07666", "city": "TEANECK", "loc": [ -74.011928, 40.89148 ], "pop": 37822, "state": "NJ" }, { "_id": "07670", "city": "TENAFLY", "loc": [ -73.965906, 40.921596 ], "pop": 13297, "state": "NJ" }, { "_id": "07675", "city": "OLD TAPPAN", "loc": [ -74.03258599999999, 41.001696 ], "pop": 39036, "state": "NJ" }, { "_id": "07701", "city": "SUBURBAN", "loc": [ -74.080003, 40.354083 ], "pop": 22320, "state": "NJ" }, { "_id": "07702", "city": "SHREWSBURY", "loc": [ -74.058892, 40.328198 ], "pop": 3096, "state": "NJ" }, { "_id": "07703", "city": "FORT MONMOUTH", "loc": [ -74.039001, 40.317667 ], "pop": 919, "state": "NJ" }, { "_id": "07704", "city": "FAIR HAVEN", "loc": [ -74.03889100000001, 40.359873 ], "pop": 5176, "state": "NJ" }, { "_id": "07711", "city": "ALLENHURST", "loc": [ -74.00670599999999, 40.236675 ], "pop": 2030, "state": "NJ" }, { "_id": "07712", "city": "OCEAN", "loc": [ -74.02948600000001, 40.235571 ], "pop": 35939, "state": "NJ" }, { "_id": "07716", "city": "ATLANTIC HIGHLAN", "loc": [ -74.032411, 40.40772 ], "pop": 8440, "state": "NJ" }, { "_id": "07717", "city": "AVON BY THE SEA", "loc": [ -74.01673700000001, 40.191796 ], "pop": 2165, "state": "NJ" }, { "_id": "07718", "city": "BELFORD", "loc": [ -74.088887, 40.417281 ], "pop": 6601, "state": "NJ" }, { "_id": "07719", "city": "WALL", "loc": [ -74.047247, 40.17434 ], "pop": 19146, "state": "NJ" }, { "_id": "07720", "city": "BRADLEY BEACH", "loc": [ -74.013166, 40.202308 ], "pop": 4475, "state": "NJ" }, { "_id": "07721", "city": "CLIFFWOOD", "loc": [ -74.235759, 40.435281 ], "pop": 2332, "state": "NJ" }, { "_id": "07722", "city": "COLTS NECK", "loc": [ -74.177988, 40.301225 ], "pop": 8623, "state": "NJ" }, { "_id": "07723", "city": "DEAL", "loc": [ -74.001998, 40.250568 ], "pop": 1722, "state": "NJ" }, { "_id": "07724", "city": "EATONTOWN", "loc": [ -74.06977999999999, 40.302815 ], "pop": 23682, "state": "NJ" }, { "_id": "07726", "city": "MANALAPAN", "loc": [ -74.330613, 40.306274 ], "pop": 28928, "state": "NJ" }, { "_id": "07727", "city": "FARMINGDALE", "loc": [ -74.177864, 40.204312 ], "pop": 4794, "state": "NJ" }, { "_id": "07728", "city": "FREEHOLD", "loc": [ -74.276822, 40.245776 ], "pop": 42567, "state": "NJ" }, { "_id": "07730", "city": "HAZLET", "loc": [ -74.179896, 40.422554 ], "pop": 17181, "state": "NJ" }, { "_id": "07731", "city": "HOWELL", "loc": [ -74.213683, 40.148096 ], "pop": 31114, "state": "NJ" }, { "_id": "07732", "city": "FORT HANCOCK", "loc": [ -73.99091199999999, 40.402377 ], "pop": 4962, "state": "NJ" }, { "_id": "07733", "city": "HOLMDEL", "loc": [ -74.17397099999999, 40.385853 ], "pop": 11165, "state": "NJ" }, { "_id": "07734", "city": "KEANSBURG", "loc": [ -74.130633, 40.441363 ], "pop": 21931, "state": "NJ" }, { "_id": "07735", "city": "KEYPORT", "loc": [ -74.199563, 40.439862 ], "pop": 21082, "state": "NJ" }, { "_id": "07737", "city": "LEONARDO", "loc": [ -74.062265, 40.417704 ], "pop": 5027, "state": "NJ" }, { "_id": "07738", "city": "LINCROFT", "loc": [ -74.120469, 40.33689 ], "pop": 6214, "state": "NJ" }, { "_id": "07739", "city": "LITTLE SILVER", "loc": [ -74.041319, 40.335393 ], "pop": 5683, "state": "NJ" }, { "_id": "07740", "city": "LONG BRANCH", "loc": [ -73.991176, 40.299204 ], "pop": 29053, "state": "NJ" }, { "_id": "07746", "city": "MARLBORO", "loc": [ -74.26387099999999, 40.31825 ], "pop": 14956, "state": "NJ" }, { "_id": "07747", "city": "MATAWAN", "loc": [ -74.237955, 40.410876 ], "pop": 26130, "state": "NJ" }, { "_id": "07748", "city": "NEW MONMOUTH", "loc": [ -74.113908, 40.396018 ], "pop": 22727, "state": "NJ" }, { "_id": "07750", "city": "MONMOUTH BEACH", "loc": [ -73.98089, 40.333032 ], "pop": 3329, "state": "NJ" }, { "_id": "07751", "city": "MORGANVILLE", "loc": [ -74.277863, 40.352917 ], "pop": 11680, "state": "NJ" }, { "_id": "07753", "city": "NEPTUNE CITY", "loc": [ -74.054045, 40.211153 ], "pop": 32147, "state": "NJ" }, { "_id": "07755", "city": "OAKHURST", "loc": [ -74.018413, 40.26479 ], "pop": 5637, "state": "NJ" }, { "_id": "07756", "city": "OCEAN GROVE", "loc": [ -74.009306, 40.211606 ], "pop": 4723, "state": "NJ" }, { "_id": "07757", "city": "OCEANPORT", "loc": [ -74.016372, 40.31573 ], "pop": 5227, "state": "NJ" }, { "_id": "07758", "city": "PORT MONMOUTH", "loc": [ -74.108259, 40.428886 ], "pop": 4698, "state": "NJ" }, { "_id": "07760", "city": "SEA BRIGHT", "loc": [ -74.000618, 40.371829 ], "pop": 9700, "state": "NJ" }, { "_id": "07762", "city": "SPRING LAKE", "loc": [ -74.037885, 40.154198 ], "pop": 9384, "state": "NJ" }, { "_id": "07764", "city": "WEST LONG BRANCH", "loc": [ -74.016221, 40.287811 ], "pop": 7666, "state": "NJ" }, { "_id": "07801", "city": "MINE HILL", "loc": [ -74.559702, 40.887218 ], "pop": 25588, "state": "NJ" }, { "_id": "07821", "city": "ANDOVER", "loc": [ -74.75241800000001, 40.961386 ], "pop": 8931, "state": "NJ" }, { "_id": "07822", "city": "AUGUSTA", "loc": [ -74.684753, 41.145086 ], "pop": 1555, "state": "NJ" }, { "_id": "07823", "city": "BELVIDERE", "loc": [ -75.05026100000001, 40.830819 ], "pop": 5790, "state": "NJ" }, { "_id": "07825", "city": "BLAIRSTOWN", "loc": [ -74.965097, 40.967386 ], "pop": 8815, "state": "NJ" }, { "_id": "07826", "city": "BRANCHVILLE", "loc": [ -74.75002499999999, 41.170512 ], "pop": 5009, "state": "NJ" }, { "_id": "07827", "city": "MONTAGUE", "loc": [ -74.753956, 41.302259 ], "pop": 3228, "state": "NJ" }, { "_id": "07828", "city": "BUDD LAKE", "loc": [ -74.742552, 40.873108 ], "pop": 11588, "state": "NJ" }, { "_id": "07830", "city": "CALIFON", "loc": [ -74.815218, 40.716209 ], "pop": 5526, "state": "NJ" }, { "_id": "07832", "city": "COLUMBIA", "loc": [ -75.05498299999999, 40.938805 ], "pop": 3185, "state": "NJ" }, { "_id": "07834", "city": "DENVILLE", "loc": [ -74.484379, 40.889735 ], "pop": 14075, "state": "NJ" }, { "_id": "07836", "city": "FLANDERS", "loc": [ -74.70188, 40.845316 ], "pop": 10548, "state": "NJ" }, { "_id": "07838", "city": "GREAT MEADOWS", "loc": [ -74.941806, 40.85196 ], "pop": 2303, "state": "NJ" }, { "_id": "07840", "city": "HACKETTSTOWN", "loc": [ -74.834315, 40.852891 ], "pop": 23440, "state": "NJ" }, { "_id": "07843", "city": "HOPATCONG", "loc": [ -74.66163, 40.938983 ], "pop": 11920, "state": "NJ" }, { "_id": "07847", "city": "KENVIL", "loc": [ -74.62098400000001, 40.881901 ], "pop": 1356, "state": "NJ" }, { "_id": "07848", "city": "LAFAYETTE", "loc": [ -74.69122299999999, 41.076099 ], "pop": 2992, "state": "NJ" }, { "_id": "07849", "city": "LAKE HOPATCONG", "loc": [ -74.61443800000001, 40.965882 ], "pop": 7241, "state": "NJ" }, { "_id": "07850", "city": "LANDING", "loc": [ -74.65542499999999, 40.908684 ], "pop": 6482, "state": "NJ" }, { "_id": "07851", "city": "LAYTON", "loc": [ -74.81721899999999, 41.205913 ], "pop": 807, "state": "NJ" }, { "_id": "07852", "city": "LEDGEWOOD", "loc": [ -74.655405, 40.878028 ], "pop": 997, "state": "NJ" }, { "_id": "07853", "city": "LONG VALLEY", "loc": [ -74.78698, 40.787817 ], "pop": 12345, "state": "NJ" }, { "_id": "07856", "city": "MOUNT ARLINGTON", "loc": [ -74.636331, 40.928267 ], "pop": 2240, "state": "NJ" }, { "_id": "07857", "city": "NETCONG", "loc": [ -74.698454, 40.898497 ], "pop": 3330, "state": "NJ" }, { "_id": "07860", "city": "FREDON TOWNSHIP", "loc": [ -74.780191, 41.058275 ], "pop": 25022, "state": "NJ" }, { "_id": "07863", "city": "OXFORD", "loc": [ -75.00194, 40.810537 ], "pop": 2610, "state": "NJ" }, { "_id": "07865", "city": "PORT MURRAY", "loc": [ -74.91674999999999, 40.790615 ], "pop": 2124, "state": "NJ" }, { "_id": "07866", "city": "ROCKAWAY", "loc": [ -74.50937, 40.922916 ], "pop": 20388, "state": "NJ" }, { "_id": "07869", "city": "RANDOLPH", "loc": [ -74.572519, 40.845557 ], "pop": 20870, "state": "NJ" }, { "_id": "07871", "city": "SPARTA", "loc": [ -74.64070100000001, 41.027697 ], "pop": 15324, "state": "NJ" }, { "_id": "07874", "city": "STANHOPE", "loc": [ -74.70044, 40.921743 ], "pop": 9375, "state": "NJ" }, { "_id": "07876", "city": "SUCCASUNNA", "loc": [ -74.65360099999999, 40.85385 ], "pop": 10640, "state": "NJ" }, { "_id": "07881", "city": "WALLPACK CENTER", "loc": [ -74.91759500000001, 41.134332 ], "pop": 67, "state": "NJ" }, { "_id": "07882", "city": "WASHINGTON", "loc": [ -74.991361, 40.75818 ], "pop": 13409, "state": "NJ" }, { "_id": "07885", "city": "WHARTON", "loc": [ -74.58634000000001, 40.913883 ], "pop": 7842, "state": "NJ" }, { "_id": "07901", "city": "SUMMIT", "loc": [ -74.364159, 40.71494 ], "pop": 20151, "state": "NJ" }, { "_id": "07920", "city": "BASKING RIDGE", "loc": [ -74.560463, 40.678937 ], "pop": 17810, "state": "NJ" }, { "_id": "07921", "city": "BEDMINSTER", "loc": [ -74.643236, 40.657109 ], "pop": 6515, "state": "NJ" }, { "_id": "07922", "city": "BERKELEY HEIGHTS", "loc": [ -74.43459900000001, 40.67522 ], "pop": 11155, "state": "NJ" }, { "_id": "07924", "city": "BERNARDSVILLE", "loc": [ -74.57781199999999, 40.72251 ], "pop": 6454, "state": "NJ" }, { "_id": "07927", "city": "CEDAR KNOLLS", "loc": [ -74.456861, 40.822335 ], "pop": 3449, "state": "NJ" }, { "_id": "07928", "city": "CHATHAM", "loc": [ -74.401701, 40.730526 ], "pop": 16708, "state": "NJ" }, { "_id": "07930", "city": "CHESTER", "loc": [ -74.677649, 40.789193 ], "pop": 6635, "state": "NJ" }, { "_id": "07931", "city": "FAR HILLS", "loc": [ -74.653959, 40.704035 ], "pop": 2728, "state": "NJ" }, { "_id": "07932", "city": "FLORHAM PARK", "loc": [ -74.392819, 40.775701 ], "pop": 8473, "state": "NJ" }, { "_id": "07933", "city": "GILLETTE", "loc": [ -74.46813400000001, 40.687678 ], "pop": 3296, "state": "NJ" }, { "_id": "07934", "city": "GLADSTONE", "loc": [ -74.67065599999999, 40.721948 ], "pop": 887, "state": "NJ" }, { "_id": "07935", "city": "GREEN VILLAGE", "loc": [ -74.451685, 40.741618 ], "pop": 893, "state": "NJ" }, { "_id": "07936", "city": "EAST HANOVER", "loc": [ -74.36357, 40.819165 ], "pop": 9904, "state": "NJ" }, { "_id": "07940", "city": "MADISON", "loc": [ -74.417868, 40.759939 ], "pop": 15960, "state": "NJ" }, { "_id": "07945", "city": "MENDHAM", "loc": [ -74.60003500000001, 40.778919 ], "pop": 7756, "state": "NJ" }, { "_id": "07946", "city": "MILLINGTON", "loc": [ -74.518292, 40.672716 ], "pop": 2506, "state": "NJ" }, { "_id": "07950", "city": "GREYSTONE PARK", "loc": [ -74.479645, 40.843982 ], "pop": 16528, "state": "NJ" }, { "_id": "07960", "city": "MORRISTOWN", "loc": [ -74.48728800000001, 40.795236 ], "pop": 38516, "state": "NJ" }, { "_id": "07974", "city": "NEW PROVIDENCE", "loc": [ -74.40229100000001, 40.700403 ], "pop": 11838, "state": "NJ" }, { "_id": "07976", "city": "NEW VERNON", "loc": [ -74.484471, 40.734685 ], "pop": 682, "state": "NJ" }, { "_id": "07980", "city": "STIRLING", "loc": [ -74.49683, 40.677366 ], "pop": 2355, "state": "NJ" }, { "_id": "07981", "city": "WHIPPANY", "loc": [ -74.419971, 40.821862 ], "pop": 7233, "state": "NJ" }, { "_id": "08002", "city": "CHERRY HILL", "loc": [ -75.017538, 39.930808 ], "pop": 21271, "state": "NJ" }, { "_id": "08003", "city": "CHERRY HILL", "loc": [ -74.970568, 39.880453 ], "pop": 29058, "state": "NJ" }, { "_id": "08004", "city": "WINSLOW", "loc": [ -74.879368, 39.770909 ], "pop": 14312, "state": "NJ" }, { "_id": "08005", "city": "BARNEGAT", "loc": [ -74.246988, 39.755248 ], "pop": 13036, "state": "NJ" }, { "_id": "08007", "city": "BARRINGTON", "loc": [ -75.056361, 39.865062 ], "pop": 5185, "state": "NJ" }, { "_id": "08008", "city": "HARVEY CEDARS", "loc": [ -74.18903299999999, 39.636347 ], "pop": 8647, "state": "NJ" }, { "_id": "08009", "city": "BERLIN", "loc": [ -74.930808, 39.778839 ], "pop": 14034, "state": "NJ" }, { "_id": "08010", "city": "BEVERLY", "loc": [ -74.91136299999999, 40.056452 ], "pop": 11361, "state": "NJ" }, { "_id": "08012", "city": "WASHINGTON", "loc": [ -75.058747, 39.774104 ], "pop": 35874, "state": "NJ" }, { "_id": "08014", "city": "BRIDGEPORT", "loc": [ -75.34782, 39.801616 ], "pop": 702, "state": "NJ" }, { "_id": "08015", "city": "BROWNS MILLS", "loc": [ -74.565549, 39.95974 ], "pop": 21735, "state": "NJ" }, { "_id": "08016", "city": "BURLINGTON", "loc": [ -74.845353, 40.068015 ], "pop": 25065, "state": "NJ" }, { "_id": "08019", "city": "CHATSWORTH", "loc": [ -74.52561900000001, 39.801945 ], "pop": 215, "state": "NJ" }, { "_id": "08020", "city": "CLARKSBORO", "loc": [ -75.22365499999999, 39.799228 ], "pop": 3169, "state": "NJ" }, { "_id": "08021", "city": "LAUREL SPRINGS", "loc": [ -75.003997, 39.80703 ], "pop": 48953, "state": "NJ" }, { "_id": "08022", "city": "COLUMBUS", "loc": [ -74.68988, 40.064238 ], "pop": 5709, "state": "NJ" }, { "_id": "08026", "city": "GIBBSBORO", "loc": [ -74.970996, 39.836532 ], "pop": 2383, "state": "NJ" }, { "_id": "08027", "city": "GIBBSTOWN", "loc": [ -75.275128, 39.82314 ], "pop": 5102, "state": "NJ" }, { "_id": "08028", "city": "GLASSBORO", "loc": [ -75.11724700000001, 39.706823 ], "pop": 15492, "state": "NJ" }, { "_id": "08029", "city": "GLENDORA", "loc": [ -75.069744, 39.840376 ], "pop": 5205, "state": "NJ" }, { "_id": "08030", "city": "GLOUCESTER CITY", "loc": [ -75.116962, 39.891105 ], "pop": 14454, "state": "NJ" }, { "_id": "08031", "city": "BELLMAWR", "loc": [ -75.094368, 39.868878 ], "pop": 12568, "state": "NJ" }, { "_id": "08033", "city": "HADDONFIELD", "loc": [ -75.041726, 39.895449 ], "pop": 17496, "state": "NJ" }, { "_id": "08034", "city": "CHERRY HILL", "loc": [ -75.00076199999999, 39.9074 ], "pop": 18836, "state": "NJ" }, { "_id": "08035", "city": "HADDON HEIGHTS", "loc": [ -75.06639, 39.878832 ], "pop": 8034, "state": "NJ" }, { "_id": "08037", "city": "BATSTO", "loc": [ -74.790735, 39.638878 ], "pop": 22484, "state": "NJ" }, { "_id": "08041", "city": "JOBSTOWN", "loc": [ -74.68730499999999, 40.038698 ], "pop": 115, "state": "NJ" }, { "_id": "08043", "city": "VOORHEES", "loc": [ -74.964614, 39.850422 ], "pop": 21308, "state": "NJ" }, { "_id": "08045", "city": "LAWNSIDE", "loc": [ -75.03168100000001, 39.867601 ], "pop": 2840, "state": "NJ" }, { "_id": "08046", "city": "WILLINGBORO", "loc": [ -74.883482, 40.028959 ], "pop": 36471, "state": "NJ" }, { "_id": "08048", "city": "LUMBERTON", "loc": [ -74.806736, 39.96512 ], "pop": 170, "state": "NJ" }, { "_id": "08049", "city": "MAGNOLIA", "loc": [ -75.039254, 39.853807 ], "pop": 5931, "state": "NJ" }, { "_id": "08050", "city": "MANAHAWKIN", "loc": [ -74.260391, 39.705017 ], "pop": 12188, "state": "NJ" }, { "_id": "08051", "city": "MANTUA", "loc": [ -75.17853100000001, 39.786983 ], "pop": 8080, "state": "NJ" }, { "_id": "08052", "city": "MAPLE SHADE", "loc": [ -74.99464399999999, 39.951085 ], "pop": 19365, "state": "NJ" }, { "_id": "08053", "city": "MARLTON", "loc": [ -74.90674, 39.884517 ], "pop": 33299, "state": "NJ" }, { "_id": "08054", "city": "MOUNT LAUREL", "loc": [ -74.903588, 39.947808 ], "pop": 29805, "state": "NJ" }, { "_id": "08055", "city": "MEDFORD LAKES", "loc": [ -74.823384, 39.868099 ], "pop": 25033, "state": "NJ" }, { "_id": "08056", "city": "MICKLETON", "loc": [ -75.24977699999999, 39.785653 ], "pop": 1850, "state": "NJ" }, { "_id": "08057", "city": "MOORESTOWN", "loc": [ -74.953323, 39.9683 ], "pop": 16092, "state": "NJ" }, { "_id": "08059", "city": "MOUNT EPHRAIM", "loc": [ -75.09289, 39.882749 ], "pop": 5267, "state": "NJ" }, { "_id": "08060", "city": "EASTAMPTON TWP", "loc": [ -74.79552200000001, 39.993028 ], "pop": 31606, "state": "NJ" }, { "_id": "08061", "city": "MOUNT ROYAL", "loc": [ -75.208153, 39.809741 ], "pop": 239, "state": "NJ" }, { "_id": "08062", "city": "MULLICA HILL", "loc": [ -75.20654, 39.725228 ], "pop": 8720, "state": "NJ" }, { "_id": "08063", "city": "NATIONAL PARK", "loc": [ -75.17939699999999, 39.866412 ], "pop": 3398, "state": "NJ" }, { "_id": "08065", "city": "PALMYRA", "loc": [ -75.025685, 40.003654 ], "pop": 6916, "state": "NJ" }, { "_id": "08066", "city": "PAULSBORO", "loc": [ -75.224233, 39.831157 ], "pop": 10269, "state": "NJ" }, { "_id": "08067", "city": "PEDRICKTOWN", "loc": [ -75.412046, 39.743451 ], "pop": 1565, "state": "NJ" }, { "_id": "08068", "city": "PEMBERTON", "loc": [ -74.66762900000001, 39.971206 ], "pop": 11000, "state": "NJ" }, { "_id": "08069", "city": "CARNEYS POINT", "loc": [ -75.46562299999999, 39.717938 ], "pop": 14138, "state": "NJ" }, { "_id": "08070", "city": "PENNSVILLE", "loc": [ -75.51553, 39.649107 ], "pop": 12717, "state": "NJ" }, { "_id": "08071", "city": "PITMAN", "loc": [ -75.129679, 39.731162 ], "pop": 9697, "state": "NJ" }, { "_id": "08075", "city": "DELANCO", "loc": [ -74.95612800000001, 40.024684 ], "pop": 24468, "state": "NJ" }, { "_id": "08077", "city": "CINNAMINSON", "loc": [ -74.995141, 39.996393 ], "pop": 17498, "state": "NJ" }, { "_id": "08078", "city": "RUNNEMEDE", "loc": [ -75.074224, 39.850825 ], "pop": 8589, "state": "NJ" }, { "_id": "08079", "city": "SALEM", "loc": [ -75.452096, 39.559124 ], "pop": 14129, "state": "NJ" }, { "_id": "08080", "city": "SEWELL", "loc": [ -75.08985199999999, 39.747345 ], "pop": 23121, "state": "NJ" }, { "_id": "08081", "city": "SICKLERVILLE", "loc": [ -74.986385, 39.735385 ], "pop": 29949, "state": "NJ" }, { "_id": "08083", "city": "SOMERDALE", "loc": [ -75.030913, 39.839988 ], "pop": 11913, "state": "NJ" }, { "_id": "08084", "city": "STRATFORD", "loc": [ -75.014707, 39.828798 ], "pop": 7217, "state": "NJ" }, { "_id": "08085", "city": "SWEDESBORO", "loc": [ -75.336202, 39.752853 ], "pop": 7968, "state": "NJ" }, { "_id": "08086", "city": "THOROFARE", "loc": [ -75.176698, 39.859178 ], "pop": 3395, "state": "NJ" }, { "_id": "08087", "city": "TUCKERTON", "loc": [ -74.364586, 39.588149 ], "pop": 17728, "state": "NJ" }, { "_id": "08088", "city": "SOUTHAMPTON", "loc": [ -74.71102500000001, 39.867631 ], "pop": 25480, "state": "NJ" }, { "_id": "08089", "city": "WATERFORD WORKS", "loc": [ -74.860933, 39.721512 ], "pop": 4344, "state": "NJ" }, { "_id": "08090", "city": "WENONAH", "loc": [ -75.153644, 39.799283 ], "pop": 9129, "state": "NJ" }, { "_id": "08091", "city": "WEST BERLIN", "loc": [ -74.941678, 39.81959 ], "pop": 5244, "state": "NJ" }, { "_id": "08092", "city": "WEST CREEK", "loc": [ -74.28850799999999, 39.662665 ], "pop": 2502, "state": "NJ" }, { "_id": "08093", "city": "WESTVILLE", "loc": [ -75.132278, 39.860494 ], "pop": 9696, "state": "NJ" }, { "_id": "08094", "city": "WILLIAMSTOWN", "loc": [ -74.97102700000001, 39.665006 ], "pop": 30978, "state": "NJ" }, { "_id": "08096", "city": "DEPTFORD", "loc": [ -75.13796600000001, 39.829477 ], "pop": 34147, "state": "NJ" }, { "_id": "08097", "city": "WOODBURY HEIGHTS", "loc": [ -75.15297200000001, 39.814162 ], "pop": 3625, "state": "NJ" }, { "_id": "08098", "city": "WOODSTOWN", "loc": [ -75.324806, 39.645663 ], "pop": 8013, "state": "NJ" }, { "_id": "08102", "city": "CAMDEN", "loc": [ -75.118644, 39.951244 ], "pop": 10107, "state": "NJ" }, { "_id": "08103", "city": "CAMDEN", "loc": [ -75.11170799999999, 39.935099 ], "pop": 17818, "state": "NJ" }, { "_id": "08104", "city": "CAMDEN", "loc": [ -75.10783499999999, 39.918575 ], "pop": 26375, "state": "NJ" }, { "_id": "08105", "city": "CAMDEN", "loc": [ -75.086382, 39.948417 ], "pop": 34450, "state": "NJ" }, { "_id": "08106", "city": "AUDUBON", "loc": [ -75.072425, 39.891035 ], "pop": 10355, "state": "NJ" }, { "_id": "08107", "city": "OAKLYN", "loc": [ -75.08489, 39.90799 ], "pop": 14161, "state": "NJ" }, { "_id": "08108", "city": "COLLINGSWOOD", "loc": [ -75.063383, 39.915682 ], "pop": 18125, "state": "NJ" }, { "_id": "08109", "city": "MERCHANTVILLE", "loc": [ -75.048204, 39.95193 ], "pop": 22294, "state": "NJ" }, { "_id": "08110", "city": "DELAIR", "loc": [ -75.063446, 39.962742 ], "pop": 15447, "state": "NJ" }, { "_id": "08201", "city": "SMITHVILLE", "loc": [ -74.503106, 39.462368 ], "pop": 26645, "state": "NJ" }, { "_id": "08202", "city": "AVALON", "loc": [ -74.72617700000001, 39.095095 ], "pop": 1813, "state": "NJ" }, { "_id": "08203", "city": "BRIGANTINE", "loc": [ -74.377644, 39.403709 ], "pop": 9388, "state": "NJ" }, { "_id": "08204", "city": "NORTH CAPE MAY", "loc": [ -74.92624000000001, 38.969208 ], "pop": 18084, "state": "NJ" }, { "_id": "08210", "city": "CAPE MAY COURT H", "loc": [ -74.826846, 39.101434 ], "pop": 13521, "state": "NJ" }, { "_id": "08215", "city": "EGG HARBOR CITY", "loc": [ -74.617709, 39.533123 ], "pop": 10362, "state": "NJ" }, { "_id": "08221", "city": "LINWOOD", "loc": [ -74.580744, 39.346883 ], "pop": 9353, "state": "NJ" }, { "_id": "08223", "city": "MARMORA", "loc": [ -74.659297, 39.258562 ], "pop": 4420, "state": "NJ" }, { "_id": "08225", "city": "NORTHFIELD", "loc": [ -74.55523700000001, 39.370256 ], "pop": 7503, "state": "NJ" }, { "_id": "08226", "city": "OCEAN CITY", "loc": [ -74.587514, 39.270894 ], "pop": 15512, "state": "NJ" }, { "_id": "08230", "city": "OCEAN VIEW", "loc": [ -74.707548, 39.215425 ], "pop": 4443, "state": "NJ" }, { "_id": "08232", "city": "PLEASANTVILLE", "loc": [ -74.55236499999999, 39.401518 ], "pop": 30292, "state": "NJ" }, { "_id": "08241", "city": "PORT REPUBLIC", "loc": [ -74.490263, 39.527196 ], "pop": 992, "state": "NJ" }, { "_id": "08242", "city": "RIO GRANDE", "loc": [ -74.875642, 39.019583 ], "pop": 2943, "state": "NJ" }, { "_id": "08243", "city": "TOWNSENDS INLET", "loc": [ -74.701432, 39.144929 ], "pop": 2675, "state": "NJ" }, { "_id": "08244", "city": "SOMERS POINT", "loc": [ -74.600796, 39.322308 ], "pop": 11227, "state": "NJ" }, { "_id": "08247", "city": "STONE HARBOR", "loc": [ -74.762049, 39.053338 ], "pop": 1076, "state": "NJ" }, { "_id": "08248", "city": "STRATHMERE", "loc": [ -74.655446, 39.199246 ], "pop": 163, "state": "NJ" }, { "_id": "08251", "city": "VILLAS", "loc": [ -74.935396, 39.021943 ], "pop": 9308, "state": "NJ" }, { "_id": "08260", "city": "NORTH WILDWOOD", "loc": [ -74.819096, 38.989901 ], "pop": 14194, "state": "NJ" }, { "_id": "08270", "city": "CORBIN CITY", "loc": [ -74.802628, 39.248915 ], "pop": 7370, "state": "NJ" }, { "_id": "08302", "city": "SEABROOK", "loc": [ -75.22672799999999, 39.445294 ], "pop": 45485, "state": "NJ" }, { "_id": "08310", "city": "BUENA", "loc": [ -74.889495, 39.536988 ], "pop": 1501, "state": "NJ" }, { "_id": "08311", "city": "CEDARVILLE", "loc": [ -75.19936199999999, 39.337028 ], "pop": 1521, "state": "NJ" }, { "_id": "08312", "city": "CLAYTON", "loc": [ -75.094188, 39.658969 ], "pop": 6584, "state": "NJ" }, { "_id": "08314", "city": "DELMONT", "loc": [ -74.970505, 39.202258 ], "pop": 135, "state": "NJ" }, { "_id": "08317", "city": "DOROTHY", "loc": [ -74.831577, 39.40313 ], "pop": 1018, "state": "NJ" }, { "_id": "08318", "city": "ELMER", "loc": [ -75.163023, 39.569146 ], "pop": 8050, "state": "NJ" }, { "_id": "08319", "city": "ESTELL MANOR", "loc": [ -74.816512, 39.37825 ], "pop": 1130, "state": "NJ" }, { "_id": "08322", "city": "FRANKLINVILLE", "loc": [ -75.04088, 39.615557 ], "pop": 10484, "state": "NJ" }, { "_id": "08324", "city": "HEISLERVILLE", "loc": [ -74.993942, 39.245013 ], "pop": 264, "state": "NJ" }, { "_id": "08326", "city": "LANDISVILLE", "loc": [ -74.93768799999999, 39.523942 ], "pop": 1915, "state": "NJ" }, { "_id": "08327", "city": "LEESBURG", "loc": [ -75.001211, 39.238724 ], "pop": 49, "state": "NJ" }, { "_id": "08328", "city": "MALAGA", "loc": [ -75.058155, 39.575495 ], "pop": 1348, "state": "NJ" }, { "_id": "08330", "city": "MAYS LANDING", "loc": [ -74.69619, 39.432011 ], "pop": 24487, "state": "NJ" }, { "_id": "08332", "city": "MILLVILLE", "loc": [ -75.02931100000001, 39.367313 ], "pop": 36591, "state": "NJ" }, { "_id": "08340", "city": "MILMAY", "loc": [ -74.866671, 39.445078 ], "pop": 463, "state": "NJ" }, { "_id": "08341", "city": "MINOTOLA", "loc": [ -74.946685, 39.515512 ], "pop": 1548, "state": "NJ" }, { "_id": "08343", "city": "MONROEVILLE", "loc": [ -75.156848, 39.644224 ], "pop": 5068, "state": "NJ" }, { "_id": "08344", "city": "NEWFIELD", "loc": [ -75.027558, 39.555257 ], "pop": 5363, "state": "NJ" }, { "_id": "08345", "city": "NEWPORT", "loc": [ -75.17164699999999, 39.283205 ], "pop": 1190, "state": "NJ" }, { "_id": "08346", "city": "NEWTONVILLE", "loc": [ -74.859049, 39.564477 ], "pop": 682, "state": "NJ" }, { "_id": "08349", "city": "PORT NORRIS", "loc": [ -75.050608, 39.256263 ], "pop": 2726, "state": "NJ" }, { "_id": "08350", "city": "RICHLAND", "loc": [ -74.87761500000001, 39.485048 ], "pop": 1046, "state": "NJ" }, { "_id": "08360", "city": "VINELAND", "loc": [ -75.00908699999999, 39.48177 ], "pop": 56319, "state": "NJ" }, { "_id": "08401", "city": "ATLANTIC CITY", "loc": [ -74.431727, 39.366411 ], "pop": 31907, "state": "NJ" }, { "_id": "08402", "city": "MARGATE CITY", "loc": [ -74.509038, 39.328621 ], "pop": 9484, "state": "NJ" }, { "_id": "08403", "city": "LONGPORT", "loc": [ -74.542143, 39.309712 ], "pop": 318, "state": "NJ" }, { "_id": "08406", "city": "VENTNOR CITY", "loc": [ -74.472343, 39.345992 ], "pop": 19050, "state": "NJ" }, { "_id": "08501", "city": "ALLENTOWN", "loc": [ -74.59093, 40.158922 ], "pop": 4041, "state": "NJ" }, { "_id": "08502", "city": "BELLE MEAD", "loc": [ -74.62899299999999, 40.467732 ], "pop": 12677, "state": "NJ" }, { "_id": "08505", "city": "BORDENTOWN", "loc": [ -74.703249, 40.143141 ], "pop": 12835, "state": "NJ" }, { "_id": "08510", "city": "CLARKSBURG", "loc": [ -74.434387, 40.199751 ], "pop": 3364, "state": "NJ" }, { "_id": "08511", "city": "COOKSTOWN", "loc": [ -74.559524, 40.048109 ], "pop": 262, "state": "NJ" }, { "_id": "08512", "city": "CRANBURY", "loc": [ -74.506531, 40.303868 ], "pop": 13743, "state": "NJ" }, { "_id": "08514", "city": "CREAMRIDGE", "loc": [ -74.499425, 40.127907 ], "pop": 3522, "state": "NJ" }, { "_id": "08515", "city": "CROSSWICKS", "loc": [ -74.666838, 40.158353 ], "pop": 1700, "state": "NJ" }, { "_id": "08518", "city": "FLORENCE", "loc": [ -74.805515, 40.118025 ], "pop": 5091, "state": "NJ" }, { "_id": "08520", "city": "HIGHTSTOWN", "loc": [ -74.52499299999999, 40.266885 ], "pop": 25674, "state": "NJ" }, { "_id": "08525", "city": "HOPEWELL", "loc": [ -74.77096299999999, 40.390224 ], "pop": 3858, "state": "NJ" }, { "_id": "08526", "city": "IMLAYSTOWN", "loc": [ -74.51093899999999, 40.166215 ], "pop": 17, "state": "NJ" }, { "_id": "08527", "city": "JACKSON", "loc": [ -74.301709, 40.120964 ], "pop": 33075, "state": "NJ" }, { "_id": "08528", "city": "KINGSTON", "loc": [ -74.61607100000001, 40.380465 ], "pop": 160, "state": "NJ" }, { "_id": "08530", "city": "LAMBERTVILLE", "loc": [ -74.926605, 40.373122 ], "pop": 6466, "state": "NJ" }, { "_id": "08533", "city": "NEW EGYPT", "loc": [ -74.506721, 40.071343 ], "pop": 4601, "state": "NJ" }, { "_id": "08534", "city": "PENNINGTON", "loc": [ -74.794352, 40.333858 ], "pop": 7690, "state": "NJ" }, { "_id": "08535", "city": "PERRINEVILLE", "loc": [ -74.440381, 40.214971 ], "pop": 329, "state": "NJ" }, { "_id": "08536", "city": "PLAINSBORO", "loc": [ -74.568836, 40.332432 ], "pop": 13008, "state": "NJ" }, { "_id": "08540", "city": "PRINCETON", "loc": [ -74.640832, 40.366633 ], "pop": 33831, "state": "NJ" }, { "_id": "08542", "city": "PRINCETON", "loc": [ -74.659378, 40.353545 ], "pop": 2675, "state": "NJ" }, { "_id": "08544", "city": "PRINCETON UNIVER", "loc": [ -74.65754, 40.346029 ], "pop": 4227, "state": "NJ" }, { "_id": "08550", "city": "PRINCETON JUNCTI", "loc": [ -74.61459600000001, 40.297684 ], "pop": 5807, "state": "NJ" }, { "_id": "08551", "city": "RINGOES", "loc": [ -74.828839, 40.44587 ], "pop": 5106, "state": "NJ" }, { "_id": "08553", "city": "ROCKY HILL", "loc": [ -74.64004199999999, 40.400985 ], "pop": 693, "state": "NJ" }, { "_id": "08554", "city": "ROEBLING", "loc": [ -74.777224, 40.115352 ], "pop": 3826, "state": "NJ" }, { "_id": "08556", "city": "ROSEMONT", "loc": [ -74.991928, 40.422005 ], "pop": 42, "state": "NJ" }, { "_id": "08558", "city": "SKILLMAN", "loc": [ -74.693828, 40.417312 ], "pop": 3935, "state": "NJ" }, { "_id": "08559", "city": "STOCKTON", "loc": [ -74.95541900000001, 40.43974 ], "pop": 6090, "state": "NJ" }, { "_id": "08560", "city": "TITUSVILLE", "loc": [ -74.865469, 40.307728 ], "pop": 3354, "state": "NJ" }, { "_id": "08562", "city": "WRIGHTSTOWN", "loc": [ -74.573098, 40.071953 ], "pop": 3116, "state": "NJ" }, { "_id": "08608", "city": "TRENTON", "loc": [ -74.762237, 40.220437 ], "pop": 827, "state": "NJ" }, { "_id": "08609", "city": "HAMILTON", "loc": [ -74.742598, 40.223338 ], "pop": 15904, "state": "NJ" }, { "_id": "08610", "city": "HAMILTON", "loc": [ -74.71720500000001, 40.19894 ], "pop": 29852, "state": "NJ" }, { "_id": "08611", "city": "HAMILTON", "loc": [ -74.751997, 40.207297 ], "pop": 25084, "state": "NJ" }, { "_id": "08618", "city": "TRENTON", "loc": [ -74.782062, 40.237687 ], "pop": 40280, "state": "NJ" }, { "_id": "08619", "city": "MERCERVILLE", "loc": [ -74.690377, 40.241977 ], "pop": 23627, "state": "NJ" }, { "_id": "08620", "city": "YARDVILLE", "loc": [ -74.671699, 40.178477 ], "pop": 12373, "state": "NJ" }, { "_id": "08628", "city": "WEST TRENTON", "loc": [ -74.82618600000001, 40.267232 ], "pop": 8335, "state": "NJ" }, { "_id": "08629", "city": "HAMILTON", "loc": [ -74.732764, 40.219843 ], "pop": 10670, "state": "NJ" }, { "_id": "08638", "city": "TRENTON", "loc": [ -74.762699, 40.251006 ], "pop": 26982, "state": "NJ" }, { "_id": "08640", "city": "FORT DIX", "loc": [ -74.618296, 40.009946 ], "pop": 10101, "state": "NJ" }, { "_id": "08641", "city": "MC GUIRE AFB", "loc": [ -74.588195, 40.044026 ], "pop": 9971, "state": "NJ" }, { "_id": "08648", "city": "LAWRENCEVILLE", "loc": [ -74.723956, 40.277646 ], "pop": 25497, "state": "NJ" }, { "_id": "08690", "city": "HAMILTON", "loc": [ -74.659138, 40.223852 ], "pop": 21547, "state": "NJ" }, { "_id": "08691", "city": "HAMILTON", "loc": [ -74.606262, 40.231785 ], "pop": 6524, "state": "NJ" }, { "_id": "08701", "city": "LAKEWOOD", "loc": [ -74.204199, 40.085043 ], "pop": 47458, "state": "NJ" }, { "_id": "08721", "city": "BAYVILLE", "loc": [ -74.190529, 39.914708 ], "pop": 18991, "state": "NJ" }, { "_id": "08722", "city": "BEACHWOOD", "loc": [ -74.196145, 39.930246 ], "pop": 9324, "state": "NJ" }, { "_id": "08723", "city": "OSBORNSVILLE", "loc": [ -74.12685999999999, 40.040817 ], "pop": 28128, "state": "NJ" }, { "_id": "08724", "city": "BRICK", "loc": [ -74.11523699999999, 40.087432 ], "pop": 34507, "state": "NJ" }, { "_id": "08730", "city": "BRIELLE", "loc": [ -74.06351100000001, 40.107727 ], "pop": 4290, "state": "NJ" }, { "_id": "08731", "city": "FORKED RIVER", "loc": [ -74.197301, 39.844425 ], "pop": 16664, "state": "NJ" }, { "_id": "08732", "city": "ISLAND HEIGHTS", "loc": [ -74.146787, 39.943197 ], "pop": 1470, "state": "NJ" }, { "_id": "08733", "city": "LAKEHURST NAEC", "loc": [ -74.29090100000001, 40.020054 ], "pop": 14205, "state": "NJ" }, { "_id": "08734", "city": "LANOKA HARBOR", "loc": [ -74.166765, 39.861993 ], "pop": 5473, "state": "NJ" }, { "_id": "08735", "city": "LAVALLETTE", "loc": [ -74.070424, 39.977486 ], "pop": 3985, "state": "NJ" }, { "_id": "08736", "city": "MANASQUAN", "loc": [ -74.061055, 40.121693 ], "pop": 10341, "state": "NJ" }, { "_id": "08738", "city": "MANTOLOKING", "loc": [ -74.05618800000001, 40.026125 ], "pop": 1186, "state": "NJ" }, { "_id": "08740", "city": "OCEAN GATE", "loc": [ -74.13512799999999, 39.925975 ], "pop": 2028, "state": "NJ" }, { "_id": "08741", "city": "PINE BEACH", "loc": [ -74.167992, 39.934746 ], "pop": 2354, "state": "NJ" }, { "_id": "08742", "city": "BAY HEAD", "loc": [ -74.065719, 40.080226 ], "pop": 25071, "state": "NJ" }, { "_id": "08750", "city": "SEA GIRT", "loc": [ -74.043604, 40.134522 ], "pop": 3624, "state": "NJ" }, { "_id": "08751", "city": "SEASIDE HEIGHTS", "loc": [ -74.07647900000001, 39.946639 ], "pop": 4044, "state": "NJ" }, { "_id": "08752", "city": "SEASIDE PARK", "loc": [ -74.079521, 39.922175 ], "pop": 2369, "state": "NJ" }, { "_id": "08753", "city": "TOMS RIVER", "loc": [ -74.156508, 39.977083 ], "pop": 58001, "state": "NJ" }, { "_id": "08755", "city": "TOMS RIVER", "loc": [ -74.222819, 39.999946 ], "pop": 14892, "state": "NJ" }, { "_id": "08757", "city": "TOMS RIVER", "loc": [ -74.25116800000001, 39.971471 ], "pop": 29794, "state": "NJ" }, { "_id": "08758", "city": "WARETOWN", "loc": [ -74.195376, 39.789646 ], "pop": 4774, "state": "NJ" }, { "_id": "08759", "city": "WHITING", "loc": [ -74.360713, 39.950983 ], "pop": 16321, "state": "NJ" }, { "_id": "08801", "city": "ANNANDALE", "loc": [ -74.88551200000001, 40.628731 ], "pop": 6465, "state": "NJ" }, { "_id": "08802", "city": "PATTENBURG", "loc": [ -75.01585, 40.650175 ], "pop": 2176, "state": "NJ" }, { "_id": "08804", "city": "BLOOMSBURY", "loc": [ -75.09663999999999, 40.64366 ], "pop": 2111, "state": "NJ" }, { "_id": "08805", "city": "BOUND BROOK", "loc": [ -74.53973499999999, 40.568115 ], "pop": 11275, "state": "NJ" }, { "_id": "08807", "city": "BRIDGEWATER", "loc": [ -74.626741, 40.590388 ], "pop": 26496, "state": "NJ" }, { "_id": "08809", "city": "CLINTON", "loc": [ -74.908846, 40.641194 ], "pop": 2994, "state": "NJ" }, { "_id": "08810", "city": "DAYTON", "loc": [ -74.51110199999999, 40.38249 ], "pop": 6198, "state": "NJ" }, { "_id": "08812", "city": "GREEN BROOK", "loc": [ -74.47187, 40.594237 ], "pop": 10892, "state": "NJ" }, { "_id": "08816", "city": "EAST BRUNSWICK", "loc": [ -74.406381, 40.428395 ], "pop": 42319, "state": "NJ" }, { "_id": "08817", "city": "EDISON", "loc": [ -74.39728599999999, 40.517079 ], "pop": 41245, "state": "NJ" }, { "_id": "08820", "city": "EDISON", "loc": [ -74.358863, 40.57804 ], "pop": 33581, "state": "NJ" }, { "_id": "08822", "city": "FLEMINGTON", "loc": [ -74.845316, 40.517976 ], "pop": 23579, "state": "NJ" }, { "_id": "08823", "city": "FRANKLIN PARK", "loc": [ -74.536908, 40.442097 ], "pop": 154, "state": "NJ" }, { "_id": "08824", "city": "KENDALL PARK", "loc": [ -74.552921, 40.4208 ], "pop": 10272, "state": "NJ" }, { "_id": "08825", "city": "FRENCHTOWN", "loc": [ -75.03246799999999, 40.520795 ], "pop": 4383, "state": "NJ" }, { "_id": "08826", "city": "GLEN GARDNER", "loc": [ -74.916207, 40.713437 ], "pop": 5525, "state": "NJ" }, { "_id": "08827", "city": "HAMPTON", "loc": [ -74.962221, 40.677351 ], "pop": 4441, "state": "NJ" }, { "_id": "08828", "city": "HELMETTA", "loc": [ -74.420393, 40.377742 ], "pop": 1211, "state": "NJ" }, { "_id": "08829", "city": "HIGH BRIDGE", "loc": [ -74.89366699999999, 40.668438 ], "pop": 3886, "state": "NJ" }, { "_id": "08830", "city": "ISELIN", "loc": [ -74.316677, 40.571593 ], "pop": 16313, "state": "NJ" }, { "_id": "08831", "city": "JAMESBURG", "loc": [ -74.43356799999999, 40.342475 ], "pop": 15743, "state": "NJ" }, { "_id": "08832", "city": "KEASBEY", "loc": [ -74.302119, 40.519171 ], "pop": 2746, "state": "NJ" }, { "_id": "08833", "city": "LEBANON", "loc": [ -74.829035, 40.646623 ], "pop": 7270, "state": "NJ" }, { "_id": "08835", "city": "MANVILLE", "loc": [ -74.593377, 40.539871 ], "pop": 10419, "state": "NJ" }, { "_id": "08836", "city": "MARTINSVILLE", "loc": [ -74.557191, 40.599962 ], "pop": 3024, "state": "NJ" }, { "_id": "08837", "city": "EDISON", "loc": [ -74.337503, 40.532476 ], "pop": 9447, "state": "NJ" }, { "_id": "08840", "city": "METUCHEN", "loc": [ -74.351721, 40.54493 ], "pop": 20017, "state": "NJ" }, { "_id": "08846", "city": "MIDDLESEX", "loc": [ -74.500835, 40.575882 ], "pop": 13055, "state": "NJ" }, { "_id": "08848", "city": "MILFORD", "loc": [ -75.102519, 40.592942 ], "pop": 7586, "state": "NJ" }, { "_id": "08850", "city": "MILLTOWN", "loc": [ -74.439046, 40.449346 ], "pop": 8362, "state": "NJ" }, { "_id": "08852", "city": "MONMOUTH JUNCTIO", "loc": [ -74.547021, 40.394391 ], "pop": 6881, "state": "NJ" }, { "_id": "08853", "city": "NESHANIC STATION", "loc": [ -74.71434000000001, 40.509551 ], "pop": 9526, "state": "NJ" }, { "_id": "08854", "city": "PISCATAWAY", "loc": [ -74.458996, 40.55152 ], "pop": 47038, "state": "NJ" }, { "_id": "08857", "city": "OLD BRIDGE", "loc": [ -74.323553, 40.398045 ], "pop": 33884, "state": "NJ" }, { "_id": "08859", "city": "PARLIN", "loc": [ -74.304981, 40.458701 ], "pop": 20773, "state": "NJ" }, { "_id": "08861", "city": "PERTH AMBOY", "loc": [ -74.27542699999999, 40.517551 ], "pop": 43920, "state": "NJ" }, { "_id": "08863", "city": "FORDS", "loc": [ -74.311707, 40.53925 ], "pop": 13568, "state": "NJ" }, { "_id": "08865", "city": "ALPHA", "loc": [ -75.1741, 40.692819 ], "pop": 28782, "state": "NJ" }, { "_id": "08867", "city": "PITTSTOWN", "loc": [ -74.957587, 40.599169 ], "pop": 5635, "state": "NJ" }, { "_id": "08869", "city": "RARITAN", "loc": [ -74.637691, 40.57109 ], "pop": 6306, "state": "NJ" }, { "_id": "08872", "city": "SAYREVILLE", "loc": [ -74.347808, 40.459958 ], "pop": 14405, "state": "NJ" }, { "_id": "08873", "city": "SOMERSET", "loc": [ -74.50126, 40.500743 ], "pop": 36850, "state": "NJ" }, { "_id": "08876", "city": "NORTH BRANCH", "loc": [ -74.645926, 40.549393 ], "pop": 34212, "state": "NJ" }, { "_id": "08879", "city": "LAURENCE HARBOR", "loc": [ -74.27863499999999, 40.464733 ], "pop": 20993, "state": "NJ" }, { "_id": "08880", "city": "SOUTH BOUND BROO", "loc": [ -74.529078, 40.552804 ], "pop": 4330, "state": "NJ" }, { "_id": "08882", "city": "SOUTH RIVER", "loc": [ -74.380099, 40.444363 ], "pop": 13692, "state": "NJ" }, { "_id": "08884", "city": "SPOTSWOOD", "loc": [ -74.389377, 40.384679 ], "pop": 13444, "state": "NJ" }, { "_id": "08886", "city": "STEWARTSVILLE", "loc": [ -75.082517, 40.695703 ], "pop": 3582, "state": "NJ" }, { "_id": "08887", "city": "THREE BRIDGES", "loc": [ -74.79980500000001, 40.52156 ], "pop": 378, "state": "NJ" }, { "_id": "08889", "city": "WHITEHOUSE STATI", "loc": [ -74.764129, 40.599872 ], "pop": 8303, "state": "NJ" }, { "_id": "08901", "city": "NEW BRUNSWICK", "loc": [ -74.448193, 40.489073 ], "pop": 41710, "state": "NJ" }, { "_id": "08902", "city": "NORTH BRUNSWICK", "loc": [ -74.482285, 40.453767 ], "pop": 31071, "state": "NJ" }, { "_id": "08904", "city": "HIGHLAND PARK", "loc": [ -74.426602, 40.499141 ], "pop": 13165, "state": "NJ" }, { "_id": "10001", "city": "NEW YORK", "loc": [ -73.99670500000001, 40.74838 ], "pop": 18913, "state": "NY" }, { "_id": "10002", "city": "NEW YORK", "loc": [ -73.98768099999999, 40.715231 ], "pop": 84143, "state": "NY" }, { "_id": "10003", "city": "NEW YORK", "loc": [ -73.989223, 40.731253 ], "pop": 51224, "state": "NY" }, { "_id": "10004", "city": "GOVERNORS ISLAND", "loc": [ -74.019025, 40.693604 ], "pop": 3593, "state": "NY" }, { "_id": "10005", "city": "NEW YORK", "loc": [ -74.00834399999999, 40.705649 ], "pop": 202, "state": "NY" }, { "_id": "10006", "city": "NEW YORK", "loc": [ -74.013474, 40.708451 ], "pop": 119, "state": "NY" }, { "_id": "10007", "city": "NEW YORK", "loc": [ -74.00702200000001, 40.713905 ], "pop": 3374, "state": "NY" }, { "_id": "10009", "city": "NEW YORK", "loc": [ -73.979591, 40.726188 ], "pop": 57426, "state": "NY" }, { "_id": "10010", "city": "NEW YORK", "loc": [ -73.981328, 40.737476 ], "pop": 24907, "state": "NY" }, { "_id": "10011", "city": "NEW YORK", "loc": [ -73.99963, 40.740225 ], "pop": 46560, "state": "NY" }, { "_id": "10012", "city": "NEW YORK", "loc": [ -73.998284, 40.72553 ], "pop": 26365, "state": "NY" }, { "_id": "10013", "city": "NEW YORK", "loc": [ -74.002529, 40.718511 ], "pop": 21860, "state": "NY" }, { "_id": "10014", "city": "NEW YORK", "loc": [ -74.005421, 40.73393 ], "pop": 31147, "state": "NY" }, { "_id": "10016", "city": "NEW YORK", "loc": [ -73.978134, 40.744281 ], "pop": 51561, "state": "NY" }, { "_id": "10017", "city": "NEW YORK", "loc": [ -73.97066100000001, 40.75172 ], "pop": 12465, "state": "NY" }, { "_id": "10018", "city": "NEW YORK", "loc": [ -73.992503, 40.754713 ], "pop": 4834, "state": "NY" }, { "_id": "10019", "city": "NEW YORK", "loc": [ -73.985834, 40.765069 ], "pop": 36602, "state": "NY" }, { "_id": "10020", "city": "NEW YORK", "loc": [ -73.982347, 40.759729 ], "pop": 393, "state": "NY" }, { "_id": "10021", "city": "NEW YORK", "loc": [ -73.958805, 40.768476 ], "pop": 106564, "state": "NY" }, { "_id": "10022", "city": "NEW YORK", "loc": [ -73.965703, 40.757091 ], "pop": 31870, "state": "NY" }, { "_id": "10023", "city": "NEW YORK", "loc": [ -73.982652, 40.77638 ], "pop": 57385, "state": "NY" }, { "_id": "10024", "city": "NEW YORK", "loc": [ -73.97638499999999, 40.786446 ], "pop": 65141, "state": "NY" }, { "_id": "10025", "city": "NEW YORK", "loc": [ -73.968312, 40.797466 ], "pop": 100027, "state": "NY" }, { "_id": "10026", "city": "NEW YORK", "loc": [ -73.953069, 40.801942 ], "pop": 28453, "state": "NY" }, { "_id": "10027", "city": "NEW YORK", "loc": [ -73.954978, 40.811556 ], "pop": 54631, "state": "NY" }, { "_id": "10028", "city": "NEW YORK", "loc": [ -73.952866, 40.776267 ], "pop": 42757, "state": "NY" }, { "_id": "10029", "city": "NEW YORK", "loc": [ -73.94475, 40.791817 ], "pop": 74643, "state": "NY" }, { "_id": "10030", "city": "NEW YORK", "loc": [ -73.94259700000001, 40.818333 ], "pop": 21132, "state": "NY" }, { "_id": "10031", "city": "NEW YORK", "loc": [ -73.950712, 40.82455 ], "pop": 55989, "state": "NY" }, { "_id": "10032", "city": "NEW YORK", "loc": [ -73.94197800000001, 40.83819 ], "pop": 61332, "state": "NY" }, { "_id": "10033", "city": "NEW YORK", "loc": [ -73.935649, 40.84955 ], "pop": 58648, "state": "NY" }, { "_id": "10034", "city": "NEW YORK", "loc": [ -73.922077, 40.866222 ], "pop": 41131, "state": "NY" }, { "_id": "10035", "city": "NEW YORK", "loc": [ -73.93709800000001, 40.801116 ], "pop": 28099, "state": "NY" }, { "_id": "10036", "city": "NEW YORK", "loc": [ -73.991826, 40.759724 ], "pop": 16748, "state": "NY" }, { "_id": "10037", "city": "NEW YORK", "loc": [ -73.93810000000001, 40.813491 ], "pop": 14982, "state": "NY" }, { "_id": "10038", "city": "NEW YORK", "loc": [ -74.00129800000001, 40.710092 ], "pop": 14015, "state": "NY" }, { "_id": "10039", "city": "NEW YORK", "loc": [ -73.938266, 40.826458 ], "pop": 25293, "state": "NY" }, { "_id": "10040", "city": "NEW YORK", "loc": [ -73.92960100000001, 40.858308 ], "pop": 39780, "state": "NY" }, { "_id": "10044", "city": "NEW YORK", "loc": [ -73.949136, 40.762998 ], "pop": 8190, "state": "NY" }, { "_id": "10128", "city": "NEW YORK", "loc": [ -73.95111199999999, 40.781618 ], "pop": 52311, "state": "NY" }, { "_id": "10280", "city": "NEW YORK", "loc": [ -74.016323, 40.710537 ], "pop": 5574, "state": "NY" }, { "_id": "10301", "city": "STATEN ISLAND", "loc": [ -74.092663, 40.631602 ], "pop": 35314, "state": "NY" }, { "_id": "10302", "city": "STATEN ISLAND", "loc": [ -74.137918, 40.630597 ], "pop": 13369, "state": "NY" }, { "_id": "10303", "city": "STATEN ISLAND", "loc": [ -74.160679, 40.630062 ], "pop": 17695, "state": "NY" }, { "_id": "10304", "city": "STATEN ISLAND", "loc": [ -74.087836, 40.610249 ], "pop": 33028, "state": "NY" }, { "_id": "10305", "city": "STATEN ISLAND", "loc": [ -74.076795, 40.597296 ], "pop": 30513, "state": "NY" }, { "_id": "10306", "city": "STATEN ISLAND", "loc": [ -74.118386, 40.568183 ], "pop": 49849, "state": "NY" }, { "_id": "10307", "city": "STATEN ISLAND", "loc": [ -74.244482, 40.508452 ], "pop": 7627, "state": "NY" }, { "_id": "10308", "city": "STATEN ISLAND", "loc": [ -74.152649, 40.55181 ], "pop": 24947, "state": "NY" }, { "_id": "10309", "city": "STATEN ISLAND", "loc": [ -74.211572, 40.535179 ], "pop": 18651, "state": "NY" }, { "_id": "10310", "city": "STATEN ISLAND", "loc": [ -74.11715, 40.632427 ], "pop": 20282, "state": "NY" }, { "_id": "10312", "city": "STATEN ISLAND", "loc": [ -74.179165, 40.545745 ], "pop": 49584, "state": "NY" }, { "_id": "10314", "city": "STATEN ISLAND", "loc": [ -74.147218, 40.603915 ], "pop": 78118, "state": "NY" }, { "_id": "10451", "city": "BRONX", "loc": [ -73.921735, 40.8222 ], "pop": 42854, "state": "NY" }, { "_id": "10452", "city": "BRONX", "loc": [ -73.921555, 40.837594 ], "pop": 55890, "state": "NY" }, { "_id": "10453", "city": "BRONX", "loc": [ -73.912937, 40.852047 ], "pop": 70544, "state": "NY" }, { "_id": "10454", "city": "BRONX", "loc": [ -73.919821, 40.808549 ], "pop": 35994, "state": "NY" }, { "_id": "10455", "city": "BRONX", "loc": [ -73.907172, 40.815309 ], "pop": 31882, "state": "NY" }, { "_id": "10456", "city": "BRONX", "loc": [ -73.909893, 40.831557 ], "pop": 70157, "state": "NY" }, { "_id": "10457", "city": "BRONX", "loc": [ -73.899907, 40.848635 ], "pop": 62133, "state": "NY" }, { "_id": "10458", "city": "BRONX", "loc": [ -73.889464, 40.863307 ], "pop": 70612, "state": "NY" }, { "_id": "10459", "city": "BRONX", "loc": [ -73.894047, 40.824699 ], "pop": 30983, "state": "NY" }, { "_id": "10460", "city": "BRONX", "loc": [ -73.879409, 40.840949 ], "pop": 47250, "state": "NY" }, { "_id": "10461", "city": "BRONX", "loc": [ -73.840953, 40.846506 ], "pop": 45273, "state": "NY" }, { "_id": "10462", "city": "BRONX", "loc": [ -73.860185, 40.843369 ], "pop": 61478, "state": "NY" }, { "_id": "10463", "city": "BRONX", "loc": [ -73.90673700000001, 40.879812 ], "pop": 67435, "state": "NY" }, { "_id": "10464", "city": "BRONX", "loc": [ -73.787436, 40.846941 ], "pop": 4113, "state": "NY" }, { "_id": "10465", "city": "BRONX", "loc": [ -73.819581, 40.826065 ], "pop": 37457, "state": "NY" }, { "_id": "10466", "city": "BRONX", "loc": [ -73.85033300000001, 40.890375 ], "pop": 58394, "state": "NY" }, { "_id": "10467", "city": "BRONX", "loc": [ -73.871242, 40.873671 ], "pop": 85710, "state": "NY" }, { "_id": "10468", "city": "BRONX", "loc": [ -73.90025900000001, 40.866231 ], "pop": 65854, "state": "NY" }, { "_id": "10469", "city": "BRONX", "loc": [ -73.849465, 40.870193 ], "pop": 53962, "state": "NY" }, { "_id": "10470", "city": "BRONX", "loc": [ -73.862194, 40.900029 ], "pop": 13254, "state": "NY" }, { "_id": "10471", "city": "BRONX", "loc": [ -73.905283, 40.901084 ], "pop": 23348, "state": "NY" }, { "_id": "10472", "city": "BRONX", "loc": [ -73.871557, 40.829464 ], "pop": 61122, "state": "NY" }, { "_id": "10473", "city": "BRONX", "loc": [ -73.860626, 40.819364 ], "pop": 53981, "state": "NY" }, { "_id": "10474", "city": "BRONX", "loc": [ -73.886376, 40.801518 ], "pop": 22823, "state": "NY" }, { "_id": "10475", "city": "BRONX", "loc": [ -73.827817, 40.872903 ], "pop": 37045, "state": "NY" }, { "_id": "10501", "city": "AMAWALK", "loc": [ -73.761079, 41.294618 ], "pop": 745, "state": "NY" }, { "_id": "10502", "city": "ARDSLEY", "loc": [ -73.841311, 41.011332 ], "pop": 5529, "state": "NY" }, { "_id": "10504", "city": "ARMONK", "loc": [ -73.700942, 41.136002 ], "pop": 7077, "state": "NY" }, { "_id": "10506", "city": "BEDFORD", "loc": [ -73.635548, 41.190913 ], "pop": 4332, "state": "NY" }, { "_id": "10507", "city": "BEDFORD HILLS", "loc": [ -73.691517, 41.234439 ], "pop": 6161, "state": "NY" }, { "_id": "10509", "city": "BREWSTER", "loc": [ -73.59917900000001, 41.409704 ], "pop": 15852, "state": "NY" }, { "_id": "10510", "city": "BRIARCLIFF MANOR", "loc": [ -73.83495600000001, 41.144364 ], "pop": 8509, "state": "NY" }, { "_id": "10511", "city": "BUCHANAN", "loc": [ -73.941238, 41.258285 ], "pop": 2008, "state": "NY" }, { "_id": "10512", "city": "CARMEL", "loc": [ -73.68152600000001, 41.443216 ], "pop": 20716, "state": "NY" }, { "_id": "10514", "city": "CHAPPAQUA", "loc": [ -73.771458, 41.170497 ], "pop": 11097, "state": "NY" }, { "_id": "10516", "city": "COLD SPRING", "loc": [ -73.933485, 41.44142 ], "pop": 4904, "state": "NY" }, { "_id": "10518", "city": "CROSS RIVER", "loc": [ -73.60202700000001, 41.27218 ], "pop": 691, "state": "NY" }, { "_id": "10520", "city": "CROTON ON HUDSON", "loc": [ -73.892408, 41.218037 ], "pop": 12527, "state": "NY" }, { "_id": "10522", "city": "DOBBS FERRY", "loc": [ -73.866494, 41.011835 ], "pop": 9896, "state": "NY" }, { "_id": "10523", "city": "ELMSFORD", "loc": [ -73.813597, 41.057171 ], "pop": 6266, "state": "NY" }, { "_id": "10524", "city": "GARRISON", "loc": [ -73.92000299999999, 41.362065 ], "pop": 3572, "state": "NY" }, { "_id": "10527", "city": "GRANITE SPRINGS", "loc": [ -73.75300799999999, 41.309791 ], "pop": 963, "state": "NY" }, { "_id": "10528", "city": "HARRISON", "loc": [ -73.718068, 40.971876 ], "pop": 11601, "state": "NY" }, { "_id": "10530", "city": "HARTSDALE", "loc": [ -73.80740400000001, 41.019658 ], "pop": 13995, "state": "NY" }, { "_id": "10532", "city": "HAWTHORNE", "loc": [ -73.80168500000001, 41.095316 ], "pop": 7258, "state": "NY" }, { "_id": "10533", "city": "IRVINGTON", "loc": [ -73.859666, 41.038113 ], "pop": 7498, "state": "NY" }, { "_id": "10535", "city": "JEFFERSON VALLEY", "loc": [ -73.794697, 41.338522 ], "pop": 213, "state": "NY" }, { "_id": "10536", "city": "KATONAH", "loc": [ -73.68411500000001, 41.270884 ], "pop": 12263, "state": "NY" }, { "_id": "10537", "city": "LAKE PEEKSKILL", "loc": [ -73.883787, 41.337437 ], "pop": 1604, "state": "NY" }, { "_id": "10538", "city": "LARCHMONT", "loc": [ -73.75715, 40.935055 ], "pop": 16840, "state": "NY" }, { "_id": "10541", "city": "MAHOPAC", "loc": [ -73.750755, 41.371708 ], "pop": 23687, "state": "NY" }, { "_id": "10543", "city": "MAMARONECK", "loc": [ -73.73503700000001, 40.952481 ], "pop": 18193, "state": "NY" }, { "_id": "10546", "city": "MILLWOOD", "loc": [ -73.792626, 41.201519 ], "pop": 681, "state": "NY" }, { "_id": "10547", "city": "MOHEGAN LAKE", "loc": [ -73.850836, 41.314348 ], "pop": 5753, "state": "NY" }, { "_id": "10548", "city": "MONTROSE", "loc": [ -73.944593, 41.249585 ], "pop": 4350, "state": "NY" }, { "_id": "10549", "city": "MOUNT KISCO", "loc": [ -73.729921, 41.204966 ], "pop": 14361, "state": "NY" }, { "_id": "10550", "city": "MOUNT VERNON", "loc": [ -73.83796100000001, 40.907863 ], "pop": 37889, "state": "NY" }, { "_id": "10552", "city": "MOUNT VERNON", "loc": [ -73.829919, 40.923056 ], "pop": 18167, "state": "NY" }, { "_id": "10553", "city": "MOUNT VERNON", "loc": [ -73.82211100000001, 40.908645 ], "pop": 12452, "state": "NY" }, { "_id": "10560", "city": "NORTH SALEM", "loc": [ -73.592947, 41.341388 ], "pop": 2601, "state": "NY" }, { "_id": "10562", "city": "OSSINING", "loc": [ -73.853791, 41.167344 ], "pop": 29926, "state": "NY" }, { "_id": "10566", "city": "CORTLANDT MANOR", "loc": [ -73.902562, 41.293722 ], "pop": 37431, "state": "NY" }, { "_id": "10570", "city": "PLEASANTVILLE", "loc": [ -73.78448400000001, 41.134977 ], "pop": 11812, "state": "NY" }, { "_id": "10573", "city": "RYE BROOK", "loc": [ -73.672045, 41.007755 ], "pop": 32552, "state": "NY" }, { "_id": "10576", "city": "POUND RIDGE", "loc": [ -73.573215, 41.204196 ], "pop": 4720, "state": "NY" }, { "_id": "10577", "city": "PURCHASE", "loc": [ -73.71562900000001, 41.038396 ], "pop": 4453, "state": "NY" }, { "_id": "10578", "city": "PURDYS", "loc": [ -73.654313, 41.322427 ], "pop": 2534, "state": "NY" }, { "_id": "10579", "city": "PUTNAM VALLEY", "loc": [ -73.85024, 41.372815 ], "pop": 7453, "state": "NY" }, { "_id": "10580", "city": "RYE", "loc": [ -73.690721, 40.973403 ], "pop": 16479, "state": "NY" }, { "_id": "10583", "city": "HEATHCOTE", "loc": [ -73.797566, 40.988365 ], "pop": 35302, "state": "NY" }, { "_id": "10588", "city": "SHRUB OAK", "loc": [ -73.82732, 41.328608 ], "pop": 2103, "state": "NY" }, { "_id": "10589", "city": "SOMERS", "loc": [ -73.695145, 41.334568 ], "pop": 6618, "state": "NY" }, { "_id": "10590", "city": "SOUTH SALEM", "loc": [ -73.54022399999999, 41.255261 ], "pop": 6936, "state": "NY" }, { "_id": "10591", "city": "NORTH TARRYTOWN", "loc": [ -73.859335, 41.078108 ], "pop": 20080, "state": "NY" }, { "_id": "10594", "city": "THORNWOOD", "loc": [ -73.773329, 41.118163 ], "pop": 5455, "state": "NY" }, { "_id": "10595", "city": "VALHALLA", "loc": [ -73.777596, 41.085559 ], "pop": 5255, "state": "NY" }, { "_id": "10597", "city": "WACCABUC", "loc": [ -73.603207, 41.303208 ], "pop": 415, "state": "NY" }, { "_id": "10598", "city": "YORKTOWN HEIGHTS", "loc": [ -73.79239800000001, 41.299947 ], "pop": 28501, "state": "NY" }, { "_id": "10601", "city": "WHITE PLAINS", "loc": [ -73.765231, 41.032955 ], "pop": 8397, "state": "NY" }, { "_id": "10603", "city": "WHITE PLAINS", "loc": [ -73.77758, 41.049913 ], "pop": 14342, "state": "NY" }, { "_id": "10604", "city": "EAST WHITE PLAIN", "loc": [ -73.750727, 41.043295 ], "pop": 8899, "state": "NY" }, { "_id": "10605", "city": "WHITE PLAINS", "loc": [ -73.755247, 41.014053 ], "pop": 17843, "state": "NY" }, { "_id": "10606", "city": "WHITE PLAINS", "loc": [ -73.778097, 41.024714 ], "pop": 13436, "state": "NY" }, { "_id": "10607", "city": "WHITE PLAINS", "loc": [ -73.81169199999999, 41.039813 ], "pop": 7148, "state": "NY" }, { "_id": "10701", "city": "YONKERS", "loc": [ -73.888317, 40.940716 ], "pop": 59476, "state": "NY" }, { "_id": "10703", "city": "YONKERS", "loc": [ -73.88516300000001, 40.951763 ], "pop": 19958, "state": "NY" }, { "_id": "10704", "city": "YONKERS", "loc": [ -73.859347, 40.917633 ], "pop": 31604, "state": "NY" }, { "_id": "10705", "city": "YONKERS", "loc": [ -73.89504100000001, 40.917665 ], "pop": 36141, "state": "NY" }, { "_id": "10706", "city": "HASTINGS ON HUDS", "loc": [ -73.875912, 40.99071 ], "pop": 8546, "state": "NY" }, { "_id": "10707", "city": "TUCKAHOE", "loc": [ -73.819771, 40.95691 ], "pop": 15275, "state": "NY" }, { "_id": "10708", "city": "BRONXVILLE", "loc": [ -73.83533199999999, 40.939133 ], "pop": 20406, "state": "NY" }, { "_id": "10709", "city": "EASTCHESTER", "loc": [ -73.80858000000001, 40.954966 ], "pop": 2515, "state": "NY" }, { "_id": "10710", "city": "YONKERS", "loc": [ -73.843435, 40.965574 ], "pop": 24952, "state": "NY" }, { "_id": "10801", "city": "NEW ROCHELLE", "loc": [ -73.787729, 40.916628 ], "pop": 30929, "state": "NY" }, { "_id": "10803", "city": "PELHAM", "loc": [ -73.807304, 40.904455 ], "pop": 11997, "state": "NY" }, { "_id": "10804", "city": "NEW ROCHELLE", "loc": [ -73.786018, 40.948335 ], "pop": 14359, "state": "NY" }, { "_id": "10805", "city": "NEW ROCHELLE", "loc": [ -73.781043, 40.900236 ], "pop": 18471, "state": "NY" }, { "_id": "10901", "city": "SUFFERN", "loc": [ -74.124098, 41.117654 ], "pop": 21296, "state": "NY" }, { "_id": "10911", "city": "BEAR MOUNTAIN", "loc": [ -73.99610800000001, 41.306734 ], "pop": 14, "state": "NY" }, { "_id": "10913", "city": "BLAUVELT", "loc": [ -73.962924, 41.062597 ], "pop": 4770, "state": "NY" }, { "_id": "10916", "city": "CAMPBELL HALL", "loc": [ -74.250466, 41.442993 ], "pop": 3065, "state": "NY" }, { "_id": "10917", "city": "CENTRAL VALLEY", "loc": [ -74.12203599999999, 41.326836 ], "pop": 1407, "state": "NY" }, { "_id": "10918", "city": "CHESTER", "loc": [ -74.26511600000001, 41.355381 ], "pop": 9196, "state": "NY" }, { "_id": "10919", "city": "CIRCLEVILLE", "loc": [ -74.38504399999999, 41.524387 ], "pop": 79, "state": "NY" }, { "_id": "10920", "city": "CONGERS", "loc": [ -73.94131, 41.148689 ], "pop": 8088, "state": "NY" }, { "_id": "10921", "city": "FLORIDA", "loc": [ -74.352805, 41.329507 ], "pop": 2698, "state": "NY" }, { "_id": "10923", "city": "GARNERVILLE", "loc": [ -74.000501, 41.202057 ], "pop": 9650, "state": "NY" }, { "_id": "10924", "city": "GOSHEN", "loc": [ -74.330162, 41.394586 ], "pop": 11019, "state": "NY" }, { "_id": "10925", "city": "GREENWOOD LAKE", "loc": [ -74.30000699999999, 41.212718 ], "pop": 4723, "state": "NY" }, { "_id": "10926", "city": "HARRIMAN", "loc": [ -74.155805, 41.299681 ], "pop": 3249, "state": "NY" }, { "_id": "10927", "city": "HAVERSTRAW", "loc": [ -73.968959, 41.197095 ], "pop": 9438, "state": "NY" }, { "_id": "10928", "city": "HIGHLAND FALLS", "loc": [ -73.97461800000001, 41.358177 ], "pop": 5704, "state": "NY" }, { "_id": "10930", "city": "HIGHLAND MILLS", "loc": [ -74.11967799999999, 41.353592 ], "pop": 5629, "state": "NY" }, { "_id": "10931", "city": "HILLBURN", "loc": [ -74.17019500000001, 41.123981 ], "pop": 892, "state": "NY" }, { "_id": "10940", "city": "SCOTCHTOWN", "loc": [ -74.412023, 41.457222 ], "pop": 51211, "state": "NY" }, { "_id": "10950", "city": "MONROE", "loc": [ -74.18852099999999, 41.328578 ], "pop": 30829, "state": "NY" }, { "_id": "10952", "city": "MONSEY", "loc": [ -74.0736, 41.116255 ], "pop": 25251, "state": "NY" }, { "_id": "10954", "city": "BARDONIA", "loc": [ -74.00958900000001, 41.099176 ], "pop": 16390, "state": "NY" }, { "_id": "10956", "city": "NEW CITY", "loc": [ -73.996206, 41.147247 ], "pop": 33340, "state": "NY" }, { "_id": "10958", "city": "NEW HAMPTON", "loc": [ -74.443483, 41.362714 ], "pop": 3918, "state": "NY" }, { "_id": "10960", "city": "NYACK", "loc": [ -73.92522599999999, 41.091351 ], "pop": 14542, "state": "NY" }, { "_id": "10962", "city": "ORANGEBURG", "loc": [ -73.96087300000001, 41.044183 ], "pop": 6324, "state": "NY" }, { "_id": "10963", "city": "OTISVILLE", "loc": [ -74.52941300000001, 41.481806 ], "pop": 4748, "state": "NY" }, { "_id": "10964", "city": "PALISADES", "loc": [ -73.92498500000001, 41.010263 ], "pop": 996, "state": "NY" }, { "_id": "10965", "city": "PEARL RIVER", "loc": [ -74.01587000000001, 41.062939 ], "pop": 14791, "state": "NY" }, { "_id": "10968", "city": "PIERMONT", "loc": [ -73.91918699999999, 41.03955 ], "pop": 2104, "state": "NY" }, { "_id": "10969", "city": "PINE ISLAND", "loc": [ -74.379457, 41.323796 ], "pop": 589, "state": "NY" }, { "_id": "10970", "city": "POMONA", "loc": [ -74.043564, 41.190105 ], "pop": 7356, "state": "NY" }, { "_id": "10973", "city": "SLATE HILL", "loc": [ -74.484658, 41.376004 ], "pop": 2127, "state": "NY" }, { "_id": "10974", "city": "STERLINGTON", "loc": [ -74.188107, 41.16047 ], "pop": 3322, "state": "NY" }, { "_id": "10975", "city": "SOUTHFIELDS", "loc": [ -74.176182, 41.247959 ], "pop": 5, "state": "NY" }, { "_id": "10976", "city": "SPARKILL", "loc": [ -73.92288000000001, 41.025573 ], "pop": 894, "state": "NY" }, { "_id": "10977", "city": "CHESTNUT RIDGE", "loc": [ -74.04625299999999, 41.117977 ], "pop": 43435, "state": "NY" }, { "_id": "10980", "city": "STONY POINT", "loc": [ -73.99616399999999, 41.229174 ], "pop": 11437, "state": "NY" }, { "_id": "10983", "city": "TAPPAN", "loc": [ -73.949065, 41.027751 ], "pop": 6181, "state": "NY" }, { "_id": "10984", "city": "THIELLS", "loc": [ -74.015441, 41.207826 ], "pop": 3971, "state": "NY" }, { "_id": "10985", "city": "THOMPSON RIDGE", "loc": [ -74.37744499999999, 41.580957 ], "pop": 82, "state": "NY" }, { "_id": "10986", "city": "TOMKINS COVE", "loc": [ -73.98916, 41.259763 ], "pop": 1615, "state": "NY" }, { "_id": "10987", "city": "TUXEDO PARK", "loc": [ -74.215912, 41.192486 ], "pop": 2481, "state": "NY" }, { "_id": "10989", "city": "VALLEY COTTAGE", "loc": [ -73.943006, 41.118338 ], "pop": 9132, "state": "NY" }, { "_id": "10990", "city": "WARWICK", "loc": [ -74.36037, 41.265563 ], "pop": 16960, "state": "NY" }, { "_id": "10992", "city": "WASHINGTONVILLE", "loc": [ -74.1601, 41.423701 ], "pop": 8842, "state": "NY" }, { "_id": "10993", "city": "WEST HAVERSTRAW", "loc": [ -73.982123, 41.209016 ], "pop": 3591, "state": "NY" }, { "_id": "10994", "city": "WEST NYACK", "loc": [ -73.97684599999999, 41.097324 ], "pop": 6655, "state": "NY" }, { "_id": "10996", "city": "WEST POINT", "loc": [ -73.97366599999999, 41.394545 ], "pop": 7979, "state": "NY" }, { "_id": "10998", "city": "WESTTOWN", "loc": [ -74.55294600000001, 41.321414 ], "pop": 2097, "state": "NY" }, { "_id": "11001", "city": "FLORAL PARK", "loc": [ -73.70576, 40.723586 ], "pop": 26498, "state": "NY" }, { "_id": "11003", "city": "ALDEN MANOR", "loc": [ -73.70575100000001, 40.699615 ], "pop": 34741, "state": "NY" }, { "_id": "11004", "city": "GLEN OAKS", "loc": [ -73.71143600000001, 40.7481 ], "pop": 19058, "state": "NY" }, { "_id": "11010", "city": "FRANKLIN SQUARE", "loc": [ -73.67580700000001, 40.701049 ], "pop": 24595, "state": "NY" }, { "_id": "11020", "city": "GREAT NECK", "loc": [ -73.718918, 40.774235 ], "pop": 6144, "state": "NY" }, { "_id": "11021", "city": "GREAT NECK", "loc": [ -73.726984, 40.786674 ], "pop": 17198, "state": "NY" }, { "_id": "11023", "city": "GREAT NECK", "loc": [ -73.734257, 40.799307 ], "pop": 7981, "state": "NY" }, { "_id": "11024", "city": "KINGS POINT CONT", "loc": [ -73.74139099999999, 40.813307 ], "pop": 7298, "state": "NY" }, { "_id": "11030", "city": "PLANDOME", "loc": [ -73.68836899999999, 40.798641 ], "pop": 15271, "state": "NY" }, { "_id": "11040", "city": "HILLSIDE MANOR", "loc": [ -73.68042, 40.743926 ], "pop": 37695, "state": "NY" }, { "_id": "11042", "city": "NEW HYDE PARK", "loc": [ -73.69497800000001, 40.7602 ], "pop": 1, "state": "NY" }, { "_id": "11050", "city": "PORT WASHINGTON", "loc": [ -73.69635599999999, 40.834995 ], "pop": 28264, "state": "NY" }, { "_id": "11101", "city": "ASTORIA", "loc": [ -73.939393, 40.750316 ], "pop": 23142, "state": "NY" }, { "_id": "11102", "city": "ASTORIA", "loc": [ -73.926462, 40.77063 ], "pop": 30078, "state": "NY" }, { "_id": "11103", "city": "ASTORIA", "loc": [ -73.914886, 40.762651 ], "pop": 38597, "state": "NY" }, { "_id": "11104", "city": "SUNNYSIDE", "loc": [ -73.921556, 40.743641 ], "pop": 25898, "state": "NY" }, { "_id": "11105", "city": "ASTORIA", "loc": [ -73.910965, 40.77627 ], "pop": 37297, "state": "NY" }, { "_id": "11106", "city": "ASTORIA", "loc": [ -73.92952699999999, 40.760813 ], "pop": 36515, "state": "NY" }, { "_id": "11201", "city": "BROOKLYN", "loc": [ -73.99034, 40.694021 ], "pop": 46980, "state": "NY" }, { "_id": "11203", "city": "BROOKLYN", "loc": [ -73.934888, 40.650496 ], "pop": 80566, "state": "NY" }, { "_id": "11204", "city": "BROOKLYN", "loc": [ -73.985623, 40.617871 ], "pop": 64780, "state": "NY" }, { "_id": "11205", "city": "BROOKLYN", "loc": [ -73.96662000000001, 40.692433 ], "pop": 36852, "state": "NY" }, { "_id": "11206", "city": "BROOKLYN", "loc": [ -73.943617, 40.701195 ], "pop": 74825, "state": "NY" }, { "_id": "11207", "city": "BROOKLYN", "loc": [ -73.893957, 40.670486 ], "pop": 83158, "state": "NY" }, { "_id": "11208", "city": "BROOKLYN", "loc": [ -73.873649, 40.676191 ], "pop": 78322, "state": "NY" }, { "_id": "11209", "city": "BROOKLYN", "loc": [ -74.030304, 40.625106 ], "pop": 62346, "state": "NY" }, { "_id": "11210", "city": "BROOKLYN", "loc": [ -73.946682, 40.628064 ], "pop": 62445, "state": "NY" }, { "_id": "11211", "city": "BROOKLYN", "loc": [ -73.956283, 40.709476 ], "pop": 78338, "state": "NY" }, { "_id": "11212", "city": "BROOKLYN", "loc": [ -73.914483, 40.662474 ], "pop": 87079, "state": "NY" }, { "_id": "11213", "city": "BROOKLYN", "loc": [ -73.93665, 40.669961 ], "pop": 62607, "state": "NY" }, { "_id": "11214", "city": "BROOKLYN", "loc": [ -73.99681, 40.601563 ], "pop": 73076, "state": "NY" }, { "_id": "11215", "city": "BROOKLYN", "loc": [ -73.982783, 40.666863 ], "pop": 63338, "state": "NY" }, { "_id": "11216", "city": "BROOKLYN", "loc": [ -73.949639, 40.67943 ], "pop": 58862, "state": "NY" }, { "_id": "11217", "city": "BROOKLYN", "loc": [ -73.979797, 40.68165 ], "pop": 36232, "state": "NY" }, { "_id": "11218", "city": "BROOKLYN", "loc": [ -73.97580600000001, 40.642373 ], "pop": 66569, "state": "NY" }, { "_id": "11219", "city": "BROOKLYN", "loc": [ -73.996011, 40.633568 ], "pop": 73527, "state": "NY" }, { "_id": "11220", "city": "BROOKLYN", "loc": [ -74.01328700000001, 40.641165 ], "pop": 76923, "state": "NY" }, { "_id": "11221", "city": "BROOKLYN", "loc": [ -73.927373, 40.690695 ], "pop": 70583, "state": "NY" }, { "_id": "11222", "city": "BROOKLYN", "loc": [ -73.94984599999999, 40.727164 ], "pop": 38158, "state": "NY" }, { "_id": "11223", "city": "BROOKLYN", "loc": [ -73.97429099999999, 40.597874 ], "pop": 70904, "state": "NY" }, { "_id": "11224", "city": "BROOKLYN", "loc": [ -73.988395, 40.576729 ], "pop": 52480, "state": "NY" }, { "_id": "11225", "city": "BROOKLYN", "loc": [ -73.954588, 40.662776 ], "pop": 66752, "state": "NY" }, { "_id": "11226", "city": "BROOKLYN", "loc": [ -73.956985, 40.646694 ], "pop": 111396, "state": "NY" }, { "_id": "11228", "city": "BROOKLYN", "loc": [ -74.012067, 40.617441 ], "pop": 39220, "state": "NY" }, { "_id": "11229", "city": "BROOKLYN", "loc": [ -73.94749, 40.601094 ], "pop": 72660, "state": "NY" }, { "_id": "11230", "city": "BROOKLYN", "loc": [ -73.965007, 40.622493 ], "pop": 72733, "state": "NY" }, { "_id": "11231", "city": "BROOKLYN", "loc": [ -74.00141000000001, 40.679437 ], "pop": 32101, "state": "NY" }, { "_id": "11232", "city": "BROOKLYN", "loc": [ -74.001797, 40.652113 ], "pop": 22777, "state": "NY" }, { "_id": "11233", "city": "BROOKLYN", "loc": [ -73.921104, 40.678415 ], "pop": 58827, "state": "NY" }, { "_id": "11234", "city": "BROOKLYN", "loc": [ -73.92391499999999, 40.620475 ], "pop": 74953, "state": "NY" }, { "_id": "11235", "city": "BROOKLYN", "loc": [ -73.953599, 40.583898 ], "pop": 67088, "state": "NY" }, { "_id": "11236", "city": "BROOKLYN", "loc": [ -73.902764, 40.640685 ], "pop": 77253, "state": "NY" }, { "_id": "11237", "city": "BROOKLYN", "loc": [ -73.917979, 40.700616 ], "pop": 48339, "state": "NY" }, { "_id": "11238", "city": "BROOKLYN", "loc": [ -73.964387, 40.679015 ], "pop": 42507, "state": "NY" }, { "_id": "11239", "city": "BROOKLYN", "loc": [ -73.882375, 40.649748 ], "pop": 14948, "state": "NY" }, { "_id": "11251", "city": "BROOKLYN NAVY YA", "loc": [ -73.966511, 40.703578 ], "pop": 18, "state": "NY" }, { "_id": "11354", "city": "FLUSHING", "loc": [ -73.82414199999999, 40.766722 ], "pop": 51947, "state": "NY" }, { "_id": "11355", "city": "FLUSHING", "loc": [ -73.822609, 40.753573 ], "pop": 69164, "state": "NY" }, { "_id": "11356", "city": "COLLEGE POINT", "loc": [ -73.844955, 40.785511 ], "pop": 17723, "state": "NY" }, { "_id": "11357", "city": "WHITESTONE", "loc": [ -73.809594, 40.785147 ], "pop": 39093, "state": "NY" }, { "_id": "11358", "city": "FLUSHING", "loc": [ -73.79678800000001, 40.760636 ], "pop": 34045, "state": "NY" }, { "_id": "11359", "city": "FORT TOTTEN", "loc": [ -73.777244, 40.789967 ], "pop": 734, "state": "NY" }, { "_id": "11360", "city": "BAYSIDE", "loc": [ -73.781216, 40.780684 ], "pop": 20337, "state": "NY" }, { "_id": "11361", "city": "BAYSIDE", "loc": [ -73.774457, 40.76268 ], "pop": 25529, "state": "NY" }, { "_id": "11362", "city": "LITTLE NECK", "loc": [ -73.73262200000001, 40.759131 ], "pop": 16226, "state": "NY" }, { "_id": "11363", "city": "LITTLE NECK", "loc": [ -73.745401, 40.772166 ], "pop": 6909, "state": "NY" }, { "_id": "11364", "city": "FLUSHING", "loc": [ -73.758646, 40.745847 ], "pop": 32080, "state": "NY" }, { "_id": "11365", "city": "FRESH MEADOWS", "loc": [ -73.79506000000001, 40.737424 ], "pop": 34087, "state": "NY" }, { "_id": "11366", "city": "FRESH MEADOWS", "loc": [ -73.794922, 40.727231 ], "pop": 12089, "state": "NY" }, { "_id": "11367", "city": "FLUSHING", "loc": [ -73.81953, 40.727966 ], "pop": 36877, "state": "NY" }, { "_id": "11368", "city": "CORONA", "loc": [ -73.861069, 40.745288 ], "pop": 75746, "state": "NY" }, { "_id": "11369", "city": "EAST ELMHURST", "loc": [ -73.873902, 40.761254 ], "pop": 28106, "state": "NY" }, { "_id": "11370", "city": "EAST ELMHURST", "loc": [ -73.891586, 40.761111 ], "pop": 23910, "state": "NY" }, { "_id": "11371", "city": "FLUSHING", "loc": [ -73.873535, 40.772117 ], "pop": 49, "state": "NY" }, { "_id": "11372", "city": "JACKSON HEIGHTS", "loc": [ -73.882975, 40.751329 ], "pop": 57726, "state": "NY" }, { "_id": "11373", "city": "JACKSON HEIGHTS", "loc": [ -73.878551, 40.740388 ], "pop": 88241, "state": "NY" }, { "_id": "11374", "city": "REGO PARK", "loc": [ -73.860191, 40.72775 ], "pop": 40024, "state": "NY" }, { "_id": "11375", "city": "FOREST HILLS", "loc": [ -73.847306, 40.722854 ], "pop": 65180, "state": "NY" }, { "_id": "11377", "city": "WOODSIDE", "loc": [ -73.90691099999999, 40.744972 ], "pop": 75894, "state": "NY" }, { "_id": "11378", "city": "MASPETH", "loc": [ -73.899682, 40.723865 ], "pop": 31292, "state": "NY" }, { "_id": "11379", "city": "MIDDLE VILLAGE", "loc": [ -73.879228, 40.717286 ], "pop": 28981, "state": "NY" }, { "_id": "11385", "city": "RIDGEWOOD", "loc": [ -73.89612200000001, 40.703613 ], "pop": 85732, "state": "NY" }, { "_id": "11411", "city": "CAMBRIA HEIGHTS", "loc": [ -73.73744499999999, 40.694741 ], "pop": 20094, "state": "NY" }, { "_id": "11412", "city": "KEW GARDENS", "loc": [ -73.758641, 40.698097 ], "pop": 32003, "state": "NY" }, { "_id": "11413", "city": "SPRINGFIELD GARD", "loc": [ -73.75071, 40.67295 ], "pop": 36679, "state": "NY" }, { "_id": "11414", "city": "KEW GARDENS", "loc": [ -73.84504099999999, 40.660603 ], "pop": 27256, "state": "NY" }, { "_id": "11415", "city": "KEW GARDENS", "loc": [ -73.82971499999999, 40.706865 ], "pop": 16703, "state": "NY" }, { "_id": "11416", "city": "OZONE PARK", "loc": [ -73.85139700000001, 40.683753 ], "pop": 17876, "state": "NY" }, { "_id": "11417", "city": "OZONE PARK", "loc": [ -73.84477800000001, 40.676854 ], "pop": 22768, "state": "NY" }, { "_id": "11418", "city": "RICHMOND HILL", "loc": [ -73.834484, 40.698171 ], "pop": 29382, "state": "NY" }, { "_id": "11419", "city": "S RICHMOND HILL", "loc": [ -73.823871, 40.688113 ], "pop": 37530, "state": "NY" }, { "_id": "11420", "city": "S OZONE PARK", "loc": [ -73.81577299999999, 40.675379 ], "pop": 38096, "state": "NY" }, { "_id": "11421", "city": "WOODHAVEN", "loc": [ -73.858514, 40.691345 ], "pop": 29442, "state": "NY" }, { "_id": "11422", "city": "ROSEDALE", "loc": [ -73.735265, 40.662141 ], "pop": 26674, "state": "NY" }, { "_id": "11423", "city": "HOLLIS", "loc": [ -73.767685, 40.714156 ], "pop": 29102, "state": "NY" }, { "_id": "11426", "city": "BELLEROSE", "loc": [ -73.723018, 40.734735 ], "pop": 18145, "state": "NY" }, { "_id": "11427", "city": "QUEENS VILLAGE", "loc": [ -73.748908, 40.727707 ], "pop": 21004, "state": "NY" }, { "_id": "11428", "city": "QUEENS VILLAGE", "loc": [ -73.743312, 40.720756 ], "pop": 16793, "state": "NY" }, { "_id": "11429", "city": "QUEENS VILLAGE", "loc": [ -73.740064, 40.70902 ], "pop": 24311, "state": "NY" }, { "_id": "11430", "city": "JAMAICA", "loc": [ -73.782663, 40.647221 ], "pop": 398, "state": "NY" }, { "_id": "11432", "city": "JAMAICA", "loc": [ -73.79442, 40.711867 ], "pop": 53011, "state": "NY" }, { "_id": "11433", "city": "JAMAICA", "loc": [ -73.78766899999999, 40.69691 ], "pop": 26325, "state": "NY" }, { "_id": "11434", "city": "JAMAICA", "loc": [ -73.77584, 40.677483 ], "pop": 50464, "state": "NY" }, { "_id": "11435", "city": "JAMAICA", "loc": [ -73.811121, 40.702934 ], "pop": 47987, "state": "NY" }, { "_id": "11436", "city": "JAMAICA", "loc": [ -73.79659599999999, 40.676347 ], "pop": 17020, "state": "NY" }, { "_id": "11501", "city": "MINEOLA", "loc": [ -73.63976099999999, 40.746927 ], "pop": 19087, "state": "NY" }, { "_id": "11507", "city": "ALBERTSON", "loc": [ -73.651419, 40.77032 ], "pop": 7091, "state": "NY" }, { "_id": "11509", "city": "ATLANTIC BEACH", "loc": [ -73.725545, 40.588652 ], "pop": 2831, "state": "NY" }, { "_id": "11510", "city": "BALDWIN", "loc": [ -73.60968800000001, 40.654755 ], "pop": 30959, "state": "NY" }, { "_id": "11514", "city": "CARLE PLACE", "loc": [ -73.611941, 40.75115 ], "pop": 4863, "state": "NY" }, { "_id": "11516", "city": "CEDARHURST", "loc": [ -73.726404, 40.623619 ], "pop": 7113, "state": "NY" }, { "_id": "11518", "city": "EAST ROCKAWAY", "loc": [ -73.667376, 40.640445 ], "pop": 11027, "state": "NY" }, { "_id": "11520", "city": "FREEPORT", "loc": [ -73.58661499999999, 40.65359 ], "pop": 40662, "state": "NY" }, { "_id": "11530", "city": "GARDEN CITY", "loc": [ -73.648718, 40.72452 ], "pop": 27951, "state": "NY" }, { "_id": "11542", "city": "GLEN COVE", "loc": [ -73.62772, 40.864958 ], "pop": 24997, "state": "NY" }, { "_id": "11545", "city": "GLEN HEAD", "loc": [ -73.60763, 40.828098 ], "pop": 13565, "state": "NY" }, { "_id": "11548", "city": "GREENVALE", "loc": [ -73.626124, 40.812503 ], "pop": 1021, "state": "NY" }, { "_id": "11550", "city": "HEMPSTEAD", "loc": [ -73.61764100000001, 40.70492 ], "pop": 50933, "state": "NY" }, { "_id": "11552", "city": "WEST HEMPSTEAD", "loc": [ -73.653859, 40.692915 ], "pop": 22972, "state": "NY" }, { "_id": "11553", "city": "UNIONDALE", "loc": [ -73.591995, 40.702029 ], "pop": 20397, "state": "NY" }, { "_id": "11554", "city": "EAST MEADOW", "loc": [ -73.556088, 40.714915 ], "pop": 36692, "state": "NY" }, { "_id": "11557", "city": "HEWLETT", "loc": [ -73.695667, 40.640392 ], "pop": 8023, "state": "NY" }, { "_id": "11558", "city": "ISLAND PARK", "loc": [ -73.655411, 40.604044 ], "pop": 8857, "state": "NY" }, { "_id": "11559", "city": "LAWRENCE", "loc": [ -73.732969, 40.61396 ], "pop": 6703, "state": "NY" }, { "_id": "11560", "city": "LOCUST VALLEY", "loc": [ -73.59271, 40.881728 ], "pop": 6771, "state": "NY" }, { "_id": "11561", "city": "LONG BEACH", "loc": [ -73.65946700000001, 40.587697 ], "pop": 39066, "state": "NY" }, { "_id": "11563", "city": "LYNBROOK", "loc": [ -73.674143, 40.657107 ], "pop": 22659, "state": "NY" }, { "_id": "11565", "city": "MALVERNE", "loc": [ -73.673073, 40.674982 ], "pop": 8660, "state": "NY" }, { "_id": "11566", "city": "NORTH MERRICK", "loc": [ -73.555001, 40.668312 ], "pop": 36427, "state": "NY" }, { "_id": "11568", "city": "OLD WESTBURY", "loc": [ -73.587515, 40.78821 ], "pop": 5524, "state": "NY" }, { "_id": "11570", "city": "ROCKVILLE CENTRE", "loc": [ -73.63800000000001, 40.663745 ], "pop": 27127, "state": "NY" }, { "_id": "11572", "city": "OCEANSIDE", "loc": [ -73.637533, 40.636199 ], "pop": 31406, "state": "NY" }, { "_id": "11575", "city": "ROOSEVELT", "loc": [ -73.586697, 40.680171 ], "pop": 14595, "state": "NY" }, { "_id": "11576", "city": "ROSLYN", "loc": [ -73.653362, 40.790668 ], "pop": 13114, "state": "NY" }, { "_id": "11577", "city": "ROSLYN HEIGHTS", "loc": [ -73.640292, 40.784497 ], "pop": 10665, "state": "NY" }, { "_id": "11579", "city": "SEA CLIFF", "loc": [ -73.643598, 40.845984 ], "pop": 5068, "state": "NY" }, { "_id": "11580", "city": "VALLEY STREAM", "loc": [ -73.705738, 40.674184 ], "pop": 34327, "state": "NY" }, { "_id": "11581", "city": "NORTH WOODMERE", "loc": [ -73.710705, 40.651838 ], "pop": 19582, "state": "NY" }, { "_id": "11590", "city": "WESTBURY", "loc": [ -73.57226, 40.755749 ], "pop": 38026, "state": "NY" }, { "_id": "11596", "city": "WILLISTON PARK", "loc": [ -73.644892, 40.759198 ], "pop": 11057, "state": "NY" }, { "_id": "11598", "city": "WOODMERE", "loc": [ -73.714146, 40.63262 ], "pop": 13084, "state": "NY" }, { "_id": "11691", "city": "FAR ROCKAWAY", "loc": [ -73.757971, 40.600645 ], "pop": 52162, "state": "NY" }, { "_id": "11692", "city": "FAR ROCKAWAY", "loc": [ -73.79744599999999, 40.59257 ], "pop": 21192, "state": "NY" }, { "_id": "11693", "city": "FAR ROCKAWAY", "loc": [ -73.819804, 40.607644 ], "pop": 1630, "state": "NY" }, { "_id": "11694", "city": "FAR ROCKAWAY", "loc": [ -73.839192, 40.579471 ], "pop": 21972, "state": "NY" }, { "_id": "11696", "city": "INWOOD", "loc": [ -73.746988, 40.617784 ], "pop": 6660, "state": "NY" }, { "_id": "11697", "city": "FAR ROCKAWAY", "loc": [ -73.914873, 40.560032 ], "pop": 3690, "state": "NY" }, { "_id": "11701", "city": "AMITYVILLE", "loc": [ -73.417106, 40.684197 ], "pop": 29047, "state": "NY" }, { "_id": "11702", "city": "OAK BEACH", "loc": [ -73.324583, 40.634183 ], "pop": 456, "state": "NY" }, { "_id": "11703", "city": "NORTH BABYLON", "loc": [ -73.323581, 40.732102 ], "pop": 17916, "state": "NY" }, { "_id": "11704", "city": "WEST BABYLON", "loc": [ -73.354591, 40.713476 ], "pop": 45519, "state": "NY" }, { "_id": "11705", "city": "BAYPORT", "loc": [ -73.05420700000001, 40.744408 ], "pop": 7616, "state": "NY" }, { "_id": "11706", "city": "KISMET", "loc": [ -73.252708, 40.733744 ], "pop": 5507, "state": "NY" }, { "_id": "11709", "city": "BAYVILLE", "loc": [ -73.560141, 40.907382 ], "pop": 7185, "state": "NY" }, { "_id": "11710", "city": "NORTH BELLMORE", "loc": [ -73.53451699999999, 40.677028 ], "pop": 34237, "state": "NY" }, { "_id": "11713", "city": "BELLPORT", "loc": [ -72.94689099999999, 40.77327 ], "pop": 7927, "state": "NY" }, { "_id": "11714", "city": "BETHPAGE", "loc": [ -73.485727, 40.740014 ], "pop": 21957, "state": "NY" }, { "_id": "11715", "city": "BLUE POINT", "loc": [ -73.035213, 40.750089 ], "pop": 4189, "state": "NY" }, { "_id": "11716", "city": "BOHEMIA", "loc": [ -73.116339, 40.767788 ], "pop": 10448, "state": "NY" }, { "_id": "11717", "city": "WEST BRENTWOOD", "loc": [ -73.248189, 40.777918 ], "pop": 60425, "state": "NY" }, { "_id": "11718", "city": "BRIGHTWATERS", "loc": [ -73.264639, 40.727957 ], "pop": 20866, "state": "NY" }, { "_id": "11719", "city": "BROOKHAVEN", "loc": [ -72.89212499999999, 40.78428 ], "pop": 7493, "state": "NY" }, { "_id": "11720", "city": "CENTEREACH", "loc": [ -73.08216299999999, 40.870508 ], "pop": 27519, "state": "NY" }, { "_id": "11721", "city": "CENTERPORT", "loc": [ -73.3754, 40.892899 ], "pop": 5770, "state": "NY" }, { "_id": "11722", "city": "CENTRAL ISLIP", "loc": [ -73.196145, 40.786618 ], "pop": 29418, "state": "NY" }, { "_id": "11724", "city": "COLD SPRING HARB", "loc": [ -73.45003199999999, 40.863056 ], "pop": 2860, "state": "NY" }, { "_id": "11725", "city": "COMMACK", "loc": [ -73.27992399999999, 40.843032 ], "pop": 29847, "state": "NY" }, { "_id": "11726", "city": "COPIAGUE", "loc": [ -73.396271, 40.677833 ], "pop": 15640, "state": "NY" }, { "_id": "11727", "city": "CORAM", "loc": [ -73.00688100000001, 40.884988 ], "pop": 25002, "state": "NY" }, { "_id": "11729", "city": "DEER PARK", "loc": [ -73.32572, 40.759083 ], "pop": 32146, "state": "NY" }, { "_id": "11730", "city": "EAST ISLIP", "loc": [ -73.180471, 40.72816 ], "pop": 15777, "state": "NY" }, { "_id": "11731", "city": "ELWOOD", "loc": [ -73.319506, 40.867066 ], "pop": 30333, "state": "NY" }, { "_id": "11732", "city": "EAST NORWICH", "loc": [ -73.534876, 40.847162 ], "pop": 3276, "state": "NY" }, { "_id": "11733", "city": "SETAUKET", "loc": [ -73.101467, 40.930004 ], "pop": 16470, "state": "NY" }, { "_id": "11735", "city": "SOUTH FARMINGDAL", "loc": [ -73.445055, 40.725061 ], "pop": 31358, "state": "NY" }, { "_id": "11738", "city": "FARMINGVILLE", "loc": [ -73.04125000000001, 40.836602 ], "pop": 14967, "state": "NY" }, { "_id": "11740", "city": "GREENLAWN", "loc": [ -73.36464100000001, 40.862121 ], "pop": 9967, "state": "NY" }, { "_id": "11741", "city": "HOLBROOK", "loc": [ -73.071789, 40.796426 ], "pop": 25964, "state": "NY" }, { "_id": "11742", "city": "HOLTSVILLE", "loc": [ -73.04161000000001, 40.810478 ], "pop": 10141, "state": "NY" }, { "_id": "11743", "city": "HALESITE", "loc": [ -73.41092399999999, 40.866945 ], "pop": 41511, "state": "NY" }, { "_id": "11746", "city": "DIX HILLS", "loc": [ -73.375472, 40.821754 ], "pop": 62162, "state": "NY" }, { "_id": "11747", "city": "MELVILLE", "loc": [ -73.402963, 40.794606 ], "pop": 14534, "state": "NY" }, { "_id": "11751", "city": "ISLIP", "loc": [ -73.22211, 40.734821 ], "pop": 21721, "state": "NY" }, { "_id": "11752", "city": "ISLIP TERRACE", "loc": [ -73.18274599999999, 40.75482 ], "pop": 9514, "state": "NY" }, { "_id": "11753", "city": "JERICHO", "loc": [ -73.533067, 40.788118 ], "pop": 9837, "state": "NY" }, { "_id": "11754", "city": "KINGS PARK", "loc": [ -73.243763, 40.886121 ], "pop": 19036, "state": "NY" }, { "_id": "11755", "city": "LAKE GROVE", "loc": [ -73.11675099999999, 40.856681 ], "pop": 8245, "state": "NY" }, { "_id": "11756", "city": "LEVITTOWN", "loc": [ -73.516578, 40.725428 ], "pop": 44967, "state": "NY" }, { "_id": "11757", "city": "LINDENHURST", "loc": [ -73.374493, 40.688373 ], "pop": 44726, "state": "NY" }, { "_id": "11758", "city": "NORTH MASSAPEQUA", "loc": [ -73.46972700000001, 40.685738 ], "pop": 42863, "state": "NY" }, { "_id": "11762", "city": "MASSAPEQUA PARK", "loc": [ -73.444447, 40.680673 ], "pop": 31693, "state": "NY" }, { "_id": "11763", "city": "MEDFORD", "loc": [ -72.985214, 40.817416 ], "pop": 20669, "state": "NY" }, { "_id": "11764", "city": "MILLER PLACE", "loc": [ -72.991349, 40.943572 ], "pop": 9601, "state": "NY" }, { "_id": "11765", "city": "MILL NECK", "loc": [ -73.55260199999999, 40.88574 ], "pop": 877, "state": "NY" }, { "_id": "11766", "city": "MOUNT SINAI", "loc": [ -73.012732, 40.927092 ], "pop": 8759, "state": "NY" }, { "_id": "11767", "city": "NESCONSET", "loc": [ -73.1482, 40.846206 ], "pop": 9681, "state": "NY" }, { "_id": "11768", "city": "NORTHPORT", "loc": [ -73.330889, 40.905062 ], "pop": 21714, "state": "NY" }, { "_id": "11769", "city": "OAKDALE", "loc": [ -73.12969, 40.738224 ], "pop": 9366, "state": "NY" }, { "_id": "11771", "city": "OYSTER BAY", "loc": [ -73.52721200000001, 40.866012 ], "pop": 9806, "state": "NY" }, { "_id": "11772", "city": "DAVIS PARK", "loc": [ -72.998108, 40.773501 ], "pop": 40962, "state": "NY" }, { "_id": "11776", "city": "PORT JEFFERSON S", "loc": [ -73.052136, 40.911722 ], "pop": 19800, "state": "NY" }, { "_id": "11777", "city": "PORT JEFFERSON", "loc": [ -73.061093, 40.945687 ], "pop": 8512, "state": "NY" }, { "_id": "11778", "city": "ROCKY POINT", "loc": [ -72.935681, 40.949206 ], "pop": 11913, "state": "NY" }, { "_id": "11779", "city": "LAKE RONKONKOMA", "loc": [ -73.1208, 40.820763 ], "pop": 43424, "state": "NY" }, { "_id": "11780", "city": "SAINT JAMES", "loc": [ -73.159121, 40.881299 ], "pop": 14211, "state": "NY" }, { "_id": "11782", "city": "CHERRY GROVE", "loc": [ -73.082297, 40.74606 ], "pop": 15718, "state": "NY" }, { "_id": "11783", "city": "SEAFORD", "loc": [ -73.491015, 40.679513 ], "pop": 21644, "state": "NY" }, { "_id": "11784", "city": "SELDEN", "loc": [ -73.044848, 40.869883 ], "pop": 23753, "state": "NY" }, { "_id": "11786", "city": "SHOREHAM", "loc": [ -72.892685, 40.948493 ], "pop": 5114, "state": "NY" }, { "_id": "11787", "city": "SMITHTOWN", "loc": [ -73.21381599999999, 40.854186 ], "pop": 29932, "state": "NY" }, { "_id": "11788", "city": "HAUPPAUGE", "loc": [ -73.195762, 40.823069 ], "pop": 19713, "state": "NY" }, { "_id": "11789", "city": "SOUND BEACH", "loc": [ -72.974172, 40.956707 ], "pop": 6497, "state": "NY" }, { "_id": "11790", "city": "STONY BROOK", "loc": [ -73.125085, 40.900257 ], "pop": 13767, "state": "NY" }, { "_id": "11791", "city": "SYOSSET", "loc": [ -73.502397, 40.81462 ], "pop": 24949, "state": "NY" }, { "_id": "11792", "city": "WADING RIVER", "loc": [ -72.834774, 40.952049 ], "pop": 6186, "state": "NY" }, { "_id": "11793", "city": "WANTAGH", "loc": [ -73.51033, 40.684998 ], "pop": 31972, "state": "NY" }, { "_id": "11794", "city": "SUNY STONY BROOK", "loc": [ -73.125456, 40.914127 ], "pop": 5504, "state": "NY" }, { "_id": "11795", "city": "WEST ISLIP", "loc": [ -73.30072, 40.711734 ], "pop": 39344, "state": "NY" }, { "_id": "11796", "city": "WEST SAYVILLE", "loc": [ -73.100019, 40.731971 ], "pop": 3575, "state": "NY" }, { "_id": "11797", "city": "WOODBURY", "loc": [ -73.47161199999999, 40.815441 ], "pop": 8104, "state": "NY" }, { "_id": "11798", "city": "WHEATLEY HEIGHTS", "loc": [ -73.36596, 40.753258 ], "pop": 13312, "state": "NY" }, { "_id": "11801", "city": "HICKSVILLE", "loc": [ -73.52297, 40.762305 ], "pop": 38307, "state": "NY" }, { "_id": "11803", "city": "PLAINVIEW", "loc": [ -73.481638, 40.778099 ], "pop": 28207, "state": "NY" }, { "_id": "11804", "city": "OLD BETHPAGE", "loc": [ -73.457481, 40.764991 ], "pop": 5233, "state": "NY" }, { "_id": "11901", "city": "RIVERHEAD", "loc": [ -72.651966, 40.926202 ], "pop": 20705, "state": "NY" }, { "_id": "11933", "city": "CALVERTON", "loc": [ -72.74229, 40.929662 ], "pop": 3954, "state": "NY" }, { "_id": "11934", "city": "CENTER MORICHES", "loc": [ -72.797048, 40.799657 ], "pop": 6265, "state": "NY" }, { "_id": "11935", "city": "CUTCHOGUE", "loc": [ -72.480255, 41.013918 ], "pop": 3678, "state": "NY" }, { "_id": "11937", "city": "EAST HAMPTON", "loc": [ -72.17895799999999, 40.992964 ], "pop": 12205, "state": "NY" }, { "_id": "11939", "city": "EAST MARION", "loc": [ -72.34186, 41.126425 ], "pop": 717, "state": "NY" }, { "_id": "11940", "city": "EAST MORICHES", "loc": [ -72.753778, 40.808975 ], "pop": 3822, "state": "NY" }, { "_id": "11941", "city": "EASTPORT", "loc": [ -72.705388, 40.809947 ], "pop": 1331, "state": "NY" }, { "_id": "11942", "city": "EAST QUOGUE", "loc": [ -72.58129700000001, 40.84277 ], "pop": 4181, "state": "NY" }, { "_id": "11944", "city": "GREENPORT", "loc": [ -72.36741499999999, 41.103905 ], "pop": 3657, "state": "NY" }, { "_id": "11946", "city": "HAMPTON BAYS", "loc": [ -72.52020899999999, 40.872596 ], "pop": 9586, "state": "NY" }, { "_id": "11948", "city": "LAUREL", "loc": [ -72.55404, 40.9674 ], "pop": 954, "state": "NY" }, { "_id": "11949", "city": "MANORVILLE", "loc": [ -72.800208, 40.842102 ], "pop": 9660, "state": "NY" }, { "_id": "11950", "city": "MASTIC", "loc": [ -72.85660799999999, 40.80644 ], "pop": 20374, "state": "NY" }, { "_id": "11951", "city": "MASTIC BEACH", "loc": [ -72.853701, 40.765653 ], "pop": 18812, "state": "NY" }, { "_id": "11952", "city": "MATTITUCK", "loc": [ -72.53629599999999, 40.994336 ], "pop": 3896, "state": "NY" }, { "_id": "11953", "city": "MIDDLE ISLAND", "loc": [ -72.952539, 40.878212 ], "pop": 9411, "state": "NY" }, { "_id": "11954", "city": "MONTAUK", "loc": [ -71.943963, 41.045853 ], "pop": 3008, "state": "NY" }, { "_id": "11955", "city": "MORICHES", "loc": [ -72.822918, 40.809502 ], "pop": 2045, "state": "NY" }, { "_id": "11957", "city": "ORIENT", "loc": [ -72.28789399999999, 41.143741 ], "pop": 817, "state": "NY" }, { "_id": "11961", "city": "RIDGE", "loc": [ -72.88813500000001, 40.901846 ], "pop": 12817, "state": "NY" }, { "_id": "11963", "city": "SAG HARBOR", "loc": [ -72.30674, 40.981996 ], "pop": 7384, "state": "NY" }, { "_id": "11964", "city": "SHELTER ISLAND", "loc": [ -72.33661600000001, 41.064046 ], "pop": 1144, "state": "NY" }, { "_id": "11965", "city": "SHELTER ISLAND H", "loc": [ -72.34808200000001, 41.074205 ], "pop": 1119, "state": "NY" }, { "_id": "11967", "city": "SHIRLEY", "loc": [ -72.876043, 40.743932 ], "pop": 97, "state": "NY" }, { "_id": "11968", "city": "SOUTHAMPTON", "loc": [ -72.41027099999999, 40.904341 ], "pop": 10810, "state": "NY" }, { "_id": "11971", "city": "SOUTHOLD", "loc": [ -72.429039, 41.05555 ], "pop": 5788, "state": "NY" }, { "_id": "11976", "city": "WATER MILL", "loc": [ -72.349069, 40.920929 ], "pop": 1410, "state": "NY" }, { "_id": "11977", "city": "WESTHAMPTON", "loc": [ -72.66993100000001, 40.818031 ], "pop": 1306, "state": "NY" }, { "_id": "11978", "city": "WESTHAMPTON BEAC", "loc": [ -72.644757, 40.822783 ], "pop": 2863, "state": "NY" }, { "_id": "11980", "city": "YAPHANK", "loc": [ -72.917435, 40.837037 ], "pop": 5366, "state": "NY" }, { "_id": "12007", "city": "ALCOVE", "loc": [ -74.034721, 42.453818 ], "pop": 233, "state": "NY" }, { "_id": "12008", "city": "ALPLAUS", "loc": [ -73.900188, 42.857329 ], "pop": 340, "state": "NY" }, { "_id": "12009", "city": "ALTAMONT", "loc": [ -74.019339, 42.70627 ], "pop": 5683, "state": "NY" }, { "_id": "12010", "city": "WEST CHARLTON", "loc": [ -74.18393, 42.948822 ], "pop": 32028, "state": "NY" }, { "_id": "12015", "city": "ATHENS", "loc": [ -73.815175, 42.2736 ], "pop": 2538, "state": "NY" }, { "_id": "12017", "city": "AUSTERLITZ", "loc": [ -73.454965, 42.322272 ], "pop": 355, "state": "NY" }, { "_id": "12018", "city": "AVERILL PARK", "loc": [ -73.550437, 42.636511 ], "pop": 6528, "state": "NY" }, { "_id": "12019", "city": "BALLSTON LAKE", "loc": [ -73.855171, 42.919176 ], "pop": 16331, "state": "NY" }, { "_id": "12020", "city": "BALLSTON SPA", "loc": [ -73.84858, 43.004956 ], "pop": 25126, "state": "NY" }, { "_id": "12022", "city": "BERLIN", "loc": [ -73.370186, 42.691893 ], "pop": 275, "state": "NY" }, { "_id": "12023", "city": "BERNE", "loc": [ -74.14657699999999, 42.610848 ], "pop": 2293, "state": "NY" }, { "_id": "12024", "city": "BRAINARD", "loc": [ -73.61587400000001, 42.405101 ], "pop": 285, "state": "NY" }, { "_id": "12025", "city": "BROADALBIN", "loc": [ -74.168367, 43.072687 ], "pop": 4055, "state": "NY" }, { "_id": "12027", "city": "BURNT HILLS", "loc": [ -73.89604300000001, 42.932902 ], "pop": 945, "state": "NY" }, { "_id": "12028", "city": "BUSKIRK", "loc": [ -73.44967699999999, 42.960134 ], "pop": 1272, "state": "NY" }, { "_id": "12029", "city": "CANAAN", "loc": [ -73.41588900000001, 42.413168 ], "pop": 1298, "state": "NY" }, { "_id": "12031", "city": "CARLISLE", "loc": [ -74.456284, 42.749754 ], "pop": 420, "state": "NY" }, { "_id": "12032", "city": "CAROGA LAKE", "loc": [ -74.516915, 43.192159 ], "pop": 545, "state": "NY" }, { "_id": "12033", "city": "CASTLETON ON HUD", "loc": [ -73.709529, 42.538243 ], "pop": 7029, "state": "NY" }, { "_id": "12035", "city": "CENTRAL BRIDGE", "loc": [ -74.345107, 42.73696 ], "pop": 315, "state": "NY" }, { "_id": "12036", "city": "CHARLOTTEVILLE", "loc": [ -74.68186300000001, 42.533034 ], "pop": 166, "state": "NY" }, { "_id": "12037", "city": "CHATHAM", "loc": [ -73.587281, 42.349578 ], "pop": 4616, "state": "NY" }, { "_id": "12041", "city": "CLARKSVILLE", "loc": [ -73.96877499999999, 42.566974 ], "pop": 388, "state": "NY" }, { "_id": "12042", "city": "CLIMAX", "loc": [ -73.862459, 42.370808 ], "pop": 316, "state": "NY" }, { "_id": "12043", "city": "COBLESKILL", "loc": [ -74.493866, 42.684047 ], "pop": 7419, "state": "NY" }, { "_id": "12046", "city": "COEYMANS HOLLOW", "loc": [ -73.920588, 42.486537 ], "pop": 979, "state": "NY" }, { "_id": "12047", "city": "COHOES", "loc": [ -73.712356, 42.775362 ], "pop": 19033, "state": "NY" }, { "_id": "12051", "city": "COXSACKIE", "loc": [ -73.819881, 42.350142 ], "pop": 5615, "state": "NY" }, { "_id": "12052", "city": "CROPSEYVILLE", "loc": [ -73.471869, 42.766718 ], "pop": 1339, "state": "NY" }, { "_id": "12053", "city": "DELANSON", "loc": [ -74.18680999999999, 42.74802 ], "pop": 4476, "state": "NY" }, { "_id": "12054", "city": "DELMAR", "loc": [ -73.837329, 42.61579 ], "pop": 15502, "state": "NY" }, { "_id": "12055", "city": "DORMANSVILLE", "loc": [ -74.198966, 42.437859 ], "pop": 465, "state": "NY" }, { "_id": "12056", "city": "DUANESBURG", "loc": [ -74.083911, 42.770839 ], "pop": 2675, "state": "NY" }, { "_id": "12057", "city": "WHITE CREEK", "loc": [ -73.351974, 42.961527 ], "pop": 2252, "state": "NY" }, { "_id": "12058", "city": "EARLTON", "loc": [ -73.906222, 42.352689 ], "pop": 1015, "state": "NY" }, { "_id": "12059", "city": "EAST BERNE", "loc": [ -74.055488, 42.61913 ], "pop": 2224, "state": "NY" }, { "_id": "12060", "city": "EAST CHATHAM", "loc": [ -73.49026000000001, 42.433028 ], "pop": 1695, "state": "NY" }, { "_id": "12061", "city": "EAST GREENBUSH", "loc": [ -73.682644, 42.595096 ], "pop": 7282, "state": "NY" }, { "_id": "12062", "city": "EAST NASSAU", "loc": [ -73.498407, 42.535215 ], "pop": 2088, "state": "NY" }, { "_id": "12064", "city": "EAST WORCESTER", "loc": [ -74.676348, 42.621423 ], "pop": 322, "state": "NY" }, { "_id": "12065", "city": "CLIFTON PARK", "loc": [ -73.785094, 42.849865 ], "pop": 31352, "state": "NY" }, { "_id": "12066", "city": "ESPERANCE", "loc": [ -74.288246, 42.771677 ], "pop": 1254, "state": "NY" }, { "_id": "12067", "city": "FEURA BUSH", "loc": [ -73.923743, 42.554998 ], "pop": 1142, "state": "NY" }, { "_id": "12068", "city": "FONDA", "loc": [ -74.402129, 42.957078 ], "pop": 2307, "state": "NY" }, { "_id": "12070", "city": "FORT JOHNSON", "loc": [ -74.248436, 42.976535 ], "pop": 1811, "state": "NY" }, { "_id": "12071", "city": "FULTONHAM", "loc": [ -74.38759, 42.585914 ], "pop": 379, "state": "NY" }, { "_id": "12072", "city": "FULTONVILLE", "loc": [ -74.359765, 42.903601 ], "pop": 2356, "state": "NY" }, { "_id": "12074", "city": "GALWAY", "loc": [ -74.029043, 43.021693 ], "pop": 3988, "state": "NY" }, { "_id": "12075", "city": "GHENT", "loc": [ -73.64864, 42.303637 ], "pop": 2381, "state": "NY" }, { "_id": "12076", "city": "GILBOA", "loc": [ -74.40027499999999, 42.410835 ], "pop": 1400, "state": "NY" }, { "_id": "12077", "city": "GLENMONT", "loc": [ -73.795884, 42.597147 ], "pop": 4298, "state": "NY" }, { "_id": "12078", "city": "GLOVERSVILLE", "loc": [ -74.337526, 43.061603 ], "pop": 25292, "state": "NY" }, { "_id": "12083", "city": "GREENVILLE", "loc": [ -74.022222, 42.411342 ], "pop": 3645, "state": "NY" }, { "_id": "12084", "city": "GUILDERLAND", "loc": [ -73.897454, 42.697273 ], "pop": 4112, "state": "NY" }, { "_id": "12086", "city": "HAGAMAN", "loc": [ -74.166764, 42.959715 ], "pop": 114, "state": "NY" }, { "_id": "12087", "city": "HANNACROIX", "loc": [ -73.86802900000001, 42.428533 ], "pop": 1665, "state": "NY" }, { "_id": "12090", "city": "HOOSICK FALLS", "loc": [ -73.35810499999999, 42.893712 ], "pop": 5910, "state": "NY" }, { "_id": "12092", "city": "HOWES CAVE", "loc": [ -74.364825, 42.704526 ], "pop": 2351, "state": "NY" }, { "_id": "12093", "city": "JEFFERSON", "loc": [ -74.611744, 42.499869 ], "pop": 1353, "state": "NY" }, { "_id": "12094", "city": "JOHNSONVILLE", "loc": [ -73.49889899999999, 42.876875 ], "pop": 2010, "state": "NY" }, { "_id": "12095", "city": "JOHNSTOWN", "loc": [ -74.37148999999999, 43.006923 ], "pop": 13170, "state": "NY" }, { "_id": "12106", "city": "KINDERHOOK", "loc": [ -73.718259, 42.376675 ], "pop": 2795, "state": "NY" }, { "_id": "12108", "city": "LAKE PLEASANT", "loc": [ -74.422563, 43.472543 ], "pop": 487, "state": "NY" }, { "_id": "12110", "city": "LATHAM", "loc": [ -73.762985, 42.74616 ], "pop": 20091, "state": "NY" }, { "_id": "12113", "city": "LAWYERSVILLE", "loc": [ -74.506969, 42.692682 ], "pop": 91, "state": "NY" }, { "_id": "12115", "city": "MALDEN BRIDGE", "loc": [ -73.587958, 42.460201 ], "pop": 56, "state": "NY" }, { "_id": "12116", "city": "MARYLAND", "loc": [ -74.90303299999999, 42.537075 ], "pop": 871, "state": "NY" }, { "_id": "12117", "city": "MAYFIELD", "loc": [ -74.24439700000001, 43.141133 ], "pop": 3046, "state": "NY" }, { "_id": "12118", "city": "MECHANICVILLE", "loc": [ -73.67317300000001, 42.967613 ], "pop": 5890, "state": "NY" }, { "_id": "12120", "city": "MEDUSA", "loc": [ -74.131524, 42.451504 ], "pop": 617, "state": "NY" }, { "_id": "12121", "city": "MELROSE", "loc": [ -73.60766700000001, 42.841163 ], "pop": 1968, "state": "NY" }, { "_id": "12122", "city": "MIDDLEBURGH", "loc": [ -74.329168, 42.563734 ], "pop": 4005, "state": "NY" }, { "_id": "12123", "city": "NASSAU", "loc": [ -73.61175299999999, 42.527141 ], "pop": 5560, "state": "NY" }, { "_id": "12125", "city": "NEW LEBANON", "loc": [ -73.377295, 42.475865 ], "pop": 557, "state": "NY" }, { "_id": "12130", "city": "NIVERVILLE", "loc": [ -73.485614, 42.927575 ], "pop": 300, "state": "NY" }, { "_id": "12131", "city": "NORTH BLENHEIM", "loc": [ -74.428174, 42.489938 ], "pop": 50, "state": "NY" }, { "_id": "12134", "city": "EDINBURG", "loc": [ -74.168361, 43.237126 ], "pop": 3216, "state": "NY" }, { "_id": "12135", "city": "NORTON HILL", "loc": [ -74.078945, 42.420014 ], "pop": 163, "state": "NY" }, { "_id": "12136", "city": "OLD CHATHAM", "loc": [ -73.55446999999999, 42.435692 ], "pop": 1037, "state": "NY" }, { "_id": "12137", "city": "PATTERSONVILLE", "loc": [ -74.123126, 42.84995 ], "pop": 1423, "state": "NY" }, { "_id": "12138", "city": "TACONIC LAKE", "loc": [ -73.371033, 42.736367 ], "pop": 3891, "state": "NY" }, { "_id": "12139", "city": "PISECO", "loc": [ -74.52628199999999, 43.448125 ], "pop": 223, "state": "NY" }, { "_id": "12140", "city": "POESTENKILL", "loc": [ -73.588846, 42.679548 ], "pop": 1904, "state": "NY" }, { "_id": "12143", "city": "RAVENA", "loc": [ -73.821991, 42.475371 ], "pop": 5976, "state": "NY" }, { "_id": "12144", "city": "RENSSELAER", "loc": [ -73.721895, 42.635855 ], "pop": 19146, "state": "NY" }, { "_id": "12147", "city": "RENSSELAERVILLE", "loc": [ -74.147431, 42.513288 ], "pop": 547, "state": "NY" }, { "_id": "12148", "city": "REXFORD", "loc": [ -73.87009999999999, 42.852411 ], "pop": 2306, "state": "NY" }, { "_id": "12149", "city": "RICHMONDVILLE", "loc": [ -74.571001, 42.642445 ], "pop": 1502, "state": "NY" }, { "_id": "12150", "city": "ROTTERDAM JUNCTI", "loc": [ -74.046857, 42.87296 ], "pop": 1128, "state": "NY" }, { "_id": "12151", "city": "ROUND LAKE", "loc": [ -73.770127, 42.925994 ], "pop": 451, "state": "NY" }, { "_id": "12153", "city": "SAND LAKE", "loc": [ -73.498949, 42.637912 ], "pop": 851, "state": "NY" }, { "_id": "12154", "city": "SCHAGHTICOKE", "loc": [ -73.61542799999999, 42.914356 ], "pop": 3035, "state": "NY" }, { "_id": "12155", "city": "SCHENEVUS", "loc": [ -74.814863, 42.59004 ], "pop": 1895, "state": "NY" }, { "_id": "12156", "city": "SCHODACK LANDING", "loc": [ -73.747996, 42.481644 ], "pop": 902, "state": "NY" }, { "_id": "12157", "city": "SCHOHARIE", "loc": [ -74.30473000000001, 42.661503 ], "pop": 4095, "state": "NY" }, { "_id": "12158", "city": "SELKIRK", "loc": [ -73.81286299999999, 42.54861 ], "pop": 6062, "state": "NY" }, { "_id": "12159", "city": "SLINGERLANDS", "loc": [ -73.871065, 42.648461 ], "pop": 5431, "state": "NY" }, { "_id": "12160", "city": "SLOANSVILLE", "loc": [ -74.36417400000001, 42.759852 ], "pop": 1152, "state": "NY" }, { "_id": "12164", "city": "SPECULATOR", "loc": [ -74.36667, 43.504159 ], "pop": 400, "state": "NY" }, { "_id": "12165", "city": "SPENCERTOWN", "loc": [ -73.500754, 42.30908 ], "pop": 127, "state": "NY" }, { "_id": "12166", "city": "SPRAKERS", "loc": [ -74.453558, 42.848446 ], "pop": 1608, "state": "NY" }, { "_id": "12167", "city": "STAMFORD", "loc": [ -74.609831, 42.417409 ], "pop": 2734, "state": "NY" }, { "_id": "12168", "city": "STEPHENTOWN", "loc": [ -73.42244700000001, 42.523323 ], "pop": 1036, "state": "NY" }, { "_id": "12169", "city": "STEPHENTOWN", "loc": [ -73.37496400000001, 42.556224 ], "pop": 1566, "state": "NY" }, { "_id": "12170", "city": "STILLWATER", "loc": [ -73.697163, 42.905652 ], "pop": 9226, "state": "NY" }, { "_id": "12173", "city": "STUYVESANT", "loc": [ -73.761329, 42.359572 ], "pop": 1806, "state": "NY" }, { "_id": "12175", "city": "SUMMIT", "loc": [ -74.574952, 42.587122 ], "pop": 1247, "state": "NY" }, { "_id": "12176", "city": "SURPRISE", "loc": [ -73.95154100000001, 42.361171 ], "pop": 162, "state": "NY" }, { "_id": "12180", "city": "TROY", "loc": [ -73.668263, 42.728748 ], "pop": 56849, "state": "NY" }, { "_id": "12182", "city": "TROY", "loc": [ -73.664806, 42.782921 ], "pop": 14688, "state": "NY" }, { "_id": "12183", "city": "GREEN ISLAND", "loc": [ -73.693707, 42.743812 ], "pop": 2432, "state": "NY" }, { "_id": "12184", "city": "VALATIE", "loc": [ -73.668322, 42.432051 ], "pop": 8072, "state": "NY" }, { "_id": "12185", "city": "VALLEY FALLS", "loc": [ -73.543674, 42.885458 ], "pop": 1835, "state": "NY" }, { "_id": "12186", "city": "VOORHEESVILLE", "loc": [ -73.944773, 42.643108 ], "pop": 7069, "state": "NY" }, { "_id": "12187", "city": "WARNERVILLE", "loc": [ -74.48704600000001, 42.638826 ], "pop": 782, "state": "NY" }, { "_id": "12188", "city": "WATERFORD", "loc": [ -73.69948100000001, 42.809957 ], "pop": 11576, "state": "NY" }, { "_id": "12189", "city": "WATERVLIET", "loc": [ -73.71234200000001, 42.729843 ], "pop": 16509, "state": "NY" }, { "_id": "12190", "city": "WELLS", "loc": [ -74.288583, 43.401219 ], "pop": 706, "state": "NY" }, { "_id": "12192", "city": "WEST COXSACKIE", "loc": [ -73.817033, 42.415055 ], "pop": 1982, "state": "NY" }, { "_id": "12193", "city": "WESTERLO", "loc": [ -74.039383, 42.515621 ], "pop": 1880, "state": "NY" }, { "_id": "12194", "city": "WEST FULTON", "loc": [ -74.463105, 42.550615 ], "pop": 72, "state": "NY" }, { "_id": "12196", "city": "WEST SAND LAKE", "loc": [ -73.610896, 42.637969 ], "pop": 2511, "state": "NY" }, { "_id": "12197", "city": "WORCESTER", "loc": [ -74.72992000000001, 42.604889 ], "pop": 2239, "state": "NY" }, { "_id": "12198", "city": "WYNANTSKILL", "loc": [ -73.63826, 42.687785 ], "pop": 6192, "state": "NY" }, { "_id": "12202", "city": "ALBANY", "loc": [ -73.764071, 42.641314 ], "pop": 11097, "state": "NY" }, { "_id": "12203", "city": "MC KOWNVILLE", "loc": [ -73.821988, 42.676757 ], "pop": 33356, "state": "NY" }, { "_id": "12204", "city": "ALBANY", "loc": [ -73.735364, 42.684667 ], "pop": 6927, "state": "NY" }, { "_id": "12205", "city": "ROESSLEVILLE", "loc": [ -73.82017399999999, 42.713116 ], "pop": 26008, "state": "NY" }, { "_id": "12206", "city": "ALBANY", "loc": [ -73.774406, 42.668326 ], "pop": 17230, "state": "NY" }, { "_id": "12207", "city": "ALBANY", "loc": [ -73.75232699999999, 42.658133 ], "pop": 2709, "state": "NY" }, { "_id": "12208", "city": "ALBANY", "loc": [ -73.796357, 42.655989 ], "pop": 22041, "state": "NY" }, { "_id": "12209", "city": "ALBANY", "loc": [ -73.78538500000001, 42.641665 ], "pop": 10008, "state": "NY" }, { "_id": "12210", "city": "ALBANY", "loc": [ -73.76052, 42.65677 ], "pop": 9374, "state": "NY" }, { "_id": "12211", "city": "LOUDONVILLE", "loc": [ -73.769982, 42.704693 ], "pop": 12283, "state": "NY" }, { "_id": "12302", "city": "MAYFAIR", "loc": [ -73.955051, 42.858839 ], "pop": 27516, "state": "NY" }, { "_id": "12303", "city": "ROTTERDAM", "loc": [ -73.938776, 42.769645 ], "pop": 28448, "state": "NY" }, { "_id": "12304", "city": "SCHENECTADY", "loc": [ -73.909432, 42.784083 ], "pop": 20431, "state": "NY" }, { "_id": "12305", "city": "SCHENECTADY", "loc": [ -73.939786, 42.816131 ], "pop": 6253, "state": "NY" }, { "_id": "12306", "city": "SCHENECTADY", "loc": [ -73.98087599999999, 42.790384 ], "pop": 23182, "state": "NY" }, { "_id": "12307", "city": "SCHENECTADY", "loc": [ -73.93634900000001, 42.804653 ], "pop": 8534, "state": "NY" }, { "_id": "12308", "city": "SCHENECTADY", "loc": [ -73.920591, 42.817928 ], "pop": 14055, "state": "NY" }, { "_id": "12309", "city": "NISKAYUNA", "loc": [ -73.87826800000001, 42.796168 ], "pop": 27928, "state": "NY" }, { "_id": "12401", "city": "EDDYVILLE", "loc": [ -74.02357499999999, 41.930126 ], "pop": 32883, "state": "NY" }, { "_id": "12404", "city": "ACCORD", "loc": [ -74.235336, 41.808308 ], "pop": 2695, "state": "NY" }, { "_id": "12405", "city": "ACRA", "loc": [ -74.085723, 42.330367 ], "pop": 525, "state": "NY" }, { "_id": "12406", "city": "ARKVILLE", "loc": [ -74.554453, 42.082262 ], "pop": 141, "state": "NY" }, { "_id": "12407", "city": "ASHLAND", "loc": [ -74.307925, 42.237174 ], "pop": 28, "state": "NY" }, { "_id": "12409", "city": "SHADY", "loc": [ -74.17129799999999, 42.041991 ], "pop": 960, "state": "NY" }, { "_id": "12410", "city": "OLIVEREA", "loc": [ -74.44665500000001, 42.143884 ], "pop": 69, "state": "NY" }, { "_id": "12411", "city": "BLOOMINGTON", "loc": [ -74.066889, 41.856165 ], "pop": 148, "state": "NY" }, { "_id": "12412", "city": "BOICEVILLE", "loc": [ -74.26580800000001, 42.004761 ], "pop": 556, "state": "NY" }, { "_id": "12413", "city": "CAIRO", "loc": [ -74.01154, 42.30965 ], "pop": 3057, "state": "NY" }, { "_id": "12414", "city": "CATSKILL", "loc": [ -73.89853599999999, 42.227598 ], "pop": 12128, "state": "NY" }, { "_id": "12416", "city": "CHICHESTER", "loc": [ -74.281565, 42.087965 ], "pop": 642, "state": "NY" }, { "_id": "12418", "city": "CORNWALLVILLE", "loc": [ -74.16309200000001, 42.362874 ], "pop": 380, "state": "NY" }, { "_id": "12419", "city": "COTTEKILL", "loc": [ -74.103774, 41.846706 ], "pop": 399, "state": "NY" }, { "_id": "12421", "city": "DENVER", "loc": [ -74.540654, 42.252204 ], "pop": 62, "state": "NY" }, { "_id": "12422", "city": "DURHAM", "loc": [ -74.184926, 42.402037 ], "pop": 216, "state": "NY" }, { "_id": "12423", "city": "EAST DURHAM", "loc": [ -74.11169, 42.385978 ], "pop": 1097, "state": "NY" }, { "_id": "12424", "city": "EAST JEWETT", "loc": [ -74.207981, 42.280567 ], "pop": 241, "state": "NY" }, { "_id": "12427", "city": "ELKA PARK", "loc": [ -74.124539, 42.164309 ], "pop": 389, "state": "NY" }, { "_id": "12428", "city": "ELLENVILLE", "loc": [ -74.414125, 41.721805 ], "pop": 6902, "state": "NY" }, { "_id": "12430", "city": "HALCOTT CENTER", "loc": [ -74.531908, 42.178765 ], "pop": 1151, "state": "NY" }, { "_id": "12431", "city": "FREEHOLD", "loc": [ -74.06226599999999, 42.3815 ], "pop": 255, "state": "NY" }, { "_id": "12433", "city": "GLENFORD", "loc": [ -74.153154, 42.005342 ], "pop": 354, "state": "NY" }, { "_id": "12434", "city": "GRAND GORGE", "loc": [ -74.531173, 42.387358 ], "pop": 13, "state": "NY" }, { "_id": "12435", "city": "GREENFIELD PARK", "loc": [ -74.52007399999999, 41.728133 ], "pop": 241, "state": "NY" }, { "_id": "12439", "city": "EAST WINDHAM", "loc": [ -74.21306300000001, 42.259032 ], "pop": 57, "state": "NY" }, { "_id": "12440", "city": "HIGH FALLS", "loc": [ -74.131122, 41.816749 ], "pop": 2168, "state": "NY" }, { "_id": "12442", "city": "HUNTER", "loc": [ -74.20375300000001, 42.237316 ], "pop": 616, "state": "NY" }, { "_id": "12443", "city": "HURLEY", "loc": [ -74.06873, 41.932743 ], "pop": 1229, "state": "NY" }, { "_id": "12444", "city": "JEWETT", "loc": [ -74.279274, 42.269383 ], "pop": 231, "state": "NY" }, { "_id": "12446", "city": "KERHONKSON", "loc": [ -74.30345699999999, 41.793866 ], "pop": 4220, "state": "NY" }, { "_id": "12448", "city": "LAKE HILL", "loc": [ -74.212338, 42.073271 ], "pop": 73, "state": "NY" }, { "_id": "12449", "city": "LAKE KATRINE", "loc": [ -73.992379, 41.991787 ], "pop": 3763, "state": "NY" }, { "_id": "12450", "city": "LANESVILLE", "loc": [ -74.19714999999999, 42.189149 ], "pop": 1131, "state": "NY" }, { "_id": "12451", "city": "LEEDS", "loc": [ -73.94572599999999, 42.304506 ], "pop": 779, "state": "NY" }, { "_id": "12454", "city": "MAPLECREST", "loc": [ -74.165522, 42.299485 ], "pop": 342, "state": "NY" }, { "_id": "12455", "city": "KELLY CORNERS", "loc": [ -74.648853, 42.163702 ], "pop": 2756, "state": "NY" }, { "_id": "12456", "city": "MOUNT MARION", "loc": [ -74.00021099999999, 42.035704 ], "pop": 753, "state": "NY" }, { "_id": "12457", "city": "MOUNT TREMPER", "loc": [ -74.248481, 42.043545 ], "pop": 941, "state": "NY" }, { "_id": "12458", "city": "NAPANOCH", "loc": [ -74.380354, 41.758965 ], "pop": 3502, "state": "NY" }, { "_id": "12460", "city": "OAK HILL", "loc": [ -74.152832, 42.406902 ], "pop": 294, "state": "NY" }, { "_id": "12461", "city": "KRUMVILLE", "loc": [ -74.246954, 41.895906 ], "pop": 1423, "state": "NY" }, { "_id": "12463", "city": "PALENVILLE", "loc": [ -74.01667399999999, 42.17294 ], "pop": 1195, "state": "NY" }, { "_id": "12464", "city": "PHOENICIA", "loc": [ -74.33932799999999, 42.054426 ], "pop": 966, "state": "NY" }, { "_id": "12465", "city": "PINE HILL", "loc": [ -74.487562, 42.133974 ], "pop": 392, "state": "NY" }, { "_id": "12466", "city": "PORT EWEN", "loc": [ -73.987161, 41.913113 ], "pop": 7283, "state": "NY" }, { "_id": "12468", "city": "PRATTSVILLE", "loc": [ -74.38950199999999, 42.297904 ], "pop": 1669, "state": "NY" }, { "_id": "12469", "city": "PRESTON HOLLOW", "loc": [ -74.24199, 42.456348 ], "pop": 421, "state": "NY" }, { "_id": "12470", "city": "PURLING", "loc": [ -74.01138, 42.275497 ], "pop": 516, "state": "NY" }, { "_id": "12472", "city": "ROSENDALE", "loc": [ -74.072999, 41.840248 ], "pop": 2939, "state": "NY" }, { "_id": "12473", "city": "ROUND TOP", "loc": [ -74.052279, 42.267782 ], "pop": 454, "state": "NY" }, { "_id": "12474", "city": "ROXBURY", "loc": [ -74.540519, 42.311688 ], "pop": 2178, "state": "NY" }, { "_id": "12477", "city": "SAUGERTIES", "loc": [ -73.97968400000001, 42.07376 ], "pop": 18932, "state": "NY" }, { "_id": "12480", "city": "SHANDAKEN", "loc": [ -74.40908399999999, 42.108353 ], "pop": 593, "state": "NY" }, { "_id": "12481", "city": "SHOKAN", "loc": [ -74.21194300000001, 41.976678 ], "pop": 1494, "state": "NY" }, { "_id": "12482", "city": "SOUTH CAIRO", "loc": [ -73.963982, 42.27338 ], "pop": 360, "state": "NY" }, { "_id": "12484", "city": "STONE RIDGE", "loc": [ -74.169748, 41.861562 ], "pop": 2389, "state": "NY" }, { "_id": "12485", "city": "TANNERSVILLE", "loc": [ -74.10144099999999, 42.203179 ], "pop": 492, "state": "NY" }, { "_id": "12486", "city": "TILLSON", "loc": [ -74.072219, 41.816279 ], "pop": 377, "state": "NY" }, { "_id": "12487", "city": "ULSTER PARK", "loc": [ -73.994843, 41.865109 ], "pop": 3625, "state": "NY" }, { "_id": "12491", "city": "WEST HURLEY", "loc": [ -74.11523200000001, 41.990816 ], "pop": 2365, "state": "NY" }, { "_id": "12492", "city": "WEST KILL", "loc": [ -74.361994, 42.204584 ], "pop": 413, "state": "NY" }, { "_id": "12494", "city": "WEST SHOKAN", "loc": [ -74.285117, 41.955478 ], "pop": 809, "state": "NY" }, { "_id": "12495", "city": "WILLOW", "loc": [ -74.20253700000001, 42.092318 ], "pop": 145, "state": "NY" }, { "_id": "12496", "city": "WINDHAM", "loc": [ -74.262017, 42.317465 ], "pop": 1559, "state": "NY" }, { "_id": "12498", "city": "WOODSTOCK", "loc": [ -74.111974, 42.034793 ], "pop": 4827, "state": "NY" }, { "_id": "12501", "city": "AMENIA", "loc": [ -73.554158, 41.844695 ], "pop": 2325, "state": "NY" }, { "_id": "12502", "city": "ANCRAM", "loc": [ -73.642368, 42.085093 ], "pop": 600, "state": "NY" }, { "_id": "12503", "city": "ANCRAMDALE", "loc": [ -73.58187, 42.038103 ], "pop": 918, "state": "NY" }, { "_id": "12507", "city": "BARRYTOWN", "loc": [ -73.92148400000001, 42.0006 ], "pop": 388, "state": "NY" }, { "_id": "12508", "city": "BEACON", "loc": [ -73.963384, 41.509681 ], "pop": 20022, "state": "NY" }, { "_id": "12513", "city": "CLAVERACK", "loc": [ -73.72284399999999, 42.2183 ], "pop": 447, "state": "NY" }, { "_id": "12514", "city": "CLINTON CORNERS", "loc": [ -73.765867, 41.869262 ], "pop": 2667, "state": "NY" }, { "_id": "12515", "city": "CLINTONDALE", "loc": [ -74.055713, 41.674939 ], "pop": 1171, "state": "NY" }, { "_id": "12516", "city": "COPAKE", "loc": [ -73.552588, 42.111329 ], "pop": 1511, "state": "NY" }, { "_id": "12517", "city": "COPAKE FALLS", "loc": [ -73.510773, 42.136737 ], "pop": 163, "state": "NY" }, { "_id": "12518", "city": "CORNWALL", "loc": [ -74.053877, 41.430944 ], "pop": 8120, "state": "NY" }, { "_id": "12520", "city": "CORNWALL ON HUDS", "loc": [ -74.01641100000001, 41.443031 ], "pop": 2980, "state": "NY" }, { "_id": "12521", "city": "CRARYVILLE", "loc": [ -73.657128, 42.175961 ], "pop": 1377, "state": "NY" }, { "_id": "12522", "city": "DOVER PLAINS", "loc": [ -73.587024, 41.735054 ], "pop": 4775, "state": "NY" }, { "_id": "12523", "city": "ELIZAVILLE", "loc": [ -73.781814, 42.090173 ], "pop": 2158, "state": "NY" }, { "_id": "12524", "city": "FISHKILL", "loc": [ -73.89791, 41.540352 ], "pop": 11165, "state": "NY" }, { "_id": "12525", "city": "GARDINER", "loc": [ -74.16715499999999, 41.657615 ], "pop": 3900, "state": "NY" }, { "_id": "12526", "city": "GERMANTOWN", "loc": [ -73.86245099999999, 42.1219 ], "pop": 4061, "state": "NY" }, { "_id": "12528", "city": "HIGHLAND", "loc": [ -73.992825, 41.716691 ], "pop": 11011, "state": "NY" }, { "_id": "12529", "city": "HILLSDALE", "loc": [ -73.548306, 42.186816 ], "pop": 3084, "state": "NY" }, { "_id": "12531", "city": "HOLMES", "loc": [ -73.662751, 41.532461 ], "pop": 3248, "state": "NY" }, { "_id": "12533", "city": "HOPEWELL JUNCTIO", "loc": [ -73.79758099999999, 41.576639 ], "pop": 18770, "state": "NY" }, { "_id": "12534", "city": "HUDSON", "loc": [ -73.75524799999999, 42.246978 ], "pop": 21205, "state": "NY" }, { "_id": "12538", "city": "HYDE PARK", "loc": [ -73.906347, 41.788724 ], "pop": 15184, "state": "NY" }, { "_id": "12540", "city": "LAGRANGEVILLE", "loc": [ -73.744955, 41.661471 ], "pop": 5539, "state": "NY" }, { "_id": "12542", "city": "MARLBORO", "loc": [ -73.988017, 41.605612 ], "pop": 4489, "state": "NY" }, { "_id": "12543", "city": "MAYBROOK", "loc": [ -74.216312, 41.48865 ], "pop": 2860, "state": "NY" }, { "_id": "12545", "city": "MILLBROOK", "loc": [ -73.688491, 41.780334 ], "pop": 4503, "state": "NY" }, { "_id": "12546", "city": "MILLERTON", "loc": [ -73.52870900000001, 41.953623 ], "pop": 3131, "state": "NY" }, { "_id": "12547", "city": "MILTON", "loc": [ -73.977194, 41.653487 ], "pop": 2834, "state": "NY" }, { "_id": "12548", "city": "MODENA", "loc": [ -74.103578, 41.650347 ], "pop": 810, "state": "NY" }, { "_id": "12549", "city": "MONTGOMERY", "loc": [ -74.253417, 41.53332 ], "pop": 7421, "state": "NY" }, { "_id": "12550", "city": "MIDDLE HOPE", "loc": [ -74.03598, 41.517833 ], "pop": 47939, "state": "NY" }, { "_id": "12553", "city": "NEW WINDSOR", "loc": [ -74.056596, 41.472374 ], "pop": 20576, "state": "NY" }, { "_id": "12561", "city": "MOHONK LAKE", "loc": [ -74.08387500000001, 41.743346 ], "pop": 16394, "state": "NY" }, { "_id": "12563", "city": "PATTERSON", "loc": [ -73.58149, 41.488761 ], "pop": 6107, "state": "NY" }, { "_id": "12564", "city": "PAWLING", "loc": [ -73.594847, 41.574893 ], "pop": 4511, "state": "NY" }, { "_id": "12566", "city": "PINE BUSH", "loc": [ -74.326311, 41.617758 ], "pop": 7589, "state": "NY" }, { "_id": "12567", "city": "PINE PLAINS", "loc": [ -73.66022700000001, 41.989569 ], "pop": 2771, "state": "NY" }, { "_id": "12569", "city": "PLEASANT VALLEY", "loc": [ -73.81427600000001, 41.747032 ], "pop": 7978, "state": "NY" }, { "_id": "12570", "city": "POUGHQUAG", "loc": [ -73.67832799999999, 41.61936 ], "pop": 3867, "state": "NY" }, { "_id": "12571", "city": "RED HOOK", "loc": [ -73.85457700000001, 42.006439 ], "pop": 8890, "state": "NY" }, { "_id": "12572", "city": "RHINEBECK", "loc": [ -73.88875400000001, 41.927206 ], "pop": 9458, "state": "NY" }, { "_id": "12575", "city": "ROCK TAVERN", "loc": [ -74.16588, 41.457523 ], "pop": 2202, "state": "NY" }, { "_id": "12577", "city": "SALISBURY MILLS", "loc": [ -74.12137800000001, 41.449714 ], "pop": 573, "state": "NY" }, { "_id": "12578", "city": "SALT POINT", "loc": [ -73.801329, 41.805041 ], "pop": 1521, "state": "NY" }, { "_id": "12580", "city": "STAATSBURG", "loc": [ -73.898838, 41.850193 ], "pop": 2957, "state": "NY" }, { "_id": "12581", "city": "STANFORDVILLE", "loc": [ -73.694467, 41.887726 ], "pop": 2356, "state": "NY" }, { "_id": "12582", "city": "STORMVILLE", "loc": [ -73.725548, 41.551193 ], "pop": 6735, "state": "NY" }, { "_id": "12583", "city": "TIVOLI", "loc": [ -73.902514, 42.057945 ], "pop": 1614, "state": "NY" }, { "_id": "12585", "city": "VERBANK", "loc": [ -73.71841000000001, 41.722664 ], "pop": 989, "state": "NY" }, { "_id": "12586", "city": "WALDEN", "loc": [ -74.176395, 41.559631 ], "pop": 10479, "state": "NY" }, { "_id": "12589", "city": "WALLKILL", "loc": [ -74.14385299999999, 41.615952 ], "pop": 11209, "state": "NY" }, { "_id": "12590", "city": "NEW HAMBURG", "loc": [ -73.89058799999999, 41.592199 ], "pop": 31950, "state": "NY" }, { "_id": "12592", "city": "WASSAIC", "loc": [ -73.554382, 41.775884 ], "pop": 2064, "state": "NY" }, { "_id": "12594", "city": "WINGDALE", "loc": [ -73.555621, 41.653824 ], "pop": 3716, "state": "NY" }, { "_id": "12601", "city": "SOUTH ROAD", "loc": [ -73.9218, 41.702082 ], "pop": 38212, "state": "NY" }, { "_id": "12603", "city": "ARLINGTON", "loc": [ -73.885217, 41.676775 ], "pop": 40724, "state": "NY" }, { "_id": "12701", "city": "MONTICELLO", "loc": [ -74.700748, 41.65158 ], "pop": 12122, "state": "NY" }, { "_id": "12719", "city": "BARRYVILLE", "loc": [ -74.915234, 41.491162 ], "pop": 772, "state": "NY" }, { "_id": "12720", "city": "BETHEL", "loc": [ -74.893984, 41.669326 ], "pop": 139, "state": "NY" }, { "_id": "12721", "city": "BLOOMINGBURG", "loc": [ -74.430351, 41.564427 ], "pop": 6139, "state": "NY" }, { "_id": "12723", "city": "CALLICOON", "loc": [ -75.025688, 41.7754 ], "pop": 2492, "state": "NY" }, { "_id": "12725", "city": "CLARYVILLE", "loc": [ -74.529287, 41.965666 ], "pop": 137, "state": "NY" }, { "_id": "12726", "city": "FOSTERDALE", "loc": [ -74.980687, 41.698208 ], "pop": 1120, "state": "NY" }, { "_id": "12727", "city": "COCHECTON CENTER", "loc": [ -74.977116, 41.645776 ], "pop": 131, "state": "NY" }, { "_id": "12729", "city": "CUDDEBACKVILLE", "loc": [ -74.59756400000001, 41.477601 ], "pop": 1191, "state": "NY" }, { "_id": "12732", "city": "ELDRED", "loc": [ -74.89676900000001, 41.532793 ], "pop": 899, "state": "NY" }, { "_id": "12733", "city": "FALLSBURG", "loc": [ -74.615409, 41.7273 ], "pop": 866, "state": "NY" }, { "_id": "12734", "city": "GROSSINGER", "loc": [ -74.754873, 41.730029 ], "pop": 851, "state": "NY" }, { "_id": "12736", "city": "FREMONT CENTER", "loc": [ -75.029635, 41.847134 ], "pop": 349, "state": "NY" }, { "_id": "12737", "city": "GLEN SPEY", "loc": [ -74.799493, 41.48576 ], "pop": 840, "state": "NY" }, { "_id": "12738", "city": "GLEN WILD", "loc": [ -74.58328899999999, 41.654536 ], "pop": 158, "state": "NY" }, { "_id": "12739", "city": "GODEFFROY", "loc": [ -74.605716, 41.442347 ], "pop": 615, "state": "NY" }, { "_id": "12740", "city": "GRAHAMSVILLE", "loc": [ -74.512697, 41.880659 ], "pop": 1305, "state": "NY" }, { "_id": "12741", "city": "MILESES", "loc": [ -75.09980899999999, 41.831288 ], "pop": 73, "state": "NY" }, { "_id": "12742", "city": "HARRIS", "loc": [ -74.7218, 41.714055 ], "pop": 272, "state": "NY" }, { "_id": "12743", "city": "HIGHLAND LAKE", "loc": [ -74.851615, 41.530925 ], "pop": 292, "state": "NY" }, { "_id": "12745", "city": "HORTONVILLE", "loc": [ -75.026329, 41.78568 ], "pop": 59, "state": "NY" }, { "_id": "12746", "city": "HUGUENOT", "loc": [ -74.64261, 41.437162 ], "pop": 885, "state": "NY" }, { "_id": "12747", "city": "HURLEYVILLE", "loc": [ -74.65344, 41.760882 ], "pop": 3303, "state": "NY" }, { "_id": "12748", "city": "JEFFERSONVILLE", "loc": [ -74.919574, 41.778394 ], "pop": 1698, "state": "NY" }, { "_id": "12750", "city": "KENOZA LAKE", "loc": [ -74.935384, 41.777802 ], "pop": 443, "state": "NY" }, { "_id": "12751", "city": "KIAMESHA LAKE", "loc": [ -74.67240200000001, 41.683825 ], "pop": 320, "state": "NY" }, { "_id": "12752", "city": "LAKE HUNTINGTON", "loc": [ -74.994933, 41.678158 ], "pop": 111, "state": "NY" }, { "_id": "12753", "city": "LEW BEACH", "loc": [ -74.728835, 42.015762 ], "pop": 126, "state": "NY" }, { "_id": "12754", "city": "LIBERTY", "loc": [ -74.748397, 41.79618 ], "pop": 7361, "state": "NY" }, { "_id": "12758", "city": "LIVINGSTON MANOR", "loc": [ -74.827028, 41.87779 ], "pop": 4510, "state": "NY" }, { "_id": "12759", "city": "LOCH SHELDRAKE", "loc": [ -74.661406, 41.778899 ], "pop": 466, "state": "NY" }, { "_id": "12760", "city": "LONG EDDY", "loc": [ -75.094157, 41.864359 ], "pop": 279, "state": "NY" }, { "_id": "12762", "city": "MONGAUP VALLEY", "loc": [ -74.802772, 41.681017 ], "pop": 228, "state": "NY" }, { "_id": "12763", "city": "MOUNTAIN DALE", "loc": [ -74.53576200000001, 41.691763 ], "pop": 841, "state": "NY" }, { "_id": "12764", "city": "NARROWSBURG", "loc": [ -75.010687, 41.592108 ], "pop": 1576, "state": "NY" }, { "_id": "12765", "city": "NEVERSINK", "loc": [ -74.61272599999999, 41.849205 ], "pop": 868, "state": "NY" }, { "_id": "12766", "city": "NORTH BRANCH", "loc": [ -74.982388, 41.814184 ], "pop": 409, "state": "NY" }, { "_id": "12768", "city": "PARKSVILLE", "loc": [ -74.735933, 41.851686 ], "pop": 1199, "state": "NY" }, { "_id": "12770", "city": "POND EDDY", "loc": [ -74.84102900000001, 41.451068 ], "pop": 448, "state": "NY" }, { "_id": "12771", "city": "PORT JERVIS", "loc": [ -74.66909699999999, 41.378557 ], "pop": 14959, "state": "NY" }, { "_id": "12775", "city": "ROCK HILL", "loc": [ -74.58722299999999, 41.613351 ], "pop": 1027, "state": "NY" }, { "_id": "12776", "city": "COOK FALLS", "loc": [ -74.923704, 41.945774 ], "pop": 2737, "state": "NY" }, { "_id": "12777", "city": "FORESTBURGH", "loc": [ -74.724087, 41.569093 ], "pop": 581, "state": "NY" }, { "_id": "12779", "city": "SOUTH FALLSBURG", "loc": [ -74.644401, 41.704192 ], "pop": 1838, "state": "NY" }, { "_id": "12780", "city": "SPARROWBUSH", "loc": [ -74.723647, 41.435886 ], "pop": 1527, "state": "NY" }, { "_id": "12782", "city": "SUNDOWN", "loc": [ -74.550838, 41.823822 ], "pop": 635, "state": "NY" }, { "_id": "12783", "city": "SWAN LAKE", "loc": [ -74.834092, 41.728479 ], "pop": 1707, "state": "NY" }, { "_id": "12786", "city": "WHITE LAKE", "loc": [ -74.865437, 41.648498 ], "pop": 178, "state": "NY" }, { "_id": "12787", "city": "WHITE SULPHUR SP", "loc": [ -74.828065, 41.790042 ], "pop": 161, "state": "NY" }, { "_id": "12788", "city": "WOODBOURNE", "loc": [ -74.592828, 41.770807 ], "pop": 2561, "state": "NY" }, { "_id": "12789", "city": "WOODRIDGE", "loc": [ -74.581518, 41.716955 ], "pop": 2047, "state": "NY" }, { "_id": "12790", "city": "WURTSBORO", "loc": [ -74.503891, 41.587667 ], "pop": 4589, "state": "NY" }, { "_id": "12791", "city": "YOUNGSVILLE", "loc": [ -74.88877599999999, 41.803238 ], "pop": 115, "state": "NY" }, { "_id": "12792", "city": "YULAN", "loc": [ -74.926224, 41.538378 ], "pop": 107, "state": "NY" }, { "_id": "12801", "city": "QUEENSBURY", "loc": [ -73.648816, 43.312539 ], "pop": 15023, "state": "NY" }, { "_id": "12803", "city": "SOUTH GLENS FALL", "loc": [ -73.637947, 43.283911 ], "pop": 8758, "state": "NY" }, { "_id": "12804", "city": "QUEENSBURY", "loc": [ -73.68184599999999, 43.328983 ], "pop": 20993, "state": "NY" }, { "_id": "12808", "city": "ADIRONDACK", "loc": [ -73.78248600000001, 43.716479 ], "pop": 105, "state": "NY" }, { "_id": "12809", "city": "ARGYLE", "loc": [ -73.46407600000001, 43.238084 ], "pop": 2930, "state": "NY" }, { "_id": "12810", "city": "ATHOL", "loc": [ -73.88169499999999, 43.483872 ], "pop": 588, "state": "NY" }, { "_id": "12812", "city": "BLUE MOUNTAIN LA", "loc": [ -74.42983099999999, 43.837499 ], "pop": 234, "state": "NY" }, { "_id": "12814", "city": "BOLTON LANDING", "loc": [ -73.671392, 43.576641 ], "pop": 1298, "state": "NY" }, { "_id": "12815", "city": "BRANT LAKE", "loc": [ -73.72045799999999, 43.698875 ], "pop": 807, "state": "NY" }, { "_id": "12816", "city": "CAMBRIDGE", "loc": [ -73.38137500000001, 43.046585 ], "pop": 4243, "state": "NY" }, { "_id": "12817", "city": "CHESTERTOWN", "loc": [ -73.806641, 43.645053 ], "pop": 2141, "state": "NY" }, { "_id": "12819", "city": "CLEMONS", "loc": [ -73.432613, 43.643544 ], "pop": 169, "state": "NY" }, { "_id": "12821", "city": "COMSTOCK", "loc": [ -73.360607, 43.456706 ], "pop": 1226, "state": "NY" }, { "_id": "12822", "city": "CORINTH", "loc": [ -73.836901, 43.242569 ], "pop": 6492, "state": "NY" }, { "_id": "12823", "city": "COSSAYUNA", "loc": [ -73.41237, 43.175059 ], "pop": 241, "state": "NY" }, { "_id": "12824", "city": "DIAMOND POINT", "loc": [ -73.700123, 43.515553 ], "pop": 770, "state": "NY" }, { "_id": "12826", "city": "EAST GREENWICH", "loc": [ -73.392425, 43.157918 ], "pop": 116, "state": "NY" }, { "_id": "12827", "city": "FORT ANN", "loc": [ -73.478381, 43.428457 ], "pop": 6818, "state": "NY" }, { "_id": "12828", "city": "FORT EDWARD", "loc": [ -73.58216899999999, 43.265321 ], "pop": 5507, "state": "NY" }, { "_id": "12831", "city": "GANSEVOORT", "loc": [ -73.70526700000001, 43.180343 ], "pop": 14485, "state": "NY" }, { "_id": "12832", "city": "GRANVILLE", "loc": [ -73.297825, 43.377562 ], "pop": 6201, "state": "NY" }, { "_id": "12833", "city": "GREENFIELD CENTE", "loc": [ -73.860193, 43.122488 ], "pop": 4753, "state": "NY" }, { "_id": "12834", "city": "THOMSON", "loc": [ -73.506658, 43.096183 ], "pop": 6028, "state": "NY" }, { "_id": "12835", "city": "HADLEY", "loc": [ -73.949905, 43.301268 ], "pop": 1840, "state": "NY" }, { "_id": "12836", "city": "HAGUE", "loc": [ -73.528172, 43.74631 ], "pop": 692, "state": "NY" }, { "_id": "12837", "city": "HAMPTON", "loc": [ -73.273072, 43.462135 ], "pop": 419, "state": "NY" }, { "_id": "12838", "city": "HARTFORD", "loc": [ -73.404946, 43.349281 ], "pop": 679, "state": "NY" }, { "_id": "12839", "city": "HUDSON FALLS", "loc": [ -73.574607, 43.314863 ], "pop": 12866, "state": "NY" }, { "_id": "12842", "city": "INDIAN LAKE", "loc": [ -74.27663800000001, 43.760594 ], "pop": 1247, "state": "NY" }, { "_id": "12843", "city": "JOHNSBURG", "loc": [ -74.021254, 43.634081 ], "pop": 1437, "state": "NY" }, { "_id": "12844", "city": "PILOT KNOB", "loc": [ -73.62988300000001, 43.515561 ], "pop": 23, "state": "NY" }, { "_id": "12845", "city": "LAKE GEORGE", "loc": [ -73.697547, 43.416725 ], "pop": 4677, "state": "NY" }, { "_id": "12846", "city": "LAKE LUZERNE", "loc": [ -73.822821, 43.316487 ], "pop": 2816, "state": "NY" }, { "_id": "12847", "city": "LONG LAKE", "loc": [ -74.46624300000001, 43.947653 ], "pop": 930, "state": "NY" }, { "_id": "12849", "city": "MIDDLE GRANVILLE", "loc": [ -73.303077, 43.450773 ], "pop": 249, "state": "NY" }, { "_id": "12850", "city": "MIDDLE GROVE", "loc": [ -74.016687, 43.097548 ], "pop": 1760, "state": "NY" }, { "_id": "12851", "city": "MINERVA", "loc": [ -73.983542, 43.781058 ], "pop": 308, "state": "NY" }, { "_id": "12852", "city": "NEWCOMB", "loc": [ -74.12991100000001, 43.945991 ], "pop": 544, "state": "NY" }, { "_id": "12853", "city": "NORTH CREEK", "loc": [ -73.892802, 43.713802 ], "pop": 2447, "state": "NY" }, { "_id": "12854", "city": "NORTH GRANVILLE", "loc": [ -73.33011399999999, 43.506212 ], "pop": 185, "state": "NY" }, { "_id": "12855", "city": "NORTH HUDSON", "loc": [ -73.712065, 43.986872 ], "pop": 266, "state": "NY" }, { "_id": "12857", "city": "OLMSTEDVILLE", "loc": [ -73.93347900000001, 43.779931 ], "pop": 450, "state": "NY" }, { "_id": "12858", "city": "PARADOX", "loc": [ -73.64495599999999, 43.891382 ], "pop": 29, "state": "NY" }, { "_id": "12859", "city": "PORTER CORNERS", "loc": [ -73.88391799999999, 43.172358 ], "pop": 1028, "state": "NY" }, { "_id": "12860", "city": "POTTERSVILLE", "loc": [ -73.756438, 43.692956 ], "pop": 252, "state": "NY" }, { "_id": "12861", "city": "PUTNAM STATION", "loc": [ -73.412299, 43.755976 ], "pop": 477, "state": "NY" }, { "_id": "12863", "city": "ROCK CITY FALLS", "loc": [ -73.92152299999999, 43.066248 ], "pop": 553, "state": "NY" }, { "_id": "12865", "city": "SALEM", "loc": [ -73.332703, 43.182785 ], "pop": 1965, "state": "NY" }, { "_id": "12866", "city": "WILTON", "loc": [ -73.780644, 43.080094 ], "pop": 30086, "state": "NY" }, { "_id": "12870", "city": "SCHROON LAKE", "loc": [ -73.767382, 43.841159 ], "pop": 1656, "state": "NY" }, { "_id": "12871", "city": "SCHUYLERVILLE", "loc": [ -73.60068, 43.087778 ], "pop": 3929, "state": "NY" }, { "_id": "12872", "city": "SEVERANCE", "loc": [ -73.730127, 43.876903 ], "pop": 36, "state": "NY" }, { "_id": "12873", "city": "SHUSHAN", "loc": [ -73.323148, 43.110575 ], "pop": 755, "state": "NY" }, { "_id": "12874", "city": "SILVER BAY", "loc": [ -73.507062, 43.697804 ], "pop": 7, "state": "NY" }, { "_id": "12878", "city": "STONY CREEK", "loc": [ -73.949467, 43.421389 ], "pop": 625, "state": "NY" }, { "_id": "12883", "city": "TICONDEROGA", "loc": [ -73.442592, 43.846302 ], "pop": 5149, "state": "NY" }, { "_id": "12885", "city": "WARRENSBURG", "loc": [ -73.79202100000001, 43.500253 ], "pop": 4399, "state": "NY" }, { "_id": "12886", "city": "WEVERTOWN", "loc": [ -73.930909, 43.64129 ], "pop": 137, "state": "NY" }, { "_id": "12887", "city": "WHITEHALL", "loc": [ -73.38641200000001, 43.5531 ], "pop": 5372, "state": "NY" }, { "_id": "12901", "city": "PLATTSBURGH", "loc": [ -73.465969, 44.692715 ], "pop": 40905, "state": "NY" }, { "_id": "12910", "city": "ALTONA", "loc": [ -73.640767, 44.881584 ], "pop": 2456, "state": "NY" }, { "_id": "12911", "city": "AU SABLE CHASM", "loc": [ -73.508976, 44.521594 ], "pop": 514, "state": "NY" }, { "_id": "12912", "city": "AU SABLE FORKS", "loc": [ -73.685672, 44.44994 ], "pop": 2143, "state": "NY" }, { "_id": "12913", "city": "BLOOMINGDALE", "loc": [ -74.08293, 44.398477 ], "pop": 1016, "state": "NY" }, { "_id": "12914", "city": "BOMBAY", "loc": [ -74.59473699999999, 44.947861 ], "pop": 1042, "state": "NY" }, { "_id": "12916", "city": "BRUSHTON", "loc": [ -74.522274, 44.828212 ], "pop": 1936, "state": "NY" }, { "_id": "12917", "city": "BURKE", "loc": [ -74.17311599999999, 44.917722 ], "pop": 1279, "state": "NY" }, { "_id": "12918", "city": "CADYVILLE", "loc": [ -73.670242, 44.686473 ], "pop": 2122, "state": "NY" }, { "_id": "12919", "city": "CHAMPLAIN", "loc": [ -73.446603, 44.977292 ], "pop": 2827, "state": "NY" }, { "_id": "12920", "city": "CHATEAUGAY", "loc": [ -74.07409800000001, 44.908768 ], "pop": 2088, "state": "NY" }, { "_id": "12921", "city": "CHAZY", "loc": [ -73.450076, 44.888379 ], "pop": 2664, "state": "NY" }, { "_id": "12922", "city": "CHILDWOLD", "loc": [ -74.675878, 44.286715 ], "pop": 0, "state": "NY" }, { "_id": "12923", "city": "CHURUBUSCO", "loc": [ -73.935484, 44.943232 ], "pop": 663, "state": "NY" }, { "_id": "12924", "city": "KEESEVILLE", "loc": [ -73.567971, 44.504814 ], "pop": 377, "state": "NY" }, { "_id": "12926", "city": "CONSTABLE", "loc": [ -74.329713, 44.941688 ], "pop": 1949, "state": "NY" }, { "_id": "12928", "city": "CROWN POINT", "loc": [ -73.466486, 43.952633 ], "pop": 1963, "state": "NY" }, { "_id": "12930", "city": "DICKINSON CENTER", "loc": [ -74.552346, 44.723328 ], "pop": 549, "state": "NY" }, { "_id": "12932", "city": "ELIZABETHTOWN", "loc": [ -73.601131, 44.224518 ], "pop": 1274, "state": "NY" }, { "_id": "12934", "city": "ELLENBURG CENTER", "loc": [ -73.86854599999999, 44.844353 ], "pop": 1494, "state": "NY" }, { "_id": "12935", "city": "ELLENBURG DEPOT", "loc": [ -73.787572, 44.916266 ], "pop": 981, "state": "NY" }, { "_id": "12936", "city": "ESSEX", "loc": [ -73.373147, 44.280695 ], "pop": 406, "state": "NY" }, { "_id": "12937", "city": "FORT COVINGTON", "loc": [ -74.492879, 44.973096 ], "pop": 1568, "state": "NY" }, { "_id": "12938", "city": "NICHOLVILLE", "loc": [ -74.53647100000001, 44.638703 ], "pop": 1229, "state": "NY" }, { "_id": "12941", "city": "JAY", "loc": [ -73.72470199999999, 44.373351 ], "pop": 1245, "state": "NY" }, { "_id": "12942", "city": "KEENE", "loc": [ -73.79145699999999, 44.25548 ], "pop": 520, "state": "NY" }, { "_id": "12943", "city": "SAINT HUBERTS", "loc": [ -73.795923, 44.177978 ], "pop": 392, "state": "NY" }, { "_id": "12944", "city": "KEESEVILLE", "loc": [ -73.474538, 44.499933 ], "pop": 4129, "state": "NY" }, { "_id": "12945", "city": "UPPER SAINT REGI", "loc": [ -74.243336, 44.359392 ], "pop": 412, "state": "NY" }, { "_id": "12946", "city": "NORTH POLE", "loc": [ -73.98635400000001, 44.274986 ], "pop": 4656, "state": "NY" }, { "_id": "12949", "city": "LAWRENCEVILLE", "loc": [ -74.662927, 44.758988 ], "pop": 41, "state": "NY" }, { "_id": "12950", "city": "LEWIS", "loc": [ -73.54912899999999, 44.307507 ], "pop": 432, "state": "NY" }, { "_id": "12952", "city": "LYON MOUNTAIN", "loc": [ -73.91945200000001, 44.725491 ], "pop": 623, "state": "NY" }, { "_id": "12953", "city": "MALONE", "loc": [ -74.29280799999999, 44.848164 ], "pop": 13798, "state": "NY" }, { "_id": "12955", "city": "MERRILL", "loc": [ -73.97783200000001, 44.799364 ], "pop": 452, "state": "NY" }, { "_id": "12956", "city": "MINEVILLE", "loc": [ -73.523588, 44.087631 ], "pop": 1868, "state": "NY" }, { "_id": "12957", "city": "MOIRA", "loc": [ -74.560273, 44.850412 ], "pop": 1511, "state": "NY" }, { "_id": "12958", "city": "MOOERS", "loc": [ -73.58341299999999, 44.959244 ], "pop": 1569, "state": "NY" }, { "_id": "12959", "city": "MOOERS FORKS", "loc": [ -73.672967, 44.960232 ], "pop": 963, "state": "NY" }, { "_id": "12960", "city": "MORIAH", "loc": [ -73.507862, 44.043755 ], "pop": 889, "state": "NY" }, { "_id": "12961", "city": "MORIAH CENTER", "loc": [ -73.511071, 44.066197 ], "pop": 209, "state": "NY" }, { "_id": "12962", "city": "MORRISONVILLE", "loc": [ -73.577168, 44.68936 ], "pop": 4665, "state": "NY" }, { "_id": "12964", "city": "NEW RUSSIA", "loc": [ -73.605881, 44.159532 ], "pop": 216, "state": "NY" }, { "_id": "12965", "city": "NICHOLVILLE", "loc": [ -74.653379, 44.708182 ], "pop": 153, "state": "NY" }, { "_id": "12966", "city": "BANGOR", "loc": [ -74.413369, 44.829997 ], "pop": 2867, "state": "NY" }, { "_id": "12967", "city": "NORTH LAWRENCE", "loc": [ -74.665307, 44.774982 ], "pop": 943, "state": "NY" }, { "_id": "12968", "city": "ONCHIOTA", "loc": [ -74.170991, 44.458163 ], "pop": 1407, "state": "NY" }, { "_id": "12969", "city": "OWLS HEAD", "loc": [ -74.134173, 44.730791 ], "pop": 329, "state": "NY" }, { "_id": "12970", "city": "PAUL SMITHS", "loc": [ -74.26643199999999, 44.444967 ], "pop": 245, "state": "NY" }, { "_id": "12972", "city": "PERU", "loc": [ -73.52932199999999, 44.585109 ], "pop": 5640, "state": "NY" }, { "_id": "12973", "city": "PIERCEFIELD", "loc": [ -74.573228, 44.234037 ], "pop": 112, "state": "NY" }, { "_id": "12974", "city": "PORT HENRY", "loc": [ -73.47054199999999, 44.04645 ], "pop": 1841, "state": "NY" }, { "_id": "12978", "city": "REDFORD", "loc": [ -73.801948, 44.606926 ], "pop": 495, "state": "NY" }, { "_id": "12979", "city": "ROUSES POINT", "loc": [ -73.369083, 44.988413 ], "pop": 2508, "state": "NY" }, { "_id": "12980", "city": "SAINT REGIS FALL", "loc": [ -74.66032, 44.677298 ], "pop": 321, "state": "NY" }, { "_id": "12981", "city": "SARANAC", "loc": [ -73.748135, 44.703168 ], "pop": 6545, "state": "NY" }, { "_id": "12983", "city": "SARANAC LAKE", "loc": [ -74.13295100000001, 44.324331 ], "pop": 9125, "state": "NY" }, { "_id": "12985", "city": "SCHUYLER FALLS", "loc": [ -73.689481, 44.588224 ], "pop": 652, "state": "NY" }, { "_id": "12986", "city": "SUNMOUNT", "loc": [ -74.463172, 44.228461 ], "pop": 6379, "state": "NY" }, { "_id": "12987", "city": "UPPER JAY", "loc": [ -73.807864, 44.325586 ], "pop": 159, "state": "NY" }, { "_id": "12989", "city": "VERMONTVILLE", "loc": [ -74.057278, 44.460134 ], "pop": 623, "state": "NY" }, { "_id": "12992", "city": "WEST CHAZY", "loc": [ -73.511188, 44.796967 ], "pop": 3944, "state": "NY" }, { "_id": "12993", "city": "WESTPORT", "loc": [ -73.470223, 44.204983 ], "pop": 2007, "state": "NY" }, { "_id": "12994", "city": "WHALLONSBURG", "loc": [ -73.432205, 44.292637 ], "pop": 169, "state": "NY" }, { "_id": "12996", "city": "WILLSBORO", "loc": [ -73.396292, 44.360396 ], "pop": 1729, "state": "NY" }, { "_id": "12997", "city": "WILMINGTON", "loc": [ -73.816553, 44.387976 ], "pop": 958, "state": "NY" }, { "_id": "13021", "city": "AUBURN", "loc": [ -76.562605, 42.929958 ], "pop": 43447, "state": "NY" }, { "_id": "13026", "city": "AURORA", "loc": [ -76.67749000000001, 42.747231 ], "pop": 1557, "state": "NY" }, { "_id": "13027", "city": "BALDWINSVILLE", "loc": [ -76.323718, 43.162039 ], "pop": 28132, "state": "NY" }, { "_id": "13028", "city": "BERNHARDS BAY", "loc": [ -75.937299, 43.271722 ], "pop": 1228, "state": "NY" }, { "_id": "13029", "city": "BREWERTON", "loc": [ -76.135132, 43.225194 ], "pop": 4823, "state": "NY" }, { "_id": "13030", "city": "BRIDGEPORT", "loc": [ -75.970009, 43.159015 ], "pop": 4507, "state": "NY" }, { "_id": "13031", "city": "CAMILLUS", "loc": [ -76.280728, 43.041651 ], "pop": 15236, "state": "NY" }, { "_id": "13032", "city": "CANASTOTA", "loc": [ -75.76019700000001, 43.087764 ], "pop": 12909, "state": "NY" }, { "_id": "13033", "city": "CATO", "loc": [ -76.564791, 43.179443 ], "pop": 3873, "state": "NY" }, { "_id": "13034", "city": "CAYUGA", "loc": [ -76.70240200000001, 42.914198 ], "pop": 2357, "state": "NY" }, { "_id": "13035", "city": "CAZENOVIA", "loc": [ -75.839229, 42.937955 ], "pop": 7748, "state": "NY" }, { "_id": "13036", "city": "CENTRAL SQUARE", "loc": [ -76.18485200000001, 43.308986 ], "pop": 7720, "state": "NY" }, { "_id": "13037", "city": "CHITTENANGO", "loc": [ -75.87684, 43.05524 ], "pop": 8756, "state": "NY" }, { "_id": "13039", "city": "CICERO", "loc": [ -76.09618500000001, 43.170693 ], "pop": 12600, "state": "NY" }, { "_id": "13040", "city": "CINCINNATUS", "loc": [ -75.903029, 42.538539 ], "pop": 2416, "state": "NY" }, { "_id": "13041", "city": "CLAY", "loc": [ -76.170748, 43.173734 ], "pop": 8609, "state": "NY" }, { "_id": "13042", "city": "CLEVELAND", "loc": [ -75.853691, 43.243199 ], "pop": 2428, "state": "NY" }, { "_id": "13044", "city": "CONSTANTIA", "loc": [ -76.004155, 43.272751 ], "pop": 2603, "state": "NY" }, { "_id": "13045", "city": "CORTLAND", "loc": [ -76.185675, 42.595175 ], "pop": 29180, "state": "NY" }, { "_id": "13050", "city": "CUYLER", "loc": [ -75.938367, 42.740571 ], "pop": 920, "state": "NY" }, { "_id": "13052", "city": "DE RUYTER", "loc": [ -75.858226, 42.749444 ], "pop": 1914, "state": "NY" }, { "_id": "13053", "city": "DRYDEN", "loc": [ -76.28722399999999, 42.486118 ], "pop": 4659, "state": "NY" }, { "_id": "13054", "city": "DURHAMVILLE", "loc": [ -75.671409, 43.157912 ], "pop": 1470, "state": "NY" }, { "_id": "13055", "city": "EAST FREETOWN", "loc": [ -75.998924, 42.579845 ], "pop": 833, "state": "NY" }, { "_id": "13057", "city": "EAST SYRACUSE", "loc": [ -76.05578, 43.073359 ], "pop": 14722, "state": "NY" }, { "_id": "13060", "city": "ELBRIDGE", "loc": [ -76.435164, 43.025246 ], "pop": 1770, "state": "NY" }, { "_id": "13061", "city": "ERIEVILLE", "loc": [ -75.754255, 42.856166 ], "pop": 1100, "state": "NY" }, { "_id": "13063", "city": "FABIUS", "loc": [ -75.983645, 42.853117 ], "pop": 1785, "state": "NY" }, { "_id": "13066", "city": "FAYETTEVILLE", "loc": [ -76.014503, 43.026774 ], "pop": 11793, "state": "NY" }, { "_id": "13068", "city": "FREEVILLE", "loc": [ -76.36362200000001, 42.499768 ], "pop": 5181, "state": "NY" }, { "_id": "13069", "city": "FULTON", "loc": [ -76.40342, 43.321108 ], "pop": 23858, "state": "NY" }, { "_id": "13071", "city": "GENOA", "loc": [ -76.54175499999999, 42.674624 ], "pop": 1160, "state": "NY" }, { "_id": "13072", "city": "GEORGETOWN", "loc": [ -75.74427900000001, 42.763059 ], "pop": 611, "state": "NY" }, { "_id": "13073", "city": "GROTON", "loc": [ -76.363286, 42.58549 ], "pop": 5940, "state": "NY" }, { "_id": "13074", "city": "HANNIBAL", "loc": [ -76.54603400000001, 43.311115 ], "pop": 5248, "state": "NY" }, { "_id": "13076", "city": "HASTINGS", "loc": [ -76.14770799999999, 43.35268 ], "pop": 2259, "state": "NY" }, { "_id": "13077", "city": "HOMER", "loc": [ -76.18783000000001, 42.672586 ], "pop": 7192, "state": "NY" }, { "_id": "13078", "city": "JAMESVILLE", "loc": [ -76.076571, 42.982973 ], "pop": 8230, "state": "NY" }, { "_id": "13080", "city": "JORDAN", "loc": [ -76.45977999999999, 43.065141 ], "pop": 4766, "state": "NY" }, { "_id": "13081", "city": "KING FERRY", "loc": [ -76.62160299999999, 42.66351 ], "pop": 979, "state": "NY" }, { "_id": "13082", "city": "KIRKVILLE", "loc": [ -75.955003, 43.098095 ], "pop": 4798, "state": "NY" }, { "_id": "13083", "city": "LACONA", "loc": [ -76.050335, 43.642883 ], "pop": 2199, "state": "NY" }, { "_id": "13084", "city": "LA FAYETTE", "loc": [ -76.106116, 42.890959 ], "pop": 4450, "state": "NY" }, { "_id": "13085", "city": "LEBANON", "loc": [ -75.67758499999999, 42.77451 ], "pop": 164, "state": "NY" }, { "_id": "13088", "city": "LIVERPOOL", "loc": [ -76.186999, 43.109925 ], "pop": 23093, "state": "NY" }, { "_id": "13090", "city": "BAYBERRY", "loc": [ -76.223269, 43.148048 ], "pop": 31387, "state": "NY" }, { "_id": "13092", "city": "LOCKE", "loc": [ -76.415436, 42.655789 ], "pop": 2746, "state": "NY" }, { "_id": "13101", "city": "MC GRAW", "loc": [ -76.081958, 42.594758 ], "pop": 2511, "state": "NY" }, { "_id": "13103", "city": "MALLORY", "loc": [ -76.089208, 43.33782 ], "pop": 1267, "state": "NY" }, { "_id": "13104", "city": "MANLIUS", "loc": [ -75.97034499999999, 42.990441 ], "pop": 12754, "state": "NY" }, { "_id": "13108", "city": "MARCELLUS", "loc": [ -76.33228, 42.982056 ], "pop": 6077, "state": "NY" }, { "_id": "13110", "city": "MARIETTA", "loc": [ -76.28055000000001, 42.897441 ], "pop": 1778, "state": "NY" }, { "_id": "13111", "city": "MARTVILLE", "loc": [ -76.628936, 43.26608 ], "pop": 1342, "state": "NY" }, { "_id": "13112", "city": "MEMPHIS", "loc": [ -76.40300999999999, 43.093438 ], "pop": 1888, "state": "NY" }, { "_id": "13114", "city": "MEXICO", "loc": [ -76.24458799999999, 43.460533 ], "pop": 6641, "state": "NY" }, { "_id": "13116", "city": "MINOA", "loc": [ -76.009812, 43.077212 ], "pop": 3790, "state": "NY" }, { "_id": "13118", "city": "MORAVIA", "loc": [ -76.39897999999999, 42.735456 ], "pop": 6267, "state": "NY" }, { "_id": "13120", "city": "NEDROW", "loc": [ -76.15293200000001, 42.955855 ], "pop": 2349, "state": "NY" }, { "_id": "13122", "city": "NEW WOODSTOCK", "loc": [ -75.86352599999999, 42.844135 ], "pop": 842, "state": "NY" }, { "_id": "13124", "city": "NORTH PITCHER", "loc": [ -75.81635900000001, 42.637243 ], "pop": 160, "state": "NY" }, { "_id": "13126", "city": "OSWEGO", "loc": [ -76.497489, 43.443836 ], "pop": 38426, "state": "NY" }, { "_id": "13131", "city": "PARISH", "loc": [ -76.10002299999999, 43.415295 ], "pop": 3039, "state": "NY" }, { "_id": "13132", "city": "PENNELLVILLE", "loc": [ -76.23946599999999, 43.260946 ], "pop": 4566, "state": "NY" }, { "_id": "13135", "city": "PHOENIX", "loc": [ -76.306449, 43.24679 ], "pop": 5342, "state": "NY" }, { "_id": "13136", "city": "PITCHER", "loc": [ -75.846464, 42.596941 ], "pop": 678, "state": "NY" }, { "_id": "13140", "city": "PORT BYRON", "loc": [ -76.644919, 43.042653 ], "pop": 4391, "state": "NY" }, { "_id": "13141", "city": "PREBLE", "loc": [ -76.214105, 42.79501 ], "pop": 502, "state": "NY" }, { "_id": "13142", "city": "PULASKI", "loc": [ -76.125231, 43.55617 ], "pop": 7355, "state": "NY" }, { "_id": "13143", "city": "RED CREEK", "loc": [ -76.714556, 43.229068 ], "pop": 3289, "state": "NY" }, { "_id": "13144", "city": "RICHLAND", "loc": [ -76.00291799999999, 43.577578 ], "pop": 1267, "state": "NY" }, { "_id": "13145", "city": "SANDY CREEK", "loc": [ -76.126439, 43.651681 ], "pop": 801, "state": "NY" }, { "_id": "13146", "city": "SAVANNAH", "loc": [ -76.75646999999999, 43.093439 ], "pop": 2141, "state": "NY" }, { "_id": "13147", "city": "VENICE CENTER", "loc": [ -76.574175, 42.778472 ], "pop": 1520, "state": "NY" }, { "_id": "13148", "city": "SENECA FALLS", "loc": [ -76.79253799999999, 42.909377 ], "pop": 10987, "state": "NY" }, { "_id": "13152", "city": "SKANEATELES", "loc": [ -76.405174, 42.925751 ], "pop": 9182, "state": "NY" }, { "_id": "13155", "city": "SOUTH OTSELIC", "loc": [ -75.766919, 42.66256 ], "pop": 789, "state": "NY" }, { "_id": "13156", "city": "STERLING", "loc": [ -76.67473099999999, 43.329578 ], "pop": 2252, "state": "NY" }, { "_id": "13158", "city": "TRUXTON", "loc": [ -76.018946, 42.708547 ], "pop": 593, "state": "NY" }, { "_id": "13159", "city": "TULLY", "loc": [ -76.13936, 42.806977 ], "pop": 4777, "state": "NY" }, { "_id": "13160", "city": "UNION SPRINGS", "loc": [ -76.673959, 42.833546 ], "pop": 1984, "state": "NY" }, { "_id": "13164", "city": "WARNERS", "loc": [ -76.290413, 43.09317 ], "pop": 816, "state": "NY" }, { "_id": "13165", "city": "WATERLOO", "loc": [ -76.87549799999999, 42.904515 ], "pop": 10845, "state": "NY" }, { "_id": "13166", "city": "WEEDSPORT", "loc": [ -76.542502, 43.048882 ], "pop": 5847, "state": "NY" }, { "_id": "13167", "city": "WEST MONROE", "loc": [ -76.079747, 43.288235 ], "pop": 3369, "state": "NY" }, { "_id": "13202", "city": "SYRACUSE", "loc": [ -76.14885599999999, 43.040988 ], "pop": 5442, "state": "NY" }, { "_id": "13203", "city": "SYRACUSE", "loc": [ -76.136931, 43.060703 ], "pop": 17585, "state": "NY" }, { "_id": "13204", "city": "SYRACUSE", "loc": [ -76.17576699999999, 43.044398 ], "pop": 25414, "state": "NY" }, { "_id": "13205", "city": "SYRACUSE", "loc": [ -76.14518, 43.012314 ], "pop": 23048, "state": "NY" }, { "_id": "13206", "city": "SYRACUSE", "loc": [ -76.110226, 43.06773 ], "pop": 17644, "state": "NY" }, { "_id": "13207", "city": "SYRACUSE", "loc": [ -76.16501, 43.019482 ], "pop": 16380, "state": "NY" }, { "_id": "13208", "city": "SYRACUSE", "loc": [ -76.148616, 43.073007 ], "pop": 22242, "state": "NY" }, { "_id": "13209", "city": "SOLVAY", "loc": [ -76.23844800000001, 43.078204 ], "pop": 13467, "state": "NY" }, { "_id": "13210", "city": "SYRACUSE", "loc": [ -76.12816599999999, 43.035414 ], "pop": 31197, "state": "NY" }, { "_id": "13211", "city": "MATTYDALE", "loc": [ -76.14218099999999, 43.09951 ], "pop": 6940, "state": "NY" }, { "_id": "13212", "city": "NORTH SYRACUSE", "loc": [ -76.13729499999999, 43.130623 ], "pop": 22829, "state": "NY" }, { "_id": "13214", "city": "DE WITT", "loc": [ -76.07844, 43.042529 ], "pop": 9501, "state": "NY" }, { "_id": "13215", "city": "ONONDAGA", "loc": [ -76.211851, 42.997544 ], "pop": 12557, "state": "NY" }, { "_id": "13219", "city": "SYRACUSE", "loc": [ -76.226159, 43.040943 ], "pop": 16166, "state": "NY" }, { "_id": "13224", "city": "SYRACUSE", "loc": [ -76.104609, 43.042134 ], "pop": 9845, "state": "NY" }, { "_id": "13301", "city": "ALDER CREEK", "loc": [ -75.213748, 43.415659 ], "pop": 74, "state": "NY" }, { "_id": "13302", "city": "ALTMAR", "loc": [ -75.971934, 43.497022 ], "pop": 1761, "state": "NY" }, { "_id": "13303", "city": "AVA", "loc": [ -75.450919, 43.344519 ], "pop": 1708, "state": "NY" }, { "_id": "13304", "city": "BARNEVELD", "loc": [ -75.16115600000001, 43.223697 ], "pop": 1383, "state": "NY" }, { "_id": "13308", "city": "BLOSSVALE", "loc": [ -75.687313, 43.230293 ], "pop": 4489, "state": "NY" }, { "_id": "13309", "city": "BOONVILLE", "loc": [ -75.34397300000001, 43.478615 ], "pop": 5768, "state": "NY" }, { "_id": "13310", "city": "BOUCKVILLE", "loc": [ -75.567841, 42.894024 ], "pop": 650, "state": "NY" }, { "_id": "13314", "city": "BROOKFIELD", "loc": [ -75.34385899999999, 42.807538 ], "pop": 5, "state": "NY" }, { "_id": "13315", "city": "BURLINGTON FLATS", "loc": [ -75.169044, 42.75162 ], "pop": 1145, "state": "NY" }, { "_id": "13316", "city": "CAMDEN", "loc": [ -75.75425799999999, 43.339197 ], "pop": 6987, "state": "NY" }, { "_id": "13317", "city": "AMES", "loc": [ -74.583522, 42.88239 ], "pop": 3986, "state": "NY" }, { "_id": "13318", "city": "CASSVILLE", "loc": [ -75.260704, 42.906931 ], "pop": 1566, "state": "NY" }, { "_id": "13319", "city": "CHADWICKS", "loc": [ -75.26564500000001, 43.022563 ], "pop": 274, "state": "NY" }, { "_id": "13320", "city": "CHERRY VALLEY", "loc": [ -74.744439, 42.782315 ], "pop": 1642, "state": "NY" }, { "_id": "13322", "city": "CLAYVILLE", "loc": [ -75.206126, 42.97119 ], "pop": 641, "state": "NY" }, { "_id": "13323", "city": "CLINTON", "loc": [ -75.38079, 43.05856 ], "pop": 12483, "state": "NY" }, { "_id": "13324", "city": "COLD BROOK", "loc": [ -74.997651, 43.302391 ], "pop": 1853, "state": "NY" }, { "_id": "13325", "city": "CONSTABLEVILLE", "loc": [ -75.458406, 43.562982 ], "pop": 931, "state": "NY" }, { "_id": "13326", "city": "COOPERSTOWN", "loc": [ -74.918148, 42.70319 ], "pop": 5402, "state": "NY" }, { "_id": "13327", "city": "CROGHAN", "loc": [ -75.354192, 43.909461 ], "pop": 1841, "state": "NY" }, { "_id": "13328", "city": "DEANSBORO", "loc": [ -75.438309, 42.981788 ], "pop": 639, "state": "NY" }, { "_id": "13329", "city": "DOLGEVILLE", "loc": [ -74.76430499999999, 43.104161 ], "pop": 4205, "state": "NY" }, { "_id": "13331", "city": "EAGLE BAY", "loc": [ -74.96538099999999, 43.723659 ], "pop": 1416, "state": "NY" }, { "_id": "13332", "city": "EARLVILLE", "loc": [ -75.541653, 42.752218 ], "pop": 2413, "state": "NY" }, { "_id": "13333", "city": "EAST SPRINGFIELD", "loc": [ -74.75974100000001, 42.832947 ], "pop": 0, "state": "NY" }, { "_id": "13334", "city": "EATON", "loc": [ -75.631359, 42.848417 ], "pop": 1583, "state": "NY" }, { "_id": "13335", "city": "EDMESTON", "loc": [ -75.252522, 42.730281 ], "pop": 788, "state": "NY" }, { "_id": "13337", "city": "FLY CREEK", "loc": [ -74.986921, 42.725177 ], "pop": 1033, "state": "NY" }, { "_id": "13338", "city": "FORESTPORT", "loc": [ -75.178742, 43.473651 ], "pop": 1013, "state": "NY" }, { "_id": "13339", "city": "FORT PLAIN", "loc": [ -74.643298, 42.937158 ], "pop": 6144, "state": "NY" }, { "_id": "13340", "city": "FRANKFORT", "loc": [ -75.10715500000001, 43.044041 ], "pop": 8546, "state": "NY" }, { "_id": "13342", "city": "GARRATTSVILLE", "loc": [ -75.23270100000001, 42.635634 ], "pop": 293, "state": "NY" }, { "_id": "13343", "city": "GLENFIELD", "loc": [ -75.366902, 43.732306 ], "pop": 1909, "state": "NY" }, { "_id": "13345", "city": "GREIG", "loc": [ -75.312393, 43.689184 ], "pop": 456, "state": "NY" }, { "_id": "13346", "city": "HAMILTON", "loc": [ -75.54338199999999, 42.82306 ], "pop": 5821, "state": "NY" }, { "_id": "13348", "city": "HARTWICK", "loc": [ -75.055009, 42.695033 ], "pop": 1424, "state": "NY" }, { "_id": "13350", "city": "HERKIMER", "loc": [ -74.98757000000001, 43.030696 ], "pop": 10090, "state": "NY" }, { "_id": "13353", "city": "HOFFMEISTER", "loc": [ -74.739974, 43.391545 ], "pop": 106, "state": "NY" }, { "_id": "13354", "city": "HOLLAND PATENT", "loc": [ -75.253506, 43.248406 ], "pop": 3970, "state": "NY" }, { "_id": "13355", "city": "HUBBARDSVILLE", "loc": [ -75.436707, 42.823663 ], "pop": 810, "state": "NY" }, { "_id": "13357", "city": "ILION", "loc": [ -75.04836, 43.006391 ], "pop": 11603, "state": "NY" }, { "_id": "13360", "city": "INLET", "loc": [ -74.784631, 43.748024 ], "pop": 343, "state": "NY" }, { "_id": "13361", "city": "JORDANVILLE", "loc": [ -74.820919, 42.89478 ], "pop": 395, "state": "NY" }, { "_id": "13363", "city": "LEE CENTER", "loc": [ -75.505532, 43.314804 ], "pop": 2076, "state": "NY" }, { "_id": "13365", "city": "LITTLE FALLS", "loc": [ -74.860598, 43.047371 ], "pop": 10379, "state": "NY" }, { "_id": "13367", "city": "BEAVER RIVER", "loc": [ -75.47537800000001, 43.801055 ], "pop": 8238, "state": "NY" }, { "_id": "13368", "city": "LYONS FALLS", "loc": [ -75.355312, 43.626165 ], "pop": 1210, "state": "NY" }, { "_id": "13401", "city": "MC CONNELLSVILLE", "loc": [ -75.652477, 43.289552 ], "pop": 412, "state": "NY" }, { "_id": "13402", "city": "MADISON", "loc": [ -75.50756199999999, 42.896854 ], "pop": 1472, "state": "NY" }, { "_id": "13403", "city": "MARCY", "loc": [ -75.278335, 43.163926 ], "pop": 7937, "state": "NY" }, { "_id": "13406", "city": "MIDDLEVILLE", "loc": [ -74.92397800000001, 43.136933 ], "pop": 180, "state": "NY" }, { "_id": "13407", "city": "MOHAWK", "loc": [ -74.985298, 42.989986 ], "pop": 5907, "state": "NY" }, { "_id": "13408", "city": "MORRISVILLE", "loc": [ -75.648656, 42.910805 ], "pop": 4491, "state": "NY" }, { "_id": "13409", "city": "MUNNSVILLE", "loc": [ -75.594032, 42.986326 ], "pop": 2116, "state": "NY" }, { "_id": "13411", "city": "NEW BERLIN", "loc": [ -75.34740600000001, 42.622414 ], "pop": 2569, "state": "NY" }, { "_id": "13413", "city": "NEW HARTFORD", "loc": [ -75.29055099999999, 43.065412 ], "pop": 14035, "state": "NY" }, { "_id": "13415", "city": "NEW LISBON", "loc": [ -75.32743600000001, 42.578968 ], "pop": 19, "state": "NY" }, { "_id": "13416", "city": "NEWPORT", "loc": [ -74.986133, 43.180002 ], "pop": 2554, "state": "NY" }, { "_id": "13417", "city": "NEW YORK MILLS", "loc": [ -75.29369, 43.100038 ], "pop": 3646, "state": "NY" }, { "_id": "13418", "city": "NORTH BROOKFIELD", "loc": [ -75.381489, 42.850088 ], "pop": 258, "state": "NY" }, { "_id": "13420", "city": "OLD FORGE", "loc": [ -74.893511, 43.74347 ], "pop": 221, "state": "NY" }, { "_id": "13421", "city": "ONEIDA", "loc": [ -75.650814, 43.086248 ], "pop": 11876, "state": "NY" }, { "_id": "13424", "city": "ORISKANY", "loc": [ -75.34343699999999, 43.152427 ], "pop": 3566, "state": "NY" }, { "_id": "13425", "city": "ORISKANY FALLS", "loc": [ -75.483807, 42.957585 ], "pop": 2192, "state": "NY" }, { "_id": "13428", "city": "PALATINE BRIDGE", "loc": [ -74.570825, 42.922119 ], "pop": 1738, "state": "NY" }, { "_id": "13431", "city": "POLAND", "loc": [ -75.07313000000001, 43.211458 ], "pop": 1789, "state": "NY" }, { "_id": "13433", "city": "PORT LEYDEN", "loc": [ -75.326257, 43.580245 ], "pop": 1951, "state": "NY" }, { "_id": "13436", "city": "RAQUETTE LAKE", "loc": [ -74.537959, 43.866224 ], "pop": 0, "state": "NY" }, { "_id": "13437", "city": "REDFIELD", "loc": [ -75.82423, 43.565794 ], "pop": 482, "state": "NY" }, { "_id": "13438", "city": "REMSEN", "loc": [ -75.161618, 43.338456 ], "pop": 4400, "state": "NY" }, { "_id": "13439", "city": "RICHFIELD SPRING", "loc": [ -74.992214, 42.850298 ], "pop": 3825, "state": "NY" }, { "_id": "13440", "city": "ROME", "loc": [ -75.449758, 43.219349 ], "pop": 56424, "state": "NY" }, { "_id": "13450", "city": "ROSEBOOM", "loc": [ -74.74160999999999, 42.788246 ], "pop": 8, "state": "NY" }, { "_id": "13452", "city": "SAINT JOHNSVILLE", "loc": [ -74.64604, 43.016995 ], "pop": 4992, "state": "NY" }, { "_id": "13454", "city": "SALISBURY CENTER", "loc": [ -74.78093200000001, 43.162509 ], "pop": 896, "state": "NY" }, { "_id": "13456", "city": "SAUQUOIT", "loc": [ -75.26259, 43.007291 ], "pop": 5652, "state": "NY" }, { "_id": "13459", "city": "SHARON SPRINGS", "loc": [ -74.591911, 42.763357 ], "pop": 2919, "state": "NY" }, { "_id": "13460", "city": "SHERBURNE", "loc": [ -75.48302700000001, 42.685885 ], "pop": 4013, "state": "NY" }, { "_id": "13461", "city": "SHERRILL", "loc": [ -75.598975, 43.070397 ], "pop": 2864, "state": "NY" }, { "_id": "13464", "city": "SMYRNA", "loc": [ -75.61212399999999, 42.689565 ], "pop": 1209, "state": "NY" }, { "_id": "13466", "city": "SOUTH EDMESTON", "loc": [ -75.262919, 42.676754 ], "pop": 1224, "state": "NY" }, { "_id": "13468", "city": "SPRINGFIELD CENT", "loc": [ -74.938051, 42.850106 ], "pop": 1402, "state": "NY" }, { "_id": "13469", "city": "STITTVILLE", "loc": [ -75.28985400000001, 43.222889 ], "pop": 567, "state": "NY" }, { "_id": "13470", "city": "STRATFORD", "loc": [ -74.67678600000001, 43.179101 ], "pop": 773, "state": "NY" }, { "_id": "13471", "city": "TABERG", "loc": [ -75.602706, 43.336571 ], "pop": 2393, "state": "NY" }, { "_id": "13473", "city": "TURIN", "loc": [ -75.41319900000001, 43.644074 ], "pop": 1004, "state": "NY" }, { "_id": "13475", "city": "VAN HORNESVILLE", "loc": [ -74.83466199999999, 42.894812 ], "pop": 40, "state": "NY" }, { "_id": "13476", "city": "VERNON", "loc": [ -75.56272, 43.094509 ], "pop": 4118, "state": "NY" }, { "_id": "13477", "city": "VERNON CENTER", "loc": [ -75.521028, 43.044309 ], "pop": 1440, "state": "NY" }, { "_id": "13478", "city": "VERONA", "loc": [ -75.572399, 43.147311 ], "pop": 2325, "state": "NY" }, { "_id": "13480", "city": "WATERVILLE", "loc": [ -75.381466, 42.933244 ], "pop": 4059, "state": "NY" }, { "_id": "13482", "city": "WEST BURLINGTON", "loc": [ -75.190603, 42.706229 ], "pop": 22, "state": "NY" }, { "_id": "13483", "city": "WESTDALE", "loc": [ -75.822587, 43.411671 ], "pop": 161, "state": "NY" }, { "_id": "13485", "city": "WEST EDMESTON", "loc": [ -75.30372300000001, 42.794543 ], "pop": 1337, "state": "NY" }, { "_id": "13486", "city": "WESTERNVILLE", "loc": [ -75.315118, 43.329413 ], "pop": 657, "state": "NY" }, { "_id": "13488", "city": "WESTFORD", "loc": [ -75.10037800000001, 42.503512 ], "pop": 253, "state": "NY" }, { "_id": "13489", "city": "WEST LEYDEN", "loc": [ -75.51270700000001, 43.459713 ], "pop": 500, "state": "NY" }, { "_id": "13490", "city": "WESTMORELAND", "loc": [ -75.453259, 43.101686 ], "pop": 904, "state": "NY" }, { "_id": "13491", "city": "WEST WINFIELD", "loc": [ -75.183491, 42.882566 ], "pop": 3825, "state": "NY" }, { "_id": "13492", "city": "WHITESBORO", "loc": [ -75.309479, 43.115805 ], "pop": 10411, "state": "NY" }, { "_id": "13493", "city": "WILLIAMSTOWN", "loc": [ -75.904411, 43.410559 ], "pop": 1798, "state": "NY" }, { "_id": "13494", "city": "WOODGATE", "loc": [ -75.119111, 43.54881 ], "pop": 169, "state": "NY" }, { "_id": "13495", "city": "YORKVILLE", "loc": [ -75.275565, 43.111582 ], "pop": 2482, "state": "NY" }, { "_id": "13501", "city": "UTICA", "loc": [ -75.23146300000001, 43.087112 ], "pop": 40223, "state": "NY" }, { "_id": "13502", "city": "UTICA", "loc": [ -75.23138299999999, 43.106723 ], "pop": 36632, "state": "NY" }, { "_id": "13601", "city": "WATERTOWN", "loc": [ -75.912212, 43.974258 ], "pop": 39515, "state": "NY" }, { "_id": "13602", "city": "FORT DRUM", "loc": [ -75.753972, 44.035434 ], "pop": 11895, "state": "NY" }, { "_id": "13603", "city": "FORT DRUM", "loc": [ -75.791884, 44.072122 ], "pop": 30, "state": "NY" }, { "_id": "13605", "city": "SMITHVILLE", "loc": [ -76.05430200000001, 43.81614 ], "pop": 4489, "state": "NY" }, { "_id": "13606", "city": "ADAMS CENTER", "loc": [ -76.00415, 43.863106 ], "pop": 2649, "state": "NY" }, { "_id": "13607", "city": "POINT VIVIAN", "loc": [ -75.93061899999999, 44.326982 ], "pop": 2024, "state": "NY" }, { "_id": "13608", "city": "ANTWERP", "loc": [ -75.60048399999999, 44.235775 ], "pop": 1830, "state": "NY" }, { "_id": "13611", "city": "BELLEVILLE", "loc": [ -76.115053, 43.785373 ], "pop": 72, "state": "NY" }, { "_id": "13612", "city": "BLACK RIVER", "loc": [ -75.795777, 44.004156 ], "pop": 3651, "state": "NY" }, { "_id": "13613", "city": "BRASHER FALLS", "loc": [ -74.747303, 44.846718 ], "pop": 1950, "state": "NY" }, { "_id": "13614", "city": "BRIER HILL", "loc": [ -75.672203, 44.552542 ], "pop": 481, "state": "NY" }, { "_id": "13616", "city": "CALCIUM", "loc": [ -75.849884, 44.026484 ], "pop": 1839, "state": "NY" }, { "_id": "13617", "city": "CANTON", "loc": [ -75.162792, 44.592442 ], "pop": 11781, "state": "NY" }, { "_id": "13618", "city": "CAPE VINCENT", "loc": [ -76.31644300000001, 44.124419 ], "pop": 1207, "state": "NY" }, { "_id": "13619", "city": "CARTHAGE", "loc": [ -75.61600799999999, 43.981039 ], "pop": 11741, "state": "NY" }, { "_id": "13620", "city": "CASTORLAND", "loc": [ -75.460432, 43.88432 ], "pop": 2335, "state": "NY" }, { "_id": "13621", "city": "CHASE MILLS", "loc": [ -75.073002, 44.867246 ], "pop": 431, "state": "NY" }, { "_id": "13622", "city": "CHAUMONT", "loc": [ -76.12316300000001, 44.08481 ], "pop": 2329, "state": "NY" }, { "_id": "13624", "city": "FRONTENAC", "loc": [ -76.107056, 44.217016 ], "pop": 5480, "state": "NY" }, { "_id": "13625", "city": "COLTON", "loc": [ -74.932672, 44.50156 ], "pop": 2382, "state": "NY" }, { "_id": "13626", "city": "COPENHAGEN", "loc": [ -75.683913, 43.880136 ], "pop": 1891, "state": "NY" }, { "_id": "13630", "city": "DE KALB JUNCTION", "loc": [ -75.287088, 44.489551 ], "pop": 1320, "state": "NY" }, { "_id": "13633", "city": "DE PEYSTER", "loc": [ -75.43281399999999, 44.541341 ], "pop": 95, "state": "NY" }, { "_id": "13634", "city": "DEXTER", "loc": [ -76.06498999999999, 44.006923 ], "pop": 3753, "state": "NY" }, { "_id": "13635", "city": "EDWARDS", "loc": [ -75.25222599999999, 44.311048 ], "pop": 1069, "state": "NY" }, { "_id": "13636", "city": "ELLISBURG", "loc": [ -76.125871, 43.737202 ], "pop": 372, "state": "NY" }, { "_id": "13637", "city": "EVANS MILLS", "loc": [ -75.830516, 44.081668 ], "pop": 3041, "state": "NY" }, { "_id": "13638", "city": "FELTS MILLS", "loc": [ -75.752443, 44.020374 ], "pop": 384, "state": "NY" }, { "_id": "13642", "city": "GOUVERNEUR", "loc": [ -75.46506100000001, 44.328302 ], "pop": 8425, "state": "NY" }, { "_id": "13646", "city": "HAMMOND", "loc": [ -75.672749, 44.450155 ], "pop": 2287, "state": "NY" }, { "_id": "13648", "city": "HARRISVILLE", "loc": [ -75.32515100000001, 44.161294 ], "pop": 2395, "state": "NY" }, { "_id": "13650", "city": "HENDERSON", "loc": [ -76.235212, 43.846742 ], "pop": 300, "state": "NY" }, { "_id": "13652", "city": "HERMON", "loc": [ -75.19866399999999, 44.444845 ], "pop": 1636, "state": "NY" }, { "_id": "13654", "city": "HEUVELTON", "loc": [ -75.420345, 44.593034 ], "pop": 2487, "state": "NY" }, { "_id": "13655", "city": "HOGANSBURG", "loc": [ -74.662649, 44.982511 ], "pop": 1774, "state": "NY" }, { "_id": "13656", "city": "LA FARGEVILLE", "loc": [ -75.956902, 44.198709 ], "pop": 2443, "state": "NY" }, { "_id": "13658", "city": "LISBON", "loc": [ -75.269364, 44.718424 ], "pop": 1265, "state": "NY" }, { "_id": "13659", "city": "LORRAINE", "loc": [ -75.905339, 43.756845 ], "pop": 462, "state": "NY" }, { "_id": "13660", "city": "MADRID", "loc": [ -75.14134, 44.768978 ], "pop": 1840, "state": "NY" }, { "_id": "13661", "city": "MANNSVILLE", "loc": [ -76.08203, 43.717905 ], "pop": 1750, "state": "NY" }, { "_id": "13662", "city": "MASSENA", "loc": [ -74.886205, 44.932411 ], "pop": 16145, "state": "NY" }, { "_id": "13665", "city": "NATURAL BRIDGE", "loc": [ -75.503883, 44.062982 ], "pop": 954, "state": "NY" }, { "_id": "13666", "city": "NEWTON FALLS", "loc": [ -74.98456, 44.198584 ], "pop": 351, "state": "NY" }, { "_id": "13667", "city": "NORFOLK", "loc": [ -74.957736, 44.84235 ], "pop": 4313, "state": "NY" }, { "_id": "13668", "city": "NORWOOD", "loc": [ -74.999188, 44.747193 ], "pop": 4305, "state": "NY" }, { "_id": "13669", "city": "OGDENSBURG", "loc": [ -75.477403, 44.690203 ], "pop": 19659, "state": "NY" }, { "_id": "13670", "city": "OSWEGATCHIE", "loc": [ -75.06594699999999, 44.193328 ], "pop": 287, "state": "NY" }, { "_id": "13672", "city": "PARISHVILLE", "loc": [ -74.794062, 44.592655 ], "pop": 300, "state": "NY" }, { "_id": "13673", "city": "PHILADELPHIA", "loc": [ -75.709917, 44.158896 ], "pop": 2393, "state": "NY" }, { "_id": "13675", "city": "PLESSIS", "loc": [ -75.849577, 44.277364 ], "pop": 111, "state": "NY" }, { "_id": "13676", "city": "POTSDAM", "loc": [ -74.968076, 44.659246 ], "pop": 16342, "state": "NY" }, { "_id": "13679", "city": "REDWOOD", "loc": [ -75.814975, 44.321077 ], "pop": 1735, "state": "NY" }, { "_id": "13680", "city": "RENSSELAER FALLS", "loc": [ -75.32261, 44.590635 ], "pop": 1027, "state": "NY" }, { "_id": "13681", "city": "RICHVILLE", "loc": [ -75.402455, 44.40454 ], "pop": 1502, "state": "NY" }, { "_id": "13682", "city": "RODMAN", "loc": [ -75.87187900000001, 43.862217 ], "pop": 1097, "state": "NY" }, { "_id": "13684", "city": "DEGRASSE", "loc": [ -75.113778, 44.380668 ], "pop": 717, "state": "NY" }, { "_id": "13685", "city": "SACKETS HARBOR", "loc": [ -76.105039, 43.93983 ], "pop": 1943, "state": "NY" }, { "_id": "13687", "city": "SOUTH COLTON", "loc": [ -74.860726, 44.504097 ], "pop": 169, "state": "NY" }, { "_id": "13690", "city": "STAR LAKE", "loc": [ -75.03301500000001, 44.157762 ], "pop": 1108, "state": "NY" }, { "_id": "13691", "city": "THERESA", "loc": [ -75.801419, 44.211288 ], "pop": 2558, "state": "NY" }, { "_id": "13693", "city": "THREE MILE BAY", "loc": [ -76.26893, 44.055102 ], "pop": 250, "state": "NY" }, { "_id": "13694", "city": "WADDINGTON", "loc": [ -75.204887, 44.856373 ], "pop": 1380, "state": "NY" }, { "_id": "13695", "city": "WANAKENA", "loc": [ -75.090765, 44.2184 ], "pop": 705, "state": "NY" }, { "_id": "13696", "city": "WEST STOCKHOLM", "loc": [ -74.891932, 44.728951 ], "pop": 301, "state": "NY" }, { "_id": "13697", "city": "WINTHROP", "loc": [ -74.806586, 44.758289 ], "pop": 2805, "state": "NY" }, { "_id": "13698", "city": "WOODVILLE", "loc": [ -76.17200200000001, 43.781245 ], "pop": 847, "state": "NY" }, { "_id": "13730", "city": "AFTON", "loc": [ -75.536604, 42.241737 ], "pop": 2801, "state": "NY" }, { "_id": "13731", "city": "ANDES", "loc": [ -74.788726, 42.156925 ], "pop": 985, "state": "NY" }, { "_id": "13732", "city": "APALACHIN", "loc": [ -76.15194, 42.055579 ], "pop": 8712, "state": "NY" }, { "_id": "13733", "city": "BAINBRIDGE", "loc": [ -75.489411, 42.311975 ], "pop": 5073, "state": "NY" }, { "_id": "13734", "city": "BARTON", "loc": [ -76.398349, 42.069534 ], "pop": 2081, "state": "NY" }, { "_id": "13736", "city": "BERKSHIRE", "loc": [ -76.192008, 42.307435 ], "pop": 2652, "state": "NY" }, { "_id": "13739", "city": "BLOOMVILLE", "loc": [ -74.807118, 42.352236 ], "pop": 1022, "state": "NY" }, { "_id": "13740", "city": "BOVINA CENTER", "loc": [ -74.76611200000001, 42.27094 ], "pop": 492, "state": "NY" }, { "_id": "13743", "city": "CANDOR", "loc": [ -76.332196, 42.206274 ], "pop": 4850, "state": "NY" }, { "_id": "13744", "city": "CASTLE CREEK", "loc": [ -75.90874599999999, 42.256805 ], "pop": 581, "state": "NY" }, { "_id": "13746", "city": "CHENANGO FORKS", "loc": [ -75.824236, 42.263659 ], "pop": 3833, "state": "NY" }, { "_id": "13748", "city": "CONKLIN", "loc": [ -75.807624, 42.045429 ], "pop": 4058, "state": "NY" }, { "_id": "13750", "city": "DAVENPORT", "loc": [ -74.83570899999999, 42.471081 ], "pop": 777, "state": "NY" }, { "_id": "13751", "city": "DAVENPORT CENTER", "loc": [ -74.906975, 42.452303 ], "pop": 62, "state": "NY" }, { "_id": "13752", "city": "DE LANCEY", "loc": [ -74.922899, 42.188984 ], "pop": 785, "state": "NY" }, { "_id": "13753", "city": "MEREDITH", "loc": [ -74.92282299999999, 42.287851 ], "pop": 5399, "state": "NY" }, { "_id": "13754", "city": "DEPOSIT", "loc": [ -75.42874500000001, 42.066581 ], "pop": 3047, "state": "NY" }, { "_id": "13755", "city": "DOWNSVILLE", "loc": [ -75.015216, 42.071634 ], "pop": 615, "state": "NY" }, { "_id": "13756", "city": "EAST BRANCH", "loc": [ -75.12518900000001, 41.984366 ], "pop": 839, "state": "NY" }, { "_id": "13757", "city": "EAST MEREDITH", "loc": [ -74.89869899999999, 42.410098 ], "pop": 1478, "state": "NY" }, { "_id": "13760", "city": "ENDWELL", "loc": [ -76.056927, 42.114089 ], "pop": 46236, "state": "NY" }, { "_id": "13775", "city": "FRANKLIN", "loc": [ -75.148475, 42.342117 ], "pop": 1807, "state": "NY" }, { "_id": "13776", "city": "GILBERTSVILLE", "loc": [ -75.360929, 42.432951 ], "pop": 10, "state": "NY" }, { "_id": "13777", "city": "GLEN AUBREY", "loc": [ -75.98054399999999, 42.257289 ], "pop": 1380, "state": "NY" }, { "_id": "13778", "city": "GREENE", "loc": [ -75.75954, 42.337301 ], "pop": 5025, "state": "NY" }, { "_id": "13780", "city": "GUILFORD", "loc": [ -75.48231800000001, 42.426901 ], "pop": 738, "state": "NY" }, { "_id": "13782", "city": "HAMDEN", "loc": [ -74.998391, 42.17873 ], "pop": 928, "state": "NY" }, { "_id": "13783", "city": "CADOSIA", "loc": [ -75.265306, 41.959667 ], "pop": 2766, "state": "NY" }, { "_id": "13786", "city": "HARPERSFIELD", "loc": [ -74.687059, 42.449901 ], "pop": 309, "state": "NY" }, { "_id": "13787", "city": "HARPURSVILLE", "loc": [ -75.654538, 42.18232 ], "pop": 4349, "state": "NY" }, { "_id": "13788", "city": "HOBART", "loc": [ -74.675889, 42.359409 ], "pop": 975, "state": "NY" }, { "_id": "13790", "city": "JOHNSON CITY", "loc": [ -75.968492, 42.126683 ], "pop": 20788, "state": "NY" }, { "_id": "13795", "city": "KIRKWOOD", "loc": [ -75.796711, 42.069463 ], "pop": 4133, "state": "NY" }, { "_id": "13796", "city": "LAURENS", "loc": [ -75.12794700000001, 42.538261 ], "pop": 1703, "state": "NY" }, { "_id": "13797", "city": "LISLE", "loc": [ -76.030237, 42.340923 ], "pop": 2331, "state": "NY" }, { "_id": "13801", "city": "MC DONOUGH", "loc": [ -75.762305, 42.506807 ], "pop": 881, "state": "NY" }, { "_id": "13802", "city": "MAINE", "loc": [ -76.05952600000001, 42.196204 ], "pop": 254, "state": "NY" }, { "_id": "13803", "city": "MARATHON", "loc": [ -76.039526, 42.452725 ], "pop": 3586, "state": "NY" }, { "_id": "13804", "city": "MASONVILLE", "loc": [ -75.215485, 42.262346 ], "pop": 15, "state": "NY" }, { "_id": "13806", "city": "MERIDALE", "loc": [ -74.98025800000001, 42.377987 ], "pop": 16, "state": "NY" }, { "_id": "13807", "city": "MILFORD", "loc": [ -74.968498, 42.614801 ], "pop": 1409, "state": "NY" }, { "_id": "13808", "city": "MORRIS", "loc": [ -75.244764, 42.547807 ], "pop": 1359, "state": "NY" }, { "_id": "13809", "city": "MOUNT UPTON", "loc": [ -75.400268, 42.408064 ], "pop": 1462, "state": "NY" }, { "_id": "13810", "city": "MOUNT VISION", "loc": [ -75.126366, 42.606763 ], "pop": 1261, "state": "NY" }, { "_id": "13811", "city": "NEWARK VALLEY", "loc": [ -76.16248, 42.228136 ], "pop": 4968, "state": "NY" }, { "_id": "13812", "city": "NICHOLS", "loc": [ -76.36103900000001, 42.031961 ], "pop": 2888, "state": "NY" }, { "_id": "13813", "city": "NINEVEH", "loc": [ -75.54840900000001, 42.162481 ], "pop": 975, "state": "NY" }, { "_id": "13815", "city": "NORWICH", "loc": [ -75.52743100000001, 42.54145 ], "pop": 15380, "state": "NY" }, { "_id": "13820", "city": "ONEONTA", "loc": [ -75.049072, 42.462453 ], "pop": 18196, "state": "NY" }, { "_id": "13825", "city": "OTEGO", "loc": [ -75.207883, 42.41333 ], "pop": 5075, "state": "NY" }, { "_id": "13826", "city": "OUAQUAGA", "loc": [ -75.647351, 42.119293 ], "pop": 75, "state": "NY" }, { "_id": "13827", "city": "OWEGO", "loc": [ -76.252797, 42.113809 ], "pop": 11378, "state": "NY" }, { "_id": "13830", "city": "BRISBEN", "loc": [ -75.606256, 42.443375 ], "pop": 5086, "state": "NY" }, { "_id": "13832", "city": "PLYMOUTH", "loc": [ -75.61716300000001, 42.633592 ], "pop": 445, "state": "NY" }, { "_id": "13833", "city": "SANITARIA SPRING", "loc": [ -75.790978, 42.195735 ], "pop": 4777, "state": "NY" }, { "_id": "13834", "city": "PORTLANDVILLE", "loc": [ -74.97605900000001, 42.510303 ], "pop": 916, "state": "NY" }, { "_id": "13835", "city": "RICHFORD", "loc": [ -76.18650100000001, 42.394521 ], "pop": 1383, "state": "NY" }, { "_id": "13838", "city": "SIDNEY", "loc": [ -75.3908, 42.307368 ], "pop": 4946, "state": "NY" }, { "_id": "13839", "city": "SIDNEY CENTER", "loc": [ -75.287057, 42.244085 ], "pop": 2020, "state": "NY" }, { "_id": "13841", "city": "SMITHVILLE FLATS", "loc": [ -75.823719, 42.398894 ], "pop": 484, "state": "NY" }, { "_id": "13842", "city": "SOUTH KORTRIGHT", "loc": [ -74.72590099999999, 42.376994 ], "pop": 253, "state": "NY" }, { "_id": "13843", "city": "SOUTH NEW BERLIN", "loc": [ -75.35249, 42.530569 ], "pop": 2702, "state": "NY" }, { "_id": "13844", "city": "SOUTH PLYMOUTH", "loc": [ -75.633, 42.605254 ], "pop": 510, "state": "NY" }, { "_id": "13846", "city": "TREADWELL", "loc": [ -75.05875399999999, 42.362963 ], "pop": 60, "state": "NY" }, { "_id": "13849", "city": "UNADILLA", "loc": [ -75.336589, 42.325199 ], "pop": 4027, "state": "NY" }, { "_id": "13850", "city": "VESTAL", "loc": [ -76.011757, 42.077106 ], "pop": 27686, "state": "NY" }, { "_id": "13856", "city": "WALTON", "loc": [ -75.153177, 42.175647 ], "pop": 7282, "state": "NY" }, { "_id": "13859", "city": "WELLS BRIDGE", "loc": [ -75.25656499999999, 42.357973 ], "pop": 232, "state": "NY" }, { "_id": "13861", "city": "WEST ONEONTA", "loc": [ -75.09568899999999, 42.453854 ], "pop": 3471, "state": "NY" }, { "_id": "13862", "city": "WHITNEY POINT", "loc": [ -75.952231, 42.338449 ], "pop": 4105, "state": "NY" }, { "_id": "13863", "city": "WILLET", "loc": [ -75.90143399999999, 42.452044 ], "pop": 188, "state": "NY" }, { "_id": "13864", "city": "WILLSEYVILLE", "loc": [ -76.38972099999999, 42.302915 ], "pop": 697, "state": "NY" }, { "_id": "13865", "city": "WINDSOR", "loc": [ -75.672828, 42.074482 ], "pop": 6820, "state": "NY" }, { "_id": "13901", "city": "BINGHAMTON", "loc": [ -75.886517, 42.146307 ], "pop": 21666, "state": "NY" }, { "_id": "13903", "city": "BINGHAMTON", "loc": [ -75.897676, 42.081102 ], "pop": 20353, "state": "NY" }, { "_id": "13904", "city": "BINGHAMTON", "loc": [ -75.865269, 42.11714 ], "pop": 10257, "state": "NY" }, { "_id": "13905", "city": "BINGHAMTON", "loc": [ -75.930865, 42.115051 ], "pop": 30741, "state": "NY" }, { "_id": "14001", "city": "AKRON", "loc": [ -78.508365, 43.024944 ], "pop": 7924, "state": "NY" }, { "_id": "14003", "city": "ALABAMA", "loc": [ -78.385231, 43.071888 ], "pop": 68, "state": "NY" }, { "_id": "14004", "city": "ALDEN", "loc": [ -78.525707, 42.89839 ], "pop": 12711, "state": "NY" }, { "_id": "14005", "city": "ALEXANDER", "loc": [ -78.25888999999999, 42.915851 ], "pop": 1692, "state": "NY" }, { "_id": "14006", "city": "ANGOLA", "loc": [ -79.049651, 42.636581 ], "pop": 11509, "state": "NY" }, { "_id": "14008", "city": "APPLETON", "loc": [ -78.63721700000001, 43.310535 ], "pop": 940, "state": "NY" }, { "_id": "14009", "city": "ARCADE", "loc": [ -78.41341799999999, 42.562995 ], "pop": 4898, "state": "NY" }, { "_id": "14011", "city": "ATTICA", "loc": [ -78.279826, 42.849918 ], "pop": 9372, "state": "NY" }, { "_id": "14012", "city": "BARKER", "loc": [ -78.54200400000001, 43.336779 ], "pop": 2441, "state": "NY" }, { "_id": "14013", "city": "BASOM", "loc": [ -78.395143, 43.080724 ], "pop": 2062, "state": "NY" }, { "_id": "14020", "city": "BATAVIA", "loc": [ -78.192869, 43.000316 ], "pop": 22835, "state": "NY" }, { "_id": "14024", "city": "BLISS", "loc": [ -78.258084, 42.579936 ], "pop": 1498, "state": "NY" }, { "_id": "14025", "city": "BOSTON", "loc": [ -78.73909, 42.631384 ], "pop": 2617, "state": "NY" }, { "_id": "14026", "city": "BOWMANSVILLE", "loc": [ -78.68296100000001, 42.947826 ], "pop": 285, "state": "NY" }, { "_id": "14028", "city": "BURT", "loc": [ -78.714097, 43.322089 ], "pop": 2363, "state": "NY" }, { "_id": "14030", "city": "CHAFFEE", "loc": [ -78.502543, 42.560492 ], "pop": 1481, "state": "NY" }, { "_id": "14031", "city": "CLARENCE", "loc": [ -78.61622800000001, 42.980965 ], "pop": 7712, "state": "NY" }, { "_id": "14032", "city": "CLARENCE CENTER", "loc": [ -78.63903000000001, 43.0362 ], "pop": 3996, "state": "NY" }, { "_id": "14033", "city": "COLDEN", "loc": [ -78.692078, 42.655052 ], "pop": 2380, "state": "NY" }, { "_id": "14034", "city": "COLLINS", "loc": [ -78.892974, 42.500082 ], "pop": 2194, "state": "NY" }, { "_id": "14036", "city": "CORFU", "loc": [ -78.392906, 42.977734 ], "pop": 4841, "state": "NY" }, { "_id": "14037", "city": "COWLESVILLE", "loc": [ -78.44813600000001, 42.811245 ], "pop": 1017, "state": "NY" }, { "_id": "14039", "city": "DALE", "loc": [ -78.174865, 42.826284 ], "pop": 72, "state": "NY" }, { "_id": "14040", "city": "DARIEN CENTER", "loc": [ -78.387782, 42.894806 ], "pop": 1817, "state": "NY" }, { "_id": "14041", "city": "DAYTON", "loc": [ -78.981842, 42.423075 ], "pop": 246, "state": "NY" }, { "_id": "14042", "city": "DELEVAN", "loc": [ -78.479326, 42.492598 ], "pop": 4516, "state": "NY" }, { "_id": "14043", "city": "DEPEW", "loc": [ -78.704052, 42.904973 ], "pop": 26460, "state": "NY" }, { "_id": "14047", "city": "DERBY", "loc": [ -78.98336500000001, 42.697445 ], "pop": 6436, "state": "NY" }, { "_id": "14048", "city": "VAN BUREN BAY", "loc": [ -79.32936599999999, 42.475907 ], "pop": 20303, "state": "NY" }, { "_id": "14051", "city": "SWORMVILLE", "loc": [ -78.705035, 43.029168 ], "pop": 12714, "state": "NY" }, { "_id": "14052", "city": "EAST AURORA", "loc": [ -78.601992, 42.770138 ], "pop": 17244, "state": "NY" }, { "_id": "14054", "city": "EAST BETHANY", "loc": [ -78.13420600000001, 42.916619 ], "pop": 1569, "state": "NY" }, { "_id": "14055", "city": "EAST CONCORD", "loc": [ -78.610972, 42.546585 ], "pop": 1216, "state": "NY" }, { "_id": "14057", "city": "EDEN", "loc": [ -78.878077, 42.650552 ], "pop": 7427, "state": "NY" }, { "_id": "14058", "city": "ELBA", "loc": [ -78.170383, 43.089739 ], "pop": 2331, "state": "NY" }, { "_id": "14059", "city": "ELMA", "loc": [ -78.63425700000001, 42.834002 ], "pop": 8130, "state": "NY" }, { "_id": "14060", "city": "FARMERSVILLE STA", "loc": [ -78.291533, 42.44827 ], "pop": 395, "state": "NY" }, { "_id": "14062", "city": "FORESTVILLE", "loc": [ -79.160743, 42.448229 ], "pop": 2858, "state": "NY" }, { "_id": "14063", "city": "FREDONIA", "loc": [ -79.33391399999999, 42.433345 ], "pop": 10738, "state": "NY" }, { "_id": "14065", "city": "FREEDOM", "loc": [ -78.35012999999999, 42.489693 ], "pop": 2001, "state": "NY" }, { "_id": "14066", "city": "GAINESVILLE", "loc": [ -78.17951600000001, 42.61897 ], "pop": 1536, "state": "NY" }, { "_id": "14067", "city": "GASPORT", "loc": [ -78.57453599999999, 43.210587 ], "pop": 6010, "state": "NY" }, { "_id": "14068", "city": "GETZVILLE", "loc": [ -78.753184, 43.023989 ], "pop": 5685, "state": "NY" }, { "_id": "14069", "city": "GLENWOOD", "loc": [ -78.638634, 42.600094 ], "pop": 632, "state": "NY" }, { "_id": "14070", "city": "GOWANDA", "loc": [ -78.933902, 42.471202 ], "pop": 6665, "state": "NY" }, { "_id": "14072", "city": "GRAND ISLAND", "loc": [ -78.959059, 43.018266 ], "pop": 17561, "state": "NY" }, { "_id": "14075", "city": "HAMBURG", "loc": [ -78.838853, 42.733404 ], "pop": 38851, "state": "NY" }, { "_id": "14080", "city": "HOLLAND", "loc": [ -78.54388899999999, 42.639582 ], "pop": 4004, "state": "NY" }, { "_id": "14081", "city": "IRVING", "loc": [ -79.059634, 42.573866 ], "pop": 2993, "state": "NY" }, { "_id": "14082", "city": "JAVA CENTER", "loc": [ -78.392527, 42.66342 ], "pop": 613, "state": "NY" }, { "_id": "14083", "city": "JAVA VILLAGE", "loc": [ -78.44101000000001, 42.676852 ], "pop": 35, "state": "NY" }, { "_id": "14085", "city": "LAKE VIEW", "loc": [ -78.932693, 42.721535 ], "pop": 4936, "state": "NY" }, { "_id": "14086", "city": "LANCASTER", "loc": [ -78.663085, 42.901681 ], "pop": 24540, "state": "NY" }, { "_id": "14091", "city": "LAWTONS", "loc": [ -78.921222, 42.540364 ], "pop": 1510, "state": "NY" }, { "_id": "14092", "city": "LEWISTON", "loc": [ -79.021547, 43.172165 ], "pop": 10540, "state": "NY" }, { "_id": "14094", "city": "LOCKPORT", "loc": [ -78.69234400000001, 43.159987 ], "pop": 48398, "state": "NY" }, { "_id": "14098", "city": "LYNDONVILLE", "loc": [ -78.381057, 43.323312 ], "pop": 3109, "state": "NY" }, { "_id": "14101", "city": "MACHIAS", "loc": [ -78.50586, 42.408271 ], "pop": 1860, "state": "NY" }, { "_id": "14102", "city": "MARILLA", "loc": [ -78.558656, 42.833216 ], "pop": 1063, "state": "NY" }, { "_id": "14103", "city": "MEDINA", "loc": [ -78.387422, 43.218428 ], "pop": 12042, "state": "NY" }, { "_id": "14105", "city": "MIDDLEPORT", "loc": [ -78.484055, 43.218257 ], "pop": 3929, "state": "NY" }, { "_id": "14108", "city": "NEWFANE", "loc": [ -78.70697199999999, 43.272443 ], "pop": 5261, "state": "NY" }, { "_id": "14111", "city": "NORTH COLLINS", "loc": [ -78.91073, 42.589648 ], "pop": 2429, "state": "NY" }, { "_id": "14113", "city": "NORTH JAVA", "loc": [ -78.337958, 42.677631 ], "pop": 606, "state": "NY" }, { "_id": "14120", "city": "NORTH TONAWANDA", "loc": [ -78.85099700000001, 43.049828 ], "pop": 51399, "state": "NY" }, { "_id": "14125", "city": "OAKFIELD", "loc": [ -78.270179, 43.071726 ], "pop": 3760, "state": "NY" }, { "_id": "14127", "city": "ORCHARD PARK", "loc": [ -78.751834, 42.763891 ], "pop": 26554, "state": "NY" }, { "_id": "14129", "city": "PERRYSBURG", "loc": [ -78.998108, 42.472289 ], "pop": 2198, "state": "NY" }, { "_id": "14131", "city": "RANSOMVILLE", "loc": [ -78.89815900000001, 43.228602 ], "pop": 5836, "state": "NY" }, { "_id": "14132", "city": "SANBORN", "loc": [ -78.878522, 43.141879 ], "pop": 5167, "state": "NY" }, { "_id": "14134", "city": "SARDINIA", "loc": [ -78.506415, 42.532976 ], "pop": 133, "state": "NY" }, { "_id": "14136", "city": "SILVER CREEK", "loc": [ -79.16280500000001, 42.535675 ], "pop": 5768, "state": "NY" }, { "_id": "14138", "city": "SOUTH DAYTON", "loc": [ -79.050132, 42.371803 ], "pop": 1600, "state": "NY" }, { "_id": "14139", "city": "SOUTH WALES", "loc": [ -78.545219, 42.706271 ], "pop": 2269, "state": "NY" }, { "_id": "14141", "city": "SPRINGVILLE", "loc": [ -78.68471700000001, 42.519982 ], "pop": 7146, "state": "NY" }, { "_id": "14143", "city": "STAFFORD", "loc": [ -78.089783, 42.982894 ], "pop": 2076, "state": "NY" }, { "_id": "14145", "city": "STRYKERSVILLE", "loc": [ -78.434714, 42.724892 ], "pop": 1374, "state": "NY" }, { "_id": "14150", "city": "TONAWANDA", "loc": [ -78.85472, 43.002837 ], "pop": 53410, "state": "NY" }, { "_id": "14167", "city": "VARYSBURG", "loc": [ -78.316749, 42.745935 ], "pop": 1782, "state": "NY" }, { "_id": "14170", "city": "WEST FALLS", "loc": [ -78.677937, 42.70532 ], "pop": 2217, "state": "NY" }, { "_id": "14171", "city": "WEST VALLEY", "loc": [ -78.627978, 42.43153 ], "pop": 2600, "state": "NY" }, { "_id": "14172", "city": "WILSON", "loc": [ -78.82439599999999, 43.29681 ], "pop": 3441, "state": "NY" }, { "_id": "14174", "city": "YOUNGSTOWN", "loc": [ -79.024545, 43.246075 ], "pop": 5728, "state": "NY" }, { "_id": "14201", "city": "BUFFALO", "loc": [ -78.884575, 42.896659 ], "pop": 16682, "state": "NY" }, { "_id": "14202", "city": "BUFFALO", "loc": [ -78.877948, 42.887038 ], "pop": 2828, "state": "NY" }, { "_id": "14203", "city": "BUFFALO", "loc": [ -78.868143, 42.893938 ], "pop": 1211, "state": "NY" }, { "_id": "14204", "city": "BUFFALO", "loc": [ -78.859736, 42.883978 ], "pop": 10962, "state": "NY" }, { "_id": "14206", "city": "BUFFALO", "loc": [ -78.81037499999999, 42.881132 ], "pop": 25496, "state": "NY" }, { "_id": "14207", "city": "BUFFALO", "loc": [ -78.89781499999999, 42.949062 ], "pop": 23890, "state": "NY" }, { "_id": "14208", "city": "BUFFALO", "loc": [ -78.850487, 42.915416 ], "pop": 14705, "state": "NY" }, { "_id": "14209", "city": "BUFFALO", "loc": [ -78.865629, 42.913 ], "pop": 8865, "state": "NY" }, { "_id": "14210", "city": "BUFFALO", "loc": [ -78.82055, 42.861432 ], "pop": 18506, "state": "NY" }, { "_id": "14211", "city": "BUFFALO", "loc": [ -78.82247700000001, 42.908153 ], "pop": 38411, "state": "NY" }, { "_id": "14212", "city": "BUFFALO", "loc": [ -78.82445800000001, 42.894553 ], "pop": 19935, "state": "NY" }, { "_id": "14213", "city": "BUFFALO", "loc": [ -78.889461, 42.916675 ], "pop": 32876, "state": "NY" }, { "_id": "14214", "city": "BUFFALO", "loc": [ -78.83740299999999, 42.941429 ], "pop": 21770, "state": "NY" }, { "_id": "14215", "city": "BUFFALO", "loc": [ -78.811504, 42.933536 ], "pop": 46789, "state": "NY" }, { "_id": "14216", "city": "BUFFALO", "loc": [ -78.859865, 42.949914 ], "pop": 24852, "state": "NY" }, { "_id": "14217", "city": "KENMORE", "loc": [ -78.87294799999999, 42.968618 ], "pop": 25547, "state": "NY" }, { "_id": "14218", "city": "LACKAWANNA", "loc": [ -78.817263, 42.818301 ], "pop": 22309, "state": "NY" }, { "_id": "14219", "city": "BLASDELL", "loc": [ -78.822228, 42.790039 ], "pop": 13376, "state": "NY" }, { "_id": "14220", "city": "BUFFALO", "loc": [ -78.81820500000001, 42.844138 ], "pop": 28994, "state": "NY" }, { "_id": "14221", "city": "WILLIAMSVILLE", "loc": [ -78.738044, 42.985621 ], "pop": 54703, "state": "NY" }, { "_id": "14222", "city": "BUFFALO", "loc": [ -78.876333, 42.916401 ], "pop": 12712, "state": "NY" }, { "_id": "14223", "city": "BUFFALO", "loc": [ -78.845, 42.973088 ], "pop": 25995, "state": "NY" }, { "_id": "14224", "city": "WEST SENECA", "loc": [ -78.75109, 42.836162 ], "pop": 41539, "state": "NY" }, { "_id": "14225", "city": "CHEEKTOWAGA", "loc": [ -78.76085500000001, 42.928642 ], "pop": 37707, "state": "NY" }, { "_id": "14226", "city": "AMHERST", "loc": [ -78.79984899999999, 42.967232 ], "pop": 31912, "state": "NY" }, { "_id": "14227", "city": "CHEEKTOWAGA", "loc": [ -78.741936, 42.877467 ], "pop": 25240, "state": "NY" }, { "_id": "14228", "city": "AMHERST", "loc": [ -78.774604, 43.018414 ], "pop": 1813, "state": "NY" }, { "_id": "14301", "city": "NIAGARA FALLS", "loc": [ -79.041443, 43.095467 ], "pop": 15756, "state": "NY" }, { "_id": "14303", "city": "NIAGARA FALLS", "loc": [ -79.036958, 43.087777 ], "pop": 8616, "state": "NY" }, { "_id": "14304", "city": "NIAGARA FALLS", "loc": [ -78.964375, 43.090844 ], "pop": 30527, "state": "NY" }, { "_id": "14305", "city": "NIAGARA FALLS", "loc": [ -79.03780399999999, 43.114648 ], "pop": 22726, "state": "NY" }, { "_id": "14410", "city": "ADAMS BASIN", "loc": [ -77.853905, 43.190644 ], "pop": 989, "state": "NY" }, { "_id": "14411", "city": "ALBION", "loc": [ -78.206846, 43.239827 ], "pop": 12743, "state": "NY" }, { "_id": "14414", "city": "AVON", "loc": [ -77.72739799999999, 42.903034 ], "pop": 6187, "state": "NY" }, { "_id": "14415", "city": "BELLONA", "loc": [ -77.021737, 42.755442 ], "pop": 182, "state": "NY" }, { "_id": "14416", "city": "BERGEN", "loc": [ -77.96033, 43.086937 ], "pop": 3092, "state": "NY" }, { "_id": "14418", "city": "BRANCHPORT", "loc": [ -77.20516499999999, 42.606537 ], "pop": 1126, "state": "NY" }, { "_id": "14420", "city": "BROCKPORT", "loc": [ -77.936797, 43.21284 ], "pop": 17492, "state": "NY" }, { "_id": "14422", "city": "BYRON", "loc": [ -78.062912, 43.073794 ], "pop": 2499, "state": "NY" }, { "_id": "14423", "city": "CALEDONIA", "loc": [ -77.849295, 42.956661 ], "pop": 4942, "state": "NY" }, { "_id": "14424", "city": "CANANDAIGUA", "loc": [ -77.284561, 42.868866 ], "pop": 20748, "state": "NY" }, { "_id": "14425", "city": "CANANDAIGUA", "loc": [ -77.341139, 42.959591 ], "pop": 10082, "state": "NY" }, { "_id": "14427", "city": "CASTILE", "loc": [ -78.054728, 42.635883 ], "pop": 2169, "state": "NY" }, { "_id": "14428", "city": "CLIFTON", "loc": [ -77.860339, 43.089617 ], "pop": 6481, "state": "NY" }, { "_id": "14432", "city": "CLIFTON SPRINGS", "loc": [ -77.143975, 42.963175 ], "pop": 5060, "state": "NY" }, { "_id": "14433", "city": "CLYDE", "loc": [ -76.87246399999999, 43.085549 ], "pop": 4565, "state": "NY" }, { "_id": "14435", "city": "CONESUS", "loc": [ -77.67469, 42.721643 ], "pop": 2364, "state": "NY" }, { "_id": "14437", "city": "DANSVILLE", "loc": [ -77.71090700000001, 42.569975 ], "pop": 8804, "state": "NY" }, { "_id": "14441", "city": "DRESDEN", "loc": [ -76.956389, 42.684565 ], "pop": 381, "state": "NY" }, { "_id": "14445", "city": "EAST ROCHESTER", "loc": [ -77.490596, 43.112808 ], "pop": 8868, "state": "NY" }, { "_id": "14450", "city": "FAIRPORT", "loc": [ -77.435956, 43.089198 ], "pop": 37337, "state": "NY" }, { "_id": "14454", "city": "GENESEO", "loc": [ -77.79955200000001, 42.793783 ], "pop": 9551, "state": "NY" }, { "_id": "14456", "city": "GENEVA", "loc": [ -76.991349, 42.86372 ], "pop": 20112, "state": "NY" }, { "_id": "14462", "city": "GROVELAND", "loc": [ -77.757334, 42.676046 ], "pop": 483, "state": "NY" }, { "_id": "14464", "city": "HAMLIN", "loc": [ -77.926996, 43.307577 ], "pop": 7355, "state": "NY" }, { "_id": "14466", "city": "HEMLOCK", "loc": [ -77.58199, 42.779957 ], "pop": 1160, "state": "NY" }, { "_id": "14467", "city": "HENRIETTA", "loc": [ -77.612224, 43.048264 ], "pop": 8450, "state": "NY" }, { "_id": "14468", "city": "HILTON", "loc": [ -77.790511, 43.292344 ], "pop": 15837, "state": "NY" }, { "_id": "14469", "city": "BLOOMFIELD", "loc": [ -77.45998299999999, 42.885101 ], "pop": 6129, "state": "NY" }, { "_id": "14470", "city": "HULBERTON", "loc": [ -78.040392, 43.225494 ], "pop": 8375, "state": "NY" }, { "_id": "14471", "city": "HONEOYE", "loc": [ -77.50543399999999, 42.768637 ], "pop": 2704, "state": "NY" }, { "_id": "14472", "city": "HONEOYE FALLS", "loc": [ -77.57812, 42.969499 ], "pop": 6768, "state": "NY" }, { "_id": "14475", "city": "IONIA", "loc": [ -77.50086, 42.938002 ], "pop": 232, "state": "NY" }, { "_id": "14476", "city": "KENDALL", "loc": [ -78.030359, 43.328415 ], "pop": 2186, "state": "NY" }, { "_id": "14477", "city": "KENT", "loc": [ -78.135533, 43.334064 ], "pop": 2040, "state": "NY" }, { "_id": "14478", "city": "BLUFF POINT", "loc": [ -77.105197, 42.601032 ], "pop": 1555, "state": "NY" }, { "_id": "14480", "city": "LAKEVILLE", "loc": [ -77.714865, 42.82957 ], "pop": 724, "state": "NY" }, { "_id": "14481", "city": "LEICESTER", "loc": [ -77.898976, 42.773903 ], "pop": 1881, "state": "NY" }, { "_id": "14482", "city": "LE ROY", "loc": [ -77.985097, 42.977377 ], "pop": 9037, "state": "NY" }, { "_id": "14485", "city": "LIMA", "loc": [ -77.608305, 42.901234 ], "pop": 4666, "state": "NY" }, { "_id": "14486", "city": "LINWOOD", "loc": [ -77.910422, 42.884721 ], "pop": 860, "state": "NY" }, { "_id": "14487", "city": "LIVONIA", "loc": [ -77.663472, 42.813514 ], "pop": 6108, "state": "NY" }, { "_id": "14489", "city": "LYONS", "loc": [ -76.989575, 43.07768 ], "pop": 8168, "state": "NY" }, { "_id": "14502", "city": "MACEDON", "loc": [ -77.337199, 43.078366 ], "pop": 8486, "state": "NY" }, { "_id": "14504", "city": "MANCHESTER", "loc": [ -77.229733, 42.969874 ], "pop": 1522, "state": "NY" }, { "_id": "14505", "city": "MARION", "loc": [ -77.186277, 43.154612 ], "pop": 4663, "state": "NY" }, { "_id": "14506", "city": "MENDON", "loc": [ -77.50013, 42.995307 ], "pop": 864, "state": "NY" }, { "_id": "14507", "city": "MIDDLESEX", "loc": [ -77.280509, 42.697624 ], "pop": 1256, "state": "NY" }, { "_id": "14510", "city": "TUSCARORA", "loc": [ -77.86108299999999, 42.705431 ], "pop": 7145, "state": "NY" }, { "_id": "14512", "city": "NAPLES", "loc": [ -77.390106, 42.640425 ], "pop": 4616, "state": "NY" }, { "_id": "14513", "city": "NEWARK", "loc": [ -77.09460199999999, 43.051909 ], "pop": 14670, "state": "NY" }, { "_id": "14514", "city": "NORTH CHILI", "loc": [ -77.800518, 43.118601 ], "pop": 4014, "state": "NY" }, { "_id": "14516", "city": "NORTH ROSE", "loc": [ -76.91515200000001, 43.196439 ], "pop": 2428, "state": "NY" }, { "_id": "14517", "city": "NUNDA", "loc": [ -77.91800600000001, 42.586708 ], "pop": 2439, "state": "NY" }, { "_id": "14519", "city": "ONTARIO", "loc": [ -77.308781, 43.229092 ], "pop": 10016, "state": "NY" }, { "_id": "14521", "city": "HAYT CORNERS", "loc": [ -76.821575, 42.676979 ], "pop": 3225, "state": "NY" }, { "_id": "14522", "city": "PALMYRA", "loc": [ -77.22179800000001, 43.062192 ], "pop": 9486, "state": "NY" }, { "_id": "14525", "city": "LINWOOD", "loc": [ -78.014698, 42.880088 ], "pop": 2628, "state": "NY" }, { "_id": "14526", "city": "PENFIELD", "loc": [ -77.45604299999999, 43.139638 ], "pop": 16675, "state": "NY" }, { "_id": "14527", "city": "PENN YAN", "loc": [ -77.05687, 42.664548 ], "pop": 11609, "state": "NY" }, { "_id": "14530", "city": "PERRY", "loc": [ -78.005882, 42.722852 ], "pop": 6218, "state": "NY" }, { "_id": "14532", "city": "PHELPS", "loc": [ -77.047264, 42.958178 ], "pop": 4366, "state": "NY" }, { "_id": "14533", "city": "WADSWORTH", "loc": [ -77.88254499999999, 42.84269 ], "pop": 2094, "state": "NY" }, { "_id": "14534", "city": "PITTSFORD", "loc": [ -77.514067, 43.069511 ], "pop": 27413, "state": "NY" }, { "_id": "14536", "city": "PORTAGEVILLE", "loc": [ -78.085635, 42.556957 ], "pop": 980, "state": "NY" }, { "_id": "14541", "city": "MAC DOUGALL", "loc": [ -76.853582, 42.761378 ], "pop": 3150, "state": "NY" }, { "_id": "14543", "city": "WEST RUSH", "loc": [ -77.665381, 42.998934 ], "pop": 2481, "state": "NY" }, { "_id": "14544", "city": "RUSHVILLE", "loc": [ -77.239538, 42.75973 ], "pop": 1948, "state": "NY" }, { "_id": "14545", "city": "SCOTTSBURG", "loc": [ -77.682633, 42.658907 ], "pop": 612, "state": "NY" }, { "_id": "14546", "city": "SCOTTSVILLE", "loc": [ -77.77425599999999, 43.02462 ], "pop": 5604, "state": "NY" }, { "_id": "14548", "city": "SHORTSVILLE", "loc": [ -77.227312, 42.969034 ], "pop": 4524, "state": "NY" }, { "_id": "14550", "city": "ROCK GLEN", "loc": [ -78.092994, 42.669446 ], "pop": 1824, "state": "NY" }, { "_id": "14551", "city": "SODUS", "loc": [ -77.05141, 43.221681 ], "pop": 5831, "state": "NY" }, { "_id": "14555", "city": "SODUS POINT", "loc": [ -76.98833, 43.265058 ], "pop": 1058, "state": "NY" }, { "_id": "14559", "city": "SPENCERPORT", "loc": [ -77.804333, 43.189502 ], "pop": 14137, "state": "NY" }, { "_id": "14560", "city": "SPRINGWATER", "loc": [ -77.57750299999999, 42.677598 ], "pop": 2319, "state": "NY" }, { "_id": "14561", "city": "STANLEY", "loc": [ -77.12070199999999, 42.830277 ], "pop": 3102, "state": "NY" }, { "_id": "14564", "city": "VICTOR", "loc": [ -77.41798199999999, 42.986597 ], "pop": 7322, "state": "NY" }, { "_id": "14568", "city": "WALWORTH", "loc": [ -77.28582, 43.140161 ], "pop": 5461, "state": "NY" }, { "_id": "14569", "city": "WARSAW", "loc": [ -78.142899, 42.741035 ], "pop": 5811, "state": "NY" }, { "_id": "14571", "city": "WATERPORT", "loc": [ -78.242958, 43.332563 ], "pop": 1669, "state": "NY" }, { "_id": "14572", "city": "WAYLAND", "loc": [ -77.590613, 42.559274 ], "pop": 5626, "state": "NY" }, { "_id": "14580", "city": "WEBSTER", "loc": [ -77.46158699999999, 43.219563 ], "pop": 35072, "state": "NY" }, { "_id": "14586", "city": "WEST HENRIETTA", "loc": [ -77.68713099999999, 43.039667 ], "pop": 5397, "state": "NY" }, { "_id": "14589", "city": "WILLIAMSON", "loc": [ -77.170011, 43.242071 ], "pop": 7947, "state": "NY" }, { "_id": "14590", "city": "WOLCOTT", "loc": [ -76.821748, 43.234129 ], "pop": 5356, "state": "NY" }, { "_id": "14591", "city": "WYOMING", "loc": [ -78.083292, 42.83175 ], "pop": 2074, "state": "NY" }, { "_id": "14604", "city": "ROCHESTER", "loc": [ -77.607978, 43.157729 ], "pop": 1434, "state": "NY" }, { "_id": "14605", "city": "ROCHESTER", "loc": [ -77.600711, 43.169758 ], "pop": 15196, "state": "NY" }, { "_id": "14606", "city": "ROCHESTER", "loc": [ -77.684488, 43.168455 ], "pop": 29822, "state": "NY" }, { "_id": "14607", "city": "ROCHESTER", "loc": [ -77.588976, 43.150086 ], "pop": 16479, "state": "NY" }, { "_id": "14608", "city": "ROCHESTER", "loc": [ -77.625803, 43.152144 ], "pop": 14631, "state": "NY" }, { "_id": "14609", "city": "ROCHESTER", "loc": [ -77.56370099999999, 43.174001 ], "pop": 45805, "state": "NY" }, { "_id": "14610", "city": "ROCHESTER", "loc": [ -77.54950100000001, 43.14524 ], "pop": 15167, "state": "NY" }, { "_id": "14611", "city": "ROCHESTER", "loc": [ -77.639353, 43.148375 ], "pop": 15951, "state": "NY" }, { "_id": "14612", "city": "ROCHESTER", "loc": [ -77.665228, 43.256576 ], "pop": 35820, "state": "NY" }, { "_id": "14613", "city": "ROCHESTER", "loc": [ -77.639276, 43.18308 ], "pop": 15525, "state": "NY" }, { "_id": "14614", "city": "ROCHESTER", "loc": [ -77.61418999999999, 43.155823 ], "pop": 1430, "state": "NY" }, { "_id": "14615", "city": "ROCHESTER", "loc": [ -77.652118, 43.20575 ], "pop": 16000, "state": "NY" }, { "_id": "14616", "city": "GREECE", "loc": [ -77.65123800000001, 43.232359 ], "pop": 26500, "state": "NY" }, { "_id": "14617", "city": "ROCHESTER", "loc": [ -77.599442, 43.220258 ], "pop": 24296, "state": "NY" }, { "_id": "14618", "city": "TWELVE CORNERS", "loc": [ -77.558801, 43.115416 ], "pop": 21912, "state": "NY" }, { "_id": "14619", "city": "ROCHESTER", "loc": [ -77.6481, 43.136685 ], "pop": 19393, "state": "NY" }, { "_id": "14620", "city": "ROCHESTER", "loc": [ -77.606239, 43.131711 ], "pop": 29819, "state": "NY" }, { "_id": "14621", "city": "ROCHESTER", "loc": [ -77.60428400000001, 43.183362 ], "pop": 36055, "state": "NY" }, { "_id": "14622", "city": "ROCHESTER", "loc": [ -77.55549000000001, 43.213959 ], "pop": 12489, "state": "NY" }, { "_id": "14623", "city": "ROCHESTER", "loc": [ -77.634412, 43.083371 ], "pop": 25127, "state": "NY" }, { "_id": "14624", "city": "WESTGATE", "loc": [ -77.733552, 43.12589 ], "pop": 35748, "state": "NY" }, { "_id": "14625", "city": "PANORAMA", "loc": [ -77.50318799999999, 43.14949 ], "pop": 12009, "state": "NY" }, { "_id": "14626", "city": "ROCHESTER", "loc": [ -77.703996, 43.21257 ], "pop": 25574, "state": "NY" }, { "_id": "14701", "city": "JAMESTOWN", "loc": [ -79.243989, 42.092845 ], "pop": 45344, "state": "NY" }, { "_id": "14706", "city": "ALLEGANY", "loc": [ -78.499883, 42.091827 ], "pop": 7885, "state": "NY" }, { "_id": "14708", "city": "ALMA", "loc": [ -78.040012, 42.016859 ], "pop": 200, "state": "NY" }, { "_id": "14709", "city": "ANGELICA", "loc": [ -77.994671, 42.326339 ], "pop": 1046, "state": "NY" }, { "_id": "14710", "city": "ASHVILLE", "loc": [ -79.405624, 42.108376 ], "pop": 2450, "state": "NY" }, { "_id": "14711", "city": "BELFAST", "loc": [ -78.094281, 42.320013 ], "pop": 2210, "state": "NY" }, { "_id": "14712", "city": "BEMUS POINT", "loc": [ -79.35808, 42.151346 ], "pop": 3591, "state": "NY" }, { "_id": "14714", "city": "BLACK CREEK", "loc": [ -78.23124900000001, 42.285528 ], "pop": 757, "state": "NY" }, { "_id": "14715", "city": "BOLIVAR", "loc": [ -78.144834, 42.070442 ], "pop": 3173, "state": "NY" }, { "_id": "14716", "city": "BROCTON", "loc": [ -79.43443000000001, 42.393973 ], "pop": 1863, "state": "NY" }, { "_id": "14717", "city": "CANEADEA", "loc": [ -78.197321, 42.370304 ], "pop": 798, "state": "NY" }, { "_id": "14718", "city": "CASSADAGA", "loc": [ -79.29928200000001, 42.350356 ], "pop": 1977, "state": "NY" }, { "_id": "14719", "city": "CATTARAUGUS", "loc": [ -78.88852799999999, 42.333291 ], "pop": 3853, "state": "NY" }, { "_id": "14721", "city": "CERES", "loc": [ -78.27268599999999, 41.99939 ], "pop": 33, "state": "NY" }, { "_id": "14723", "city": "CHERRY CREEK", "loc": [ -79.12027500000001, 42.312725 ], "pop": 1408, "state": "NY" }, { "_id": "14724", "city": "CLYMER", "loc": [ -79.668532, 42.055699 ], "pop": 2810, "state": "NY" }, { "_id": "14726", "city": "CONEWANGO VALLEY", "loc": [ -79.021956, 42.262467 ], "pop": 1562, "state": "NY" }, { "_id": "14727", "city": "CUBA", "loc": [ -78.275074, 42.18819 ], "pop": 5306, "state": "NY" }, { "_id": "14728", "city": "DEWITTVILLE", "loc": [ -79.419303, 42.239413 ], "pop": 1159, "state": "NY" }, { "_id": "14729", "city": "EAST OTTO", "loc": [ -78.743167, 42.3971 ], "pop": 1050, "state": "NY" }, { "_id": "14731", "city": "ELLICOTTVILLE", "loc": [ -78.66064, 42.295873 ], "pop": 1767, "state": "NY" }, { "_id": "14733", "city": "FALCONER", "loc": [ -79.189499, 42.123915 ], "pop": 3812, "state": "NY" }, { "_id": "14735", "city": "FILLMORE", "loc": [ -78.10623200000001, 42.463605 ], "pop": 2463, "state": "NY" }, { "_id": "14736", "city": "FINDLEY LAKE", "loc": [ -79.734908, 42.120401 ], "pop": 77, "state": "NY" }, { "_id": "14737", "city": "FRANKLINVILLE", "loc": [ -78.440043, 42.338823 ], "pop": 3965, "state": "NY" }, { "_id": "14738", "city": "FREWSBURG", "loc": [ -79.13179700000001, 42.052753 ], "pop": 3919, "state": "NY" }, { "_id": "14739", "city": "FRIENDSHIP", "loc": [ -78.13588, 42.190666 ], "pop": 3214, "state": "NY" }, { "_id": "14740", "city": "GERRY", "loc": [ -79.16486500000001, 42.214728 ], "pop": 1836, "state": "NY" }, { "_id": "14741", "city": "GREAT VALLEY", "loc": [ -78.620811, 42.208292 ], "pop": 2217, "state": "NY" }, { "_id": "14743", "city": "ISCHUA", "loc": [ -78.400611, 42.179747 ], "pop": 2635, "state": "NY" }, { "_id": "14744", "city": "HOUGHTON", "loc": [ -78.109506, 42.411567 ], "pop": 173, "state": "NY" }, { "_id": "14747", "city": "KENNEDY", "loc": [ -79.096416, 42.150776 ], "pop": 2719, "state": "NY" }, { "_id": "14748", "city": "KILL BUCK", "loc": [ -78.64260400000001, 42.141005 ], "pop": 47, "state": "NY" }, { "_id": "14750", "city": "LAKEWOOD", "loc": [ -79.32912399999999, 42.097256 ], "pop": 5113, "state": "NY" }, { "_id": "14753", "city": "LIMESTONE", "loc": [ -78.631979, 42.063945 ], "pop": 1981, "state": "NY" }, { "_id": "14754", "city": "LITTLE GENESEE", "loc": [ -78.235056, 42.023964 ], "pop": 1240, "state": "NY" }, { "_id": "14755", "city": "LITTLE VALLEY", "loc": [ -78.809286, 42.254121 ], "pop": 2311, "state": "NY" }, { "_id": "14757", "city": "MAYVILLE", "loc": [ -79.496325, 42.240906 ], "pop": 3378, "state": "NY" }, { "_id": "14760", "city": "OLEAN", "loc": [ -78.423265, 42.0787 ], "pop": 22055, "state": "NY" }, { "_id": "14767", "city": "PANAMA", "loc": [ -79.48153600000001, 42.056965 ], "pop": 2437, "state": "NY" }, { "_id": "14769", "city": "PORTLAND", "loc": [ -79.458894, 42.385792 ], "pop": 2001, "state": "NY" }, { "_id": "14770", "city": "PORTVILLE", "loc": [ -78.33135299999999, 42.027253 ], "pop": 1743, "state": "NY" }, { "_id": "14772", "city": "RANDOLPH", "loc": [ -78.96003399999999, 42.163143 ], "pop": 4253, "state": "NY" }, { "_id": "14775", "city": "RIPLEY", "loc": [ -79.712103, 42.248175 ], "pop": 2876, "state": "NY" }, { "_id": "14777", "city": "RUSHFORD", "loc": [ -78.18670400000001, 42.417216 ], "pop": 2701, "state": "NY" }, { "_id": "14779", "city": "SALAMANCA", "loc": [ -78.73042, 42.16035 ], "pop": 8632, "state": "NY" }, { "_id": "14781", "city": "SHERMAN", "loc": [ -79.585742, 42.163124 ], "pop": 2184, "state": "NY" }, { "_id": "14782", "city": "SINCLAIRVILLE", "loc": [ -79.267297, 42.24548 ], "pop": 3065, "state": "NY" }, { "_id": "14784", "city": "STOCKTON", "loc": [ -79.375792, 42.318195 ], "pop": 1894, "state": "NY" }, { "_id": "14787", "city": "WESTFIELD", "loc": [ -79.57264600000001, 42.321977 ], "pop": 5872, "state": "NY" }, { "_id": "14801", "city": "ADDISON", "loc": [ -77.26602699999999, 42.09825 ], "pop": 4967, "state": "NY" }, { "_id": "14802", "city": "ALFRED", "loc": [ -77.79295, 42.255165 ], "pop": 4559, "state": "NY" }, { "_id": "14803", "city": "ALFRED STATION", "loc": [ -77.77808400000001, 42.255799 ], "pop": 1071, "state": "NY" }, { "_id": "14804", "city": "ALMOND", "loc": [ -77.77796499999999, 42.316036 ], "pop": 1642, "state": "NY" }, { "_id": "14805", "city": "ALPINE", "loc": [ -76.734775, 42.351014 ], "pop": 1098, "state": "NY" }, { "_id": "14806", "city": "ANDOVER", "loc": [ -77.792008, 42.157454 ], "pop": 2489, "state": "NY" }, { "_id": "14807", "city": "ARKPORT", "loc": [ -77.691778, 42.422466 ], "pop": 2937, "state": "NY" }, { "_id": "14808", "city": "ATLANTA", "loc": [ -77.480091, 42.556269 ], "pop": 472, "state": "NY" }, { "_id": "14809", "city": "WALLACE", "loc": [ -77.434254, 42.41513 ], "pop": 2448, "state": "NY" }, { "_id": "14810", "city": "VETERANS ADMINIS", "loc": [ -77.323255, 42.345451 ], "pop": 12982, "state": "NY" }, { "_id": "14812", "city": "BEAVER DAMS", "loc": [ -76.971953, 42.279763 ], "pop": 3765, "state": "NY" }, { "_id": "14813", "city": "BELMONT", "loc": [ -78.01103000000001, 42.233409 ], "pop": 1773, "state": "NY" }, { "_id": "14814", "city": "BIG FLATS", "loc": [ -76.952721, 42.145509 ], "pop": 1892, "state": "NY" }, { "_id": "14815", "city": "BRADFORD", "loc": [ -77.09134, 42.382517 ], "pop": 944, "state": "NY" }, { "_id": "14816", "city": "BREESPORT", "loc": [ -76.73612, 42.19392 ], "pop": 160, "state": "NY" }, { "_id": "14817", "city": "BROOKTONDALE", "loc": [ -76.366844, 42.37653 ], "pop": 2665, "state": "NY" }, { "_id": "14818", "city": "BURDETT", "loc": [ -76.82921899999999, 42.439442 ], "pop": 1714, "state": "NY" }, { "_id": "14819", "city": "CAMERON", "loc": [ -77.440341, 42.21284 ], "pop": 698, "state": "NY" }, { "_id": "14820", "city": "CAMERON MILLS", "loc": [ -77.364976, 42.192547 ], "pop": 723, "state": "NY" }, { "_id": "14821", "city": "CAMPBELL", "loc": [ -77.206619, 42.238569 ], "pop": 2966, "state": "NY" }, { "_id": "14822", "city": "CANASERAGA", "loc": [ -77.795374, 42.458504 ], "pop": 1458, "state": "NY" }, { "_id": "14823", "city": "CANISTEO", "loc": [ -77.58970600000001, 42.263503 ], "pop": 3945, "state": "NY" }, { "_id": "14824", "city": "CAYUTA", "loc": [ -76.697367, 42.277445 ], "pop": 599, "state": "NY" }, { "_id": "14825", "city": "CHEMUNG", "loc": [ -76.62022399999999, 42.039243 ], "pop": 615, "state": "NY" }, { "_id": "14826", "city": "COHOCTON", "loc": [ -77.499763, 42.500315 ], "pop": 2286, "state": "NY" }, { "_id": "14830", "city": "CORNING", "loc": [ -77.047546, 42.138331 ], "pop": 19957, "state": "NY" }, { "_id": "14836", "city": "DALTON", "loc": [ -77.928889, 42.544895 ], "pop": 875, "state": "NY" }, { "_id": "14837", "city": "DUNDEE", "loc": [ -77.002773, 42.505261 ], "pop": 5125, "state": "NY" }, { "_id": "14838", "city": "ERIN", "loc": [ -76.68194200000001, 42.185898 ], "pop": 2053, "state": "NY" }, { "_id": "14839", "city": "GREENWOOD", "loc": [ -77.63604100000001, 42.139809 ], "pop": 927, "state": "NY" }, { "_id": "14840", "city": "HAMMONDSPORT", "loc": [ -77.19770200000001, 42.431217 ], "pop": 3068, "state": "NY" }, { "_id": "14841", "city": "HECTOR", "loc": [ -76.878597, 42.49658 ], "pop": 147, "state": "NY" }, { "_id": "14842", "city": "HIMROD", "loc": [ -76.950774, 42.594455 ], "pop": 726, "state": "NY" }, { "_id": "14843", "city": "HORNELL", "loc": [ -77.656907, 42.327393 ], "pop": 14311, "state": "NY" }, { "_id": "14845", "city": "HORSEHEADS", "loc": [ -76.83453900000001, 42.180493 ], "pop": 20799, "state": "NY" }, { "_id": "14846", "city": "HUNT", "loc": [ -77.98183899999999, 42.538821 ], "pop": 1236, "state": "NY" }, { "_id": "14847", "city": "INTERLAKEN", "loc": [ -76.726798, 42.616524 ], "pop": 2148, "state": "NY" }, { "_id": "14850", "city": "ITHACA COLLEGE", "loc": [ -76.49291100000001, 42.448497 ], "pop": 40760, "state": "NY" }, { "_id": "14853", "city": "ITHACA", "loc": [ -76.48870700000001, 42.443087 ], "pop": 20379, "state": "NY" }, { "_id": "14855", "city": "JASPER", "loc": [ -77.499909, 42.128962 ], "pop": 870, "state": "NY" }, { "_id": "14858", "city": "LINDLEY", "loc": [ -77.154132, 42.042483 ], "pop": 1765, "state": "NY" }, { "_id": "14859", "city": "LOCKWOOD", "loc": [ -76.536618, 42.114943 ], "pop": 951, "state": "NY" }, { "_id": "14860", "city": "LODI", "loc": [ -76.833904, 42.596555 ], "pop": 1209, "state": "NY" }, { "_id": "14861", "city": "LOWMAN", "loc": [ -76.693005, 42.06938 ], "pop": 2338, "state": "NY" }, { "_id": "14864", "city": "MILLPORT", "loc": [ -76.83923299999999, 42.258084 ], "pop": 1432, "state": "NY" }, { "_id": "14865", "city": "MONTOUR FALLS", "loc": [ -76.839581, 42.343678 ], "pop": 2851, "state": "NY" }, { "_id": "14867", "city": "NEWFIELD", "loc": [ -76.591978, 42.362137 ], "pop": 5311, "state": "NY" }, { "_id": "14869", "city": "ODESSA", "loc": [ -76.771698, 42.360947 ], "pop": 1471, "state": "NY" }, { "_id": "14870", "city": "PAINTED POST", "loc": [ -77.11937500000001, 42.170967 ], "pop": 9269, "state": "NY" }, { "_id": "14871", "city": "PINE CITY", "loc": [ -76.881519, 42.041938 ], "pop": 4911, "state": "NY" }, { "_id": "14872", "city": "PINE VALLEY", "loc": [ -76.865206, 42.234795 ], "pop": 252, "state": "NY" }, { "_id": "14873", "city": "PRATTSBURG", "loc": [ -77.282455, 42.526918 ], "pop": 2534, "state": "NY" }, { "_id": "14874", "city": "PULTENEY", "loc": [ -77.16910799999999, 42.523275 ], "pop": 504, "state": "NY" }, { "_id": "14877", "city": "REXVILLE", "loc": [ -77.676663, 42.072645 ], "pop": 539, "state": "NY" }, { "_id": "14878", "city": "ROCK STREAM", "loc": [ -76.936436, 42.448511 ], "pop": 703, "state": "NY" }, { "_id": "14879", "city": "SAVONA", "loc": [ -77.20834499999999, 42.30407 ], "pop": 1982, "state": "NY" }, { "_id": "14880", "city": "SCIO", "loc": [ -77.990026, 42.169703 ], "pop": 2491, "state": "NY" }, { "_id": "14881", "city": "SLATERVILLE SPRI", "loc": [ -76.31567699999999, 42.401119 ], "pop": 107, "state": "NY" }, { "_id": "14882", "city": "LANSING", "loc": [ -76.53745499999999, 42.564494 ], "pop": 4043, "state": "NY" }, { "_id": "14883", "city": "SPENCER", "loc": [ -76.489853, 42.246736 ], "pop": 3829, "state": "NY" }, { "_id": "14884", "city": "SWAIN", "loc": [ -77.88899000000001, 42.477314 ], "pop": 267, "state": "NY" }, { "_id": "14885", "city": "TROUPSBURG", "loc": [ -77.550208, 42.050083 ], "pop": 831, "state": "NY" }, { "_id": "14886", "city": "TRUMANSBURG", "loc": [ -76.668145, 42.520987 ], "pop": 6379, "state": "NY" }, { "_id": "14888", "city": "VALOIS", "loc": [ -76.860879, 42.524304 ], "pop": 547, "state": "NY" }, { "_id": "14889", "city": "VAN ETTEN", "loc": [ -76.571663, 42.208455 ], "pop": 1477, "state": "NY" }, { "_id": "14891", "city": "WATKINS GLEN", "loc": [ -76.90215000000001, 42.377121 ], "pop": 4584, "state": "NY" }, { "_id": "14892", "city": "WAVERLY", "loc": [ -76.53330800000001, 42.017228 ], "pop": 8262, "state": "NY" }, { "_id": "14894", "city": "WELLSBURG", "loc": [ -76.77231500000001, 42.027317 ], "pop": 2829, "state": "NY" }, { "_id": "14895", "city": "WELLSVILLE", "loc": [ -77.94190999999999, 42.110757 ], "pop": 9645, "state": "NY" }, { "_id": "14897", "city": "WHITESVILLE", "loc": [ -77.810615, 42.045586 ], "pop": 1178, "state": "NY" }, { "_id": "14898", "city": "WOODHULL", "loc": [ -77.420333, 42.073638 ], "pop": 1318, "state": "NY" }, { "_id": "14901", "city": "ELMIRA", "loc": [ -76.811977, 42.100769 ], "pop": 19037, "state": "NY" }, { "_id": "14903", "city": "ELMIRA HEIGHTS", "loc": [ -76.84357199999999, 42.130203 ], "pop": 7918, "state": "NY" }, { "_id": "14904", "city": "ELMIRA", "loc": [ -76.803735, 42.072866 ], "pop": 18103, "state": "NY" }, { "_id": "14905", "city": "ELMIRA", "loc": [ -76.839686, 42.086919 ], "pop": 10018, "state": "NY" }, { "_id": "15001", "city": "MACARTHUR", "loc": [ -80.281567, 40.604424 ], "pop": 36849, "state": "PA" }, { "_id": "15003", "city": "FAIROAKS", "loc": [ -80.21977800000001, 40.595368 ], "pop": 13449, "state": "PA" }, { "_id": "15005", "city": "BADEN", "loc": [ -80.198471, 40.641595 ], "pop": 10068, "state": "PA" }, { "_id": "15007", "city": "BAKERSTOWN", "loc": [ -79.93095599999999, 40.647826 ], "pop": 782, "state": "PA" }, { "_id": "15009", "city": "BEAVER", "loc": [ -80.336528, 40.697184 ], "pop": 14968, "state": "PA" }, { "_id": "15010", "city": "RACINE", "loc": [ -80.33987999999999, 40.766234 ], "pop": 30623, "state": "PA" }, { "_id": "15012", "city": "ROSTRAVER", "loc": [ -79.83454, 40.14368 ], "pop": 18967, "state": "PA" }, { "_id": "15014", "city": "BRACKENRIDGE", "loc": [ -79.74137500000001, 40.608223 ], "pop": 3674, "state": "PA" }, { "_id": "15015", "city": "BRADFORDWOODS", "loc": [ -80.08230500000001, 40.634175 ], "pop": 2319, "state": "PA" }, { "_id": "15017", "city": "BRIDGEVILLE", "loc": [ -80.11529299999999, 40.347195 ], "pop": 12705, "state": "PA" }, { "_id": "15018", "city": "BUENA VISTA", "loc": [ -79.79187400000001, 40.278635 ], "pop": 1186, "state": "PA" }, { "_id": "15019", "city": "BULGER", "loc": [ -80.36219199999999, 40.405119 ], "pop": 1118, "state": "PA" }, { "_id": "15021", "city": "PARIS", "loc": [ -80.444485, 40.390114 ], "pop": 5527, "state": "PA" }, { "_id": "15022", "city": "CHARLEROI", "loc": [ -79.92001999999999, 40.140402 ], "pop": 11800, "state": "PA" }, { "_id": "15024", "city": "CHESWICK", "loc": [ -79.841002, 40.568117 ], "pop": 9823, "state": "PA" }, { "_id": "15025", "city": "LARGE", "loc": [ -79.910096, 40.298917 ], "pop": 17031, "state": "PA" }, { "_id": "15026", "city": "CLINTON", "loc": [ -80.342282, 40.513148 ], "pop": 2543, "state": "PA" }, { "_id": "15027", "city": "CONWAY", "loc": [ -80.234899, 40.664917 ], "pop": 2438, "state": "PA" }, { "_id": "15030", "city": "CREIGHTON", "loc": [ -79.78176999999999, 40.582051 ], "pop": 1761, "state": "PA" }, { "_id": "15031", "city": "CUDDY", "loc": [ -80.16443200000001, 40.360069 ], "pop": 1037, "state": "PA" }, { "_id": "15033", "city": "DONORA", "loc": [ -79.861858, 40.176821 ], "pop": 5928, "state": "PA" }, { "_id": "15034", "city": "DRAVOSBURG", "loc": [ -79.889461, 40.352676 ], "pop": 2377, "state": "PA" }, { "_id": "15035", "city": "EAST MC KEESPORT", "loc": [ -79.80788099999999, 40.383944 ], "pop": 2698, "state": "PA" }, { "_id": "15037", "city": "ELIZABETH", "loc": [ -79.856842, 40.265575 ], "pop": 12937, "state": "PA" }, { "_id": "15042", "city": "FREEDOM", "loc": [ -80.214663, 40.683023 ], "pop": 9416, "state": "PA" }, { "_id": "15043", "city": "GEORGETOWN", "loc": [ -80.49002299999999, 40.574275 ], "pop": 2810, "state": "PA" }, { "_id": "15044", "city": "GIBSONIA", "loc": [ -79.94430699999999, 40.625233 ], "pop": 18318, "state": "PA" }, { "_id": "15045", "city": "GLASSPORT", "loc": [ -79.888324, 40.325952 ], "pop": 5582, "state": "PA" }, { "_id": "15049", "city": "HARWICK", "loc": [ -79.805115, 40.557433 ], "pop": 1111, "state": "PA" }, { "_id": "15050", "city": "HOOKSTOWN", "loc": [ -80.436268, 40.542929 ], "pop": 2933, "state": "PA" }, { "_id": "15051", "city": "INDIANOLA", "loc": [ -79.881765, 40.576605 ], "pop": 1539, "state": "PA" }, { "_id": "15052", "city": "INDUSTRY", "loc": [ -80.415085, 40.667101 ], "pop": 2908, "state": "PA" }, { "_id": "15053", "city": "JOFFRE", "loc": [ -80.391542, 40.381027 ], "pop": 1634, "state": "PA" }, { "_id": "15055", "city": "LAWRENCE", "loc": [ -80.144029, 40.311615 ], "pop": 1933, "state": "PA" }, { "_id": "15056", "city": "LEETSDALE", "loc": [ -80.209874, 40.566165 ], "pop": 1387, "state": "PA" }, { "_id": "15057", "city": "MC DONALD", "loc": [ -80.256204, 40.369664 ], "pop": 9077, "state": "PA" }, { "_id": "15059", "city": "MIDLAND", "loc": [ -80.468952, 40.658962 ], "pop": 6476, "state": "PA" }, { "_id": "15060", "city": "MIDWAY", "loc": [ -80.29209, 40.367974 ], "pop": 1043, "state": "PA" }, { "_id": "15061", "city": "MONACA", "loc": [ -80.291743, 40.671847 ], "pop": 13344, "state": "PA" }, { "_id": "15062", "city": "MONESSEN", "loc": [ -79.883526, 40.152379 ], "pop": 9906, "state": "PA" }, { "_id": "15063", "city": "MONONGAHELA", "loc": [ -79.924127, 40.193728 ], "pop": 13183, "state": "PA" }, { "_id": "15064", "city": "MORGAN", "loc": [ -80.15406400000001, 40.360433 ], "pop": 1751, "state": "PA" }, { "_id": "15065", "city": "NATRONA", "loc": [ -79.725621, 40.628862 ], "pop": 13305, "state": "PA" }, { "_id": "15066", "city": "NEW BRIGHTON", "loc": [ -80.29722, 40.739333 ], "pop": 12222, "state": "PA" }, { "_id": "15067", "city": "NEW EAGLE", "loc": [ -79.953408, 40.206573 ], "pop": 2222, "state": "PA" }, { "_id": "15068", "city": "ARNOLD", "loc": [ -79.741547, 40.571179 ], "pop": 41922, "state": "PA" }, { "_id": "15071", "city": "NOBLESTOWN", "loc": [ -80.20261499999999, 40.428734 ], "pop": 11012, "state": "PA" }, { "_id": "15074", "city": "ROCHESTER", "loc": [ -80.26031500000001, 40.715745 ], "pop": 10784, "state": "PA" }, { "_id": "15076", "city": "RUSSELLTON", "loc": [ -79.837102, 40.614344 ], "pop": 1437, "state": "PA" }, { "_id": "15077", "city": "SHIPPINGPORT", "loc": [ -80.419866, 40.626012 ], "pop": 227, "state": "PA" }, { "_id": "15078", "city": "SLOVAN", "loc": [ -80.39923899999999, 40.363086 ], "pop": 1620, "state": "PA" }, { "_id": "15083", "city": "SUTERSVILLE", "loc": [ -79.79222300000001, 40.238207 ], "pop": 1467, "state": "PA" }, { "_id": "15084", "city": "TARENTUM", "loc": [ -79.78520399999999, 40.618651 ], "pop": 10752, "state": "PA" }, { "_id": "15085", "city": "LEVEL GREEN", "loc": [ -79.755157, 40.385155 ], "pop": 3345, "state": "PA" }, { "_id": "15086", "city": "WARRENDALE", "loc": [ -80.08070499999999, 40.664149 ], "pop": 379, "state": "PA" }, { "_id": "15089", "city": "WEST NEWTON", "loc": [ -79.757976, 40.207549 ], "pop": 7641, "state": "PA" }, { "_id": "15090", "city": "WEXFORD", "loc": [ -80.064879, 40.612044 ], "pop": 14960, "state": "PA" }, { "_id": "15101", "city": "ALLISON PARK", "loc": [ -79.96651199999999, 40.569975 ], "pop": 22474, "state": "PA" }, { "_id": "15102", "city": "BETHEL PARK", "loc": [ -80.039793, 40.320984 ], "pop": 31160, "state": "PA" }, { "_id": "15104", "city": "RANKIN", "loc": [ -79.864352, 40.406304 ], "pop": 13915, "state": "PA" }, { "_id": "15106", "city": "CARNEGIE", "loc": [ -80.091532, 40.402941 ], "pop": 19539, "state": "PA" }, { "_id": "15108", "city": "MOON TWP", "loc": [ -80.18969, 40.513245 ], "pop": 35285, "state": "PA" }, { "_id": "15110", "city": "DUQUESNE", "loc": [ -79.852244, 40.370449 ], "pop": 8525, "state": "PA" }, { "_id": "15112", "city": "EAST PITTSBURGH", "loc": [ -79.83889000000001, 40.403577 ], "pop": 4145, "state": "PA" }, { "_id": "15116", "city": "GLENSHAW", "loc": [ -79.96435099999999, 40.537492 ], "pop": 16588, "state": "PA" }, { "_id": "15120", "city": "MUNHALL", "loc": [ -79.90419900000001, 40.394171 ], "pop": 21866, "state": "PA" }, { "_id": "15122", "city": "W MIFFLIN FIN", "loc": [ -79.89429, 40.366535 ], "pop": 22805, "state": "PA" }, { "_id": "15126", "city": "IMPERIAL", "loc": [ -80.264861, 40.458384 ], "pop": 3626, "state": "PA" }, { "_id": "15129", "city": "LIBRARY", "loc": [ -80.001144, 40.292199 ], "pop": 11353, "state": "PA" }, { "_id": "15131", "city": "WHITE OAK", "loc": [ -79.810519, 40.341147 ], "pop": 9410, "state": "PA" }, { "_id": "15132", "city": "MC KEESPORT", "loc": [ -79.84520000000001, 40.341713 ], "pop": 27694, "state": "PA" }, { "_id": "15133", "city": "MC KEESPORT", "loc": [ -79.866759, 40.332835 ], "pop": 7385, "state": "PA" }, { "_id": "15135", "city": "BOSTON", "loc": [ -79.812844, 40.304412 ], "pop": 5385, "state": "PA" }, { "_id": "15136", "city": "MC KEES ROCKS", "loc": [ -80.08756700000001, 40.471742 ], "pop": 25092, "state": "PA" }, { "_id": "15137", "city": "NORTH VERSAILLES", "loc": [ -79.812427, 40.376248 ], "pop": 12237, "state": "PA" }, { "_id": "15139", "city": "OAKMONT", "loc": [ -79.836865, 40.519647 ], "pop": 6961, "state": "PA" }, { "_id": "15140", "city": "PITCAIRN", "loc": [ -79.776951, 40.404787 ], "pop": 4083, "state": "PA" }, { "_id": "15142", "city": "PRESTO", "loc": [ -80.12092199999999, 40.384664 ], "pop": 864, "state": "PA" }, { "_id": "15143", "city": "SEWICKLEY", "loc": [ -80.157848, 40.557031 ], "pop": 15849, "state": "PA" }, { "_id": "15144", "city": "SPRINGDALE", "loc": [ -79.784447, 40.543999 ], "pop": 4858, "state": "PA" }, { "_id": "15145", "city": "TURTLE CREEK", "loc": [ -79.822046, 40.41135 ], "pop": 8157, "state": "PA" }, { "_id": "15146", "city": "MONROEVILLE", "loc": [ -79.76227900000001, 40.429026 ], "pop": 29228, "state": "PA" }, { "_id": "15147", "city": "VERONA", "loc": [ -79.834535, 40.492727 ], "pop": 20843, "state": "PA" }, { "_id": "15148", "city": "WALL", "loc": [ -79.803033, 40.393416 ], "pop": 3074, "state": "PA" }, { "_id": "15201", "city": "ARSENAL", "loc": [ -79.952524, 40.474536 ], "pop": 15278, "state": "PA" }, { "_id": "15202", "city": "BELLEVUE", "loc": [ -80.06696599999999, 40.501321 ], "pop": 22168, "state": "PA" }, { "_id": "15203", "city": "CARSON", "loc": [ -79.97755600000001, 40.425439 ], "pop": 11012, "state": "PA" }, { "_id": "15204", "city": "CORLISS", "loc": [ -80.06105599999999, 40.455569 ], "pop": 10266, "state": "PA" }, { "_id": "15205", "city": "CRAFTON", "loc": [ -80.073393, 40.438045 ], "pop": 24562, "state": "PA" }, { "_id": "15206", "city": "EAST LIBERTY", "loc": [ -79.919267, 40.468885 ], "pop": 37220, "state": "PA" }, { "_id": "15207", "city": "HAZELWOOD", "loc": [ -79.93393500000001, 40.401206 ], "pop": 15095, "state": "PA" }, { "_id": "15208", "city": "HOMEWOOD", "loc": [ -79.89847399999999, 40.454955 ], "pop": 16136, "state": "PA" }, { "_id": "15209", "city": "MILLVALE", "loc": [ -79.97401000000001, 40.49718 ], "pop": 15034, "state": "PA" }, { "_id": "15210", "city": "MOUNT OLIVER", "loc": [ -79.987405, 40.408541 ], "pop": 35727, "state": "PA" }, { "_id": "15211", "city": "MOUNT WASHINGTON", "loc": [ -80.012156, 40.42908 ], "pop": 13333, "state": "PA" }, { "_id": "15212", "city": "ALLEGHENY", "loc": [ -80.01312799999999, 40.468873 ], "pop": 35280, "state": "PA" }, { "_id": "15213", "city": "OAKLAND", "loc": [ -79.95442799999999, 40.44372 ], "pop": 31142, "state": "PA" }, { "_id": "15214", "city": "OBSERVATORY", "loc": [ -80.01393, 40.481309 ], "pop": 19981, "state": "PA" }, { "_id": "15215", "city": "ASPINWALL", "loc": [ -79.917513, 40.499225 ], "pop": 12801, "state": "PA" }, { "_id": "15216", "city": "SOUTH HILLS", "loc": [ -80.03572699999999, 40.399584 ], "pop": 26700, "state": "PA" }, { "_id": "15217", "city": "SQUIRREL HILL", "loc": [ -79.92497299999999, 40.431852 ], "pop": 27450, "state": "PA" }, { "_id": "15218", "city": "SWISSVALE", "loc": [ -79.887591, 40.424468 ], "pop": 16501, "state": "PA" }, { "_id": "15219", "city": "UPTOWN", "loc": [ -79.97722899999999, 40.44539 ], "pop": 18924, "state": "PA" }, { "_id": "15220", "city": "PARKWAY CENTER", "loc": [ -80.051202, 40.417405 ], "pop": 19228, "state": "PA" }, { "_id": "15221", "city": "WILKINSBURG", "loc": [ -79.870243, 40.438352 ], "pop": 39410, "state": "PA" }, { "_id": "15222", "city": "DOWNTOWN", "loc": [ -80.000556, 40.442111 ], "pop": 1763, "state": "PA" }, { "_id": "15223", "city": "ETNA", "loc": [ -79.95144999999999, 40.50428 ], "pop": 7261, "state": "PA" }, { "_id": "15224", "city": "BLOOMFIELD", "loc": [ -79.94544500000001, 40.464215 ], "pop": 14742, "state": "PA" }, { "_id": "15225", "city": "NEVILLE ISLAND", "loc": [ -80.137027, 40.513819 ], "pop": 1273, "state": "PA" }, { "_id": "15226", "city": "BROOKLINE", "loc": [ -80.015759, 40.394628 ], "pop": 15607, "state": "PA" }, { "_id": "15227", "city": "BRENTWOOD", "loc": [ -79.97581599999999, 40.37619 ], "pop": 27563, "state": "PA" }, { "_id": "15228", "city": "MOUNT LEBANON", "loc": [ -80.04318600000001, 40.371326 ], "pop": 18660, "state": "PA" }, { "_id": "15229", "city": "WEST VIEW", "loc": [ -80.035685, 40.519321 ], "pop": 15127, "state": "PA" }, { "_id": "15232", "city": "SHADYSIDE", "loc": [ -79.932557, 40.453598 ], "pop": 10936, "state": "PA" }, { "_id": "15233", "city": "KILBUCK", "loc": [ -80.029965, 40.460425 ], "pop": 5918, "state": "PA" }, { "_id": "15234", "city": "CASTLE SHANNON", "loc": [ -80.01790699999999, 40.369424 ], "pop": 14952, "state": "PA" }, { "_id": "15235", "city": "PENN HILLS", "loc": [ -79.826892, 40.4605 ], "pop": 41997, "state": "PA" }, { "_id": "15236", "city": "CASTE VILLAGE", "loc": [ -79.976894, 40.345244 ], "pop": 36047, "state": "PA" }, { "_id": "15237", "city": "MC KNIGHT", "loc": [ -80.03493899999999, 40.552238 ], "pop": 39733, "state": "PA" }, { "_id": "15238", "city": "BLAWNOX", "loc": [ -79.87742299999999, 40.515077 ], "pop": 10776, "state": "PA" }, { "_id": "15239", "city": "PLUM", "loc": [ -79.734505, 40.477693 ], "pop": 20793, "state": "PA" }, { "_id": "15241", "city": "UPPER SAINT CLAI", "loc": [ -80.07921, 40.332174 ], "pop": 20276, "state": "PA" }, { "_id": "15243", "city": "CEDARHURST", "loc": [ -80.072425, 40.373797 ], "pop": 14242, "state": "PA" }, { "_id": "15301", "city": "WASHINGTON", "loc": [ -80.255957, 40.171687 ], "pop": 48612, "state": "PA" }, { "_id": "15310", "city": "ALEPPO", "loc": [ -80.45791800000001, 39.824647 ], "pop": 656, "state": "PA" }, { "_id": "15311", "city": "AMITY", "loc": [ -80.19486499999999, 40.061786 ], "pop": 1458, "state": "PA" }, { "_id": "15312", "city": "AVELLA", "loc": [ -80.456503, 40.273386 ], "pop": 3681, "state": "PA" }, { "_id": "15313", "city": "BEALLSVILLE", "loc": [ -80.02505600000001, 40.064503 ], "pop": 530, "state": "PA" }, { "_id": "15314", "city": "BENTLEYVILLE", "loc": [ -80.006987, 40.118702 ], "pop": 2673, "state": "PA" }, { "_id": "15317", "city": "MC MURRAY", "loc": [ -80.153153, 40.270743 ], "pop": 29555, "state": "PA" }, { "_id": "15320", "city": "CARMICHAELS", "loc": [ -79.971007, 39.882548 ], "pop": 6702, "state": "PA" }, { "_id": "15321", "city": "CECIL", "loc": [ -80.20437, 40.322813 ], "pop": 3257, "state": "PA" }, { "_id": "15322", "city": "CLARKSVILLE", "loc": [ -80.01238600000001, 39.994064 ], "pop": 3186, "state": "PA" }, { "_id": "15323", "city": "CLAYSVILLE", "loc": [ -80.385904, 40.137557 ], "pop": 6836, "state": "PA" }, { "_id": "15324", "city": "COKEBURG", "loc": [ -80.065152, 40.100801 ], "pop": 854, "state": "PA" }, { "_id": "15327", "city": "DILLINER", "loc": [ -79.977135, 39.755536 ], "pop": 2407, "state": "PA" }, { "_id": "15329", "city": "PROSPERITY", "loc": [ -80.261257, 40.0224 ], "pop": 1633, "state": "PA" }, { "_id": "15330", "city": "EIGHTY FOUR", "loc": [ -80.06269500000001, 40.186821 ], "pop": 5021, "state": "PA" }, { "_id": "15331", "city": "ELLSWORTH", "loc": [ -80.020364, 40.107321 ], "pop": 1040, "state": "PA" }, { "_id": "15332", "city": "FINLEYVILLE", "loc": [ -79.97530999999999, 40.259301 ], "pop": 8838, "state": "PA" }, { "_id": "15333", "city": "FREDERICKTOWN", "loc": [ -80.03093699999999, 40.023749 ], "pop": 770, "state": "PA" }, { "_id": "15337", "city": "GRAYSVILLE", "loc": [ -80.395223, 39.909165 ], "pop": 468, "state": "PA" }, { "_id": "15338", "city": "GREENSBORO", "loc": [ -79.93992, 39.804482 ], "pop": 2164, "state": "PA" }, { "_id": "15340", "city": "HICKORY", "loc": [ -80.302508, 40.292511 ], "pop": 2064, "state": "PA" }, { "_id": "15341", "city": "HOLBROOK", "loc": [ -80.338455, 39.848878 ], "pop": 1247, "state": "PA" }, { "_id": "15342", "city": "HOUSTON", "loc": [ -80.22093700000001, 40.242492 ], "pop": 6060, "state": "PA" }, { "_id": "15344", "city": "JEFFERSON", "loc": [ -80.050286, 39.933391 ], "pop": 2154, "state": "PA" }, { "_id": "15345", "city": "MARIANNA", "loc": [ -80.11450600000001, 40.033067 ], "pop": 2695, "state": "PA" }, { "_id": "15346", "city": "MATHER", "loc": [ -80.085353, 39.945226 ], "pop": 2856, "state": "PA" }, { "_id": "15349", "city": "DAVISTOWN", "loc": [ -80.096763, 39.744289 ], "pop": 1719, "state": "PA" }, { "_id": "15352", "city": "NEW FREEPORT", "loc": [ -80.454228, 39.750728 ], "pop": 833, "state": "PA" }, { "_id": "15353", "city": "NINEVEH", "loc": [ -80.312809, 39.974328 ], "pop": 884, "state": "PA" }, { "_id": "15357", "city": "RICES LANDING", "loc": [ -79.98570100000001, 39.943993 ], "pop": 2095, "state": "PA" }, { "_id": "15359", "city": "ROGERSVILLE", "loc": [ -80.283665, 39.900515 ], "pop": 313, "state": "PA" }, { "_id": "15360", "city": "SCENERY HILL", "loc": [ -80.091414, 40.099378 ], "pop": 2027, "state": "PA" }, { "_id": "15362", "city": "SPRAGGS", "loc": [ -80.262186, 39.761038 ], "pop": 1682, "state": "PA" }, { "_id": "15363", "city": "STRABANE", "loc": [ -80.146156, 40.216914 ], "pop": 2386, "state": "PA" }, { "_id": "15364", "city": "SYCAMORE", "loc": [ -80.228199, 39.95273 ], "pop": 395, "state": "PA" }, { "_id": "15367", "city": "VENETIA", "loc": [ -80.059849, 40.275451 ], "pop": 3568, "state": "PA" }, { "_id": "15370", "city": "WAYNESBURG", "loc": [ -80.179524, 39.891691 ], "pop": 11246, "state": "PA" }, { "_id": "15376", "city": "WEST ALEXANDER", "loc": [ -80.49776900000001, 40.106514 ], "pop": 1642, "state": "PA" }, { "_id": "15377", "city": "WEST FINLEY", "loc": [ -80.44080599999999, 39.991397 ], "pop": 1313, "state": "PA" }, { "_id": "15380", "city": "WIND RIDGE", "loc": [ -80.464665, 39.897106 ], "pop": 554, "state": "PA" }, { "_id": "15401", "city": "UNIONTOWN", "loc": [ -79.728216, 39.889733 ], "pop": 34582, "state": "PA" }, { "_id": "15410", "city": "ADAH", "loc": [ -79.890827, 39.883101 ], "pop": 596, "state": "PA" }, { "_id": "15411", "city": "ADDISON", "loc": [ -79.319334, 39.761195 ], "pop": 1158, "state": "PA" }, { "_id": "15412", "city": "ALLENPORT", "loc": [ -79.85419400000001, 40.089845 ], "pop": 665, "state": "PA" }, { "_id": "15413", "city": "ALLISON", "loc": [ -79.875675, 39.982566 ], "pop": 326, "state": "PA" }, { "_id": "15417", "city": "WEST BROWNSVILLE", "loc": [ -79.920609, 40.02671 ], "pop": 9133, "state": "PA" }, { "_id": "15419", "city": "CALIFORNIA", "loc": [ -79.895319, 40.062529 ], "pop": 5778, "state": "PA" }, { "_id": "15423", "city": "COAL CENTER", "loc": [ -79.8839, 40.097272 ], "pop": 482, "state": "PA" }, { "_id": "15424", "city": "LISTONBURG", "loc": [ -79.351304, 39.821247 ], "pop": 1998, "state": "PA" }, { "_id": "15425", "city": "SOUTH CONNELLSVI", "loc": [ -79.587838, 40.025037 ], "pop": 25516, "state": "PA" }, { "_id": "15427", "city": "DAISYTOWN", "loc": [ -79.96703599999999, 40.074349 ], "pop": 1858, "state": "PA" }, { "_id": "15428", "city": "DAWSON", "loc": [ -79.660224, 40.063767 ], "pop": 1673, "state": "PA" }, { "_id": "15431", "city": "DUNBAR", "loc": [ -79.64305, 39.972171 ], "pop": 2947, "state": "PA" }, { "_id": "15432", "city": "DUNLEVY", "loc": [ -79.862703, 40.115077 ], "pop": 417, "state": "PA" }, { "_id": "15433", "city": "EAST MILLSBORO", "loc": [ -79.966442, 39.982214 ], "pop": 104, "state": "PA" }, { "_id": "15434", "city": "ELCO", "loc": [ -79.87583600000001, 40.079671 ], "pop": 373, "state": "PA" }, { "_id": "15436", "city": "FAIRCHANCE", "loc": [ -79.75505099999999, 39.822876 ], "pop": 1918, "state": "PA" }, { "_id": "15437", "city": "FARMINGTON", "loc": [ -79.583185, 39.806995 ], "pop": 3296, "state": "PA" }, { "_id": "15438", "city": "FAYETTE CITY", "loc": [ -79.836584, 40.098799 ], "pop": 921, "state": "PA" }, { "_id": "15440", "city": "GIBBON GLADE", "loc": [ -79.57360300000001, 39.736357 ], "pop": 94, "state": "PA" }, { "_id": "15442", "city": "GRINDSTONE", "loc": [ -79.840447, 40.008415 ], "pop": 6843, "state": "PA" }, { "_id": "15444", "city": "HILLER", "loc": [ -79.899936, 40.004496 ], "pop": 2028, "state": "PA" }, { "_id": "15445", "city": "HOPWOOD", "loc": [ -79.705945, 39.868868 ], "pop": 3367, "state": "PA" }, { "_id": "15446", "city": "INDIAN HEAD", "loc": [ -79.393387, 40.020195 ], "pop": 181, "state": "PA" }, { "_id": "15450", "city": "LA BELLE", "loc": [ -79.93702399999999, 39.973829 ], "pop": 2169, "state": "PA" }, { "_id": "15451", "city": "LAKE LYNN", "loc": [ -79.86184, 39.750065 ], "pop": 2217, "state": "PA" }, { "_id": "15456", "city": "LEMONT FURNACE", "loc": [ -79.647684, 39.931057 ], "pop": 1638, "state": "PA" }, { "_id": "15458", "city": "LAMBERTON", "loc": [ -79.859022, 39.890185 ], "pop": 4703, "state": "PA" }, { "_id": "15459", "city": "MARKLEYSBURG", "loc": [ -79.46003, 39.759723 ], "pop": 2052, "state": "PA" }, { "_id": "15461", "city": "GRAYS LANDING", "loc": [ -79.89381299999999, 39.83495 ], "pop": 6033, "state": "PA" }, { "_id": "15462", "city": "MELCROFT", "loc": [ -79.3587, 40.064789 ], "pop": 77, "state": "PA" }, { "_id": "15463", "city": "MERRITTSTOWN", "loc": [ -79.874447, 39.964854 ], "pop": 1830, "state": "PA" }, { "_id": "15464", "city": "MILL RUN", "loc": [ -79.462219, 39.967985 ], "pop": 1972, "state": "PA" }, { "_id": "15468", "city": "NEW SALEM", "loc": [ -79.80407, 39.940747 ], "pop": 4509, "state": "PA" }, { "_id": "15469", "city": "NORMALVILLE", "loc": [ -79.41506099999999, 40.041793 ], "pop": 3814, "state": "PA" }, { "_id": "15470", "city": "OHIOPYLE", "loc": [ -79.48846, 39.873202 ], "pop": 815, "state": "PA" }, { "_id": "15472", "city": "OLIVER", "loc": [ -79.71560100000001, 39.911659 ], "pop": 2395, "state": "PA" }, { "_id": "15473", "city": "LAYTON", "loc": [ -79.754384, 40.085724 ], "pop": 1833, "state": "PA" }, { "_id": "15474", "city": "POINT MARION", "loc": [ -79.89898599999999, 39.735124 ], "pop": 1474, "state": "PA" }, { "_id": "15475", "city": "REPUBLIC", "loc": [ -79.902914, 39.961427 ], "pop": 641, "state": "PA" }, { "_id": "15477", "city": "ROSCOE", "loc": [ -79.865617, 40.078686 ], "pop": 802, "state": "PA" }, { "_id": "15478", "city": "SMITHFIELD", "loc": [ -79.81268, 39.792306 ], "pop": 2163, "state": "PA" }, { "_id": "15479", "city": "VAN METER", "loc": [ -79.73127700000001, 40.144267 ], "pop": 1009, "state": "PA" }, { "_id": "15480", "city": "SMOCK", "loc": [ -79.76782799999999, 39.996096 ], "pop": 986, "state": "PA" }, { "_id": "15482", "city": "STAR JUNCTION", "loc": [ -79.755461, 40.083198 ], "pop": 2803, "state": "PA" }, { "_id": "15483", "city": "STOCKDALE", "loc": [ -79.850103, 40.082567 ], "pop": 630, "state": "PA" }, { "_id": "15486", "city": "VANDERBILT", "loc": [ -79.69551800000001, 40.024581 ], "pop": 2706, "state": "PA" }, { "_id": "15488", "city": "WALTERSBURG", "loc": [ -79.78033600000001, 39.990465 ], "pop": 237, "state": "PA" }, { "_id": "15490", "city": "WHITE", "loc": [ -79.425117, 40.072596 ], "pop": 138, "state": "PA" }, { "_id": "15501", "city": "SOMERSET", "loc": [ -79.080814, 40.024813 ], "pop": 18303, "state": "PA" }, { "_id": "15521", "city": "ALUM BANK", "loc": [ -78.620591, 40.185833 ], "pop": 2175, "state": "PA" }, { "_id": "15522", "city": "BEDFORD", "loc": [ -78.526071, 39.990838 ], "pop": 10788, "state": "PA" }, { "_id": "15530", "city": "BERLIN", "loc": [ -78.96369199999999, 39.918847 ], "pop": 4459, "state": "PA" }, { "_id": "15531", "city": "BOSWELL", "loc": [ -79.036179, 40.191807 ], "pop": 1681, "state": "PA" }, { "_id": "15533", "city": "BREEZEWOOD", "loc": [ -78.245271, 39.990521 ], "pop": 999, "state": "PA" }, { "_id": "15534", "city": "BUFFALO MILLS", "loc": [ -78.69962, 39.922025 ], "pop": 445, "state": "PA" }, { "_id": "15535", "city": "CLEARVILLE", "loc": [ -78.43917999999999, 39.853284 ], "pop": 2304, "state": "PA" }, { "_id": "15536", "city": "CRYSTAL SPRING", "loc": [ -78.225836, 39.919973 ], "pop": 643, "state": "PA" }, { "_id": "15537", "city": "EVERETT", "loc": [ -78.371315, 40.009808 ], "pop": 7289, "state": "PA" }, { "_id": "15538", "city": "GLENCOE", "loc": [ -78.827522, 39.909046 ], "pop": 1350, "state": "PA" }, { "_id": "15540", "city": "FORT HILL", "loc": [ -79.23535, 39.877282 ], "pop": 305, "state": "PA" }, { "_id": "15541", "city": "FRIEDENS", "loc": [ -78.90329800000001, 40.010997 ], "pop": 2065, "state": "PA" }, { "_id": "15542", "city": "GARRETT", "loc": [ -79.061561, 39.864581 ], "pop": 520, "state": "PA" }, { "_id": "15545", "city": "HYNDMAN", "loc": [ -78.733512, 39.804857 ], "pop": 2732, "state": "PA" }, { "_id": "15546", "city": "JENNERS", "loc": [ -79.054571, 40.147321 ], "pop": 4586, "state": "PA" }, { "_id": "15550", "city": "MANNS CHOICE", "loc": [ -78.642259, 39.980787 ], "pop": 1579, "state": "PA" }, { "_id": "15551", "city": "MARKLETON", "loc": [ -79.287851, 39.869096 ], "pop": 288, "state": "PA" }, { "_id": "15552", "city": "MEYERSDALE", "loc": [ -79.026141, 39.790489 ], "pop": 9276, "state": "PA" }, { "_id": "15554", "city": "NEW PARIS", "loc": [ -78.58856900000001, 40.118876 ], "pop": 3982, "state": "PA" }, { "_id": "15557", "city": "ROCKWOOD", "loc": [ -79.18654600000001, 39.937296 ], "pop": 5125, "state": "PA" }, { "_id": "15558", "city": "SALISBURY", "loc": [ -79.083516, 39.753052 ], "pop": 716, "state": "PA" }, { "_id": "15559", "city": "SCHELLSBURG", "loc": [ -78.648194, 40.04869 ], "pop": 1523, "state": "PA" }, { "_id": "15562", "city": "SPRINGS", "loc": [ -79.08895, 39.748895 ], "pop": 82, "state": "PA" }, { "_id": "15563", "city": "STOYSTOWN", "loc": [ -78.955978, 40.109886 ], "pop": 2690, "state": "PA" }, { "_id": "15601", "city": "GREENSBURG", "loc": [ -79.542439, 40.307359 ], "pop": 52186, "state": "PA" }, { "_id": "15610", "city": "ACME", "loc": [ -79.482747, 40.104891 ], "pop": 3862, "state": "PA" }, { "_id": "15611", "city": "ADAMSBURG", "loc": [ -79.656469, 40.312577 ], "pop": 255, "state": "PA" }, { "_id": "15612", "city": "ALVERTON", "loc": [ -79.55860800000001, 40.127866 ], "pop": 2166, "state": "PA" }, { "_id": "15613", "city": "APOLLO", "loc": [ -79.577158, 40.556481 ], "pop": 18588, "state": "PA" }, { "_id": "15615", "city": "ARDARA", "loc": [ -79.73353299999999, 40.362993 ], "pop": 450, "state": "PA" }, { "_id": "15616", "city": "ARMBRUST", "loc": [ -79.553884, 40.236097 ], "pop": 500, "state": "PA" }, { "_id": "15617", "city": "ARONA", "loc": [ -79.659104, 40.26799 ], "pop": 397, "state": "PA" }, { "_id": "15618", "city": "AVONMORE", "loc": [ -79.485264, 40.522125 ], "pop": 3306, "state": "PA" }, { "_id": "15620", "city": "BRADENVILLE", "loc": [ -79.309679, 40.296094 ], "pop": 139, "state": "PA" }, { "_id": "15622", "city": "CHAMPION", "loc": [ -79.324719, 40.043976 ], "pop": 109, "state": "PA" }, { "_id": "15625", "city": "DARRAGH", "loc": [ -79.67803600000001, 40.260377 ], "pop": 159, "state": "PA" }, { "_id": "15626", "city": "DELMONT", "loc": [ -79.57638, 40.413901 ], "pop": 2852, "state": "PA" }, { "_id": "15627", "city": "DERRY", "loc": [ -79.33258499999999, 40.334931 ], "pop": 10610, "state": "PA" }, { "_id": "15628", "city": "DONEGAL", "loc": [ -79.38104300000001, 40.099613 ], "pop": 584, "state": "PA" }, { "_id": "15631", "city": "EVERSON", "loc": [ -79.587277, 40.091144 ], "pop": 868, "state": "PA" }, { "_id": "15632", "city": "EXPORT", "loc": [ -79.61102099999999, 40.425185 ], "pop": 8364, "state": "PA" }, { "_id": "15634", "city": "GRAPEVILLE", "loc": [ -79.603189, 40.303804 ], "pop": 683, "state": "PA" }, { "_id": "15636", "city": "HARRISON CITY", "loc": [ -79.679754, 40.372455 ], "pop": 12018, "state": "PA" }, { "_id": "15637", "city": "HERMINIE", "loc": [ -79.717164, 40.245485 ], "pop": 3820, "state": "PA" }, { "_id": "15639", "city": "HUNKER", "loc": [ -79.582364, 40.214947 ], "pop": 1592, "state": "PA" }, { "_id": "15641", "city": "HYDE PARK", "loc": [ -79.589884, 40.631102 ], "pop": 542, "state": "PA" }, { "_id": "15642", "city": "NORTH HUNTINGDON", "loc": [ -79.723855, 40.319227 ], "pop": 36415, "state": "PA" }, { "_id": "15644", "city": "JEANNETTE", "loc": [ -79.614412, 40.32947 ], "pop": 20989, "state": "PA" }, { "_id": "15646", "city": "JONES MILLS", "loc": [ -79.339933, 40.07977 ], "pop": 226, "state": "PA" }, { "_id": "15647", "city": "LARIMER", "loc": [ -79.736627, 40.351842 ], "pop": 1731, "state": "PA" }, { "_id": "15650", "city": "LATROBE", "loc": [ -79.41027800000001, 40.292625 ], "pop": 29529, "state": "PA" }, { "_id": "15655", "city": "LAUGHLINTOWN", "loc": [ -79.18058000000001, 40.208025 ], "pop": 436, "state": "PA" }, { "_id": "15656", "city": "LEECHBURG", "loc": [ -79.62010100000001, 40.634398 ], "pop": 11552, "state": "PA" }, { "_id": "15658", "city": "WILPEN", "loc": [ -79.236666, 40.245133 ], "pop": 9229, "state": "PA" }, { "_id": "15661", "city": "LOYALHANNA", "loc": [ -79.344157, 40.30199 ], "pop": 564, "state": "PA" }, { "_id": "15663", "city": "MADISON", "loc": [ -79.675978, 40.246669 ], "pop": 539, "state": "PA" }, { "_id": "15665", "city": "MANOR", "loc": [ -79.671221, 40.33822 ], "pop": 3848, "state": "PA" }, { "_id": "15666", "city": "MOUNT PLEASANT", "loc": [ -79.513383, 40.174179 ], "pop": 15336, "state": "PA" }, { "_id": "15668", "city": "MURRYSVILLE", "loc": [ -79.68415400000001, 40.446674 ], "pop": 10965, "state": "PA" }, { "_id": "15670", "city": "NEW ALEXANDRIA", "loc": [ -79.39659399999999, 40.398112 ], "pop": 2658, "state": "PA" }, { "_id": "15671", "city": "NEW DERRY", "loc": [ -79.30086300000001, 40.333334 ], "pop": 2950, "state": "PA" }, { "_id": "15672", "city": "NEW STANTON", "loc": [ -79.61818700000001, 40.223345 ], "pop": 3237, "state": "PA" }, { "_id": "15675", "city": "PENN", "loc": [ -79.641336, 40.330081 ], "pop": 619, "state": "PA" }, { "_id": "15677", "city": "RECTOR", "loc": [ -79.247331, 40.186444 ], "pop": 376, "state": "PA" }, { "_id": "15678", "city": "RILLTON", "loc": [ -79.728211, 40.282454 ], "pop": 1050, "state": "PA" }, { "_id": "15679", "city": "RUFFS DALE", "loc": [ -79.627743, 40.158458 ], "pop": 6385, "state": "PA" }, { "_id": "15681", "city": "SALTSBURG", "loc": [ -79.44284399999999, 40.479239 ], "pop": 3922, "state": "PA" }, { "_id": "15683", "city": "SCOTTDALE", "loc": [ -79.593017, 40.102948 ], "pop": 6132, "state": "PA" }, { "_id": "15684", "city": "SLICKVILLE", "loc": [ -79.506654, 40.465347 ], "pop": 318, "state": "PA" }, { "_id": "15686", "city": "SPRING CHURCH", "loc": [ -79.454487, 40.615329 ], "pop": 1291, "state": "PA" }, { "_id": "15687", "city": "STAHLSTOWN", "loc": [ -79.34447299999999, 40.138593 ], "pop": 2555, "state": "PA" }, { "_id": "15688", "city": "TARRS", "loc": [ -79.566101, 40.161915 ], "pop": 385, "state": "PA" }, { "_id": "15690", "city": "PARK", "loc": [ -79.56553099999999, 40.605883 ], "pop": 9409, "state": "PA" }, { "_id": "15692", "city": "WESTMORELAND CIT", "loc": [ -79.547696, 40.276802 ], "pop": 2293, "state": "PA" }, { "_id": "15697", "city": "YOUNGWOOD", "loc": [ -79.582291, 40.239482 ], "pop": 3319, "state": "PA" }, { "_id": "15698", "city": "YUKON", "loc": [ -79.68494099999999, 40.215529 ], "pop": 726, "state": "PA" }, { "_id": "15701", "city": "INDIANA", "loc": [ -79.15959599999999, 40.619628 ], "pop": 28962, "state": "PA" }, { "_id": "15711", "city": "ANITA", "loc": [ -78.96663700000001, 41.001806 ], "pop": 586, "state": "PA" }, { "_id": "15713", "city": "AULTMAN", "loc": [ -79.219791, 40.540083 ], "pop": 162, "state": "PA" }, { "_id": "15714", "city": "BARNESBORO", "loc": [ -78.777058, 40.673307 ], "pop": 3878, "state": "PA" }, { "_id": "15716", "city": "BLACK LICK", "loc": [ -79.193231, 40.466905 ], "pop": 1100, "state": "PA" }, { "_id": "15717", "city": "BLAIRSVILLE", "loc": [ -79.25332899999999, 40.441262 ], "pop": 9738, "state": "PA" }, { "_id": "15720", "city": "BRUSH VALLEY", "loc": [ -79.05876499999999, 40.528565 ], "pop": 1811, "state": "PA" }, { "_id": "15721", "city": "BURNSIDE", "loc": [ -78.78648800000001, 40.813431 ], "pop": 350, "state": "PA" }, { "_id": "15722", "city": "CARROLLTOWN", "loc": [ -78.703676, 40.589054 ], "pop": 2644, "state": "PA" }, { "_id": "15724", "city": "CHERRY TREE", "loc": [ -78.847357, 40.755387 ], "pop": 2220, "state": "PA" }, { "_id": "15725", "city": "CLARKSBURG", "loc": [ -79.367676, 40.503933 ], "pop": 1369, "state": "PA" }, { "_id": "15728", "city": "CLYMER", "loc": [ -79.01186300000001, 40.668811 ], "pop": 1499, "state": "PA" }, { "_id": "15729", "city": "COMMODORE", "loc": [ -78.913371, 40.701588 ], "pop": 3259, "state": "PA" }, { "_id": "15730", "city": "COOLSPRING", "loc": [ -78.922015, 40.951816 ], "pop": 44, "state": "PA" }, { "_id": "15732", "city": "CREEKSIDE", "loc": [ -79.201396, 40.719892 ], "pop": 2198, "state": "PA" }, { "_id": "15739", "city": "ERNEST", "loc": [ -79.096937, 40.704255 ], "pop": 3841, "state": "PA" }, { "_id": "15742", "city": "GLEN CAMPBELL", "loc": [ -78.855538, 40.850766 ], "pop": 1308, "state": "PA" }, { "_id": "15744", "city": "HAMILTON", "loc": [ -79.093987, 40.921432 ], "pop": 0, "state": "PA" }, { "_id": "15747", "city": "HOME", "loc": [ -79.16408199999999, 40.783441 ], "pop": 926, "state": "PA" }, { "_id": "15748", "city": "GRACETON", "loc": [ -79.183942, 40.538375 ], "pop": 3677, "state": "PA" }, { "_id": "15753", "city": "LA JOSE", "loc": [ -78.62336999999999, 40.830118 ], "pop": 1119, "state": "PA" }, { "_id": "15754", "city": "LUCERNEMINES", "loc": [ -79.157349, 40.545313 ], "pop": 3227, "state": "PA" }, { "_id": "15757", "city": "MC GEES MILLS", "loc": [ -78.72038999999999, 40.889251 ], "pop": 1792, "state": "PA" }, { "_id": "15758", "city": "MARCHAND", "loc": [ -79.045151, 40.875411 ], "pop": 1302, "state": "PA" }, { "_id": "15759", "city": "MARION CENTER", "loc": [ -79.02524, 40.78135 ], "pop": 2085, "state": "PA" }, { "_id": "15760", "city": "MARSTELLER", "loc": [ -78.813356, 40.65004 ], "pop": 959, "state": "PA" }, { "_id": "15762", "city": "NICKTOWN", "loc": [ -78.81139400000001, 40.601623 ], "pop": 1395, "state": "PA" }, { "_id": "15763", "city": "NORTHPOINT", "loc": [ -79.125657, 40.903703 ], "pop": 49, "state": "PA" }, { "_id": "15764", "city": "OLIVEBURG", "loc": [ -79.038197, 40.996379 ], "pop": 8, "state": "PA" }, { "_id": "15765", "city": "PENN RUN", "loc": [ -78.971597, 40.626825 ], "pop": 4258, "state": "PA" }, { "_id": "15767", "city": "PUNXSUTAWNEY", "loc": [ -78.968056, 40.947937 ], "pop": 12377, "state": "PA" }, { "_id": "15770", "city": "RINGGOLD", "loc": [ -79.176581, 40.999731 ], "pop": 692, "state": "PA" }, { "_id": "15771", "city": "ROCHESTER MILLS", "loc": [ -78.997985, 40.819482 ], "pop": 253, "state": "PA" }, { "_id": "15772", "city": "ROSSITER", "loc": [ -78.94135300000001, 40.884553 ], "pop": 1858, "state": "PA" }, { "_id": "15773", "city": "SAINT BENEDICT", "loc": [ -78.738332, 40.611845 ], "pop": 1544, "state": "PA" }, { "_id": "15774", "city": "SHELOCTA", "loc": [ -79.31907, 40.638787 ], "pop": 7854, "state": "PA" }, { "_id": "15775", "city": "SPANGLER", "loc": [ -78.76906099999999, 40.648082 ], "pop": 2851, "state": "PA" }, { "_id": "15776", "city": "SPRANKLE MILLS", "loc": [ -79.077809, 41.01846 ], "pop": 980, "state": "PA" }, { "_id": "15777", "city": "STARFORD", "loc": [ -78.980317, 40.700971 ], "pop": 850, "state": "PA" }, { "_id": "15778", "city": "TIMBLIN", "loc": [ -79.20135000000001, 40.968387 ], "pop": 178, "state": "PA" }, { "_id": "15780", "city": "VALIER", "loc": [ -79.083263, 40.922851 ], "pop": 44, "state": "PA" }, { "_id": "15784", "city": "WORTHVILLE", "loc": [ -79.138685, 41.023767 ], "pop": 65, "state": "PA" }, { "_id": "15801", "city": "DU BOIS", "loc": [ -78.752698, 41.126039 ], "pop": 17345, "state": "PA" }, { "_id": "15821", "city": "BENEZETT", "loc": [ -78.35762099999999, 41.325318 ], "pop": 243, "state": "PA" }, { "_id": "15823", "city": "BROCKPORT", "loc": [ -78.712829, 41.28217 ], "pop": 1646, "state": "PA" }, { "_id": "15824", "city": "BROCKWAY", "loc": [ -78.81156799999999, 41.240564 ], "pop": 6361, "state": "PA" }, { "_id": "15825", "city": "HAZEN", "loc": [ -79.06410099999999, 41.159986 ], "pop": 9303, "state": "PA" }, { "_id": "15827", "city": "BYRNEDALE", "loc": [ -78.505126, 41.286459 ], "pop": 1892, "state": "PA" }, { "_id": "15828", "city": "CLARINGTON", "loc": [ -79.146557, 41.323272 ], "pop": 311, "state": "PA" }, { "_id": "15829", "city": "CORSICA", "loc": [ -79.175567, 41.182983 ], "pop": 1070, "state": "PA" }, { "_id": "15832", "city": "DRIFTWOOD", "loc": [ -78.163194, 41.376396 ], "pop": 526, "state": "PA" }, { "_id": "15834", "city": "EMPORIUM", "loc": [ -78.25360999999999, 41.517689 ], "pop": 5219, "state": "PA" }, { "_id": "15840", "city": "FALLS CREEK", "loc": [ -78.812791, 41.145505 ], "pop": 1422, "state": "PA" }, { "_id": "15845", "city": "JOHNSONBURG", "loc": [ -78.67825999999999, 41.492823 ], "pop": 3350, "state": "PA" }, { "_id": "15846", "city": "KERSEY", "loc": [ -78.60151999999999, 41.356271 ], "pop": 3392, "state": "PA" }, { "_id": "15848", "city": "LUTHERSBURG", "loc": [ -78.74275799999999, 41.05321 ], "pop": 2249, "state": "PA" }, { "_id": "15849", "city": "PENFIELD", "loc": [ -78.579111, 41.208519 ], "pop": 1395, "state": "PA" }, { "_id": "15851", "city": "REYNOLDSVILLE", "loc": [ -78.896147, 41.062935 ], "pop": 8758, "state": "PA" }, { "_id": "15853", "city": "PORTLAND MILLS", "loc": [ -78.729715, 41.431566 ], "pop": 7419, "state": "PA" }, { "_id": "15856", "city": "ROCKTON", "loc": [ -78.657662, 41.080571 ], "pop": 833, "state": "PA" }, { "_id": "15857", "city": "SAINT MARYS", "loc": [ -78.550533, 41.428949 ], "pop": 14020, "state": "PA" }, { "_id": "15860", "city": "SIGEL", "loc": [ -79.053957, 41.309921 ], "pop": 1103, "state": "PA" }, { "_id": "15861", "city": "SINNAMAHONING", "loc": [ -78.06607, 41.376197 ], "pop": 168, "state": "PA" }, { "_id": "15864", "city": "SUMMERVILLE", "loc": [ -79.172583, 41.105822 ], "pop": 1749, "state": "PA" }, { "_id": "15865", "city": "SYKESVILLE", "loc": [ -78.819508, 41.05137 ], "pop": 1387, "state": "PA" }, { "_id": "15868", "city": "WEEDVILLE", "loc": [ -78.495165, 41.268502 ], "pop": 195, "state": "PA" }, { "_id": "15870", "city": "WILCOX", "loc": [ -78.682295, 41.573471 ], "pop": 1870, "state": "PA" }, { "_id": "15901", "city": "JOHNSTOWN", "loc": [ -78.91408, 40.325957 ], "pop": 6649, "state": "PA" }, { "_id": "15902", "city": "JOHNSTOWN", "loc": [ -78.896905, 40.307787 ], "pop": 16012, "state": "PA" }, { "_id": "15904", "city": "JOHNSTOWN", "loc": [ -78.86538299999999, 40.285026 ], "pop": 16858, "state": "PA" }, { "_id": "15905", "city": "JOHNSTOWN", "loc": [ -78.943006, 40.307188 ], "pop": 22509, "state": "PA" }, { "_id": "15906", "city": "JOHNSTOWN", "loc": [ -78.938317, 40.352193 ], "pop": 13249, "state": "PA" }, { "_id": "15909", "city": "JOHNSTOWN", "loc": [ -78.862284, 40.387965 ], "pop": 7944, "state": "PA" }, { "_id": "15920", "city": "ARMAGH", "loc": [ -79.01305499999999, 40.442452 ], "pop": 2839, "state": "PA" }, { "_id": "15923", "city": "BOLIVAR", "loc": [ -79.160546, 40.367289 ], "pop": 2043, "state": "PA" }, { "_id": "15924", "city": "CAIRNBROOK", "loc": [ -78.81008199999999, 40.114472 ], "pop": 2178, "state": "PA" }, { "_id": "15926", "city": "CENTRAL CITY", "loc": [ -78.844753, 40.091257 ], "pop": 2886, "state": "PA" }, { "_id": "15927", "city": "COLVER", "loc": [ -78.778432, 40.541086 ], "pop": 1531, "state": "PA" }, { "_id": "15928", "city": "DAVIDSVILLE", "loc": [ -78.936333, 40.224451 ], "pop": 244, "state": "PA" }, { "_id": "15931", "city": "EBENSBURG", "loc": [ -78.726294, 40.480105 ], "pop": 9386, "state": "PA" }, { "_id": "15935", "city": "HOLLSOPPLE", "loc": [ -78.951471, 40.234301 ], "pop": 7012, "state": "PA" }, { "_id": "15936", "city": "HOOVERSVILLE", "loc": [ -78.91407100000001, 40.148776 ], "pop": 731, "state": "PA" }, { "_id": "15938", "city": "LILLY", "loc": [ -78.62306, 40.423844 ], "pop": 2252, "state": "PA" }, { "_id": "15940", "city": "LORETTO", "loc": [ -78.629357, 40.510484 ], "pop": 2771, "state": "PA" }, { "_id": "15942", "city": "MINERAL POINT", "loc": [ -78.835201, 40.379253 ], "pop": 420, "state": "PA" }, { "_id": "15943", "city": "NANTY GLO", "loc": [ -78.837504, 40.470435 ], "pop": 4680, "state": "PA" }, { "_id": "15944", "city": "NEW FLORENCE", "loc": [ -79.09680299999999, 40.382266 ], "pop": 3949, "state": "PA" }, { "_id": "15945", "city": "PARKHILL", "loc": [ -78.869432, 40.359385 ], "pop": 120, "state": "PA" }, { "_id": "15946", "city": "PURITAN", "loc": [ -78.671753, 40.384201 ], "pop": 8160, "state": "PA" }, { "_id": "15949", "city": "ROBINSON", "loc": [ -79.137928, 40.407655 ], "pop": 829, "state": "PA" }, { "_id": "15951", "city": "SAINT MICHAEL", "loc": [ -78.782999, 40.336248 ], "pop": 1425, "state": "PA" }, { "_id": "15952", "city": "SALIX", "loc": [ -78.74370399999999, 40.300627 ], "pop": 6215, "state": "PA" }, { "_id": "15953", "city": "SEANOR", "loc": [ -78.890897, 40.231191 ], "pop": 18, "state": "PA" }, { "_id": "15954", "city": "SEWARD", "loc": [ -79.023224, 40.409907 ], "pop": 1348, "state": "PA" }, { "_id": "15955", "city": "SIDMAN", "loc": [ -78.745966, 40.329873 ], "pop": 1235, "state": "PA" }, { "_id": "15956", "city": "SOUTH FORK", "loc": [ -78.78867099999999, 40.362877 ], "pop": 2497, "state": "PA" }, { "_id": "15957", "city": "STRONGSTOWN", "loc": [ -78.912961, 40.56279 ], "pop": 678, "state": "PA" }, { "_id": "15958", "city": "SUMMERHILL", "loc": [ -78.755979, 40.388959 ], "pop": 2215, "state": "PA" }, { "_id": "15960", "city": "TWIN ROCKS", "loc": [ -78.860488, 40.518254 ], "pop": 1535, "state": "PA" }, { "_id": "15961", "city": "VINTONDALE", "loc": [ -78.94267000000001, 40.493949 ], "pop": 2141, "state": "PA" }, { "_id": "15963", "city": "WINDBER", "loc": [ -78.83028899999999, 40.228695 ], "pop": 11421, "state": "PA" }, { "_id": "16001", "city": "BON AIRE", "loc": [ -79.902717, 40.862096 ], "pop": 55158, "state": "PA" }, { "_id": "16020", "city": "BOYERS", "loc": [ -79.904692, 41.109205 ], "pop": 974, "state": "PA" }, { "_id": "16022", "city": "BRUIN", "loc": [ -79.729051, 41.057078 ], "pop": 637, "state": "PA" }, { "_id": "16023", "city": "MARWOOD", "loc": [ -79.77085099999999, 40.779723 ], "pop": 3483, "state": "PA" }, { "_id": "16025", "city": "CHICORA", "loc": [ -79.74623699999999, 40.945768 ], "pop": 4673, "state": "PA" }, { "_id": "16028", "city": "EAST BRADY", "loc": [ -79.63018700000001, 40.974373 ], "pop": 2069, "state": "PA" }, { "_id": "16030", "city": "EAU CLAIRE", "loc": [ -79.79809299999999, 41.13478 ], "pop": 371, "state": "PA" }, { "_id": "16033", "city": "EVANS CITY", "loc": [ -80.059195, 40.780795 ], "pop": 6859, "state": "PA" }, { "_id": "16034", "city": "FENELTON", "loc": [ -79.73715199999999, 40.855464 ], "pop": 1753, "state": "PA" }, { "_id": "16036", "city": "FOXBURG", "loc": [ -79.653443, 41.160239 ], "pop": 988, "state": "PA" }, { "_id": "16037", "city": "HARMONY", "loc": [ -80.13811699999999, 40.849646 ], "pop": 2049, "state": "PA" }, { "_id": "16038", "city": "HARRISVILLE", "loc": [ -79.97963900000001, 41.163087 ], "pop": 3617, "state": "PA" }, { "_id": "16040", "city": "HILLIARDS", "loc": [ -79.821456, 41.100894 ], "pop": 1092, "state": "PA" }, { "_id": "16041", "city": "KARNS CITY", "loc": [ -79.71601699999999, 41.002193 ], "pop": 3032, "state": "PA" }, { "_id": "16045", "city": "LYNDORA", "loc": [ -79.921401, 40.855071 ], "pop": 2232, "state": "PA" }, { "_id": "16046", "city": "MARS", "loc": [ -80.035769, 40.700514 ], "pop": 10192, "state": "PA" }, { "_id": "16049", "city": "PARKER", "loc": [ -79.68888800000001, 41.100891 ], "pop": 3131, "state": "PA" }, { "_id": "16050", "city": "PETROLIA", "loc": [ -79.771069, 41.044208 ], "pop": 491, "state": "PA" }, { "_id": "16051", "city": "PORTERSVILLE", "loc": [ -80.172965, 40.948651 ], "pop": 3642, "state": "PA" }, { "_id": "16052", "city": "PROSPECT", "loc": [ -80.067903, 40.904941 ], "pop": 2224, "state": "PA" }, { "_id": "16053", "city": "RENFREW", "loc": [ -79.97700399999999, 40.810003 ], "pop": 3180, "state": "PA" }, { "_id": "16055", "city": "SARVER", "loc": [ -79.74243, 40.714285 ], "pop": 8370, "state": "PA" }, { "_id": "16056", "city": "SAXONBURG", "loc": [ -79.835222, 40.736099 ], "pop": 4693, "state": "PA" }, { "_id": "16057", "city": "SLIPPERY ROCK", "loc": [ -80.046847, 41.045412 ], "pop": 12443, "state": "PA" }, { "_id": "16059", "city": "VALENCIA", "loc": [ -79.92352700000001, 40.701831 ], "pop": 6437, "state": "PA" }, { "_id": "16061", "city": "WEST SUNBURY", "loc": [ -79.875134, 41.002601 ], "pop": 1999, "state": "PA" }, { "_id": "16063", "city": "ZELIENOPLE", "loc": [ -80.128564, 40.73136 ], "pop": 18300, "state": "PA" }, { "_id": "16101", "city": "NEW CASTLE", "loc": [ -80.32844900000001, 40.99222 ], "pop": 36694, "state": "PA" }, { "_id": "16102", "city": "NEW CASTLE", "loc": [ -80.390704, 40.967745 ], "pop": 7186, "state": "PA" }, { "_id": "16105", "city": "NESHANNOCK", "loc": [ -80.342191, 41.033502 ], "pop": 14292, "state": "PA" }, { "_id": "16110", "city": "ADAMSVILLE", "loc": [ -80.376544, 41.506677 ], "pop": 287, "state": "PA" }, { "_id": "16111", "city": "ATLANTIC", "loc": [ -80.28625099999999, 41.533313 ], "pop": 2390, "state": "PA" }, { "_id": "16112", "city": "BESSEMER", "loc": [ -80.493689, 40.975493 ], "pop": 1611, "state": "PA" }, { "_id": "16114", "city": "CLARKS MILLS", "loc": [ -80.175223, 41.385141 ], "pop": 1351, "state": "PA" }, { "_id": "16115", "city": "DARLINGTON", "loc": [ -80.455611, 40.796839 ], "pop": 3397, "state": "PA" }, { "_id": "16116", "city": "EDINBURG", "loc": [ -80.463178, 41.027614 ], "pop": 3240, "state": "PA" }, { "_id": "16117", "city": "ELLPORT", "loc": [ -80.27460600000001, 40.859024 ], "pop": 19193, "state": "PA" }, { "_id": "16120", "city": "ENON VALLEY", "loc": [ -80.46118199999999, 40.8721 ], "pop": 2421, "state": "PA" }, { "_id": "16121", "city": "FARRELL", "loc": [ -80.49444200000001, 41.210995 ], "pop": 7619, "state": "PA" }, { "_id": "16123", "city": "FOMBELL", "loc": [ -80.207312, 40.812527 ], "pop": 2611, "state": "PA" }, { "_id": "16124", "city": "FREDONIA", "loc": [ -80.26987099999999, 41.324141 ], "pop": 1772, "state": "PA" }, { "_id": "16125", "city": "SHENANGO", "loc": [ -80.38034399999999, 41.399403 ], "pop": 19982, "state": "PA" }, { "_id": "16127", "city": "GROVE CITY", "loc": [ -80.084138, 41.160704 ], "pop": 14568, "state": "PA" }, { "_id": "16130", "city": "HADLEY", "loc": [ -80.153544, 41.43302 ], "pop": 3623, "state": "PA" }, { "_id": "16131", "city": "HARTSTOWN", "loc": [ -80.381321, 41.550875 ], "pop": 406, "state": "PA" }, { "_id": "16133", "city": "JACKSON CENTER", "loc": [ -80.10372599999999, 41.280134 ], "pop": 1959, "state": "PA" }, { "_id": "16134", "city": "WESTFORD", "loc": [ -80.456459, 41.506031 ], "pop": 3328, "state": "PA" }, { "_id": "16137", "city": "MERCER", "loc": [ -80.23401800000001, 41.23254 ], "pop": 11036, "state": "PA" }, { "_id": "16141", "city": "NEW GALILEE", "loc": [ -80.39390400000001, 40.856891 ], "pop": 1852, "state": "PA" }, { "_id": "16142", "city": "NEW WILMINGTON", "loc": [ -80.324541, 41.138155 ], "pop": 9268, "state": "PA" }, { "_id": "16143", "city": "PULASKI", "loc": [ -80.468515, 41.094215 ], "pop": 3898, "state": "PA" }, { "_id": "16145", "city": "SANDY LAKE", "loc": [ -80.04974, 41.338337 ], "pop": 843, "state": "PA" }, { "_id": "16146", "city": "SHARON", "loc": [ -80.499342, 41.231552 ], "pop": 17457, "state": "PA" }, { "_id": "16148", "city": "HERMITAGE", "loc": [ -80.45303, 41.232601 ], "pop": 14573, "state": "PA" }, { "_id": "16150", "city": "SHARPSVILLE", "loc": [ -80.465642, 41.267648 ], "pop": 8962, "state": "PA" }, { "_id": "16153", "city": "STONEBORO", "loc": [ -80.097613, 41.34385 ], "pop": 2249, "state": "PA" }, { "_id": "16154", "city": "TRANSFER", "loc": [ -80.419742, 41.324401 ], "pop": 2662, "state": "PA" }, { "_id": "16156", "city": "VOLANT", "loc": [ -80.244129, 41.093767 ], "pop": 2114, "state": "PA" }, { "_id": "16157", "city": "WAMPUM", "loc": [ -80.339184, 40.881879 ], "pop": 5466, "state": "PA" }, { "_id": "16159", "city": "WEST MIDDLESEX", "loc": [ -80.452759, 41.174054 ], "pop": 5604, "state": "PA" }, { "_id": "16201", "city": "KITTANNING", "loc": [ -79.51067500000001, 40.815516 ], "pop": 19140, "state": "PA" }, { "_id": "16210", "city": "ADRIAN", "loc": [ -79.50744400000001, 40.904902 ], "pop": 726, "state": "PA" }, { "_id": "16212", "city": "CADOGAN", "loc": [ -79.57982699999999, 40.75392 ], "pop": 427, "state": "PA" }, { "_id": "16213", "city": "CALLENSBURG", "loc": [ -79.55695, 41.132379 ], "pop": 688, "state": "PA" }, { "_id": "16214", "city": "CLARION", "loc": [ -79.377268, 41.212272 ], "pop": 8740, "state": "PA" }, { "_id": "16217", "city": "COOKSBURG", "loc": [ -79.19708, 41.338366 ], "pop": 36, "state": "PA" }, { "_id": "16218", "city": "COWANSVILLE", "loc": [ -79.594607, 40.922985 ], "pop": 1089, "state": "PA" }, { "_id": "16222", "city": "DAYTON", "loc": [ -79.268551, 40.874101 ], "pop": 1974, "state": "PA" }, { "_id": "16224", "city": "FAIRMOUNT CITY", "loc": [ -79.27840500000001, 41.042861 ], "pop": 2104, "state": "PA" }, { "_id": "16225", "city": "FISHER", "loc": [ -79.247033, 41.266737 ], "pop": 407, "state": "PA" }, { "_id": "16226", "city": "FORD CITY", "loc": [ -79.51222, 40.738407 ], "pop": 6576, "state": "PA" }, { "_id": "16229", "city": "FREEPORT", "loc": [ -79.66299100000001, 40.703277 ], "pop": 4517, "state": "PA" }, { "_id": "16232", "city": "KNOX", "loc": [ -79.51940399999999, 41.224518 ], "pop": 7489, "state": "PA" }, { "_id": "16233", "city": "LEEPER", "loc": [ -79.302179, 41.367074 ], "pop": 487, "state": "PA" }, { "_id": "16234", "city": "LIMESTONE", "loc": [ -79.29929199999999, 41.133396 ], "pop": 1686, "state": "PA" }, { "_id": "16235", "city": "LUCINDA", "loc": [ -79.375372, 41.312377 ], "pop": 1281, "state": "PA" }, { "_id": "16236", "city": "MC GRANN", "loc": [ -79.53086, 40.76929 ], "pop": 3844, "state": "PA" }, { "_id": "16238", "city": "MANORVILLE", "loc": [ -79.521333, 40.786256 ], "pop": 418, "state": "PA" }, { "_id": "16239", "city": "MARIENVILLE", "loc": [ -79.13058100000001, 41.462237 ], "pop": 1374, "state": "PA" }, { "_id": "16240", "city": "MAYPORT", "loc": [ -79.261701, 40.99059 ], "pop": 1058, "state": "PA" }, { "_id": "16242", "city": "NEW BETHLEHEM", "loc": [ -79.352654, 40.9999 ], "pop": 4698, "state": "PA" }, { "_id": "16248", "city": "HUEY", "loc": [ -79.510677, 41.039434 ], "pop": 3629, "state": "PA" }, { "_id": "16249", "city": "RURAL VALLEY", "loc": [ -79.299102, 40.788488 ], "pop": 3499, "state": "PA" }, { "_id": "16254", "city": "SHIPPENVILLE", "loc": [ -79.433199, 41.247491 ], "pop": 2448, "state": "PA" }, { "_id": "16255", "city": "SLIGO", "loc": [ -79.480485, 41.11394 ], "pop": 1213, "state": "PA" }, { "_id": "16256", "city": "SMICKSBURG", "loc": [ -79.161432, 40.837193 ], "pop": 2236, "state": "PA" }, { "_id": "16258", "city": "STRATTANVILLE", "loc": [ -79.308188, 41.195498 ], "pop": 2086, "state": "PA" }, { "_id": "16259", "city": "TEMPLETON", "loc": [ -79.449884, 40.941884 ], "pop": 1654, "state": "PA" }, { "_id": "16260", "city": "VOWINCKEL", "loc": [ -79.274553, 41.378642 ], "pop": 1615, "state": "PA" }, { "_id": "16262", "city": "CRAIGSVILLE", "loc": [ -79.638525, 40.834442 ], "pop": 3065, "state": "PA" }, { "_id": "16301", "city": "OIL CITY", "loc": [ -79.691648, 41.431936 ], "pop": 19792, "state": "PA" }, { "_id": "16311", "city": "CARLTON", "loc": [ -80.020302, 41.481541 ], "pop": 282, "state": "PA" }, { "_id": "16313", "city": "CLARENDON", "loc": [ -79.171949, 41.730224 ], "pop": 422, "state": "PA" }, { "_id": "16314", "city": "COCHRANTON", "loc": [ -80.05726900000001, 41.520487 ], "pop": 3010, "state": "PA" }, { "_id": "16316", "city": "CONNEAUT LAKE", "loc": [ -80.308567, 41.6189 ], "pop": 3849, "state": "PA" }, { "_id": "16317", "city": "COOPERSTOWN", "loc": [ -79.875676, 41.497998 ], "pop": 506, "state": "PA" }, { "_id": "16319", "city": "CRANBERRY", "loc": [ -79.719121, 41.337184 ], "pop": 353, "state": "PA" }, { "_id": "16321", "city": "EAST HICKORY", "loc": [ -79.38548299999999, 41.5691 ], "pop": 282, "state": "PA" }, { "_id": "16323", "city": "FRANKLIN", "loc": [ -79.83089, 41.404775 ], "pop": 18357, "state": "PA" }, { "_id": "16326", "city": "FRYBURG", "loc": [ -79.41340099999999, 41.371736 ], "pop": 1880, "state": "PA" }, { "_id": "16327", "city": "GUYS MILLS", "loc": [ -79.97143699999999, 41.633265 ], "pop": 2825, "state": "PA" }, { "_id": "16329", "city": "IRVINE", "loc": [ -79.286303, 41.843283 ], "pop": 479, "state": "PA" }, { "_id": "16331", "city": "KOSSUTH", "loc": [ -79.588249, 41.290215 ], "pop": 43, "state": "PA" }, { "_id": "16332", "city": "LICKINGVILLE", "loc": [ -79.371516, 41.3789 ], "pop": 22, "state": "PA" }, { "_id": "16333", "city": "LUDLOW", "loc": [ -78.924345, 41.728409 ], "pop": 612, "state": "PA" }, { "_id": "16334", "city": "MARBLE", "loc": [ -79.44592900000001, 41.326077 ], "pop": 27, "state": "PA" }, { "_id": "16335", "city": "MEADVILLE", "loc": [ -80.148787, 41.633847 ], "pop": 31290, "state": "PA" }, { "_id": "16340", "city": "PITTSFIELD", "loc": [ -79.419619, 41.836629 ], "pop": 3172, "state": "PA" }, { "_id": "16341", "city": "PLEASANTVILLE", "loc": [ -79.5685, 41.586696 ], "pop": 2211, "state": "PA" }, { "_id": "16342", "city": "POLK", "loc": [ -79.93461000000001, 41.358315 ], "pop": 3159, "state": "PA" }, { "_id": "16345", "city": "RUSSELL", "loc": [ -79.12707899999999, 41.946106 ], "pop": 3833, "state": "PA" }, { "_id": "16346", "city": "SENECA", "loc": [ -79.67590199999999, 41.374436 ], "pop": 3723, "state": "PA" }, { "_id": "16347", "city": "SHEFFIELD", "loc": [ -79.034814, 41.70053 ], "pop": 2382, "state": "PA" }, { "_id": "16350", "city": "SUGAR GROVE", "loc": [ -79.318609, 41.947542 ], "pop": 3592, "state": "PA" }, { "_id": "16351", "city": "TIDIOUTE", "loc": [ -79.375224, 41.703008 ], "pop": 2458, "state": "PA" }, { "_id": "16353", "city": "TIONESTA", "loc": [ -79.366332, 41.511616 ], "pop": 2293, "state": "PA" }, { "_id": "16354", "city": "TITUSVILLE", "loc": [ -79.68549400000001, 41.638163 ], "pop": 14509, "state": "PA" }, { "_id": "16360", "city": "TOWNVILLE", "loc": [ -79.876679, 41.685581 ], "pop": 1047, "state": "PA" }, { "_id": "16362", "city": "UTICA", "loc": [ -79.940292, 41.479848 ], "pop": 1863, "state": "PA" }, { "_id": "16364", "city": "VENUS", "loc": [ -79.50476500000001, 41.376113 ], "pop": 534, "state": "PA" }, { "_id": "16365", "city": "NORTH WARREN", "loc": [ -79.14286, 41.845265 ], "pop": 22507, "state": "PA" }, { "_id": "16371", "city": "YOUNGSVILLE", "loc": [ -79.318708, 41.853654 ], "pop": 1853, "state": "PA" }, { "_id": "16372", "city": "CLINTONVILLE", "loc": [ -79.87338, 41.20022 ], "pop": 525, "state": "PA" }, { "_id": "16373", "city": "EMLENTON", "loc": [ -79.746996, 41.202769 ], "pop": 3119, "state": "PA" }, { "_id": "16374", "city": "KENNERDELL", "loc": [ -79.739313, 41.284762 ], "pop": 1318, "state": "PA" }, { "_id": "16401", "city": "LUNDYS LANE", "loc": [ -80.37527300000001, 41.885882 ], "pop": 4286, "state": "PA" }, { "_id": "16402", "city": "BEAR LAKE", "loc": [ -79.461365, 41.97006 ], "pop": 1042, "state": "PA" }, { "_id": "16403", "city": "CAMBRIDGE SPRING", "loc": [ -80.028003, 41.794611 ], "pop": 5770, "state": "PA" }, { "_id": "16404", "city": "CENTERVILLE", "loc": [ -79.79004, 41.724316 ], "pop": 2119, "state": "PA" }, { "_id": "16405", "city": "COLUMBUS", "loc": [ -79.57307299999999, 41.938152 ], "pop": 1751, "state": "PA" }, { "_id": "16406", "city": "CONNEAUTVILLE", "loc": [ -80.344516, 41.745455 ], "pop": 2542, "state": "PA" }, { "_id": "16407", "city": "CORRY", "loc": [ -79.65674199999999, 41.922593 ], "pop": 10654, "state": "PA" }, { "_id": "16410", "city": "CRANESVILLE", "loc": [ -80.308528, 41.916222 ], "pop": 1783, "state": "PA" }, { "_id": "16411", "city": "EAST SPRINGFIELD", "loc": [ -80.430336, 41.979363 ], "pop": 1318, "state": "PA" }, { "_id": "16412", "city": "EDINBORO", "loc": [ -80.135604, 41.875629 ], "pop": 12914, "state": "PA" }, { "_id": "16415", "city": "FAIRVIEW", "loc": [ -80.239508, 42.040741 ], "pop": 7876, "state": "PA" }, { "_id": "16417", "city": "GIRARD", "loc": [ -80.317756, 41.989573 ], "pop": 8190, "state": "PA" }, { "_id": "16420", "city": "GRAND VALLEY", "loc": [ -79.546944, 41.77315 ], "pop": 59, "state": "PA" }, { "_id": "16421", "city": "HARBORCREEK", "loc": [ -79.941648, 42.176719 ], "pop": 3533, "state": "PA" }, { "_id": "16423", "city": "LAKE CITY", "loc": [ -80.33883400000001, 42.020361 ], "pop": 3674, "state": "PA" }, { "_id": "16424", "city": "ESPYVILLE", "loc": [ -80.426911, 41.663535 ], "pop": 5520, "state": "PA" }, { "_id": "16426", "city": "MC KEAN", "loc": [ -80.147336, 41.999035 ], "pop": 4099, "state": "PA" }, { "_id": "16428", "city": "NORTH EAST", "loc": [ -79.833179, 42.200793 ], "pop": 12531, "state": "PA" }, { "_id": "16433", "city": "SAEGERTOWN", "loc": [ -80.147857, 41.726753 ], "pop": 5094, "state": "PA" }, { "_id": "16434", "city": "SPARTANSBURG", "loc": [ -79.684916, 41.793648 ], "pop": 2785, "state": "PA" }, { "_id": "16435", "city": "SPRINGBORO", "loc": [ -80.375276, 41.811348 ], "pop": 2131, "state": "PA" }, { "_id": "16436", "city": "SPRING CREEK", "loc": [ -79.56554, 41.846832 ], "pop": 191, "state": "PA" }, { "_id": "16438", "city": "UNION CITY", "loc": [ -79.84546400000001, 41.893851 ], "pop": 8890, "state": "PA" }, { "_id": "16440", "city": "VENANGO", "loc": [ -80.125353, 41.791968 ], "pop": 918, "state": "PA" }, { "_id": "16441", "city": "WATERFORD", "loc": [ -79.99963, 41.960266 ], "pop": 9247, "state": "PA" }, { "_id": "16442", "city": "WATTSBURG", "loc": [ -79.836282, 42.039114 ], "pop": 2463, "state": "PA" }, { "_id": "16443", "city": "WEST SPRINGFIELD", "loc": [ -80.46501000000001, 41.94646 ], "pop": 1375, "state": "PA" }, { "_id": "16501", "city": "ERIE", "loc": [ -80.08601, 42.125962 ], "pop": 1956, "state": "PA" }, { "_id": "16502", "city": "ERIE", "loc": [ -80.097607, 42.113332 ], "pop": 18640, "state": "PA" }, { "_id": "16503", "city": "ERIE", "loc": [ -80.063976, 42.126506 ], "pop": 19019, "state": "PA" }, { "_id": "16504", "city": "ERIE", "loc": [ -80.05208, 42.1108 ], "pop": 17680, "state": "PA" }, { "_id": "16505", "city": "PRESQUE ISLE", "loc": [ -80.161902, 42.097526 ], "pop": 17753, "state": "PA" }, { "_id": "16506", "city": "ERIE", "loc": [ -80.14843999999999, 42.073801 ], "pop": 19269, "state": "PA" }, { "_id": "16507", "city": "ERIE", "loc": [ -80.08642399999999, 42.131579 ], "pop": 10936, "state": "PA" }, { "_id": "16508", "city": "ERIE", "loc": [ -80.09354399999999, 42.097577 ], "pop": 17645, "state": "PA" }, { "_id": "16509", "city": "ERIE", "loc": [ -80.066827, 42.076326 ], "pop": 24232, "state": "PA" }, { "_id": "16510", "city": "WESLEYVILLE", "loc": [ -80.00375200000001, 42.123673 ], "pop": 26455, "state": "PA" }, { "_id": "16511", "city": "ERIE", "loc": [ -80.01766499999999, 42.15529 ], "pop": 11355, "state": "PA" }, { "_id": "16565", "city": "ERIE", "loc": [ -80.10011, 42.0687 ], "pop": 97, "state": "PA" }, { "_id": "16601", "city": "ALTOONA", "loc": [ -78.408901, 40.520945 ], "pop": 31560, "state": "PA" }, { "_id": "16602", "city": "ALTOONA", "loc": [ -78.390533, 40.50524 ], "pop": 32649, "state": "PA" }, { "_id": "16611", "city": "BARREE", "loc": [ -78.107066, 40.549901 ], "pop": 2765, "state": "PA" }, { "_id": "16613", "city": "ASHVILLE", "loc": [ -78.534639, 40.551266 ], "pop": 1275, "state": "PA" }, { "_id": "16616", "city": "BECCARIA", "loc": [ -78.508036, 40.757938 ], "pop": 1571, "state": "PA" }, { "_id": "16617", "city": "BELLWOOD", "loc": [ -78.337234, 40.60394 ], "pop": 8152, "state": "PA" }, { "_id": "16620", "city": "BRISBIN", "loc": [ -78.35263399999999, 40.838711 ], "pop": 369, "state": "PA" }, { "_id": "16621", "city": "BROAD TOP", "loc": [ -78.14060000000001, 40.201891 ], "pop": 331, "state": "PA" }, { "_id": "16622", "city": "CALVIN", "loc": [ -78.023697, 40.298667 ], "pop": 1190, "state": "PA" }, { "_id": "16623", "city": "CASSVILLE", "loc": [ -78.02717800000001, 40.293977 ], "pop": 183, "state": "PA" }, { "_id": "16625", "city": "CLAYSBURG", "loc": [ -78.479658, 40.329243 ], "pop": 3890, "state": "PA" }, { "_id": "16627", "city": "COALPORT", "loc": [ -78.53523800000001, 40.750323 ], "pop": 940, "state": "PA" }, { "_id": "16630", "city": "CRESSON", "loc": [ -78.586068, 40.460779 ], "pop": 5829, "state": "PA" }, { "_id": "16634", "city": "DUDLEY", "loc": [ -78.183823, 40.219453 ], "pop": 616, "state": "PA" }, { "_id": "16635", "city": "DUNCANSVILLE", "loc": [ -78.43832999999999, 40.426228 ], "pop": 13889, "state": "PA" }, { "_id": "16636", "city": "DYSART", "loc": [ -78.527072, 40.60885 ], "pop": 769, "state": "PA" }, { "_id": "16637", "city": "EAST FREEDOM", "loc": [ -78.447519, 40.328197 ], "pop": 2871, "state": "PA" }, { "_id": "16639", "city": "FALLENTIMBER", "loc": [ -78.465912, 40.671924 ], "pop": 684, "state": "PA" }, { "_id": "16640", "city": "FLINTON", "loc": [ -78.48148999999999, 40.701615 ], "pop": 1589, "state": "PA" }, { "_id": "16641", "city": "GALLITZIN", "loc": [ -78.555435, 40.48772 ], "pop": 2852, "state": "PA" }, { "_id": "16645", "city": "GLEN HOPE", "loc": [ -78.499869, 40.798405 ], "pop": 187, "state": "PA" }, { "_id": "16646", "city": "HASTINGS", "loc": [ -78.702924, 40.665874 ], "pop": 2616, "state": "PA" }, { "_id": "16647", "city": "HESSTON", "loc": [ -78.12810899999999, 40.412139 ], "pop": 956, "state": "PA" }, { "_id": "16648", "city": "HOLLIDAYSBURG", "loc": [ -78.368627, 40.438727 ], "pop": 12867, "state": "PA" }, { "_id": "16650", "city": "HOPEWELL", "loc": [ -78.31289700000001, 40.119225 ], "pop": 2440, "state": "PA" }, { "_id": "16651", "city": "HOUTZDALE", "loc": [ -78.3618, 40.830538 ], "pop": 2825, "state": "PA" }, { "_id": "16652", "city": "HUNTINGDON", "loc": [ -78.005028, 40.502274 ], "pop": 16288, "state": "PA" }, { "_id": "16655", "city": "IMLER", "loc": [ -78.51671899999999, 40.23186 ], "pop": 3037, "state": "PA" }, { "_id": "16656", "city": "IRVONA", "loc": [ -78.560243, 40.801744 ], "pop": 1183, "state": "PA" }, { "_id": "16657", "city": "JAMES CREEK", "loc": [ -78.188678, 40.356672 ], "pop": 485, "state": "PA" }, { "_id": "16659", "city": "LOYSBURG", "loc": [ -78.38643500000001, 40.174577 ], "pop": 656, "state": "PA" }, { "_id": "16661", "city": "MADERA", "loc": [ -78.427475, 40.827086 ], "pop": 1389, "state": "PA" }, { "_id": "16662", "city": "MARTINSBURG", "loc": [ -78.324367, 40.295082 ], "pop": 5016, "state": "PA" }, { "_id": "16664", "city": "NEW ENTERPRISE", "loc": [ -78.425916, 40.200013 ], "pop": 1898, "state": "PA" }, { "_id": "16666", "city": "OSCEOLA MILLS", "loc": [ -78.275705, 40.872208 ], "pop": 4346, "state": "PA" }, { "_id": "16667", "city": "ST CLAIRSVILLE", "loc": [ -78.509928, 40.158583 ], "pop": 174, "state": "PA" }, { "_id": "16668", "city": "PATTON", "loc": [ -78.63502800000001, 40.623045 ], "pop": 4737, "state": "PA" }, { "_id": "16669", "city": "PETERSBURG", "loc": [ -77.998402, 40.602968 ], "pop": 2175, "state": "PA" }, { "_id": "16671", "city": "RAMEY", "loc": [ -78.399821, 40.801511 ], "pop": 538, "state": "PA" }, { "_id": "16673", "city": "ROARING SPRING", "loc": [ -78.39284000000001, 40.327747 ], "pop": 4942, "state": "PA" }, { "_id": "16674", "city": "ROBERTSDALE", "loc": [ -78.11169599999999, 40.178674 ], "pop": 727, "state": "PA" }, { "_id": "16678", "city": "SAXTON", "loc": [ -78.247137, 40.223301 ], "pop": 3031, "state": "PA" }, { "_id": "16679", "city": "SIX MILE RUN", "loc": [ -78.210814, 40.157583 ], "pop": 1670, "state": "PA" }, { "_id": "16680", "city": "SMITHMILL", "loc": [ -78.39944199999999, 40.767808 ], "pop": 1192, "state": "PA" }, { "_id": "16683", "city": "SPRUCE CREEK", "loc": [ -78.136083, 40.621767 ], "pop": 281, "state": "PA" }, { "_id": "16685", "city": "TODD", "loc": [ -78.100354, 40.25775 ], "pop": 889, "state": "PA" }, { "_id": "16686", "city": "TYRONE", "loc": [ -78.241905, 40.661905 ], "pop": 11290, "state": "PA" }, { "_id": "16689", "city": "WATERFALL", "loc": [ -78.047708, 40.073871 ], "pop": 1168, "state": "PA" }, { "_id": "16691", "city": "WELLS TANNERY", "loc": [ -78.140269, 40.100996 ], "pop": 563, "state": "PA" }, { "_id": "16692", "city": "WESTOVER", "loc": [ -78.73548099999999, 40.76152 ], "pop": 1550, "state": "PA" }, { "_id": "16693", "city": "GANISTER", "loc": [ -78.22555, 40.437356 ], "pop": 4799, "state": "PA" }, { "_id": "16695", "city": "WOODBURY", "loc": [ -78.366573, 40.21847 ], "pop": 741, "state": "PA" }, { "_id": "16701", "city": "BRADFORD", "loc": [ -78.65396699999999, 41.954678 ], "pop": 18738, "state": "PA" }, { "_id": "16720", "city": "AUSTIN", "loc": [ -78.090812, 41.629649 ], "pop": 1123, "state": "PA" }, { "_id": "16724", "city": "CROSBY", "loc": [ -78.37463700000001, 41.713356 ], "pop": 593, "state": "PA" }, { "_id": "16726", "city": "ORMSBY", "loc": [ -78.566743, 41.826327 ], "pop": 369, "state": "PA" }, { "_id": "16727", "city": "DERRICK CITY", "loc": [ -78.56256399999999, 41.972577 ], "pop": 623, "state": "PA" }, { "_id": "16729", "city": "DUKE CENTER", "loc": [ -78.49226899999999, 41.954017 ], "pop": 1122, "state": "PA" }, { "_id": "16731", "city": "ELDRED", "loc": [ -78.38843900000001, 41.948925 ], "pop": 2616, "state": "PA" }, { "_id": "16732", "city": "GIFFORD", "loc": [ -78.584604, 41.860715 ], "pop": 586, "state": "PA" }, { "_id": "16734", "city": "JAMES CITY", "loc": [ -78.85052, 41.593116 ], "pop": 551, "state": "PA" }, { "_id": "16735", "city": "KANE", "loc": [ -78.79777799999999, 41.661861 ], "pop": 6600, "state": "PA" }, { "_id": "16738", "city": "LEWIS RUN", "loc": [ -78.680498, 41.821123 ], "pop": 2617, "state": "PA" }, { "_id": "16740", "city": "MOUNT JEWETT", "loc": [ -78.64461300000001, 41.724737 ], "pop": 1039, "state": "PA" }, { "_id": "16743", "city": "PORT ALLEGANY", "loc": [ -78.279909, 41.816919 ], "pop": 4468, "state": "PA" }, { "_id": "16744", "city": "REW", "loc": [ -78.53540599999999, 41.912222 ], "pop": 614, "state": "PA" }, { "_id": "16745", "city": "RIXFORD", "loc": [ -78.458647, 41.934606 ], "pop": 514, "state": "PA" }, { "_id": "16746", "city": "ROULETTE", "loc": [ -78.15384299999999, 41.773795 ], "pop": 1354, "state": "PA" }, { "_id": "16748", "city": "SHINGLEHOUSE", "loc": [ -78.19062, 41.957176 ], "pop": 3390, "state": "PA" }, { "_id": "16749", "city": "SMETHPORT", "loc": [ -78.470229, 41.802063 ], "pop": 4375, "state": "PA" }, { "_id": "16750", "city": "TURTLEPOINT", "loc": [ -78.330793, 41.884665 ], "pop": 720, "state": "PA" }, { "_id": "16801", "city": "STATE COLLEGE", "loc": [ -77.852279, 40.792522 ], "pop": 42278, "state": "PA" }, { "_id": "16803", "city": "STATE COLLEGE", "loc": [ -77.892578, 40.808162 ], "pop": 20669, "state": "PA" }, { "_id": "16820", "city": "AARONSBURG", "loc": [ -77.38797700000001, 40.876944 ], "pop": 100, "state": "PA" }, { "_id": "16821", "city": "ALLPORT", "loc": [ -78.21038, 40.975039 ], "pop": 275, "state": "PA" }, { "_id": "16822", "city": "BEECH CREEK", "loc": [ -77.58511799999999, 41.084507 ], "pop": 1723, "state": "PA" }, { "_id": "16823", "city": "PLEASANT GAP", "loc": [ -77.7642, 40.909377 ], "pop": 23418, "state": "PA" }, { "_id": "16827", "city": "BOALSBURG", "loc": [ -77.782236, 40.779344 ], "pop": 3787, "state": "PA" }, { "_id": "16828", "city": "CENTRE HALL", "loc": [ -77.67422500000001, 40.825429 ], "pop": 4223, "state": "PA" }, { "_id": "16829", "city": "CLARENCE", "loc": [ -77.931213, 41.058482 ], "pop": 123, "state": "PA" }, { "_id": "16830", "city": "CLEARFIELD", "loc": [ -78.443488, 41.02103 ], "pop": 14648, "state": "PA" }, { "_id": "16832", "city": "COBURN", "loc": [ -77.49217299999999, 40.867818 ], "pop": 836, "state": "PA" }, { "_id": "16833", "city": "CURWENSVILLE", "loc": [ -78.527247, 40.965972 ], "pop": 4085, "state": "PA" }, { "_id": "16836", "city": "FRENCHVILLE", "loc": [ -78.234465, 41.103794 ], "pop": 1278, "state": "PA" }, { "_id": "16837", "city": "GLEN RICHEY", "loc": [ -78.47521500000001, 40.938209 ], "pop": 331, "state": "PA" }, { "_id": "16838", "city": "GRAMPIAN", "loc": [ -78.59491300000001, 40.981768 ], "pop": 3187, "state": "PA" }, { "_id": "16839", "city": "GRASSFLAT", "loc": [ -78.128354, 40.995881 ], "pop": 2208, "state": "PA" }, { "_id": "16840", "city": "HAWK RUN", "loc": [ -78.213787, 40.941215 ], "pop": 2224, "state": "PA" }, { "_id": "16841", "city": "HOWARD", "loc": [ -77.67017800000001, 41.020315 ], "pop": 3723, "state": "PA" }, { "_id": "16844", "city": "JULIAN", "loc": [ -77.933243, 40.891709 ], "pop": 2461, "state": "PA" }, { "_id": "16845", "city": "KARTHAUS", "loc": [ -78.087509, 41.113635 ], "pop": 932, "state": "PA" }, { "_id": "16852", "city": "MADISONBURG", "loc": [ -77.49495899999999, 40.933407 ], "pop": 678, "state": "PA" }, { "_id": "16854", "city": "MILLHEIM", "loc": [ -77.450531, 40.896314 ], "pop": 1978, "state": "PA" }, { "_id": "16858", "city": "MORRISDALE", "loc": [ -78.23571699999999, 41.000128 ], "pop": 1235, "state": "PA" }, { "_id": "16859", "city": "MOSHANNON", "loc": [ -78.009469, 41.03419 ], "pop": 516, "state": "PA" }, { "_id": "16860", "city": "MUNSON", "loc": [ -78.18621, 40.966704 ], "pop": 110, "state": "PA" }, { "_id": "16861", "city": "NEW MILLPORT", "loc": [ -78.49454299999999, 40.885302 ], "pop": 657, "state": "PA" }, { "_id": "16863", "city": "OLANTA", "loc": [ -78.500079, 40.905621 ], "pop": 47, "state": "PA" }, { "_id": "16864", "city": "ORVISTON", "loc": [ -77.620306, 41.075386 ], "pop": 1023, "state": "PA" }, { "_id": "16865", "city": "PENNSYLVANIA FUR", "loc": [ -77.95406800000001, 40.728194 ], "pop": 2558, "state": "PA" }, { "_id": "16866", "city": "PHILIPSBURG", "loc": [ -78.219008, 40.886252 ], "pop": 7810, "state": "PA" }, { "_id": "16870", "city": "PORT MATILDA", "loc": [ -78.078795, 40.801819 ], "pop": 1890, "state": "PA" }, { "_id": "16871", "city": "POTTERSDALE", "loc": [ -78.03405600000001, 41.186798 ], "pop": 34, "state": "PA" }, { "_id": "16872", "city": "REBERSBURG", "loc": [ -77.405322, 40.954906 ], "pop": 816, "state": "PA" }, { "_id": "16874", "city": "SNOW SHOE", "loc": [ -77.95228, 41.037581 ], "pop": 1917, "state": "PA" }, { "_id": "16875", "city": "SPRING MILLS", "loc": [ -77.57403100000001, 40.857753 ], "pop": 1805, "state": "PA" }, { "_id": "16877", "city": "WARRIORS MARK", "loc": [ -78.077478, 40.741414 ], "pop": 2760, "state": "PA" }, { "_id": "16878", "city": "WEST DECATUR", "loc": [ -78.31293599999999, 40.949305 ], "pop": 2226, "state": "PA" }, { "_id": "16879", "city": "WINBURNE", "loc": [ -78.156235, 40.967779 ], "pop": 387, "state": "PA" }, { "_id": "16881", "city": "WOODLAND", "loc": [ -78.321445, 41.009833 ], "pop": 2571, "state": "PA" }, { "_id": "16882", "city": "WOODWARD", "loc": [ -77.348269, 40.911574 ], "pop": 183, "state": "PA" }, { "_id": "16901", "city": "WELLSBORO", "loc": [ -77.30802, 41.737343 ], "pop": 9906, "state": "PA" }, { "_id": "16912", "city": "BLOSSBURG", "loc": [ -77.079711, 41.669771 ], "pop": 2123, "state": "PA" }, { "_id": "16914", "city": "COLUMBIA CROSS R", "loc": [ -76.79324200000001, 41.846282 ], "pop": 2398, "state": "PA" }, { "_id": "16915", "city": "OSWAYO", "loc": [ -78.003861, 41.781529 ], "pop": 5171, "state": "PA" }, { "_id": "16917", "city": "COVINGTON", "loc": [ -77.108795, 41.739297 ], "pop": 1417, "state": "PA" }, { "_id": "16920", "city": "ELKLAND", "loc": [ -77.31339199999999, 41.988165 ], "pop": 1910, "state": "PA" }, { "_id": "16921", "city": "GAINES", "loc": [ -77.568001, 41.747134 ], "pop": 544, "state": "PA" }, { "_id": "16922", "city": "GALETON", "loc": [ -77.65475600000001, 41.723006 ], "pop": 2050, "state": "PA" }, { "_id": "16923", "city": "NORTH BINGHAM", "loc": [ -77.87358500000001, 41.935312 ], "pop": 1585, "state": "PA" }, { "_id": "16925", "city": "GILLETT", "loc": [ -76.77132899999999, 41.956826 ], "pop": 4273, "state": "PA" }, { "_id": "16926", "city": "GRANVILLE SUMMIT", "loc": [ -76.721829, 41.697299 ], "pop": 1447, "state": "PA" }, { "_id": "16927", "city": "HARRISON VALLEY", "loc": [ -77.687665, 41.949824 ], "pop": 1476, "state": "PA" }, { "_id": "16928", "city": "KNOXVILLE", "loc": [ -77.435678, 41.959557 ], "pop": 893, "state": "PA" }, { "_id": "16929", "city": "LAWRENCEVILLE", "loc": [ -77.11355, 41.978266 ], "pop": 1915, "state": "PA" }, { "_id": "16930", "city": "LIBERTY", "loc": [ -77.119505, 41.565571 ], "pop": 893, "state": "PA" }, { "_id": "16932", "city": "MAINESBURG", "loc": [ -76.96815599999999, 41.790029 ], "pop": 1140, "state": "PA" }, { "_id": "16933", "city": "MANSFIELD", "loc": [ -77.07163, 41.812288 ], "pop": 7111, "state": "PA" }, { "_id": "16935", "city": "MIDDLEBURY CENTE", "loc": [ -77.314764, 41.891706 ], "pop": 2549, "state": "PA" }, { "_id": "16936", "city": "MILLERTON", "loc": [ -76.974766, 41.962467 ], "pop": 2072, "state": "PA" }, { "_id": "16937", "city": "MILLS", "loc": [ -77.762051, 41.902482 ], "pop": 653, "state": "PA" }, { "_id": "16938", "city": "MORRIS", "loc": [ -77.29197499999999, 41.54752 ], "pop": 959, "state": "PA" }, { "_id": "16939", "city": "MORRIS RUN", "loc": [ -77.02776900000001, 41.672943 ], "pop": 496, "state": "PA" }, { "_id": "16940", "city": "NELSON", "loc": [ -77.24190900000001, 41.978719 ], "pop": 599, "state": "PA" }, { "_id": "16941", "city": "GENESEE", "loc": [ -77.773995, 41.981963 ], "pop": 47, "state": "PA" }, { "_id": "16942", "city": "OSCEOLA", "loc": [ -77.353983, 41.984765 ], "pop": 609, "state": "PA" }, { "_id": "16943", "city": "SABINSVILLE", "loc": [ -77.537825, 41.856414 ], "pop": 576, "state": "PA" }, { "_id": "16946", "city": "TIOGA", "loc": [ -77.13929400000001, 41.912454 ], "pop": 1796, "state": "PA" }, { "_id": "16947", "city": "TROY", "loc": [ -76.771143, 41.77815 ], "pop": 3476, "state": "PA" }, { "_id": "16948", "city": "ULYSSES", "loc": [ -77.712557, 41.845903 ], "pop": 727, "state": "PA" }, { "_id": "16950", "city": "LITTLE MARSH", "loc": [ -77.530975, 41.919063 ], "pop": 2844, "state": "PA" }, { "_id": "17002", "city": "ALLENSVILLE", "loc": [ -77.829396, 40.524921 ], "pop": 1135, "state": "PA" }, { "_id": "17003", "city": "ANNVILLE", "loc": [ -76.544676, 40.345608 ], "pop": 12173, "state": "PA" }, { "_id": "17004", "city": "BELLEVILLE", "loc": [ -77.735823, 40.601571 ], "pop": 4203, "state": "PA" }, { "_id": "17005", "city": "BERRYSBURG", "loc": [ -76.811207, 40.60199 ], "pop": 376, "state": "PA" }, { "_id": "17006", "city": "BLAIN", "loc": [ -77.511736, 40.329314 ], "pop": 755, "state": "PA" }, { "_id": "17007", "city": "BOILING SPRINGS", "loc": [ -77.119489, 40.144873 ], "pop": 4331, "state": "PA" }, { "_id": "17009", "city": "BURNHAM", "loc": [ -77.562459, 40.636119 ], "pop": 2005, "state": "PA" }, { "_id": "17011", "city": "SHIREMANSTOWN", "loc": [ -76.92911100000001, 40.238071 ], "pop": 33023, "state": "PA" }, { "_id": "17013", "city": "CARLISLE BARRACK", "loc": [ -77.19952600000001, 40.203877 ], "pop": 50939, "state": "PA" }, { "_id": "17014", "city": "COCOLAMUS", "loc": [ -77.10674899999999, 40.656706 ], "pop": 887, "state": "PA" }, { "_id": "17017", "city": "DALMATIA", "loc": [ -76.879713, 40.648315 ], "pop": 1694, "state": "PA" }, { "_id": "17018", "city": "DAUPHIN", "loc": [ -76.928304, 40.384581 ], "pop": 4523, "state": "PA" }, { "_id": "17019", "city": "DILLSBURG", "loc": [ -77.03386999999999, 40.096373 ], "pop": 11814, "state": "PA" }, { "_id": "17020", "city": "DUNCANNON", "loc": [ -77.047254, 40.408678 ], "pop": 10021, "state": "PA" }, { "_id": "17021", "city": "EAST WATERFORD", "loc": [ -77.652789, 40.354191 ], "pop": 929, "state": "PA" }, { "_id": "17022", "city": "ELIZABETHTOWN", "loc": [ -76.60254500000001, 40.155331 ], "pop": 21808, "state": "PA" }, { "_id": "17023", "city": "ELIZABETHVILLE", "loc": [ -76.83548399999999, 40.55497 ], "pop": 4564, "state": "PA" }, { "_id": "17024", "city": "ELLIOTTSBURG", "loc": [ -77.270348, 40.362428 ], "pop": 1125, "state": "PA" }, { "_id": "17025", "city": "ENOLA", "loc": [ -76.943208, 40.292178 ], "pop": 13103, "state": "PA" }, { "_id": "17026", "city": "FREDERICKSBURG", "loc": [ -76.42674, 40.452392 ], "pop": 2382, "state": "PA" }, { "_id": "17028", "city": "GRANTVILLE", "loc": [ -76.671331, 40.360629 ], "pop": 4569, "state": "PA" }, { "_id": "17029", "city": "GRANVILLE", "loc": [ -77.61335800000001, 40.547868 ], "pop": 1293, "state": "PA" }, { "_id": "17030", "city": "GRATZ", "loc": [ -76.718851, 40.610424 ], "pop": 696, "state": "PA" }, { "_id": "17031", "city": "GREEN PARK", "loc": [ -77.32009600000001, 40.375143 ], "pop": 347, "state": "PA" }, { "_id": "17032", "city": "HALIFAX", "loc": [ -76.89404, 40.47603 ], "pop": 7648, "state": "PA" }, { "_id": "17033", "city": "HERSHEY", "loc": [ -76.654518, 40.263767 ], "pop": 20514, "state": "PA" }, { "_id": "17034", "city": "HIGHSPIRE", "loc": [ -76.785303, 40.208348 ], "pop": 2670, "state": "PA" }, { "_id": "17035", "city": "HONEY GROVE", "loc": [ -77.57607, 40.430903 ], "pop": 884, "state": "PA" }, { "_id": "17036", "city": "HUMMELSTOWN", "loc": [ -76.70937499999999, 40.278199 ], "pop": 8178, "state": "PA" }, { "_id": "17037", "city": "ICKESBURG", "loc": [ -77.34291, 40.434154 ], "pop": 1828, "state": "PA" }, { "_id": "17038", "city": "JONESTOWN", "loc": [ -76.50384200000001, 40.43607 ], "pop": 5098, "state": "PA" }, { "_id": "17040", "city": "LANDISBURG", "loc": [ -77.319146, 40.332644 ], "pop": 1140, "state": "PA" }, { "_id": "17042", "city": "CLEONA", "loc": [ -76.425895, 40.335912 ], "pop": 61993, "state": "PA" }, { "_id": "17043", "city": "WORMLEYSBURG", "loc": [ -76.89757, 40.247158 ], "pop": 5340, "state": "PA" }, { "_id": "17044", "city": "LEWISTOWN", "loc": [ -77.57558, 40.599439 ], "pop": 19311, "state": "PA" }, { "_id": "17045", "city": "LIVERPOOL", "loc": [ -77.00832699999999, 40.575272 ], "pop": 3951, "state": "PA" }, { "_id": "17047", "city": "LOYSVILLE", "loc": [ -77.41382299999999, 40.36576 ], "pop": 1850, "state": "PA" }, { "_id": "17048", "city": "LYKENS", "loc": [ -76.70735999999999, 40.590919 ], "pop": 2904, "state": "PA" }, { "_id": "17049", "city": "MC ALISTERVILLE", "loc": [ -77.2602, 40.646916 ], "pop": 3073, "state": "PA" }, { "_id": "17051", "city": "MC VEYTOWN", "loc": [ -77.718625, 40.504593 ], "pop": 3685, "state": "PA" }, { "_id": "17052", "city": "MAPLETON DEPOT", "loc": [ -77.960444, 40.386414 ], "pop": 1329, "state": "PA" }, { "_id": "17053", "city": "MARYSVILLE", "loc": [ -76.972204, 40.335062 ], "pop": 4561, "state": "PA" }, { "_id": "17055", "city": "HAMPDEN", "loc": [ -76.99493, 40.212669 ], "pop": 51902, "state": "PA" }, { "_id": "17057", "city": "MIDDLETOWN", "loc": [ -76.733127, 40.204086 ], "pop": 21545, "state": "PA" }, { "_id": "17058", "city": "MIFFLIN", "loc": [ -77.41314, 40.570842 ], "pop": 1189, "state": "PA" }, { "_id": "17059", "city": "MIFFLINTOWN", "loc": [ -77.376119, 40.572666 ], "pop": 5646, "state": "PA" }, { "_id": "17060", "city": "MILL CREEK", "loc": [ -77.917689, 40.447102 ], "pop": 1002, "state": "PA" }, { "_id": "17061", "city": "MILLERSBURG", "loc": [ -76.930483, 40.558743 ], "pop": 6135, "state": "PA" }, { "_id": "17062", "city": "MILLERSTOWN", "loc": [ -77.12977600000001, 40.550548 ], "pop": 1589, "state": "PA" }, { "_id": "17063", "city": "MILROY", "loc": [ -77.55673899999999, 40.72033 ], "pop": 3627, "state": "PA" }, { "_id": "17065", "city": "MOUNT HOLLY SPRI", "loc": [ -77.19080700000001, 40.118356 ], "pop": 2857, "state": "PA" }, { "_id": "17066", "city": "MOUNT UNION", "loc": [ -77.863704, 40.390106 ], "pop": 7218, "state": "PA" }, { "_id": "17067", "city": "MYERSTOWN", "loc": [ -76.314328, 40.378949 ], "pop": 12843, "state": "PA" }, { "_id": "17068", "city": "NEW BLOOMFIELD", "loc": [ -77.193836, 40.419325 ], "pop": 3066, "state": "PA" }, { "_id": "17070", "city": "NEW CUMBERLAND", "loc": [ -76.868909, 40.215105 ], "pop": 15037, "state": "PA" }, { "_id": "17071", "city": "NEW GERMANTOWN", "loc": [ -77.579701, 40.305749 ], "pop": 455, "state": "PA" }, { "_id": "17073", "city": "NEWMANSTOWN", "loc": [ -76.2426, 40.317938 ], "pop": 3560, "state": "PA" }, { "_id": "17074", "city": "NEWPORT", "loc": [ -77.16586599999999, 40.482662 ], "pop": 6378, "state": "PA" }, { "_id": "17076", "city": "OAKLAND MILLS", "loc": [ -77.319244, 40.614748 ], "pop": 457, "state": "PA" }, { "_id": "17078", "city": "PALMYRA", "loc": [ -76.58861, 40.301055 ], "pop": 14239, "state": "PA" }, { "_id": "17082", "city": "PORT ROYAL", "loc": [ -77.430958, 40.51068 ], "pop": 3319, "state": "PA" }, { "_id": "17084", "city": "REEDSVILLE", "loc": [ -77.611589, 40.672189 ], "pop": 3320, "state": "PA" }, { "_id": "17086", "city": "RICHFIELD", "loc": [ -77.12229600000001, 40.688424 ], "pop": 1673, "state": "PA" }, { "_id": "17087", "city": "RICHLAND", "loc": [ -76.26544699999999, 40.380595 ], "pop": 3367, "state": "PA" }, { "_id": "17090", "city": "SHERMANS DALE", "loc": [ -77.18085600000001, 40.329898 ], "pop": 5128, "state": "PA" }, { "_id": "17094", "city": "THOMPSONTOWN", "loc": [ -77.207551, 40.590782 ], "pop": 2515, "state": "PA" }, { "_id": "17097", "city": "WICONISCO", "loc": [ -76.709084, 40.567511 ], "pop": 1702, "state": "PA" }, { "_id": "17098", "city": "WILLIAMSTOWN", "loc": [ -76.622259, 40.580761 ], "pop": 2655, "state": "PA" }, { "_id": "17099", "city": "YEAGERTOWN", "loc": [ -77.56882299999999, 40.643558 ], "pop": 2197, "state": "PA" }, { "_id": "17101", "city": "HARRISBURG", "loc": [ -76.883079, 40.261767 ], "pop": 2151, "state": "PA" }, { "_id": "17102", "city": "HARRISBURG", "loc": [ -76.89104399999999, 40.27278 ], "pop": 8862, "state": "PA" }, { "_id": "17103", "city": "PENBROOK", "loc": [ -76.863812, 40.273852 ], "pop": 12335, "state": "PA" }, { "_id": "17104", "city": "HARRISBURG", "loc": [ -76.859397, 40.259683 ], "pop": 21882, "state": "PA" }, { "_id": "17109", "city": "COLONIAL PARK", "loc": [ -76.82261200000001, 40.29122 ], "pop": 22952, "state": "PA" }, { "_id": "17110", "city": "HARRISBURG", "loc": [ -76.886246, 40.302957 ], "pop": 19314, "state": "PA" }, { "_id": "17111", "city": "SWATARA", "loc": [ -76.79391800000001, 40.266058 ], "pop": 22558, "state": "PA" }, { "_id": "17112", "city": "HARRISBURG", "loc": [ -76.791438, 40.335208 ], "pop": 27559, "state": "PA" }, { "_id": "17113", "city": "STEELTON", "loc": [ -76.827568, 40.234007 ], "pop": 9841, "state": "PA" }, { "_id": "17201", "city": "CHAMBERSBURG", "loc": [ -77.657928, 39.931318 ], "pop": 41893, "state": "PA" }, { "_id": "17211", "city": "ARTEMAS", "loc": [ -78.40313999999999, 39.757465 ], "pop": 481, "state": "PA" }, { "_id": "17212", "city": "BIG COVE TANNERY", "loc": [ -78.012366, 39.889704 ], "pop": 2178, "state": "PA" }, { "_id": "17213", "city": "BLAIRS MILLS", "loc": [ -77.769473, 40.254804 ], "pop": 551, "state": "PA" }, { "_id": "17214", "city": "BLUE RIDGE SUMMI", "loc": [ -77.469836, 39.726951 ], "pop": 1090, "state": "PA" }, { "_id": "17215", "city": "BURNT CABINS", "loc": [ -77.901718, 40.075278 ], "pop": 155, "state": "PA" }, { "_id": "17217", "city": "CONCORD", "loc": [ -77.70313299999999, 40.245842 ], "pop": 109, "state": "PA" }, { "_id": "17219", "city": "DOYLESBURG", "loc": [ -77.68620300000001, 40.217195 ], "pop": 905, "state": "PA" }, { "_id": "17220", "city": "DRY RUN", "loc": [ -77.76457000000001, 40.174744 ], "pop": 499, "state": "PA" }, { "_id": "17221", "city": "FANNETTSBURG", "loc": [ -77.82101, 40.071692 ], "pop": 628, "state": "PA" }, { "_id": "17222", "city": "FAYETTEVILLE", "loc": [ -77.53095999999999, 39.906543 ], "pop": 9459, "state": "PA" }, { "_id": "17223", "city": "FORT LITTLETON", "loc": [ -77.975678, 40.054372 ], "pop": 750, "state": "PA" }, { "_id": "17224", "city": "FORT LOUDON", "loc": [ -77.898365, 39.954692 ], "pop": 1412, "state": "PA" }, { "_id": "17225", "city": "GREENCASTLE", "loc": [ -77.746956, 39.781827 ], "pop": 14553, "state": "PA" }, { "_id": "17228", "city": "HARRISONVILLE", "loc": [ -78.08407699999999, 39.976137 ], "pop": 1410, "state": "PA" }, { "_id": "17229", "city": "HUSTONTOWN", "loc": [ -78.01483500000001, 40.044111 ], "pop": 245, "state": "PA" }, { "_id": "17232", "city": "LURGAN", "loc": [ -77.635063, 40.127422 ], "pop": 845, "state": "PA" }, { "_id": "17233", "city": "MC CONNELLSBURG", "loc": [ -77.990117, 39.944251 ], "pop": 2529, "state": "PA" }, { "_id": "17236", "city": "MERCERSBURG", "loc": [ -77.907259, 39.819519 ], "pop": 7735, "state": "PA" }, { "_id": "17237", "city": "MONT ALTO", "loc": [ -77.553676, 39.841689 ], "pop": 1601, "state": "PA" }, { "_id": "17238", "city": "NEEDMORE", "loc": [ -78.143935, 39.871279 ], "pop": 1208, "state": "PA" }, { "_id": "17239", "city": "NEELYTON", "loc": [ -77.85801499999999, 40.137051 ], "pop": 816, "state": "PA" }, { "_id": "17240", "city": "NEWBURG", "loc": [ -77.56691499999999, 40.13333 ], "pop": 2350, "state": "PA" }, { "_id": "17241", "city": "NEWVILLE", "loc": [ -77.411401, 40.185468 ], "pop": 9740, "state": "PA" }, { "_id": "17243", "city": "ORBISONIA", "loc": [ -77.906924, 40.238872 ], "pop": 2368, "state": "PA" }, { "_id": "17244", "city": "ORRSTOWN", "loc": [ -77.639762, 40.07305 ], "pop": 2281, "state": "PA" }, { "_id": "17246", "city": "PLEASANT HALL", "loc": [ -77.703148, 40.04135 ], "pop": 366, "state": "PA" }, { "_id": "17252", "city": "SAINT THOMAS", "loc": [ -77.7908, 39.924052 ], "pop": 4109, "state": "PA" }, { "_id": "17255", "city": "SHADE GAP", "loc": [ -77.868045, 40.172976 ], "pop": 416, "state": "PA" }, { "_id": "17257", "city": "SHIPPENSBURG", "loc": [ -77.51947699999999, 40.051359 ], "pop": 19302, "state": "PA" }, { "_id": "17260", "city": "SHIRLEYSBURG", "loc": [ -77.870062, 40.316768 ], "pop": 1416, "state": "PA" }, { "_id": "17262", "city": "SPRING RUN", "loc": [ -77.74052500000001, 40.14663 ], "pop": 796, "state": "PA" }, { "_id": "17264", "city": "THREE SPRINGS", "loc": [ -77.99412, 40.183437 ], "pop": 2197, "state": "PA" }, { "_id": "17265", "city": "UPPERSTRASBURG", "loc": [ -77.736791, 40.05799 ], "pop": 499, "state": "PA" }, { "_id": "17266", "city": "WALNUT BOTTOM", "loc": [ -77.408984, 40.086042 ], "pop": 1157, "state": "PA" }, { "_id": "17267", "city": "WARFORDSBURG", "loc": [ -78.198627, 39.769765 ], "pop": 2988, "state": "PA" }, { "_id": "17268", "city": "WAYNESBORO", "loc": [ -77.567363, 39.763504 ], "pop": 25878, "state": "PA" }, { "_id": "17271", "city": "WILLOW HILL", "loc": [ -77.796947, 40.113694 ], "pop": 409, "state": "PA" }, { "_id": "17301", "city": "ABBOTTSTOWN", "loc": [ -76.993077, 39.888099 ], "pop": 1777, "state": "PA" }, { "_id": "17302", "city": "AIRVILLE", "loc": [ -76.401179, 39.821012 ], "pop": 1685, "state": "PA" }, { "_id": "17304", "city": "ASPERS", "loc": [ -77.228657, 39.976533 ], "pop": 2894, "state": "PA" }, { "_id": "17307", "city": "BIGLERVILLE", "loc": [ -77.288549, 39.928119 ], "pop": 5280, "state": "PA" }, { "_id": "17309", "city": "BROGUE", "loc": [ -76.488236, 39.883044 ], "pop": 5123, "state": "PA" }, { "_id": "17313", "city": "YOE", "loc": [ -76.644794, 39.900127 ], "pop": 8691, "state": "PA" }, { "_id": "17314", "city": "DELTA", "loc": [ -76.34410099999999, 39.751754 ], "pop": 4910, "state": "PA" }, { "_id": "17315", "city": "DOVER", "loc": [ -76.855485, 40.006158 ], "pop": 20094, "state": "PA" }, { "_id": "17316", "city": "EAST BERLIN", "loc": [ -77.00725199999999, 39.964546 ], "pop": 5538, "state": "PA" }, { "_id": "17319", "city": "ETTERS", "loc": [ -76.801861, 40.154506 ], "pop": 6135, "state": "PA" }, { "_id": "17320", "city": "GREENSTONE", "loc": [ -77.376824, 39.762694 ], "pop": 4709, "state": "PA" }, { "_id": "17321", "city": "FAWN GROVE", "loc": [ -76.43923700000001, 39.751024 ], "pop": 1938, "state": "PA" }, { "_id": "17322", "city": "FELTON", "loc": [ -76.593721, 39.836006 ], "pop": 3128, "state": "PA" }, { "_id": "17324", "city": "GARDNERS", "loc": [ -77.187725, 40.042759 ], "pop": 4246, "state": "PA" }, { "_id": "17325", "city": "GETTYSBURG", "loc": [ -77.222313, 39.832044 ], "pop": 23574, "state": "PA" }, { "_id": "17327", "city": "GLEN ROCK", "loc": [ -76.747713, 39.781326 ], "pop": 7217, "state": "PA" }, { "_id": "17329", "city": "BRODBECKS", "loc": [ -76.86204600000001, 39.759907 ], "pop": 2230, "state": "PA" }, { "_id": "17331", "city": "HANOVER", "loc": [ -76.981196, 39.794286 ], "pop": 37367, "state": "PA" }, { "_id": "17339", "city": "LEWISBERRY", "loc": [ -76.87000399999999, 40.146295 ], "pop": 5338, "state": "PA" }, { "_id": "17340", "city": "LITTLESTOWN", "loc": [ -77.100326, 39.749549 ], "pop": 7758, "state": "PA" }, { "_id": "17344", "city": "MC SHERRYSTOWN", "loc": [ -77.01496, 39.804832 ], "pop": 3838, "state": "PA" }, { "_id": "17345", "city": "MANCHESTER", "loc": [ -76.733245, 40.069461 ], "pop": 8095, "state": "PA" }, { "_id": "17347", "city": "MOUNT WOLF", "loc": [ -76.69657599999999, 40.071126 ], "pop": 3083, "state": "PA" }, { "_id": "17349", "city": "NEW FREEDOM", "loc": [ -76.68406400000001, 39.742266 ], "pop": 6346, "state": "PA" }, { "_id": "17350", "city": "NEW OXFORD", "loc": [ -77.06433, 39.877459 ], "pop": 9674, "state": "PA" }, { "_id": "17352", "city": "NEW PARK", "loc": [ -76.504167, 39.760027 ], "pop": 1190, "state": "PA" }, { "_id": "17353", "city": "ORRTANNA", "loc": [ -77.38059199999999, 39.881032 ], "pop": 2066, "state": "PA" }, { "_id": "17356", "city": "RED LION", "loc": [ -76.608075, 39.902572 ], "pop": 12737, "state": "PA" }, { "_id": "17360", "city": "SEVEN VALLEYS", "loc": [ -76.738336, 39.855613 ], "pop": 5219, "state": "PA" }, { "_id": "17361", "city": "SHREWSBURY", "loc": [ -76.67482699999999, 39.760133 ], "pop": 3749, "state": "PA" }, { "_id": "17362", "city": "SPRING GROVE", "loc": [ -76.87735600000001, 39.857208 ], "pop": 13901, "state": "PA" }, { "_id": "17363", "city": "STEWARTSTOWN", "loc": [ -76.597037, 39.771962 ], "pop": 5865, "state": "PA" }, { "_id": "17364", "city": "THOMASVILLE", "loc": [ -76.882159, 39.934619 ], "pop": 3435, "state": "PA" }, { "_id": "17365", "city": "WELLSVILLE", "loc": [ -76.944315, 40.055721 ], "pop": 2456, "state": "PA" }, { "_id": "17366", "city": "WINDSOR", "loc": [ -76.55912600000001, 39.923271 ], "pop": 5489, "state": "PA" }, { "_id": "17368", "city": "WRIGHTSVILLE", "loc": [ -76.526971, 39.996559 ], "pop": 7677, "state": "PA" }, { "_id": "17370", "city": "YORK HAVEN", "loc": [ -76.773725, 40.122154 ], "pop": 4948, "state": "PA" }, { "_id": "17372", "city": "YORK SPRINGS", "loc": [ -77.10613600000001, 40.00839 ], "pop": 3042, "state": "PA" }, { "_id": "17401", "city": "YORK", "loc": [ -76.726887, 39.963539 ], "pop": 2439, "state": "PA" }, { "_id": "17402", "city": "EAST YORK", "loc": [ -76.674578, 39.971508 ], "pop": 35648, "state": "PA" }, { "_id": "17403", "city": "YORK", "loc": [ -76.712998, 39.94943 ], "pop": 40210, "state": "PA" }, { "_id": "17404", "city": "WEST YORK", "loc": [ -76.768987, 39.961988 ], "pop": 49524, "state": "PA" }, { "_id": "17406", "city": "HELLAM", "loc": [ -76.592646, 39.998249 ], "pop": 6095, "state": "PA" }, { "_id": "17407", "city": "JACOBUS", "loc": [ -76.714634, 39.880203 ], "pop": 1872, "state": "PA" }, { "_id": "17501", "city": "AKRON", "loc": [ -76.20529500000001, 40.157086 ], "pop": 4286, "state": "PA" }, { "_id": "17502", "city": "BAINBRIDGE", "loc": [ -76.672589, 40.1086 ], "pop": 2688, "state": "PA" }, { "_id": "17505", "city": "BIRD IN HAND", "loc": [ -76.183036, 40.056109 ], "pop": 862, "state": "PA" }, { "_id": "17509", "city": "NINEPOINTS", "loc": [ -76.025983, 39.935632 ], "pop": 4517, "state": "PA" }, { "_id": "17512", "city": "COLUMBIA", "loc": [ -76.48622, 40.039079 ], "pop": 17454, "state": "PA" }, { "_id": "17516", "city": "CONESTOGA", "loc": [ -76.35747499999999, 39.940303 ], "pop": 4493, "state": "PA" }, { "_id": "17517", "city": "DENVER", "loc": [ -76.11568800000001, 40.229671 ], "pop": 10737, "state": "PA" }, { "_id": "17518", "city": "DRUMORE", "loc": [ -76.245684, 39.838399 ], "pop": 1191, "state": "PA" }, { "_id": "17519", "city": "EAST EARL", "loc": [ -76.02763400000001, 40.139475 ], "pop": 4249, "state": "PA" }, { "_id": "17520", "city": "EAST PETERSBURG", "loc": [ -76.351169, 40.100781 ], "pop": 4387, "state": "PA" }, { "_id": "17522", "city": "EPHRATA", "loc": [ -76.18209299999999, 40.175641 ], "pop": 25859, "state": "PA" }, { "_id": "17527", "city": "GAP", "loc": [ -75.997801, 40.002018 ], "pop": 4318, "state": "PA" }, { "_id": "17529", "city": "GORDONVILLE", "loc": [ -76.11063, 40.035304 ], "pop": 4429, "state": "PA" }, { "_id": "17532", "city": "HOLTWOOD", "loc": [ -76.300822, 39.863146 ], "pop": 2526, "state": "PA" }, { "_id": "17535", "city": "KINZERS", "loc": [ -76.04932599999999, 40.005326 ], "pop": 2524, "state": "PA" }, { "_id": "17536", "city": "KIRKWOOD", "loc": [ -76.093315, 39.82571 ], "pop": 2384, "state": "PA" }, { "_id": "17538", "city": "SALUNGA", "loc": [ -76.414975, 40.08825 ], "pop": 5489, "state": "PA" }, { "_id": "17540", "city": "LEOLA", "loc": [ -76.192109, 40.096448 ], "pop": 9624, "state": "PA" }, { "_id": "17543", "city": "BRUNNERVILLE", "loc": [ -76.29926, 40.162573 ], "pop": 29376, "state": "PA" }, { "_id": "17545", "city": "MANHEIM", "loc": [ -76.416794, 40.170229 ], "pop": 16992, "state": "PA" }, { "_id": "17547", "city": "MARIETTA", "loc": [ -76.564527, 40.066442 ], "pop": 5751, "state": "PA" }, { "_id": "17551", "city": "MILLERSVILLE", "loc": [ -76.356568, 39.998213 ], "pop": 8021, "state": "PA" }, { "_id": "17552", "city": "FLORIN", "loc": [ -76.50755100000001, 40.106828 ], "pop": 12282, "state": "PA" }, { "_id": "17554", "city": "MOUNTVILLE", "loc": [ -76.427694, 40.042742 ], "pop": 4192, "state": "PA" }, { "_id": "17555", "city": "NARVON", "loc": [ -75.975584, 40.125165 ], "pop": 7239, "state": "PA" }, { "_id": "17557", "city": "NEW HOLLAND", "loc": [ -76.080136, 40.100511 ], "pop": 11604, "state": "PA" }, { "_id": "17560", "city": "NEW PROVIDENCE", "loc": [ -76.22431899999999, 39.909776 ], "pop": 5330, "state": "PA" }, { "_id": "17562", "city": "PARADISE", "loc": [ -76.108074, 39.985249 ], "pop": 2757, "state": "PA" }, { "_id": "17563", "city": "PEACH BOTTOM", "loc": [ -76.17908300000001, 39.770511 ], "pop": 4352, "state": "PA" }, { "_id": "17565", "city": "PEQUEA", "loc": [ -76.320866, 39.905765 ], "pop": 1800, "state": "PA" }, { "_id": "17566", "city": "QUARRYVILLE", "loc": [ -76.146462, 39.894932 ], "pop": 9361, "state": "PA" }, { "_id": "17569", "city": "REINHOLDS", "loc": [ -76.101332, 40.268758 ], "pop": 4665, "state": "PA" }, { "_id": "17572", "city": "RONKS", "loc": [ -76.166132, 40.020754 ], "pop": 2964, "state": "PA" }, { "_id": "17576", "city": "SMOKETOWN", "loc": [ -76.22007000000001, 40.040651 ], "pop": 2141, "state": "PA" }, { "_id": "17578", "city": "STEVENS", "loc": [ -76.162604, 40.219397 ], "pop": 6511, "state": "PA" }, { "_id": "17579", "city": "STRASBURG", "loc": [ -76.18482400000001, 39.970075 ], "pop": 5694, "state": "PA" }, { "_id": "17581", "city": "TERRE HILL", "loc": [ -76.05108300000001, 40.158539 ], "pop": 1282, "state": "PA" }, { "_id": "17582", "city": "WASHINGTON BORO", "loc": [ -76.4402, 39.988118 ], "pop": 2214, "state": "PA" }, { "_id": "17584", "city": "WILLOW STREET", "loc": [ -76.27524, 39.967003 ], "pop": 7176, "state": "PA" }, { "_id": "17601", "city": "NEFFSVILLE", "loc": [ -76.31988800000001, 40.075381 ], "pop": 41062, "state": "PA" }, { "_id": "17602", "city": "LANCASTER", "loc": [ -76.284364, 40.033514 ], "pop": 40850, "state": "PA" }, { "_id": "17603", "city": "ROHRERSTOWN", "loc": [ -76.33158299999999, 40.030475 ], "pop": 55173, "state": "PA" }, { "_id": "17701", "city": "SOUTH WILLIAMSPO", "loc": [ -77.020571, 41.247217 ], "pop": 58844, "state": "PA" }, { "_id": "17723", "city": "CAMMAL", "loc": [ -77.46202099999999, 41.380901 ], "pop": 246, "state": "PA" }, { "_id": "17724", "city": "CANTON", "loc": [ -76.858188, 41.653784 ], "pop": 5189, "state": "PA" }, { "_id": "17727", "city": "CEDAR RUN", "loc": [ -77.48891, 41.498972 ], "pop": 102, "state": "PA" }, { "_id": "17728", "city": "COGAN STATION", "loc": [ -77.068996, 41.31517 ], "pop": 4582, "state": "PA" }, { "_id": "17729", "city": "CROSS FORK", "loc": [ -77.80953, 41.473672 ], "pop": 184, "state": "PA" }, { "_id": "17737", "city": "HUGHESVILLE", "loc": [ -76.71411000000001, 41.255952 ], "pop": 6489, "state": "PA" }, { "_id": "17740", "city": "SALLADASBURG", "loc": [ -77.242704, 41.200733 ], "pop": 11484, "state": "PA" }, { "_id": "17742", "city": "LAIRDSVILLE", "loc": [ -76.58893, 41.233549 ], "pop": 914, "state": "PA" }, { "_id": "17744", "city": "LINDEN", "loc": [ -77.152652, 41.247216 ], "pop": 2994, "state": "PA" }, { "_id": "17745", "city": "LOCK HAVEN", "loc": [ -77.44358800000001, 41.142497 ], "pop": 16448, "state": "PA" }, { "_id": "17747", "city": "LOGANTON", "loc": [ -77.320397, 41.028317 ], "pop": 2326, "state": "PA" }, { "_id": "17751", "city": "MILL HALL", "loc": [ -77.483609, 41.086688 ], "pop": 7510, "state": "PA" }, { "_id": "17752", "city": "MONTGOMERY", "loc": [ -76.883933, 41.178778 ], "pop": 5539, "state": "PA" }, { "_id": "17754", "city": "MONTOURSVILLE", "loc": [ -76.903035, 41.266252 ], "pop": 11266, "state": "PA" }, { "_id": "17756", "city": "MUNCY", "loc": [ -76.76325799999999, 41.213715 ], "pop": 8627, "state": "PA" }, { "_id": "17758", "city": "MUNCY VALLEY", "loc": [ -76.541518, 41.381206 ], "pop": 1548, "state": "PA" }, { "_id": "17763", "city": "RALSTON", "loc": [ -76.95835, 41.503817 ], "pop": 588, "state": "PA" }, { "_id": "17764", "city": "RENOVO", "loc": [ -77.74478999999999, 41.333376 ], "pop": 3639, "state": "PA" }, { "_id": "17765", "city": "ROARING BRANCH", "loc": [ -76.942053, 41.569234 ], "pop": 448, "state": "PA" }, { "_id": "17768", "city": "SHUNK", "loc": [ -76.745521, 41.553574 ], "pop": 300, "state": "PA" }, { "_id": "17771", "city": "TROUT RUN", "loc": [ -77.009776, 41.412481 ], "pop": 4449, "state": "PA" }, { "_id": "17772", "city": "TURBOTVILLE", "loc": [ -76.742493, 41.111867 ], "pop": 3902, "state": "PA" }, { "_id": "17774", "city": "UNITYVILLE", "loc": [ -76.51831799999999, 41.243552 ], "pop": 871, "state": "PA" }, { "_id": "17776", "city": "WATERVILLE", "loc": [ -77.36036799999999, 41.31136 ], "pop": 334, "state": "PA" }, { "_id": "17777", "city": "WATSONTOWN", "loc": [ -76.85319200000001, 41.102006 ], "pop": 6601, "state": "PA" }, { "_id": "17778", "city": "WESTPORT", "loc": [ -77.931496, 41.27445 ], "pop": 25, "state": "PA" }, { "_id": "17779", "city": "WOOLRICH", "loc": [ -77.331307, 41.188734 ], "pop": 4694, "state": "PA" }, { "_id": "17801", "city": "SUNBURY", "loc": [ -76.77761099999999, 40.855122 ], "pop": 17335, "state": "PA" }, { "_id": "17810", "city": "ALLENWOOD", "loc": [ -76.972362, 41.126424 ], "pop": 2666, "state": "PA" }, { "_id": "17812", "city": "BEAVER SPRINGS", "loc": [ -77.231801, 40.752766 ], "pop": 1575, "state": "PA" }, { "_id": "17813", "city": "BEAVERTOWN", "loc": [ -77.169112, 40.777378 ], "pop": 2226, "state": "PA" }, { "_id": "17814", "city": "BENTON", "loc": [ -76.340632, 41.223142 ], "pop": 5292, "state": "PA" }, { "_id": "17815", "city": "BLOOMSBURG", "loc": [ -76.438379, 41.011528 ], "pop": 25338, "state": "PA" }, { "_id": "17820", "city": "CATAWISSA", "loc": [ -76.441586, 40.918031 ], "pop": 6334, "state": "PA" }, { "_id": "17821", "city": "DANVILLE", "loc": [ -76.62289699999999, 40.979895 ], "pop": 17269, "state": "PA" }, { "_id": "17823", "city": "DORNSIFE", "loc": [ -76.76260000000001, 40.757092 ], "pop": 432, "state": "PA" }, { "_id": "17824", "city": "ELYSBURG", "loc": [ -76.556924, 40.863871 ], "pop": 2165, "state": "PA" }, { "_id": "17827", "city": "FREEBURG", "loc": [ -76.94296300000001, 40.767498 ], "pop": 1080, "state": "PA" }, { "_id": "17828", "city": "GOWEN CITY", "loc": [ -76.528149, 40.751141 ], "pop": 646, "state": "PA" }, { "_id": "17830", "city": "HERNDON", "loc": [ -76.80076099999999, 40.691789 ], "pop": 2089, "state": "PA" }, { "_id": "17832", "city": "MARION HEIGHTS", "loc": [ -76.465137, 40.804576 ], "pop": 837, "state": "PA" }, { "_id": "17834", "city": "KULPMONT", "loc": [ -76.474384, 40.793278 ], "pop": 3183, "state": "PA" }, { "_id": "17835", "city": "LAURELTON", "loc": [ -77.20521100000001, 40.91268 ], "pop": 448, "state": "PA" }, { "_id": "17836", "city": "LECK KILL", "loc": [ -76.62710800000001, 40.710135 ], "pop": 626, "state": "PA" }, { "_id": "17837", "city": "LEWISBURG", "loc": [ -76.90987800000001, 40.970205 ], "pop": 18821, "state": "PA" }, { "_id": "17841", "city": "MC CLURE", "loc": [ -77.37579100000001, 40.699084 ], "pop": 4901, "state": "PA" }, { "_id": "17842", "city": "MIDDLEBURG", "loc": [ -77.046798, 40.797656 ], "pop": 6546, "state": "PA" }, { "_id": "17843", "city": "BEAVER SPRINGS", "loc": [ -76.970366, 40.810917 ], "pop": 1791, "state": "PA" }, { "_id": "17844", "city": "MIFFLINBURG", "loc": [ -77.050515, 40.921826 ], "pop": 8379, "state": "PA" }, { "_id": "17845", "city": "MILLMONT", "loc": [ -77.194142, 40.880324 ], "pop": 2111, "state": "PA" }, { "_id": "17846", "city": "MILLVILLE", "loc": [ -76.52076700000001, 41.126051 ], "pop": 5496, "state": "PA" }, { "_id": "17847", "city": "MILTON", "loc": [ -76.839817, 41.01681 ], "pop": 9223, "state": "PA" }, { "_id": "17850", "city": "MONTANDON", "loc": [ -76.851024, 40.975936 ], "pop": 3167, "state": "PA" }, { "_id": "17851", "city": "MOUNT CARMEL", "loc": [ -76.419466, 40.795535 ], "pop": 9925, "state": "PA" }, { "_id": "17853", "city": "MOUNT PLEASANT M", "loc": [ -77.005241, 40.700185 ], "pop": 1876, "state": "PA" }, { "_id": "17855", "city": "NEW BERLIN", "loc": [ -76.986124, 40.880212 ], "pop": 904, "state": "PA" }, { "_id": "17856", "city": "NEW COLUMBIA", "loc": [ -76.90185099999999, 41.054108 ], "pop": 3072, "state": "PA" }, { "_id": "17857", "city": "NORTHUMBERLAND", "loc": [ -76.79079400000001, 40.904355 ], "pop": 7326, "state": "PA" }, { "_id": "17859", "city": "ORANGEVILLE", "loc": [ -76.38097, 41.10156 ], "pop": 2625, "state": "PA" }, { "_id": "17860", "city": "PAXINOS", "loc": [ -76.635041, 40.844809 ], "pop": 1684, "state": "PA" }, { "_id": "17864", "city": "PORT TREVORTON", "loc": [ -76.908215, 40.699593 ], "pop": 2911, "state": "PA" }, { "_id": "17866", "city": "RANSHAW", "loc": [ -76.498242, 40.803039 ], "pop": 124, "state": "PA" }, { "_id": "17867", "city": "REBUCK", "loc": [ -76.740605, 40.712544 ], "pop": 620, "state": "PA" }, { "_id": "17868", "city": "RIVERSIDE", "loc": [ -76.637458, 40.951269 ], "pop": 1991, "state": "PA" }, { "_id": "17870", "city": "SELINSGROVE", "loc": [ -76.86825, 40.822372 ], "pop": 14796, "state": "PA" }, { "_id": "17872", "city": "EXCELSIOR", "loc": [ -76.56111799999999, 40.790336 ], "pop": 20982, "state": "PA" }, { "_id": "17877", "city": "SNYDERTOWN", "loc": [ -76.67494499999999, 40.874097 ], "pop": 416, "state": "PA" }, { "_id": "17878", "city": "STILLWATER", "loc": [ -76.369624, 41.151517 ], "pop": 523, "state": "PA" }, { "_id": "17881", "city": "TREVORTON", "loc": [ -76.67023399999999, 40.781867 ], "pop": 2067, "state": "PA" }, { "_id": "17888", "city": "WILBURTON", "loc": [ -76.392922, 40.812087 ], "pop": 98, "state": "PA" }, { "_id": "17889", "city": "WINFIELD", "loc": [ -76.871833, 40.890805 ], "pop": 2071, "state": "PA" }, { "_id": "17901", "city": "POTTSVILLE", "loc": [ -76.212318, 40.683978 ], "pop": 27703, "state": "PA" }, { "_id": "17921", "city": "ASHLAND", "loc": [ -76.342972, 40.773231 ], "pop": 8328, "state": "PA" }, { "_id": "17922", "city": "AUBURN", "loc": [ -76.13439, 40.596157 ], "pop": 2444, "state": "PA" }, { "_id": "17923", "city": "BRANCHDALE", "loc": [ -76.33278799999999, 40.664328 ], "pop": 835, "state": "PA" }, { "_id": "17925", "city": "BROCKTON", "loc": [ -76.049874, 40.763162 ], "pop": 1230, "state": "PA" }, { "_id": "17927", "city": "CENTRALIA", "loc": [ -76.357325, 40.81375 ], "pop": 1006, "state": "PA" }, { "_id": "17929", "city": "CRESSONA", "loc": [ -76.19502799999999, 40.628361 ], "pop": 2240, "state": "PA" }, { "_id": "17931", "city": "FRACKVILLE", "loc": [ -76.231137, 40.782537 ], "pop": 7039, "state": "PA" }, { "_id": "17935", "city": "GIRARDVILLE", "loc": [ -76.28581, 40.792162 ], "pop": 1892, "state": "PA" }, { "_id": "17938", "city": "HEGINS", "loc": [ -76.473168, 40.666898 ], "pop": 2499, "state": "PA" }, { "_id": "17941", "city": "KLINGERSTOWN", "loc": [ -76.65070900000001, 40.667571 ], "pop": 508, "state": "PA" }, { "_id": "17948", "city": "MAHANOY CITY", "loc": [ -76.139601, 40.812302 ], "pop": 5209, "state": "PA" }, { "_id": "17954", "city": "MINERSVILLE", "loc": [ -76.261533, 40.690637 ], "pop": 4998, "state": "PA" }, { "_id": "17957", "city": "MUIR", "loc": [ -76.468205, 40.613614 ], "pop": 374, "state": "PA" }, { "_id": "17959", "city": "KASKA", "loc": [ -76.11348, 40.722728 ], "pop": 2826, "state": "PA" }, { "_id": "17960", "city": "NEW RINGGOLD", "loc": [ -75.948409, 40.714851 ], "pop": 4284, "state": "PA" }, { "_id": "17961", "city": "ORWIGSBURG", "loc": [ -76.08399900000001, 40.643071 ], "pop": 6928, "state": "PA" }, { "_id": "17963", "city": "PINE GROVE", "loc": [ -76.326913, 40.567093 ], "pop": 12239, "state": "PA" }, { "_id": "17964", "city": "PITMAN", "loc": [ -76.523297, 40.704868 ], "pop": 992, "state": "PA" }, { "_id": "17965", "city": "PORT CARBON", "loc": [ -76.16604599999999, 40.697731 ], "pop": 2260, "state": "PA" }, { "_id": "17967", "city": "RINGTOWN", "loc": [ -76.23493000000001, 40.855854 ], "pop": 2311, "state": "PA" }, { "_id": "17968", "city": "SACRAMENTO", "loc": [ -76.61283299999999, 40.635238 ], "pop": 347, "state": "PA" }, { "_id": "17970", "city": "SAINT CLAIR", "loc": [ -76.192381, 40.719273 ], "pop": 4091, "state": "PA" }, { "_id": "17972", "city": "SCHUYLKILL HAVEN", "loc": [ -76.169973, 40.630571 ], "pop": 6199, "state": "PA" }, { "_id": "17976", "city": "SHENANDOAH", "loc": [ -76.203502, 40.816744 ], "pop": 11159, "state": "PA" }, { "_id": "17978", "city": "SPRING GLEN", "loc": [ -76.635018, 40.633447 ], "pop": 288, "state": "PA" }, { "_id": "17980", "city": "TOWER CITY", "loc": [ -76.550022, 40.584475 ], "pop": 3905, "state": "PA" }, { "_id": "17981", "city": "DONALDSON", "loc": [ -76.398796, 40.626842 ], "pop": 2629, "state": "PA" }, { "_id": "17983", "city": "VALLEY VIEW", "loc": [ -76.544843, 40.644467 ], "pop": 2007, "state": "PA" }, { "_id": "17985", "city": "ZION GROVE", "loc": [ -76.231032, 40.937152 ], "pop": 2070, "state": "PA" }, { "_id": "18011", "city": "ALBURTIS", "loc": [ -75.62112999999999, 40.486201 ], "pop": 4844, "state": "PA" }, { "_id": "18013", "city": "ROSETO", "loc": [ -75.195644, 40.854907 ], "pop": 16916, "state": "PA" }, { "_id": "18014", "city": "BATH", "loc": [ -75.40855999999999, 40.755144 ], "pop": 11601, "state": "PA" }, { "_id": "18015", "city": "BETHLEHEM", "loc": [ -75.38050699999999, 40.600167 ], "pop": 29778, "state": "PA" }, { "_id": "18017", "city": "BUTZTOWN", "loc": [ -75.35823000000001, 40.65168 ], "pop": 46369, "state": "PA" }, { "_id": "18018", "city": "BETHLEHEM", "loc": [ -75.392827, 40.627849 ], "pop": 32072, "state": "PA" }, { "_id": "18031", "city": "BREINIGSVILLE", "loc": [ -75.655269, 40.552621 ], "pop": 3437, "state": "PA" }, { "_id": "18032", "city": "CATASAUQUA", "loc": [ -75.46926999999999, 40.655696 ], "pop": 9663, "state": "PA" }, { "_id": "18034", "city": "CENTER VALLEY", "loc": [ -75.42420799999999, 40.539594 ], "pop": 5250, "state": "PA" }, { "_id": "18035", "city": "CHERRYVILLE", "loc": [ -75.552133, 40.738476 ], "pop": 905, "state": "PA" }, { "_id": "18036", "city": "COOPERSBURG", "loc": [ -75.388778, 40.507553 ], "pop": 10656, "state": "PA" }, { "_id": "18037", "city": "COPLAY", "loc": [ -75.51882500000001, 40.684865 ], "pop": 6015, "state": "PA" }, { "_id": "18038", "city": "DANIELSVILLE", "loc": [ -75.518604, 40.786636 ], "pop": 2004, "state": "PA" }, { "_id": "18041", "city": "EAST GREENVILLE", "loc": [ -75.505618, 40.411876 ], "pop": 6266, "state": "PA" }, { "_id": "18042", "city": "FORKS TOWNSHIP", "loc": [ -75.23582, 40.6867 ], "pop": 65784, "state": "PA" }, { "_id": "18049", "city": "EMMAUS", "loc": [ -75.500991, 40.529295 ], "pop": 16204, "state": "PA" }, { "_id": "18051", "city": "FOGELSVILLE", "loc": [ -75.656794, 40.59304 ], "pop": 2175, "state": "PA" }, { "_id": "18052", "city": "HOKENDAUQUA", "loc": [ -75.495383, 40.647479 ], "pop": 23666, "state": "PA" }, { "_id": "18053", "city": "GERMANSVILLE", "loc": [ -75.714687, 40.711826 ], "pop": 975, "state": "PA" }, { "_id": "18054", "city": "GREEN LANE", "loc": [ -75.435148, 40.353377 ], "pop": 6020, "state": "PA" }, { "_id": "18055", "city": "HELLERTOWN", "loc": [ -75.325513, 40.581715 ], "pop": 11759, "state": "PA" }, { "_id": "18056", "city": "HEREFORD", "loc": [ -75.579983, 40.448659 ], "pop": 3026, "state": "PA" }, { "_id": "18058", "city": "KUNKLETOWN", "loc": [ -75.47597399999999, 40.899891 ], "pop": 4924, "state": "PA" }, { "_id": "18062", "city": "MACUNGIE", "loc": [ -75.56661800000001, 40.528543 ], "pop": 10376, "state": "PA" }, { "_id": "18064", "city": "NAZARETH", "loc": [ -75.31993199999999, 40.744962 ], "pop": 19236, "state": "PA" }, { "_id": "18066", "city": "NEW TRIPOLI", "loc": [ -75.741739, 40.654544 ], "pop": 4684, "state": "PA" }, { "_id": "18067", "city": "NORTHAMPTON", "loc": [ -75.48742, 40.699765 ], "pop": 13792, "state": "PA" }, { "_id": "18069", "city": "OREFIELD", "loc": [ -75.59739500000001, 40.624826 ], "pop": 6397, "state": "PA" }, { "_id": "18070", "city": "PALM", "loc": [ -75.533124, 40.43167 ], "pop": 512, "state": "PA" }, { "_id": "18071", "city": "PALMERTON", "loc": [ -75.601119, 40.816976 ], "pop": 11535, "state": "PA" }, { "_id": "18072", "city": "PEN ARGYL", "loc": [ -75.270115, 40.85182 ], "pop": 9736, "state": "PA" }, { "_id": "18073", "city": "PENNSBURG", "loc": [ -75.486608, 40.391138 ], "pop": 5126, "state": "PA" }, { "_id": "18074", "city": "PERKIOMENVILLE", "loc": [ -75.50218, 40.31566 ], "pop": 4053, "state": "PA" }, { "_id": "18076", "city": "RED HILL", "loc": [ -75.484613, 40.375807 ], "pop": 1807, "state": "PA" }, { "_id": "18077", "city": "RIEGELSVILLE", "loc": [ -75.219064, 40.57824 ], "pop": 1924, "state": "PA" }, { "_id": "18078", "city": "SCHNECKSVILLE", "loc": [ -75.623924, 40.681949 ], "pop": 6843, "state": "PA" }, { "_id": "18080", "city": "EMERALD", "loc": [ -75.621612, 40.740695 ], "pop": 11316, "state": "PA" }, { "_id": "18087", "city": "TREXLERTOWN", "loc": [ -75.602293, 40.554418 ], "pop": 690, "state": "PA" }, { "_id": "18088", "city": "WALNUTPORT", "loc": [ -75.565749, 40.76147 ], "pop": 7180, "state": "PA" }, { "_id": "18091", "city": "WIND GAP", "loc": [ -75.32637800000001, 40.816922 ], "pop": 1740, "state": "PA" }, { "_id": "18092", "city": "ZIONSVILLE", "loc": [ -75.526146, 40.473425 ], "pop": 2312, "state": "PA" }, { "_id": "18101", "city": "ALLENTOWN", "loc": [ -75.470955, 40.602729 ], "pop": 3638, "state": "PA" }, { "_id": "18102", "city": "ALLENTOWN", "loc": [ -75.478139, 40.606818 ], "pop": 41873, "state": "PA" }, { "_id": "18103", "city": "ALLENTOWN", "loc": [ -75.464521, 40.589145 ], "pop": 59074, "state": "PA" }, { "_id": "18104", "city": "ALLENTOWN", "loc": [ -75.522499, 40.601849 ], "pop": 33989, "state": "PA" }, { "_id": "18106", "city": "WESCOSVILLE", "loc": [ -75.566424, 40.561451 ], "pop": 6260, "state": "PA" }, { "_id": "18201", "city": "WEST HAZLETON", "loc": [ -75.978193, 40.962107 ], "pop": 38788, "state": "PA" }, { "_id": "18210", "city": "ALBRIGHTSVILLE", "loc": [ -75.58420599999999, 40.974786 ], "pop": 3862, "state": "PA" }, { "_id": "18211", "city": "ANDREAS", "loc": [ -75.834247, 40.746457 ], "pop": 1235, "state": "PA" }, { "_id": "18214", "city": "BARNESVILLE", "loc": [ -76.06108999999999, 40.813811 ], "pop": 1949, "state": "PA" }, { "_id": "18216", "city": "BEAVER MEADOWS", "loc": [ -75.940648, 40.922672 ], "pop": 2470, "state": "PA" }, { "_id": "18218", "city": "COALDALE", "loc": [ -75.91038500000001, 40.821942 ], "pop": 2531, "state": "PA" }, { "_id": "18220", "city": "DELANO", "loc": [ -76.069462, 40.841048 ], "pop": 605, "state": "PA" }, { "_id": "18222", "city": "DRUMS", "loc": [ -75.97676, 41.025525 ], "pop": 6008, "state": "PA" }, { "_id": "18224", "city": "FREELAND", "loc": [ -75.888001, 41.019557 ], "pop": 6311, "state": "PA" }, { "_id": "18229", "city": "JIM THORPE", "loc": [ -75.739665, 40.870002 ], "pop": 5048, "state": "PA" }, { "_id": "18232", "city": "LANSFORD", "loc": [ -75.882834, 40.831444 ], "pop": 4583, "state": "PA" }, { "_id": "18235", "city": "WEISSPORT", "loc": [ -75.70608799999999, 40.830024 ], "pop": 17675, "state": "PA" }, { "_id": "18237", "city": "MCADOO", "loc": [ -75.997117, 40.89791 ], "pop": 4184, "state": "PA" }, { "_id": "18240", "city": "NESQUEHONING", "loc": [ -75.82389000000001, 40.862608 ], "pop": 3364, "state": "PA" }, { "_id": "18245", "city": "QUAKAKE", "loc": [ -75.982477, 40.849337 ], "pop": 1292, "state": "PA" }, { "_id": "18246", "city": "ROCK GLEN", "loc": [ -76.16376099999999, 40.964628 ], "pop": 1938, "state": "PA" }, { "_id": "18248", "city": "SHEPPTON", "loc": [ -76.137952, 40.888073 ], "pop": 1374, "state": "PA" }, { "_id": "18249", "city": "SUGARLOAF", "loc": [ -76.07165500000001, 40.997126 ], "pop": 5007, "state": "PA" }, { "_id": "18250", "city": "SUMMIT HILL", "loc": [ -75.869275, 40.825524 ], "pop": 3332, "state": "PA" }, { "_id": "18252", "city": "TAMAQUA", "loc": [ -75.97353, 40.798319 ], "pop": 10446, "state": "PA" }, { "_id": "18255", "city": "WEATHERLY", "loc": [ -75.830635, 40.941085 ], "pop": 4295, "state": "PA" }, { "_id": "18301", "city": "EAST STROUDSBURG", "loc": [ -75.173463, 41.036714 ], "pop": 26726, "state": "PA" }, { "_id": "18321", "city": "BARTONSVILLE", "loc": [ -75.29672600000001, 41.008007 ], "pop": 553, "state": "PA" }, { "_id": "18322", "city": "BRODHEADSVILLE", "loc": [ -75.410415, 40.930862 ], "pop": 1834, "state": "PA" }, { "_id": "18324", "city": "BUSHKILL", "loc": [ -75.01320699999999, 41.128476 ], "pop": 2483, "state": "PA" }, { "_id": "18325", "city": "CANADENSIS", "loc": [ -75.257288, 41.233791 ], "pop": 2194, "state": "PA" }, { "_id": "18326", "city": "CRESCO", "loc": [ -75.26822799999999, 41.160605 ], "pop": 3074, "state": "PA" }, { "_id": "18327", "city": "DELAWARE WATER G", "loc": [ -75.149987, 40.982863 ], "pop": 1052, "state": "PA" }, { "_id": "18328", "city": "DINGMANS FERRY", "loc": [ -74.938018, 41.239966 ], "pop": 3705, "state": "PA" }, { "_id": "18330", "city": "EFFORT", "loc": [ -75.452286, 40.966946 ], "pop": 3817, "state": "PA" }, { "_id": "18331", "city": "GILBERT", "loc": [ -75.43137299999999, 40.908866 ], "pop": 405, "state": "PA" }, { "_id": "18332", "city": "HENRYVILLE", "loc": [ -75.279753, 41.088912 ], "pop": 1927, "state": "PA" }, { "_id": "18333", "city": "KRESGEVILLE", "loc": [ -75.507437, 40.898156 ], "pop": 1125, "state": "PA" }, { "_id": "18334", "city": "LONG POND", "loc": [ -75.448245, 41.067732 ], "pop": 667, "state": "PA" }, { "_id": "18336", "city": "MATAMORAS", "loc": [ -74.71535799999999, 41.367437 ], "pop": 3391, "state": "PA" }, { "_id": "18337", "city": "MILFORD", "loc": [ -74.88236000000001, 41.322816 ], "pop": 6668, "state": "PA" }, { "_id": "18340", "city": "MILLRIFT", "loc": [ -74.773876, 41.358265 ], "pop": 649, "state": "PA" }, { "_id": "18343", "city": "MOUNT BETHEL", "loc": [ -75.11154500000001, 40.900839 ], "pop": 3966, "state": "PA" }, { "_id": "18344", "city": "MOUNT POCONO", "loc": [ -75.352868, 41.121558 ], "pop": 2465, "state": "PA" }, { "_id": "18346", "city": "POCONO SUMMIT", "loc": [ -75.413554, 41.103989 ], "pop": 1509, "state": "PA" }, { "_id": "18347", "city": "POCONO LAKE", "loc": [ -75.555863, 41.118661 ], "pop": 1943, "state": "PA" }, { "_id": "18350", "city": "POCONO PINES", "loc": [ -75.476038, 41.105387 ], "pop": 866, "state": "PA" }, { "_id": "18352", "city": "REEDERS", "loc": [ -75.278113, 40.989533 ], "pop": 481, "state": "PA" }, { "_id": "18353", "city": "SAYLORSBURG", "loc": [ -75.37476100000001, 40.917179 ], "pop": 6970, "state": "PA" }, { "_id": "18354", "city": "SCIOTA", "loc": [ -75.293779, 40.928282 ], "pop": 4155, "state": "PA" }, { "_id": "18355", "city": "SCOTRUN", "loc": [ -75.32646, 41.075147 ], "pop": 966, "state": "PA" }, { "_id": "18360", "city": "STROUDSBURG", "loc": [ -75.24852, 40.987697 ], "pop": 17668, "state": "PA" }, { "_id": "18370", "city": "SWIFTWATER", "loc": [ -75.34827799999999, 41.087936 ], "pop": 838, "state": "PA" }, { "_id": "18371", "city": "TAMIMENT", "loc": [ -74.952614, 41.168112 ], "pop": 557, "state": "PA" }, { "_id": "18372", "city": "TANNERSVILLE", "loc": [ -75.309984, 41.048202 ], "pop": 2353, "state": "PA" }, { "_id": "18401", "city": "ALDENVILLE", "loc": [ -75.36749, 41.642679 ], "pop": 422, "state": "PA" }, { "_id": "18403", "city": "EYNON", "loc": [ -75.555232, 41.495633 ], "pop": 6489, "state": "PA" }, { "_id": "18405", "city": "BEACH LAKE", "loc": [ -75.11649, 41.603403 ], "pop": 918, "state": "PA" }, { "_id": "18407", "city": "SIMPSON", "loc": [ -75.507363, 41.583481 ], "pop": 16409, "state": "PA" }, { "_id": "18411", "city": "CLARKS SUMMIT", "loc": [ -75.705713, 41.487795 ], "pop": 23088, "state": "PA" }, { "_id": "18414", "city": "DALTON", "loc": [ -75.703737, 41.539496 ], "pop": 7621, "state": "PA" }, { "_id": "18415", "city": "DAMASCUS", "loc": [ -75.131151, 41.736623 ], "pop": 1206, "state": "PA" }, { "_id": "18417", "city": "EQUINUNK", "loc": [ -75.189081, 41.811712 ], "pop": 663, "state": "PA" }, { "_id": "18419", "city": "FACTORYVILLE", "loc": [ -75.765182, 41.576168 ], "pop": 4402, "state": "PA" }, { "_id": "18421", "city": "BROWNDALE", "loc": [ -75.48725, 41.654587 ], "pop": 3728, "state": "PA" }, { "_id": "18424", "city": "GOULDSBORO", "loc": [ -75.503653, 41.2448 ], "pop": 2805, "state": "PA" }, { "_id": "18425", "city": "GREELEY", "loc": [ -75.012491, 41.437238 ], "pop": 1121, "state": "PA" }, { "_id": "18426", "city": "GREENTOWN", "loc": [ -75.28191099999999, 41.332145 ], "pop": 1592, "state": "PA" }, { "_id": "18427", "city": "HAMLIN", "loc": [ -75.354232, 41.401477 ], "pop": 1575, "state": "PA" }, { "_id": "18428", "city": "HAWLEY", "loc": [ -75.197822, 41.478685 ], "pop": 2817, "state": "PA" }, { "_id": "18430", "city": "HERRICK CENTER", "loc": [ -75.50438699999999, 41.76434 ], "pop": 218, "state": "PA" }, { "_id": "18431", "city": "HONESDALE", "loc": [ -75.25279, 41.579227 ], "pop": 12655, "state": "PA" }, { "_id": "18433", "city": "MAYFIELD", "loc": [ -75.542948, 41.532723 ], "pop": 4274, "state": "PA" }, { "_id": "18434", "city": "JESSUP", "loc": [ -75.56889099999999, 41.472443 ], "pop": 4349, "state": "PA" }, { "_id": "18435", "city": "LACKAWAXEN", "loc": [ -75.074859, 41.504272 ], "pop": 1711, "state": "PA" }, { "_id": "18436", "city": "LAKE ARIEL", "loc": [ -75.431257, 41.439476 ], "pop": 7939, "state": "PA" }, { "_id": "18437", "city": "LAKE COMO", "loc": [ -75.32308, 41.866553 ], "pop": 415, "state": "PA" }, { "_id": "18438", "city": "LAKEVILLE", "loc": [ -75.260717, 41.422278 ], "pop": 1028, "state": "PA" }, { "_id": "18439", "city": "LAKEWOOD", "loc": [ -75.383824, 41.817138 ], "pop": 653, "state": "PA" }, { "_id": "18441", "city": "LENOXVILLE", "loc": [ -75.631934, 41.667713 ], "pop": 587, "state": "PA" }, { "_id": "18443", "city": "MILANVILLE", "loc": [ -75.08817999999999, 41.649208 ], "pop": 922, "state": "PA" }, { "_id": "18444", "city": "MOSCOW", "loc": [ -75.530137, 41.343194 ], "pop": 10881, "state": "PA" }, { "_id": "18445", "city": "NEWFOUNDLAND", "loc": [ -75.33840499999999, 41.304125 ], "pop": 659, "state": "PA" }, { "_id": "18446", "city": "NICHOLSON", "loc": [ -75.764073, 41.641198 ], "pop": 3513, "state": "PA" }, { "_id": "18447", "city": "OLYPHANT", "loc": [ -75.601502, 41.467709 ], "pop": 7421, "state": "PA" }, { "_id": "18451", "city": "PAUPACK", "loc": [ -75.23032000000001, 41.381197 ], "pop": 887, "state": "PA" }, { "_id": "18452", "city": "PECKVILLE", "loc": [ -75.589884, 41.482124 ], "pop": 6252, "state": "PA" }, { "_id": "18453", "city": "PLEASANT MOUNT", "loc": [ -75.398944, 41.732204 ], "pop": 1232, "state": "PA" }, { "_id": "18455", "city": "PRESTON PARK", "loc": [ -75.38314699999999, 41.867264 ], "pop": 224, "state": "PA" }, { "_id": "18456", "city": "PROMPTON", "loc": [ -75.32074900000001, 41.582031 ], "pop": 552, "state": "PA" }, { "_id": "18458", "city": "SHOHOLA", "loc": [ -74.917962, 41.418193 ], "pop": 1586, "state": "PA" }, { "_id": "18460", "city": "SOUTH STERLING", "loc": [ -75.381443, 41.271222 ], "pop": 922, "state": "PA" }, { "_id": "18461", "city": "STARLIGHT", "loc": [ -75.32123799999999, 41.925087 ], "pop": 431, "state": "PA" }, { "_id": "18462", "city": "STARRUCCA", "loc": [ -75.449001, 41.890739 ], "pop": 333, "state": "PA" }, { "_id": "18463", "city": "STERLING", "loc": [ -75.39446700000001, 41.341912 ], "pop": 689, "state": "PA" }, { "_id": "18464", "city": "TAFTON", "loc": [ -75.101598, 41.369445 ], "pop": 2752, "state": "PA" }, { "_id": "18465", "city": "THOMPSON", "loc": [ -75.534215, 41.83395 ], "pop": 1277, "state": "PA" }, { "_id": "18466", "city": "TOBYHANNA", "loc": [ -75.39178099999999, 41.183638 ], "pop": 6668, "state": "PA" }, { "_id": "18469", "city": "TYLER HILL", "loc": [ -75.154246, 41.670873 ], "pop": 592, "state": "PA" }, { "_id": "18470", "city": "UNION DALE", "loc": [ -75.546476, 41.707941 ], "pop": 1325, "state": "PA" }, { "_id": "18472", "city": "WAYMART", "loc": [ -75.40647800000001, 41.570276 ], "pop": 3922, "state": "PA" }, { "_id": "18503", "city": "SCRANTON", "loc": [ -75.664205, 41.409517 ], "pop": 720, "state": "PA" }, { "_id": "18504", "city": "SCRANTON", "loc": [ -75.686081, 41.412777 ], "pop": 22279, "state": "PA" }, { "_id": "18505", "city": "SCRANTON", "loc": [ -75.665738, 41.39145 ], "pop": 21733, "state": "PA" }, { "_id": "18507", "city": "MOOSIC", "loc": [ -75.71709300000001, 41.361492 ], "pop": 5339, "state": "PA" }, { "_id": "18508", "city": "SCRANTON", "loc": [ -75.66252900000001, 41.438917 ], "pop": 13555, "state": "PA" }, { "_id": "18509", "city": "SCRANTON", "loc": [ -75.64645400000001, 41.427353 ], "pop": 15432, "state": "PA" }, { "_id": "18510", "city": "SCRANTON", "loc": [ -75.648397, 41.408039 ], "pop": 14306, "state": "PA" }, { "_id": "18512", "city": "DUNMORE", "loc": [ -75.62294, 41.426184 ], "pop": 14428, "state": "PA" }, { "_id": "18517", "city": "TAYLOR", "loc": [ -75.71584799999999, 41.390442 ], "pop": 5738, "state": "PA" }, { "_id": "18518", "city": "OLD FORGE", "loc": [ -75.739075, 41.370076 ], "pop": 8834, "state": "PA" }, { "_id": "18519", "city": "DICKSON CITY", "loc": [ -75.624343, 41.462306 ], "pop": 5012, "state": "PA" }, { "_id": "18603", "city": "BERWICK", "loc": [ -76.244269, 41.066477 ], "pop": 19977, "state": "PA" }, { "_id": "18610", "city": "BLAKESLEE", "loc": [ -75.53430899999999, 41.048502 ], "pop": 426, "state": "PA" }, { "_id": "18612", "city": "COLLEGE MISERICO", "loc": [ -75.958911, 41.363762 ], "pop": 13726, "state": "PA" }, { "_id": "18614", "city": "DUSHORE", "loc": [ -76.402145, 41.523213 ], "pop": 1739, "state": "PA" }, { "_id": "18615", "city": "FALLS", "loc": [ -75.856004, 41.466677 ], "pop": 2349, "state": "PA" }, { "_id": "18616", "city": "FORKSVILLE", "loc": [ -76.60079, 41.526925 ], "pop": 1080, "state": "PA" }, { "_id": "18617", "city": "GLEN LYON", "loc": [ -76.074578, 41.174635 ], "pop": 2082, "state": "PA" }, { "_id": "18618", "city": "HARVEYS LAKE", "loc": [ -76.04506000000001, 41.359181 ], "pop": 3404, "state": "PA" }, { "_id": "18619", "city": "HILLSGROVE", "loc": [ -76.697914, 41.448159 ], "pop": 337, "state": "PA" }, { "_id": "18621", "city": "HUNLOCK CREEK", "loc": [ -76.087915, 41.245923 ], "pop": 4207, "state": "PA" }, { "_id": "18622", "city": "HUNTINGTON MILLS", "loc": [ -76.19734200000001, 41.200905 ], "pop": 345, "state": "PA" }, { "_id": "18623", "city": "LACEYVILLE", "loc": [ -76.142566, 41.66621 ], "pop": 3195, "state": "PA" }, { "_id": "18624", "city": "LAKE HARMONY", "loc": [ -75.633129, 41.05424 ], "pop": 1203, "state": "PA" }, { "_id": "18628", "city": "LOPEZ", "loc": [ -76.300206, 41.418002 ], "pop": 600, "state": "PA" }, { "_id": "18629", "city": "MEHOOPANY", "loc": [ -76.10346199999999, 41.558695 ], "pop": 1630, "state": "PA" }, { "_id": "18630", "city": "MESHOPPEN", "loc": [ -76.01546399999999, 41.639163 ], "pop": 3307, "state": "PA" }, { "_id": "18631", "city": "MIFFLINVILLE", "loc": [ -76.292396, 41.023473 ], "pop": 2297, "state": "PA" }, { "_id": "18632", "city": "MILDRED", "loc": [ -76.38312999999999, 41.479236 ], "pop": 500, "state": "PA" }, { "_id": "18634", "city": "NANTICOKE", "loc": [ -76.004419, 41.19634 ], "pop": 14778, "state": "PA" }, { "_id": "18635", "city": "NESCOPECK", "loc": [ -76.19808999999999, 41.046887 ], "pop": 2723, "state": "PA" }, { "_id": "18636", "city": "NOXEN", "loc": [ -76.045952, 41.418131 ], "pop": 1653, "state": "PA" }, { "_id": "18640", "city": "PITTSTON", "loc": [ -75.78849200000001, 41.317501 ], "pop": 18888, "state": "PA" }, { "_id": "18641", "city": "AVOCA", "loc": [ -75.74465499999999, 41.330857 ], "pop": 6485, "state": "PA" }, { "_id": "18642", "city": "DURYEA", "loc": [ -75.761104, 41.348557 ], "pop": 4262, "state": "PA" }, { "_id": "18643", "city": "WEST PITTSTON", "loc": [ -75.81665099999999, 41.337964 ], "pop": 13853, "state": "PA" }, { "_id": "18644", "city": "WYOMING", "loc": [ -75.854071, 41.319713 ], "pop": 8126, "state": "PA" }, { "_id": "18651", "city": "PLYMOUTH", "loc": [ -75.948064, 41.245798 ], "pop": 11895, "state": "PA" }, { "_id": "18655", "city": "MOCANAQUA", "loc": [ -76.167096, 41.176674 ], "pop": 6324, "state": "PA" }, { "_id": "18656", "city": "SWEET VALLEY", "loc": [ -76.13390699999999, 41.30663 ], "pop": 3237, "state": "PA" }, { "_id": "18657", "city": "CENTER MORELAND", "loc": [ -75.94104299999999, 41.550687 ], "pop": 9921, "state": "PA" }, { "_id": "18660", "city": "WAPWALLOPEN", "loc": [ -76.085729, 41.06797 ], "pop": 1198, "state": "PA" }, { "_id": "18661", "city": "WHITE HAVEN", "loc": [ -75.77149199999999, 41.079049 ], "pop": 4435, "state": "PA" }, { "_id": "18701", "city": "WILKES BARRE", "loc": [ -75.884063, 41.244892 ], "pop": 4320, "state": "PA" }, { "_id": "18702", "city": "HANOVER TOWNSHIP", "loc": [ -75.88255700000001, 41.236512 ], "pop": 54119, "state": "PA" }, { "_id": "18704", "city": "KINGSTON", "loc": [ -75.890338, 41.274223 ], "pop": 33661, "state": "PA" }, { "_id": "18705", "city": "WILKES BARRE", "loc": [ -75.845309, 41.268921 ], "pop": 17504, "state": "PA" }, { "_id": "18706", "city": "ASHLEY", "loc": [ -75.91815699999999, 41.206709 ], "pop": 7980, "state": "PA" }, { "_id": "18707", "city": "MOUNTAIN TOP", "loc": [ -75.937642, 41.134975 ], "pop": 13244, "state": "PA" }, { "_id": "18708", "city": "SHAVERTOWN", "loc": [ -75.97108, 41.299802 ], "pop": 12656, "state": "PA" }, { "_id": "18709", "city": "LUZERNE", "loc": [ -75.893475, 41.284257 ], "pop": 3157, "state": "PA" }, { "_id": "18801", "city": "MONTROSE", "loc": [ -75.88205499999999, 41.839584 ], "pop": 6624, "state": "PA" }, { "_id": "18810", "city": "ATHENS", "loc": [ -76.488855, 41.949002 ], "pop": 7602, "state": "PA" }, { "_id": "18812", "city": "BRACKNEY", "loc": [ -75.937527, 41.966614 ], "pop": 1645, "state": "PA" }, { "_id": "18817", "city": "EAST SMITHFIELD", "loc": [ -76.61720699999999, 41.863115 ], "pop": 1520, "state": "PA" }, { "_id": "18818", "city": "FRIENDSVILLE", "loc": [ -76.02569, 41.916445 ], "pop": 1844, "state": "PA" }, { "_id": "18821", "city": "GREAT BEND", "loc": [ -75.732742, 41.977513 ], "pop": 1654, "state": "PA" }, { "_id": "18822", "city": "HALLSTEAD", "loc": [ -75.782595, 41.959798 ], "pop": 2970, "state": "PA" }, { "_id": "18823", "city": "HARFORD", "loc": [ -75.67863199999999, 41.779891 ], "pop": 1155, "state": "PA" }, { "_id": "18824", "city": "HOP BOTTOM", "loc": [ -75.78965599999999, 41.693196 ], "pop": 1088, "state": "PA" }, { "_id": "18825", "city": "JACKSON", "loc": [ -75.60913600000001, 41.864881 ], "pop": 668, "state": "PA" }, { "_id": "18826", "city": "KINGSLEY", "loc": [ -75.783101, 41.765856 ], "pop": 1159, "state": "PA" }, { "_id": "18828", "city": "LAWTON", "loc": [ -76.09121399999999, 41.757294 ], "pop": 15, "state": "PA" }, { "_id": "18829", "city": "LE RAYSVILLE", "loc": [ -76.179604, 41.843415 ], "pop": 1020, "state": "PA" }, { "_id": "18830", "city": "LITTLE MEADOWS", "loc": [ -76.118472, 41.976593 ], "pop": 750, "state": "PA" }, { "_id": "18831", "city": "MILAN", "loc": [ -76.532777, 41.896555 ], "pop": 328, "state": "PA" }, { "_id": "18832", "city": "MONROETON", "loc": [ -76.500995, 41.699387 ], "pop": 2332, "state": "PA" }, { "_id": "18833", "city": "NEW ALBANY", "loc": [ -76.43983, 41.59867 ], "pop": 1390, "state": "PA" }, { "_id": "18834", "city": "NEW MILFORD", "loc": [ -75.717113, 41.866409 ], "pop": 2684, "state": "PA" }, { "_id": "18837", "city": "ROME", "loc": [ -76.301498, 41.863403 ], "pop": 2053, "state": "PA" }, { "_id": "18839", "city": "RUSHVILLE", "loc": [ -76.050955, 41.776893 ], "pop": 1228, "state": "PA" }, { "_id": "18840", "city": "SAYRE", "loc": [ -76.52175699999999, 41.984222 ], "pop": 10320, "state": "PA" }, { "_id": "18842", "city": "SOUTH GIBSON", "loc": [ -75.606723, 41.754373 ], "pop": 402, "state": "PA" }, { "_id": "18844", "city": "SPRINGVILLE", "loc": [ -75.902472, 41.714684 ], "pop": 2003, "state": "PA" }, { "_id": "18845", "city": "STEVENSVILLE", "loc": [ -76.171696, 41.771782 ], "pop": 401, "state": "PA" }, { "_id": "18846", "city": "SUGAR RUN", "loc": [ -76.25978499999999, 41.604057 ], "pop": 1057, "state": "PA" }, { "_id": "18847", "city": "SUSQUEHANNA", "loc": [ -75.586249, 41.948669 ], "pop": 5137, "state": "PA" }, { "_id": "18848", "city": "TOWANDA", "loc": [ -76.464527, 41.763758 ], "pop": 7449, "state": "PA" }, { "_id": "18850", "city": "ULSTER", "loc": [ -76.487574, 41.840809 ], "pop": 2049, "state": "PA" }, { "_id": "18851", "city": "WARREN CENTER", "loc": [ -76.196445, 41.939389 ], "pop": 927, "state": "PA" }, { "_id": "18853", "city": "WYALUSING", "loc": [ -76.27543300000001, 41.701499 ], "pop": 3439, "state": "PA" }, { "_id": "18854", "city": "WYSOX", "loc": [ -76.383397, 41.782621 ], "pop": 2121, "state": "PA" }, { "_id": "18901", "city": "NEW BRITAIN", "loc": [ -75.129987, 40.320391 ], "pop": 33133, "state": "PA" }, { "_id": "18913", "city": "CARVERSVILLE", "loc": [ -75.06312699999999, 40.39079 ], "pop": 579, "state": "PA" }, { "_id": "18914", "city": "CHALFONT", "loc": [ -75.214938, 40.289175 ], "pop": 12838, "state": "PA" }, { "_id": "18915", "city": "COLMAR", "loc": [ -75.26686100000001, 40.271814 ], "pop": 2168, "state": "PA" }, { "_id": "18917", "city": "DUBLIN", "loc": [ -75.204453, 40.371996 ], "pop": 1985, "state": "PA" }, { "_id": "18920", "city": "ERWINNA", "loc": [ -75.080372, 40.508689 ], "pop": 573, "state": "PA" }, { "_id": "18923", "city": "FOUNTAINVILLE", "loc": [ -75.153627, 40.336815 ], "pop": 261, "state": "PA" }, { "_id": "18925", "city": "FURLONG", "loc": [ -75.06494600000001, 40.294518 ], "pop": 3789, "state": "PA" }, { "_id": "18927", "city": "HILLTOWN", "loc": [ -75.27118, 40.34762 ], "pop": 881, "state": "PA" }, { "_id": "18929", "city": "JAMISON", "loc": [ -75.096093, 40.256599 ], "pop": 3797, "state": "PA" }, { "_id": "18930", "city": "KINTNERSVILLE", "loc": [ -75.211708, 40.531009 ], "pop": 2997, "state": "PA" }, { "_id": "18932", "city": "LINE LEXINGTON", "loc": [ -75.25553499999999, 40.288781 ], "pop": 301, "state": "PA" }, { "_id": "18933", "city": "LUMBERVILLE", "loc": [ -75.055166, 40.407103 ], "pop": 382, "state": "PA" }, { "_id": "18934", "city": "MECHANICSVILLE", "loc": [ -75.062962, 40.343821 ], "pop": 429, "state": "PA" }, { "_id": "18936", "city": "MONTGOMERYVILLE", "loc": [ -75.23464300000001, 40.251353 ], "pop": 5520, "state": "PA" }, { "_id": "18938", "city": "NEW HOPE", "loc": [ -74.983889, 40.355613 ], "pop": 7111, "state": "PA" }, { "_id": "18940", "city": "GEORGE SCHOOL", "loc": [ -74.94313, 40.245817 ], "pop": 21946, "state": "PA" }, { "_id": "18942", "city": "OTTSVILLE", "loc": [ -75.157009, 40.459239 ], "pop": 2976, "state": "PA" }, { "_id": "18944", "city": "PERKASIE", "loc": [ -75.264803, 40.376526 ], "pop": 18235, "state": "PA" }, { "_id": "18947", "city": "PIPERSVILLE", "loc": [ -75.107398, 40.4262 ], "pop": 3856, "state": "PA" }, { "_id": "18951", "city": "QUAKERTOWN", "loc": [ -75.350667, 40.4411 ], "pop": 28546, "state": "PA" }, { "_id": "18954", "city": "RICHBORO", "loc": [ -75.00293600000001, 40.216672 ], "pop": 8006, "state": "PA" }, { "_id": "18955", "city": "RICHLANDTOWN", "loc": [ -75.32192999999999, 40.472166 ], "pop": 1199, "state": "PA" }, { "_id": "18960", "city": "SELLERSVILLE", "loc": [ -75.31895299999999, 40.362024 ], "pop": 8387, "state": "PA" }, { "_id": "18964", "city": "BETHTON", "loc": [ -75.32133899999999, 40.312796 ], "pop": 9350, "state": "PA" }, { "_id": "18966", "city": "HOLLAND", "loc": [ -75.005994, 40.190212 ], "pop": 38866, "state": "PA" }, { "_id": "18969", "city": "TELFORD", "loc": [ -75.352001, 40.320478 ], "pop": 10929, "state": "PA" }, { "_id": "18972", "city": "UPPER BLACK EDDY", "loc": [ -75.12585799999999, 40.541093 ], "pop": 3443, "state": "PA" }, { "_id": "18974", "city": "WARMINSTER", "loc": [ -75.090513, 40.206676 ], "pop": 37759, "state": "PA" }, { "_id": "18976", "city": "WARRINGTON", "loc": [ -75.135392, 40.246438 ], "pop": 13862, "state": "PA" }, { "_id": "18977", "city": "WASHINGTON CROSS", "loc": [ -74.882859, 40.291906 ], "pop": 2824, "state": "PA" }, { "_id": "19001", "city": "OGONTZ CAMPUS", "loc": [ -75.128918, 40.128141 ], "pop": 17302, "state": "PA" }, { "_id": "19002", "city": "MAPLE GLEN", "loc": [ -75.207234, 40.166318 ], "pop": 24133, "state": "PA" }, { "_id": "19003", "city": "ARDMORE", "loc": [ -75.29665, 40.001971 ], "pop": 12443, "state": "PA" }, { "_id": "19004", "city": "BALA CYNWYD", "loc": [ -75.23421, 40.01179 ], "pop": 9239, "state": "PA" }, { "_id": "19006", "city": "HUNTINGDON VALLE", "loc": [ -75.05897899999999, 40.129686 ], "pop": 19866, "state": "PA" }, { "_id": "19007", "city": "TULLYTOWN", "loc": [ -74.86071800000001, 40.109174 ], "pop": 22334, "state": "PA" }, { "_id": "19008", "city": "BROOMALL", "loc": [ -75.360214, 39.974666 ], "pop": 20432, "state": "PA" }, { "_id": "19010", "city": "BRYN MAWR", "loc": [ -75.329487, 40.023618 ], "pop": 21826, "state": "PA" }, { "_id": "19012", "city": "CHELTENHAM", "loc": [ -75.10477400000001, 40.060327 ], "pop": 6912, "state": "PA" }, { "_id": "19013", "city": "CHESTER", "loc": [ -75.37468699999999, 39.849817 ], "pop": 49144, "state": "PA" }, { "_id": "19014", "city": "ASTON", "loc": [ -75.43321, 39.864282 ], "pop": 18171, "state": "PA" }, { "_id": "19015", "city": "BROOKHAVEN", "loc": [ -75.38848299999999, 39.865355 ], "pop": 17321, "state": "PA" }, { "_id": "19018", "city": "PRIMOS SECANE", "loc": [ -75.299592, 39.923579 ], "pop": 23885, "state": "PA" }, { "_id": "19020", "city": "BENSALEM", "loc": [ -74.937753, 40.110881 ], "pop": 51884, "state": "PA" }, { "_id": "19021", "city": "CROYDON", "loc": [ -74.89907700000001, 40.093322 ], "pop": 10198, "state": "PA" }, { "_id": "19022", "city": "CRUM LYNNE", "loc": [ -75.337397, 39.868457 ], "pop": 769, "state": "PA" }, { "_id": "19023", "city": "COLLINGDALE", "loc": [ -75.266226, 39.916732 ], "pop": 23274, "state": "PA" }, { "_id": "19025", "city": "DRESHER", "loc": [ -75.162379, 40.143141 ], "pop": 4089, "state": "PA" }, { "_id": "19026", "city": "PILGRIM GARDENS", "loc": [ -75.303479, 39.949197 ], "pop": 32559, "state": "PA" }, { "_id": "19029", "city": "LESTER", "loc": [ -75.293521, 39.866864 ], "pop": 4440, "state": "PA" }, { "_id": "19030", "city": "FAIRLESS HILLS", "loc": [ -74.851923, 40.174822 ], "pop": 13433, "state": "PA" }, { "_id": "19031", "city": "FLOURTOWN", "loc": [ -75.21147999999999, 40.106774 ], "pop": 4284, "state": "PA" }, { "_id": "19032", "city": "FOLCROFT", "loc": [ -75.282117, 39.890508 ], "pop": 7399, "state": "PA" }, { "_id": "19033", "city": "FOLSOM", "loc": [ -75.329567, 39.890129 ], "pop": 7677, "state": "PA" }, { "_id": "19034", "city": "FORT WASHINGTON", "loc": [ -75.202175, 40.138592 ], "pop": 6787, "state": "PA" }, { "_id": "19035", "city": "GLADWYNE", "loc": [ -75.282082, 40.045118 ], "pop": 3742, "state": "PA" }, { "_id": "19036", "city": "GLENOLDEN", "loc": [ -75.29455900000001, 39.904848 ], "pop": 14390, "state": "PA" }, { "_id": "19038", "city": "GLENSIDE", "loc": [ -75.15496400000001, 40.10959 ], "pop": 23067, "state": "PA" }, { "_id": "19040", "city": "HATBORO", "loc": [ -75.10718199999999, 40.178547 ], "pop": 21765, "state": "PA" }, { "_id": "19041", "city": "HAVERFORD", "loc": [ -75.312116, 40.009739 ], "pop": 6560, "state": "PA" }, { "_id": "19043", "city": "HOLMES", "loc": [ -75.308674, 39.900284 ], "pop": 2747, "state": "PA" }, { "_id": "19044", "city": "HORSHAM", "loc": [ -75.147932, 40.182057 ], "pop": 15131, "state": "PA" }, { "_id": "19046", "city": "MEADOWBROOK", "loc": [ -75.117273, 40.100477 ], "pop": 14402, "state": "PA" }, { "_id": "19047", "city": "PENNDEL", "loc": [ -74.91510100000001, 40.175055 ], "pop": 34108, "state": "PA" }, { "_id": "19050", "city": "YEADON", "loc": [ -75.264872, 39.93779 ], "pop": 30411, "state": "PA" }, { "_id": "19053", "city": "FEASTERVILLE TRE", "loc": [ -74.98375799999999, 40.151188 ], "pop": 24877, "state": "PA" }, { "_id": "19054", "city": "LEVITTOWN", "loc": [ -74.823138, 40.168142 ], "pop": 16390, "state": "PA" }, { "_id": "19055", "city": "LEVITTOWN", "loc": [ -74.83714000000001, 40.148329 ], "pop": 14924, "state": "PA" }, { "_id": "19056", "city": "LEVITTOWN", "loc": [ -74.882632, 40.151861 ], "pop": 15227, "state": "PA" }, { "_id": "19057", "city": "LEVITTOWN", "loc": [ -74.861366, 40.143359 ], "pop": 17014, "state": "PA" }, { "_id": "19061", "city": "BOOTHWYN", "loc": [ -75.44830899999999, 39.833934 ], "pop": 21328, "state": "PA" }, { "_id": "19063", "city": "GLEN RIDDLE LIMA", "loc": [ -75.40722599999999, 39.915562 ], "pop": 36385, "state": "PA" }, { "_id": "19064", "city": "SPRINGFIELD", "loc": [ -75.333786, 39.929599 ], "pop": 25179, "state": "PA" }, { "_id": "19066", "city": "MERION STATION", "loc": [ -75.250302, 40.003043 ], "pop": 5633, "state": "PA" }, { "_id": "19067", "city": "YARDLEY", "loc": [ -74.822153, 40.212064 ], "pop": 47492, "state": "PA" }, { "_id": "19070", "city": "MORTON", "loc": [ -75.323785, 39.906292 ], "pop": 6517, "state": "PA" }, { "_id": "19072", "city": "NARBERTH", "loc": [ -75.2594, 40.01768 ], "pop": 9846, "state": "PA" }, { "_id": "19073", "city": "NEWTOWN SQUARE", "loc": [ -75.406997, 39.986292 ], "pop": 15024, "state": "PA" }, { "_id": "19074", "city": "NORWOOD", "loc": [ -75.297247, 39.887026 ], "pop": 6189, "state": "PA" }, { "_id": "19075", "city": "ORELAND", "loc": [ -75.18685000000001, 40.113197 ], "pop": 7397, "state": "PA" }, { "_id": "19076", "city": "PROSPECT PARK", "loc": [ -75.308165, 39.885737 ], "pop": 6769, "state": "PA" }, { "_id": "19078", "city": "RIDLEY PARK", "loc": [ -75.321517, 39.878411 ], "pop": 12624, "state": "PA" }, { "_id": "19079", "city": "SHARON HILL", "loc": [ -75.269524, 39.903511 ], "pop": 9893, "state": "PA" }, { "_id": "19081", "city": "SWARTHMORE", "loc": [ -75.34742799999999, 39.896724 ], "pop": 9885, "state": "PA" }, { "_id": "19082", "city": "UPPER DARBY", "loc": [ -75.268128, 39.95785 ], "pop": 36400, "state": "PA" }, { "_id": "19083", "city": "HAVERTOWN", "loc": [ -75.310613, 39.97736 ], "pop": 36702, "state": "PA" }, { "_id": "19085", "city": "VILLANOVA", "loc": [ -75.345866, 40.039875 ], "pop": 7034, "state": "PA" }, { "_id": "19086", "city": "WALLINGFORD", "loc": [ -75.372131, 39.887054 ], "pop": 11005, "state": "PA" }, { "_id": "19087", "city": "RADNOR", "loc": [ -75.40416, 40.059554 ], "pop": 30671, "state": "PA" }, { "_id": "19090", "city": "WILLOW GROVE NAS", "loc": [ -75.121297, 40.146725 ], "pop": 19558, "state": "PA" }, { "_id": "19094", "city": "WOODLYN", "loc": [ -75.34630900000001, 39.875993 ], "pop": 5186, "state": "PA" }, { "_id": "19095", "city": "WYNCOTE", "loc": [ -75.152417, 40.086673 ], "pop": 6164, "state": "PA" }, { "_id": "19096", "city": "WYNNEWOOD", "loc": [ -75.27598399999999, 40 ], "pop": 8285, "state": "PA" }, { "_id": "19102", "city": "PHILADELPHIA", "loc": [ -75.16610900000001, 39.948908 ], "pop": 3623, "state": "PA" }, { "_id": "19103", "city": "PHILADELPHIA", "loc": [ -75.174136, 39.951285 ], "pop": 17665, "state": "PA" }, { "_id": "19104", "city": "PHILADELPHIA", "loc": [ -75.202445, 39.959732 ], "pop": 51295, "state": "PA" }, { "_id": "19106", "city": "PHILADELPHIA", "loc": [ -75.147271, 39.94742 ], "pop": 7043, "state": "PA" }, { "_id": "19107", "city": "PHILADELPHIA", "loc": [ -75.159339, 39.94867 ], "pop": 9634, "state": "PA" }, { "_id": "19111", "city": "PHILADELPHIA", "loc": [ -75.08179199999999, 40.059635 ], "pop": 61416, "state": "PA" }, { "_id": "19112", "city": "PHILADELPHIA", "loc": [ -75.178207, 39.889252 ], "pop": 4516, "state": "PA" }, { "_id": "19113", "city": "PHILADELPHIA", "loc": [ -75.27519599999999, 39.864998 ], "pop": 0, "state": "PA" }, { "_id": "19114", "city": "PHILADELPHIA", "loc": [ -74.999032, 40.063356 ], "pop": 31199, "state": "PA" }, { "_id": "19115", "city": "PHILADELPHIA", "loc": [ -75.04103600000001, 40.090286 ], "pop": 31339, "state": "PA" }, { "_id": "19116", "city": "PHILADELPHIA", "loc": [ -75.019803, 40.116599 ], "pop": 32898, "state": "PA" }, { "_id": "19117", "city": "ELKINS PARK", "loc": [ -75.127669, 40.075798 ], "pop": 12813, "state": "PA" }, { "_id": "19118", "city": "PHILADELPHIA", "loc": [ -75.20059999999999, 40.081247 ], "pop": 19549, "state": "PA" }, { "_id": "19119", "city": "PHILADELPHIA", "loc": [ -75.186564, 40.054681 ], "pop": 29935, "state": "PA" }, { "_id": "19120", "city": "PHILADELPHIA", "loc": [ -75.121256, 40.034254 ], "pop": 63223, "state": "PA" }, { "_id": "19121", "city": "PHILADELPHIA", "loc": [ -75.17400499999999, 39.981085 ], "pop": 46705, "state": "PA" }, { "_id": "19122", "city": "PHILADELPHIA", "loc": [ -75.145882, 39.978014 ], "pop": 21177, "state": "PA" }, { "_id": "19123", "city": "PHILADELPHIA", "loc": [ -75.15096800000001, 39.965975 ], "pop": 12270, "state": "PA" }, { "_id": "19124", "city": "PHILADELPHIA", "loc": [ -75.08952600000001, 40.017798 ], "pop": 60009, "state": "PA" }, { "_id": "19125", "city": "PHILADELPHIA", "loc": [ -75.12615599999999, 39.978751 ], "pop": 24521, "state": "PA" }, { "_id": "19126", "city": "PHILADELPHIA", "loc": [ -75.137854, 40.056839 ], "pop": 22000, "state": "PA" }, { "_id": "19127", "city": "PHILADELPHIA", "loc": [ -75.22416699999999, 40.027512 ], "pop": 6028, "state": "PA" }, { "_id": "19128", "city": "PHILADELPHIA", "loc": [ -75.223084, 40.040247 ], "pop": 36845, "state": "PA" }, { "_id": "19129", "city": "PHILADELPHIA", "loc": [ -75.186149, 40.011816 ], "pop": 13430, "state": "PA" }, { "_id": "19130", "city": "PHILADELPHIA", "loc": [ -75.173467, 39.967677 ], "pop": 21544, "state": "PA" }, { "_id": "19131", "city": "PHILADELPHIA", "loc": [ -75.22822600000001, 39.98447 ], "pop": 48270, "state": "PA" }, { "_id": "19132", "city": "PHILADELPHIA", "loc": [ -75.16982, 39.995393 ], "pop": 49011, "state": "PA" }, { "_id": "19133", "city": "PHILADELPHIA", "loc": [ -75.141505, 39.992467 ], "pop": 32608, "state": "PA" }, { "_id": "19134", "city": "PHILADELPHIA", "loc": [ -75.11328399999999, 39.99252 ], "pop": 58607, "state": "PA" }, { "_id": "19135", "city": "PHILADELPHIA", "loc": [ -75.051827, 40.024694 ], "pop": 32188, "state": "PA" }, { "_id": "19136", "city": "PHILADELPHIA", "loc": [ -75.024388, 40.042159 ], "pop": 40682, "state": "PA" }, { "_id": "19137", "city": "PHILADELPHIA", "loc": [ -75.072654, 40.000849 ], "pop": 8395, "state": "PA" }, { "_id": "19138", "city": "PHILADELPHIA", "loc": [ -75.156898, 40.05683 ], "pop": 37458, "state": "PA" }, { "_id": "19139", "city": "PHILADELPHIA", "loc": [ -75.230301, 39.961166 ], "pop": 48467, "state": "PA" }, { "_id": "19140", "city": "PHILADELPHIA", "loc": [ -75.14562599999999, 40.011771 ], "pop": 62864, "state": "PA" }, { "_id": "19141", "city": "PHILADELPHIA", "loc": [ -75.14510900000001, 40.036473 ], "pop": 38546, "state": "PA" }, { "_id": "19142", "city": "PHILADELPHIA", "loc": [ -75.233796, 39.922332 ], "pop": 29171, "state": "PA" }, { "_id": "19143", "city": "PHILADELPHIA", "loc": [ -75.228819, 39.944815 ], "pop": 80454, "state": "PA" }, { "_id": "19144", "city": "PHILADELPHIA", "loc": [ -75.17309899999999, 40.033773 ], "pop": 46612, "state": "PA" }, { "_id": "19145", "city": "PHILADELPHIA", "loc": [ -75.181194, 39.922724 ], "pop": 52538, "state": "PA" }, { "_id": "19146", "city": "PHILADELPHIA", "loc": [ -75.17936400000001, 39.937949 ], "pop": 38870, "state": "PA" }, { "_id": "19147", "city": "PHILADELPHIA", "loc": [ -75.156324, 39.936175 ], "pop": 34634, "state": "PA" }, { "_id": "19148", "city": "PHILADELPHIA", "loc": [ -75.159538, 39.92068 ], "pop": 49685, "state": "PA" }, { "_id": "19149", "city": "PHILADELPHIA", "loc": [ -75.066374, 40.036915 ], "pop": 47535, "state": "PA" }, { "_id": "19150", "city": "PHILADELPHIA", "loc": [ -75.170621, 40.07262 ], "pop": 27609, "state": "PA" }, { "_id": "19151", "city": "PHILADELPHIA", "loc": [ -75.254492, 39.977199 ], "pop": 36265, "state": "PA" }, { "_id": "19152", "city": "PHILADELPHIA", "loc": [ -75.047079, 40.060571 ], "pop": 31225, "state": "PA" }, { "_id": "19153", "city": "PHILADELPHIA", "loc": [ -75.24443100000001, 39.905512 ], "pop": 13375, "state": "PA" }, { "_id": "19154", "city": "PHILADELPHIA", "loc": [ -74.97805200000001, 40.089738 ], "pop": 38023, "state": "PA" }, { "_id": "19301", "city": "PAOLI", "loc": [ -75.482702, 40.04259 ], "pop": 6969, "state": "PA" }, { "_id": "19310", "city": "ATGLEN", "loc": [ -75.970343, 39.945782 ], "pop": 2318, "state": "PA" }, { "_id": "19311", "city": "AVONDALE", "loc": [ -75.768694, 39.821904 ], "pop": 4161, "state": "PA" }, { "_id": "19312", "city": "BERWYN", "loc": [ -75.447457, 40.041184 ], "pop": 9482, "state": "PA" }, { "_id": "19317", "city": "CHADDS FORD", "loc": [ -75.588515, 39.864769 ], "pop": 4522, "state": "PA" }, { "_id": "19319", "city": "CHEYNEY", "loc": [ -75.548738, 39.917496 ], "pop": 198, "state": "PA" }, { "_id": "19320", "city": "COATESVILLE", "loc": [ -75.825299, 39.984313 ], "pop": 39595, "state": "PA" }, { "_id": "19330", "city": "COCHRANVILLE", "loc": [ -75.921381, 39.875686 ], "pop": 3425, "state": "PA" }, { "_id": "19333", "city": "DEVON", "loc": [ -75.422691, 40.045181 ], "pop": 6290, "state": "PA" }, { "_id": "19335", "city": "DOWNINGTOWN", "loc": [ -75.718261, 40.016078 ], "pop": 35056, "state": "PA" }, { "_id": "19341", "city": "EXTON", "loc": [ -75.643196, 40.046817 ], "pop": 12495, "state": "PA" }, { "_id": "19342", "city": "GLEN MILLS", "loc": [ -75.50487200000001, 39.901515 ], "pop": 11632, "state": "PA" }, { "_id": "19343", "city": "GLENMOORE", "loc": [ -75.771103, 40.084602 ], "pop": 6959, "state": "PA" }, { "_id": "19344", "city": "HONEY BROOK", "loc": [ -75.88432, 40.083227 ], "pop": 8615, "state": "PA" }, { "_id": "19346", "city": "KELTON", "loc": [ -75.875827, 39.795501 ], "pop": 816, "state": "PA" }, { "_id": "19348", "city": "KENNETT SQUARE", "loc": [ -75.70001999999999, 39.855033 ], "pop": 16663, "state": "PA" }, { "_id": "19350", "city": "LANDENBERG", "loc": [ -75.78070700000001, 39.769558 ], "pop": 4787, "state": "PA" }, { "_id": "19352", "city": "LINCOLN UNIVERSI", "loc": [ -75.881784, 39.780905 ], "pop": 6834, "state": "PA" }, { "_id": "19355", "city": "FRAZER", "loc": [ -75.53302100000001, 40.037123 ], "pop": 21709, "state": "PA" }, { "_id": "19362", "city": "NOTTINGHAM", "loc": [ -76.035551, 39.74411 ], "pop": 2814, "state": "PA" }, { "_id": "19363", "city": "OXFORD", "loc": [ -75.981522, 39.782704 ], "pop": 11545, "state": "PA" }, { "_id": "19365", "city": "PARKESBURG", "loc": [ -75.926041, 39.965388 ], "pop": 5420, "state": "PA" }, { "_id": "19372", "city": "THORNDALE", "loc": [ -75.76285900000001, 40.000127 ], "pop": 1712, "state": "PA" }, { "_id": "19373", "city": "THORNTON", "loc": [ -75.531344, 39.904127 ], "pop": 2305, "state": "PA" }, { "_id": "19374", "city": "TOUGHKENAMON", "loc": [ -75.782533, 39.825117 ], "pop": 1045, "state": "PA" }, { "_id": "19380", "city": "WEST CHESTER", "loc": [ -75.596231, 39.984458 ], "pop": 40656, "state": "PA" }, { "_id": "19382", "city": "WEST CHESTER", "loc": [ -75.58819699999999, 39.944081 ], "pop": 44164, "state": "PA" }, { "_id": "19390", "city": "WEST GROVE", "loc": [ -75.837374, 39.825314 ], "pop": 7248, "state": "PA" }, { "_id": "19401", "city": "NORRISTOWN", "loc": [ -75.33044599999999, 40.124464 ], "pop": 46735, "state": "PA" }, { "_id": "19403", "city": "EAGLEVILLE", "loc": [ -75.38467199999999, 40.14335 ], "pop": 39184, "state": "PA" }, { "_id": "19405", "city": "BRIDGEPORT", "loc": [ -75.340234, 40.103042 ], "pop": 5163, "state": "PA" }, { "_id": "19406", "city": "KING OF PRUSSIA", "loc": [ -75.373706, 40.095581 ], "pop": 21049, "state": "PA" }, { "_id": "19422", "city": "PENLLYN", "loc": [ -75.279656, 40.15939 ], "pop": 16645, "state": "PA" }, { "_id": "19425", "city": "CHESTER SPRINGS", "loc": [ -75.639769, 40.097781 ], "pop": 4413, "state": "PA" }, { "_id": "19426", "city": "COLLEGEVILLE", "loc": [ -75.448762, 40.189277 ], "pop": 16453, "state": "PA" }, { "_id": "19428", "city": "WEST CONSHOHOCKE", "loc": [ -75.301332, 40.079848 ], "pop": 15924, "state": "PA" }, { "_id": "19435", "city": "FREDERICK", "loc": [ -75.531975, 40.299924 ], "pop": 728, "state": "PA" }, { "_id": "19436", "city": "GWYNEDD", "loc": [ -75.25074600000001, 40.202089 ], "pop": 540, "state": "PA" }, { "_id": "19438", "city": "HARLEYSVILLE", "loc": [ -75.388335, 40.265922 ], "pop": 16027, "state": "PA" }, { "_id": "19440", "city": "HATFIELD", "loc": [ -75.297507, 40.277826 ], "pop": 16686, "state": "PA" }, { "_id": "19444", "city": "LAFAYETTE HILL", "loc": [ -75.260052, 40.089597 ], "pop": 8312, "state": "PA" }, { "_id": "19446", "city": "LANSDALE", "loc": [ -75.295512, 40.237776 ], "pop": 41034, "state": "PA" }, { "_id": "19453", "city": "MONT CLARE", "loc": [ -75.499931, 40.13642 ], "pop": 1749, "state": "PA" }, { "_id": "19454", "city": "NORTH WALES", "loc": [ -75.256483, 40.216593 ], "pop": 14886, "state": "PA" }, { "_id": "19460", "city": "PHOENIXVILLE", "loc": [ -75.527192, 40.126704 ], "pop": 30460, "state": "PA" }, { "_id": "19462", "city": "PLYMOUTH MEETING", "loc": [ -75.27955900000001, 40.107735 ], "pop": 5206, "state": "PA" }, { "_id": "19464", "city": "SANATOGA", "loc": [ -75.639256, 40.242989 ], "pop": 53017, "state": "PA" }, { "_id": "19468", "city": "LIMERICK", "loc": [ -75.530548, 40.19286 ], "pop": 13825, "state": "PA" }, { "_id": "19473", "city": "SCHWENKSVILLE", "loc": [ -75.460155, 40.247087 ], "pop": 13139, "state": "PA" }, { "_id": "19475", "city": "SPRING CITY", "loc": [ -75.56968999999999, 40.176477 ], "pop": 7988, "state": "PA" }, { "_id": "19477", "city": "SPRING HOUSE", "loc": [ -75.23750099999999, 40.186954 ], "pop": 2129, "state": "PA" }, { "_id": "19492", "city": "ZIEGLERSVILLE", "loc": [ -75.485462, 40.281673 ], "pop": 290, "state": "PA" }, { "_id": "19501", "city": "ADAMSTOWN", "loc": [ -76.05654199999999, 40.242992 ], "pop": 1108, "state": "PA" }, { "_id": "19503", "city": "BALLY", "loc": [ -75.58748300000001, 40.400557 ], "pop": 973, "state": "PA" }, { "_id": "19504", "city": "BARTO", "loc": [ -75.574889, 40.381501 ], "pop": 2509, "state": "PA" }, { "_id": "19505", "city": "BECHTELSVILLE", "loc": [ -75.62570100000001, 40.379454 ], "pop": 3640, "state": "PA" }, { "_id": "19506", "city": "BERNVILLE", "loc": [ -76.12473199999999, 40.455061 ], "pop": 6245, "state": "PA" }, { "_id": "19507", "city": "BETHEL", "loc": [ -76.274209, 40.480834 ], "pop": 3523, "state": "PA" }, { "_id": "19508", "city": "BIRDSBORO", "loc": [ -75.834373, 40.256304 ], "pop": 15266, "state": "PA" }, { "_id": "19510", "city": "BLANDON", "loc": [ -75.883681, 40.443492 ], "pop": 2663, "state": "PA" }, { "_id": "19512", "city": "BOYERTOWN", "loc": [ -75.66036800000001, 40.333905 ], "pop": 17139, "state": "PA" }, { "_id": "19518", "city": "DOUGLASSVILLE", "loc": [ -75.739673, 40.270876 ], "pop": 7852, "state": "PA" }, { "_id": "19520", "city": "ELVERSON", "loc": [ -75.786563, 40.156781 ], "pop": 4592, "state": "PA" }, { "_id": "19522", "city": "EVANSVILLE", "loc": [ -75.81440000000001, 40.446766 ], "pop": 11505, "state": "PA" }, { "_id": "19525", "city": "GILBERTSVILLE", "loc": [ -75.595296, 40.305941 ], "pop": 7250, "state": "PA" }, { "_id": "19526", "city": "HAMBURG", "loc": [ -75.98736100000001, 40.548799 ], "pop": 9959, "state": "PA" }, { "_id": "19529", "city": "KEMPTON", "loc": [ -75.85127, 40.632794 ], "pop": 2387, "state": "PA" }, { "_id": "19530", "city": "KUTZTOWN", "loc": [ -75.777395, 40.521354 ], "pop": 13345, "state": "PA" }, { "_id": "19533", "city": "LEESPORT", "loc": [ -75.994421, 40.415216 ], "pop": 6199, "state": "PA" }, { "_id": "19534", "city": "LENHARTSVILLE", "loc": [ -75.850002, 40.575284 ], "pop": 1840, "state": "PA" }, { "_id": "19539", "city": "MERTZTOWN", "loc": [ -75.687202, 40.499183 ], "pop": 4058, "state": "PA" }, { "_id": "19540", "city": "MOHNTON", "loc": [ -75.98332000000001, 40.258442 ], "pop": 8402, "state": "PA" }, { "_id": "19541", "city": "MOHRSVILLE", "loc": [ -76.012491, 40.478307 ], "pop": 3473, "state": "PA" }, { "_id": "19543", "city": "MORGANTOWN", "loc": [ -75.89980199999999, 40.155248 ], "pop": 2121, "state": "PA" }, { "_id": "19547", "city": "OLEY", "loc": [ -75.77057499999999, 40.383312 ], "pop": 3949, "state": "PA" }, { "_id": "19549", "city": "PORT CLINTON", "loc": [ -76.026652, 40.581787 ], "pop": 328, "state": "PA" }, { "_id": "19551", "city": "ROBESONIA", "loc": [ -76.13659, 40.355281 ], "pop": 5310, "state": "PA" }, { "_id": "19555", "city": "SHOEMAKERSVILLE", "loc": [ -75.960313, 40.495495 ], "pop": 3947, "state": "PA" }, { "_id": "19560", "city": "TEMPLE", "loc": [ -75.904582, 40.402504 ], "pop": 7503, "state": "PA" }, { "_id": "19562", "city": "TOPTON", "loc": [ -75.701528, 40.502941 ], "pop": 1987, "state": "PA" }, { "_id": "19565", "city": "WERNERSVILLE", "loc": [ -76.09014000000001, 40.329289 ], "pop": 5056, "state": "PA" }, { "_id": "19567", "city": "WOMELSDORF", "loc": [ -76.198511, 40.374333 ], "pop": 4034, "state": "PA" }, { "_id": "19601", "city": "READING", "loc": [ -75.935132, 40.346621 ], "pop": 29968, "state": "PA" }, { "_id": "19602", "city": "READING", "loc": [ -75.919229, 40.330604 ], "pop": 16303, "state": "PA" }, { "_id": "19604", "city": "READING", "loc": [ -75.91426199999999, 40.350721 ], "pop": 22987, "state": "PA" }, { "_id": "19605", "city": "READING", "loc": [ -75.93276899999999, 40.38859 ], "pop": 13878, "state": "PA" }, { "_id": "19606", "city": "MOUNT PENN", "loc": [ -75.868178, 40.325109 ], "pop": 27732, "state": "PA" }, { "_id": "19607", "city": "SHILLINGTON", "loc": [ -75.953103, 40.299696 ], "pop": 19281, "state": "PA" }, { "_id": "19608", "city": "SINKING SPRING", "loc": [ -76.024086, 40.31449 ], "pop": 13037, "state": "PA" }, { "_id": "19609", "city": "WEST LAWN", "loc": [ -75.995347, 40.325778 ], "pop": 9845, "state": "PA" }, { "_id": "19610", "city": "WYOMISSING", "loc": [ -75.976382, 40.333478 ], "pop": 12394, "state": "PA" }, { "_id": "19611", "city": "READING", "loc": [ -75.944188, 40.324989 ], "pop": 10763, "state": "PA" }, { "_id": "19701", "city": "BEAR", "loc": [ -75.674729, 39.610187 ], "pop": 21384, "state": "DE" }, { "_id": "19702", "city": "NEWARK", "loc": [ -75.69933899999999, 39.634869 ], "pop": 30402, "state": "DE" }, { "_id": "19703", "city": "CLAYMONT", "loc": [ -75.46494, 39.804432 ], "pop": 16699, "state": "DE" }, { "_id": "19707", "city": "HOCKESSIN", "loc": [ -75.688873, 39.77604 ], "pop": 13149, "state": "DE" }, { "_id": "19709", "city": "MIDDLETOWN", "loc": [ -75.683183, 39.481535 ], "pop": 10243, "state": "DE" }, { "_id": "19711", "city": "NEWARK", "loc": [ -75.737534, 39.701129 ], "pop": 50573, "state": "DE" }, { "_id": "19713", "city": "NEWARK", "loc": [ -75.715101, 39.669881 ], "pop": 30699, "state": "DE" }, { "_id": "19720", "city": "MANOR", "loc": [ -75.589938, 39.67703 ], "pop": 46906, "state": "DE" }, { "_id": "19734", "city": "TOWNSEND", "loc": [ -75.683368, 39.381882 ], "pop": 4512, "state": "DE" }, { "_id": "19801", "city": "WILMINGTON", "loc": [ -75.54965799999999, 39.737752 ], "pop": 15151, "state": "DE" }, { "_id": "19802", "city": "WILMINGTON", "loc": [ -75.534041, 39.75638 ], "pop": 27411, "state": "DE" }, { "_id": "19803", "city": "TALLEYVILLE", "loc": [ -75.531076, 39.793236 ], "pop": 20901, "state": "DE" }, { "_id": "19804", "city": "NEWPORT", "loc": [ -75.612815, 39.720854 ], "pop": 18306, "state": "DE" }, { "_id": "19805", "city": "WILMINGTON", "loc": [ -75.582724, 39.743375 ], "pop": 40087, "state": "DE" }, { "_id": "19806", "city": "WILMINGTON", "loc": [ -75.563503, 39.757076 ], "pop": 9645, "state": "DE" }, { "_id": "19807", "city": "GREENVILLE", "loc": [ -75.60720499999999, 39.782206 ], "pop": 7176, "state": "DE" }, { "_id": "19808", "city": "MARSHALLTON", "loc": [ -75.66389100000001, 39.734737 ], "pop": 34260, "state": "DE" }, { "_id": "19809", "city": "EDGEMOOR", "loc": [ -75.494592, 39.771913 ], "pop": 14285, "state": "DE" }, { "_id": "19810", "city": "EDGEMOOR", "loc": [ -75.505999, 39.819377 ], "pop": 26334, "state": "DE" }, { "_id": "19901", "city": "DOVER", "loc": [ -75.535983, 39.156639 ], "pop": 46005, "state": "DE" }, { "_id": "19902", "city": "DOVER AFB", "loc": [ -75.478966, 39.120246 ], "pop": 5500, "state": "DE" }, { "_id": "19930", "city": "BETHANY BEACH", "loc": [ -75.067396, 38.531009 ], "pop": 769, "state": "DE" }, { "_id": "19931", "city": "BETHEL", "loc": [ -75.624298, 38.568517 ], "pop": 108, "state": "DE" }, { "_id": "19933", "city": "BRIDGEVILLE", "loc": [ -75.608768, 38.736628 ], "pop": 4353, "state": "DE" }, { "_id": "19934", "city": "CAMDEN WYOMING", "loc": [ -75.596559, 39.099099 ], "pop": 8877, "state": "DE" }, { "_id": "19938", "city": "CLAYTON", "loc": [ -75.690361, 39.256395 ], "pop": 4906, "state": "DE" }, { "_id": "19939", "city": "DAGSBORO", "loc": [ -75.21133, 38.559559 ], "pop": 2593, "state": "DE" }, { "_id": "19940", "city": "DELMAR", "loc": [ -75.57588699999999, 38.476955 ], "pop": 4257, "state": "DE" }, { "_id": "19941", "city": "ELLENDALE", "loc": [ -75.40558799999999, 38.805737 ], "pop": 2445, "state": "DE" }, { "_id": "19943", "city": "FELTON", "loc": [ -75.58290599999999, 39.022538 ], "pop": 7282, "state": "DE" }, { "_id": "19945", "city": "FRANKFORD", "loc": [ -75.200633, 38.51767 ], "pop": 5500, "state": "DE" }, { "_id": "19946", "city": "FREDERICA", "loc": [ -75.454458, 39.034188 ], "pop": 2725, "state": "DE" }, { "_id": "19947", "city": "GEORGETOWN", "loc": [ -75.393198, 38.679006 ], "pop": 11371, "state": "DE" }, { "_id": "19950", "city": "GREENWOOD", "loc": [ -75.593547, 38.817519 ], "pop": 4279, "state": "DE" }, { "_id": "19951", "city": "HARBESON", "loc": [ -75.22362099999999, 38.672294 ], "pop": 598, "state": "DE" }, { "_id": "19952", "city": "HARRINGTON", "loc": [ -75.58426799999999, 38.924031 ], "pop": 7972, "state": "DE" }, { "_id": "19953", "city": "HARTLY", "loc": [ -75.693476, 39.15421 ], "pop": 3558, "state": "DE" }, { "_id": "19954", "city": "HOUSTON", "loc": [ -75.506354, 38.91143 ], "pop": 1776, "state": "DE" }, { "_id": "19956", "city": "LAUREL", "loc": [ -75.563052, 38.553695 ], "pop": 9283, "state": "DE" }, { "_id": "19958", "city": "LEWES", "loc": [ -75.174702, 38.738149 ], "pop": 9503, "state": "DE" }, { "_id": "19960", "city": "LINCOLN", "loc": [ -75.399961, 38.86128 ], "pop": 4435, "state": "DE" }, { "_id": "19962", "city": "MAGNOLIA", "loc": [ -75.508321, 39.07353 ], "pop": 4567, "state": "DE" }, { "_id": "19963", "city": "MILFORD", "loc": [ -75.429877, 38.921801 ], "pop": 12187, "state": "DE" }, { "_id": "19964", "city": "MARYDEL", "loc": [ -75.728661, 39.099794 ], "pop": 975, "state": "DE" }, { "_id": "19966", "city": "LONG NECK", "loc": [ -75.25554700000001, 38.593436 ], "pop": 11962, "state": "DE" }, { "_id": "19967", "city": "MILLVILLE", "loc": [ -75.10776199999999, 38.558946 ], "pop": 623, "state": "DE" }, { "_id": "19968", "city": "MILTON", "loc": [ -75.295298, 38.768687 ], "pop": 4656, "state": "DE" }, { "_id": "19970", "city": "MILLVILLE", "loc": [ -75.096518, 38.555528 ], "pop": 1532, "state": "DE" }, { "_id": "19971", "city": "DEWEY BEACH", "loc": [ -75.10734600000001, 38.714715 ], "pop": 6249, "state": "DE" }, { "_id": "19973", "city": "SEAFORD", "loc": [ -75.604122, 38.640358 ], "pop": 18404, "state": "DE" }, { "_id": "19975", "city": "SELBYVILLE", "loc": [ -75.157325, 38.465357 ], "pop": 4478, "state": "DE" }, { "_id": "19977", "city": "SMYRNA", "loc": [ -75.600832, 39.293379 ], "pop": 14164, "state": "DE" }, { "_id": "19979", "city": "VIOLA", "loc": [ -75.572605, 39.041872 ], "pop": 153, "state": "DE" }, { "_id": "20001", "city": "WASHINGTON", "loc": [ -77.017691, 38.912217 ], "pop": 34745, "state": "DC" }, { "_id": "20002", "city": "WASHINGTON", "loc": [ -76.990055, 38.902365 ], "pop": 56756, "state": "DC" }, { "_id": "20003", "city": "WASHINGTON", "loc": [ -76.98953899999999, 38.882941 ], "pop": 24818, "state": "DC" }, { "_id": "20004", "city": "WASHINGTON", "loc": [ -77.026303, 38.892955 ], "pop": 11, "state": "DC" }, { "_id": "20005", "city": "WASHINGTON", "loc": [ -77.03123600000001, 38.906731 ], "pop": 9862, "state": "DC" }, { "_id": "20006", "city": "WASHINGTON", "loc": [ -77.044701, 38.896444 ], "pop": 2317, "state": "DC" }, { "_id": "20007", "city": "WASHINGTON", "loc": [ -77.07404200000001, 38.914365 ], "pop": 27076, "state": "DC" }, { "_id": "20008", "city": "WASHINGTON", "loc": [ -77.05993599999999, 38.936282 ], "pop": 26736, "state": "DC" }, { "_id": "20009", "city": "WASHINGTON", "loc": [ -77.037504, 38.920202 ], "pop": 47086, "state": "DC" }, { "_id": "20010", "city": "WASHINGTON", "loc": [ -77.032183, 38.93272 ], "pop": 28849, "state": "DC" }, { "_id": "20011", "city": "WASHINGTON", "loc": [ -77.020251, 38.951786 ], "pop": 62924, "state": "DC" }, { "_id": "20012", "city": "WASHINGTON", "loc": [ -77.028248, 38.975712 ], "pop": 15081, "state": "DC" }, { "_id": "20015", "city": "WASHINGTON", "loc": [ -77.067961, 38.965768 ], "pop": 14569, "state": "DC" }, { "_id": "20016", "city": "WASHINGTON", "loc": [ -77.086037, 38.938117 ], "pop": 31042, "state": "DC" }, { "_id": "20017", "city": "WASHINGTON", "loc": [ -76.994038, 38.936723 ], "pop": 19548, "state": "DC" }, { "_id": "20018", "city": "WASHINGTON", "loc": [ -76.976159, 38.927724 ], "pop": 18298, "state": "DC" }, { "_id": "20019", "city": "WASHINGTON", "loc": [ -76.93758800000001, 38.890237 ], "pop": 59492, "state": "DC" }, { "_id": "20020", "city": "WASHINGTON", "loc": [ -76.974187, 38.860039 ], "pop": 54339, "state": "DC" }, { "_id": "20024", "city": "WASHINGTON", "loc": [ -77.01602800000001, 38.875939 ], "pop": 11562, "state": "DC" }, { "_id": "20032", "city": "WASHINGTON", "loc": [ -76.999549, 38.833843 ], "pop": 40265, "state": "DC" }, { "_id": "20036", "city": "WASHINGTON", "loc": [ -77.041434, 38.908704 ], "pop": 4146, "state": "DC" }, { "_id": "20037", "city": "WASHINGTON", "loc": [ -77.050448, 38.901446 ], "pop": 11046, "state": "DC" }, { "_id": "20301", "city": "PENTAGON", "loc": [ -77.038196, 38.891019 ], "pop": 21, "state": "DC" }, { "_id": "20331", "city": "ANDREWS AFB", "loc": [ -76.886695, 38.800324 ], "pop": 10228, "state": "MD" }, { "_id": "20336", "city": "WASHINGTON", "loc": [ -77.014827, 38.839473 ], "pop": 6311, "state": "DC" }, { "_id": "20601", "city": "WALDORF", "loc": [ -76.877787, 38.637065 ], "pop": 18548, "state": "MD" }, { "_id": "20602", "city": "SAINT CHARLES", "loc": [ -76.903414, 38.601545 ], "pop": 20663, "state": "MD" }, { "_id": "20603", "city": "SAINT CHARLES", "loc": [ -76.96115399999999, 38.624929 ], "pop": 11184, "state": "MD" }, { "_id": "20606", "city": "ABELL", "loc": [ -76.74410399999999, 38.249554 ], "pop": 601, "state": "MD" }, { "_id": "20607", "city": "ACCOKEEK", "loc": [ -77.016217, 38.671992 ], "pop": 4043, "state": "MD" }, { "_id": "20608", "city": "AQUASCO", "loc": [ -76.714947, 38.582496 ], "pop": 939, "state": "MD" }, { "_id": "20609", "city": "AVENUE", "loc": [ -76.74655300000001, 38.282624 ], "pop": 699, "state": "MD" }, { "_id": "20611", "city": "BEL ALTON", "loc": [ -76.97887299999999, 38.473141 ], "pop": 582, "state": "MD" }, { "_id": "20613", "city": "BRANDYWINE", "loc": [ -76.832033, 38.692203 ], "pop": 7627, "state": "MD" }, { "_id": "20615", "city": "BROOMES ISLAND", "loc": [ -76.547763, 38.417963 ], "pop": 404, "state": "MD" }, { "_id": "20616", "city": "BRYANS ROAD", "loc": [ -77.076589, 38.641468 ], "pop": 3792, "state": "MD" }, { "_id": "20617", "city": "BRYANTOWN", "loc": [ -76.84653900000001, 38.542638 ], "pop": 722, "state": "MD" }, { "_id": "20618", "city": "BUSHWOOD", "loc": [ -76.792863, 38.284439 ], "pop": 934, "state": "MD" }, { "_id": "20619", "city": "CALIFORNIA", "loc": [ -76.531228, 38.300648 ], "pop": 5485, "state": "MD" }, { "_id": "20620", "city": "CALLAWAY", "loc": [ -76.52096299999999, 38.227521 ], "pop": 1394, "state": "MD" }, { "_id": "20621", "city": "MADDOX", "loc": [ -76.782343, 38.333197 ], "pop": 1240, "state": "MD" }, { "_id": "20622", "city": "CHARLOTTE HALL", "loc": [ -76.803792, 38.474977 ], "pop": 3454, "state": "MD" }, { "_id": "20623", "city": "CHELTENHAM", "loc": [ -76.83685199999999, 38.753094 ], "pop": 712, "state": "MD" }, { "_id": "20624", "city": "CLEMENTS", "loc": [ -76.72641900000001, 38.340716 ], "pop": 303, "state": "MD" }, { "_id": "20626", "city": "COLTONS POINT", "loc": [ -76.76464900000001, 38.236963 ], "pop": 694, "state": "MD" }, { "_id": "20628", "city": "DAMERON", "loc": [ -76.357474, 38.153271 ], "pop": 330, "state": "MD" }, { "_id": "20630", "city": "DRAYDEN", "loc": [ -76.473095, 38.171875 ], "pop": 413, "state": "MD" }, { "_id": "20632", "city": "FAULKNER", "loc": [ -76.972937, 38.438221 ], "pop": 459, "state": "MD" }, { "_id": "20634", "city": "GREAT MILLS", "loc": [ -76.49536500000001, 38.267431 ], "pop": 4203, "state": "MD" }, { "_id": "20636", "city": "HOLLYWOOD", "loc": [ -76.56264400000001, 38.352356 ], "pop": 6785, "state": "MD" }, { "_id": "20637", "city": "HUGHESVILLE", "loc": [ -76.781677, 38.520712 ], "pop": 4078, "state": "MD" }, { "_id": "20639", "city": "HUNTINGTOWN", "loc": [ -76.600268, 38.609453 ], "pop": 8290, "state": "MD" }, { "_id": "20640", "city": "PISGAH", "loc": [ -77.148357, 38.588855 ], "pop": 8227, "state": "MD" }, { "_id": "20645", "city": "ISSUE", "loc": [ -76.867527, 38.304327 ], "pop": 87, "state": "MD" }, { "_id": "20646", "city": "LA PLATA", "loc": [ -76.986498, 38.525673 ], "pop": 16900, "state": "MD" }, { "_id": "20650", "city": "LEONARDTOWN", "loc": [ -76.638037, 38.277425 ], "pop": 8922, "state": "MD" }, { "_id": "20653", "city": "LEXINGTON PARK", "loc": [ -76.45292999999999, 38.249452 ], "pop": 17082, "state": "MD" }, { "_id": "20656", "city": "LOVEVILLE", "loc": [ -76.67708, 38.347438 ], "pop": 248, "state": "MD" }, { "_id": "20657", "city": "LUSBY", "loc": [ -76.43464, 38.366128 ], "pop": 8990, "state": "MD" }, { "_id": "20658", "city": "RISON", "loc": [ -77.156329, 38.557335 ], "pop": 1826, "state": "MD" }, { "_id": "20659", "city": "MECHANICSVILLE", "loc": [ -76.725399, 38.429319 ], "pop": 17326, "state": "MD" }, { "_id": "20662", "city": "NANJEMOY", "loc": [ -77.198296, 38.446161 ], "pop": 2793, "state": "MD" }, { "_id": "20664", "city": "NEWBURG", "loc": [ -76.91749900000001, 38.329782 ], "pop": 3612, "state": "MD" }, { "_id": "20667", "city": "PARK HALL", "loc": [ -76.44152200000001, 38.224364 ], "pop": 224, "state": "MD" }, { "_id": "20670", "city": "PATUXENT RIVER", "loc": [ -76.438061, 38.279089 ], "pop": 3015, "state": "MD" }, { "_id": "20674", "city": "PINEY POINT", "loc": [ -76.504716, 38.139667 ], "pop": 1114, "state": "MD" }, { "_id": "20675", "city": "POMFRET", "loc": [ -77.009314, 38.585541 ], "pop": 1410, "state": "MD" }, { "_id": "20676", "city": "PORT REPUBLIC", "loc": [ -76.534865, 38.495237 ], "pop": 2647, "state": "MD" }, { "_id": "20677", "city": "PORT TOBACCO", "loc": [ -77.041856, 38.499353 ], "pop": 1149, "state": "MD" }, { "_id": "20678", "city": "PRINCE FREDERICK", "loc": [ -76.595495, 38.533629 ], "pop": 6802, "state": "MD" }, { "_id": "20680", "city": "RIDGE", "loc": [ -76.371071, 38.116883 ], "pop": 1245, "state": "MD" }, { "_id": "20684", "city": "SAINT INIGOES", "loc": [ -76.408328, 38.14406 ], "pop": 583, "state": "MD" }, { "_id": "20685", "city": "SAINT LEONARD", "loc": [ -76.511017, 38.45013 ], "pop": 3895, "state": "MD" }, { "_id": "20687", "city": "SCOTLAND", "loc": [ -76.347684, 38.082772 ], "pop": 356, "state": "MD" }, { "_id": "20688", "city": "SOLOMONS", "loc": [ -76.45888600000001, 38.334067 ], "pop": 661, "state": "MD" }, { "_id": "20689", "city": "SUNDERLAND", "loc": [ -76.576697, 38.648968 ], "pop": 1664, "state": "MD" }, { "_id": "20690", "city": "TALL TIMBERS", "loc": [ -76.539897, 38.165318 ], "pop": 255, "state": "MD" }, { "_id": "20692", "city": "VALLEY LEE", "loc": [ -76.508689, 38.189937 ], "pop": 667, "state": "MD" }, { "_id": "20693", "city": "WELCOME", "loc": [ -77.095006, 38.467206 ], "pop": 334, "state": "MD" }, { "_id": "20695", "city": "WHITE PLAINS", "loc": [ -76.980233, 38.594848 ], "pop": 3721, "state": "MD" }, { "_id": "20701", "city": "ANNAPOLIS JUNCTI", "loc": [ -76.798068, 39.130983 ], "pop": 32, "state": "MD" }, { "_id": "20705", "city": "BELTSVILLE", "loc": [ -76.92416799999999, 39.045524 ], "pop": 18146, "state": "MD" }, { "_id": "20706", "city": "LANHAM", "loc": [ -76.85509999999999, 38.967537 ], "pop": 33471, "state": "MD" }, { "_id": "20707", "city": "LAUREL", "loc": [ -76.87204300000001, 39.107687 ], "pop": 31065, "state": "MD" }, { "_id": "20708", "city": "MONTPELIER", "loc": [ -76.847725, 39.068376 ], "pop": 23523, "state": "MD" }, { "_id": "20710", "city": "BLADENSBURG", "loc": [ -76.920327, 38.945215 ], "pop": 7716, "state": "MD" }, { "_id": "20711", "city": "LOTHIAN", "loc": [ -76.66280999999999, 38.802933 ], "pop": 5081, "state": "MD" }, { "_id": "20712", "city": "MOUNT RAINIER", "loc": [ -76.965152, 38.943072 ], "pop": 8422, "state": "MD" }, { "_id": "20714", "city": "NORTH BEACH", "loc": [ -76.53670099999999, 38.711884 ], "pop": 2292, "state": "MD" }, { "_id": "20715", "city": "BOWIE", "loc": [ -76.743497, 38.979696 ], "pop": 25296, "state": "MD" }, { "_id": "20716", "city": "MITCHELLVILLE", "loc": [ -76.731979, 38.927482 ], "pop": 13580, "state": "MD" }, { "_id": "20720", "city": "BOWIE", "loc": [ -76.789526, 38.973733 ], "pop": 8239, "state": "MD" }, { "_id": "20721", "city": "MITCHELLVILLE", "loc": [ -76.80526999999999, 38.919588 ], "pop": 10551, "state": "MD" }, { "_id": "20722", "city": "BRENTWOOD", "loc": [ -76.953062, 38.940701 ], "pop": 5769, "state": "MD" }, { "_id": "20723", "city": "LAUREL", "loc": [ -76.84345, 39.120806 ], "pop": 10457, "state": "MD" }, { "_id": "20724", "city": "LAUREL", "loc": [ -76.815485, 39.095801 ], "pop": 7656, "state": "MD" }, { "_id": "20732", "city": "CHESAPEAKE BEACH", "loc": [ -76.537629, 38.669798 ], "pop": 4856, "state": "MD" }, { "_id": "20733", "city": "CHURCHTON", "loc": [ -76.524773, 38.801791 ], "pop": 2539, "state": "MD" }, { "_id": "20735", "city": "CLINTON", "loc": [ -76.90257699999999, 38.754892 ], "pop": 26417, "state": "MD" }, { "_id": "20736", "city": "OWINGS", "loc": [ -76.606093, 38.695507 ], "pop": 6876, "state": "MD" }, { "_id": "20737", "city": "RIVERDALE", "loc": [ -76.914658, 38.960067 ], "pop": 16328, "state": "MD" }, { "_id": "20740", "city": "COLLEGE PARK", "loc": [ -76.929891, 38.996303 ], "pop": 29336, "state": "MD" }, { "_id": "20743", "city": "CAPITAL HEIGHTS", "loc": [ -76.906665, 38.88385 ], "pop": 40459, "state": "MD" }, { "_id": "20744", "city": "FORT WASHINGTON", "loc": [ -76.983531, 38.758656 ], "pop": 44735, "state": "MD" }, { "_id": "20745", "city": "OXON HILL", "loc": [ -76.98977600000001, 38.810764 ], "pop": 29487, "state": "MD" }, { "_id": "20746", "city": "SUITLAND", "loc": [ -76.922156, 38.842453 ], "pop": 30601, "state": "MD" }, { "_id": "20747", "city": "DISTRICT HEIGHTS", "loc": [ -76.889132, 38.853887 ], "pop": 35872, "state": "MD" }, { "_id": "20748", "city": "TEMPLE HILLS", "loc": [ -76.94778599999999, 38.822159 ], "pop": 40471, "state": "MD" }, { "_id": "20751", "city": "DEALE", "loc": [ -76.551498, 38.782909 ], "pop": 1909, "state": "MD" }, { "_id": "20754", "city": "DUNKIRK", "loc": [ -76.642658, 38.740763 ], "pop": 5919, "state": "MD" }, { "_id": "20755", "city": "FORT GEORGE G ME", "loc": [ -76.745013, 39.112923 ], "pop": 11110, "state": "MD" }, { "_id": "20758", "city": "FRIENDSHIP", "loc": [ -76.600093, 38.739077 ], "pop": 853, "state": "MD" }, { "_id": "20759", "city": "FULTON", "loc": [ -76.92999, 39.150179 ], "pop": 1640, "state": "MD" }, { "_id": "20763", "city": "SAVAGE", "loc": [ -76.82181799999999, 39.137962 ], "pop": 2227, "state": "MD" }, { "_id": "20764", "city": "SHADY SIDE", "loc": [ -76.510884, 38.836794 ], "pop": 2957, "state": "MD" }, { "_id": "20769", "city": "GLENN DALE", "loc": [ -76.805336, 38.976632 ], "pop": 3242, "state": "MD" }, { "_id": "20770", "city": "GREENBELT", "loc": [ -76.88396400000001, 38.999559 ], "pop": 21125, "state": "MD" }, { "_id": "20772", "city": "UPPER MARLBORO", "loc": [ -76.798028, 38.837717 ], "pop": 49684, "state": "MD" }, { "_id": "20776", "city": "HARWOOD", "loc": [ -76.614458, 38.858152 ], "pop": 3765, "state": "MD" }, { "_id": "20777", "city": "HIGHLAND", "loc": [ -76.968643, 39.184252 ], "pop": 2596, "state": "MD" }, { "_id": "20778", "city": "WEST RIVER", "loc": [ -76.539113, 38.825194 ], "pop": 1026, "state": "MD" }, { "_id": "20779", "city": "TRACYS LANDING", "loc": [ -76.57523999999999, 38.767101 ], "pop": 413, "state": "MD" }, { "_id": "20781", "city": "HYATTSVILLE", "loc": [ -76.934652, 38.95063 ], "pop": 11716, "state": "MD" }, { "_id": "20782", "city": "WEST HYATTSVILLE", "loc": [ -76.966632, 38.963575 ], "pop": 28026, "state": "MD" }, { "_id": "20783", "city": "ADELPHI", "loc": [ -76.97472, 38.993751 ], "pop": 40007, "state": "MD" }, { "_id": "20784", "city": "LANDOVER HILLS", "loc": [ -76.888829, 38.951541 ], "pop": 27339, "state": "MD" }, { "_id": "20785", "city": "LANDOVER", "loc": [ -76.882243, 38.91992 ], "pop": 38732, "state": "MD" }, { "_id": "20794", "city": "JESSUP", "loc": [ -76.792239, 39.148399 ], "pop": 11789, "state": "MD" }, { "_id": "20812", "city": "GLEN ECHO", "loc": [ -77.143457, 38.969333 ], "pop": 234, "state": "MD" }, { "_id": "20814", "city": "BETHESDA", "loc": [ -77.102165, 39.000343 ], "pop": 21704, "state": "MD" }, { "_id": "20815", "city": "CHEVY CHASE", "loc": [ -77.08198400000001, 38.977955 ], "pop": 25264, "state": "MD" }, { "_id": "20816", "city": "BETHESDA", "loc": [ -77.11528, 38.958485 ], "pop": 14700, "state": "MD" }, { "_id": "20817", "city": "WEST BETHESDA", "loc": [ -77.13723899999999, 38.999659 ], "pop": 33484, "state": "MD" }, { "_id": "20818", "city": "CABIN JOHN", "loc": [ -77.15911, 38.974302 ], "pop": 1120, "state": "MD" }, { "_id": "20832", "city": "OLNEY", "loc": [ -77.074949, 39.152591 ], "pop": 20376, "state": "MD" }, { "_id": "20833", "city": "BROOKEVILLE", "loc": [ -77.06026, 39.187082 ], "pop": 3612, "state": "MD" }, { "_id": "20837", "city": "POOLESVILLE", "loc": [ -77.406717, 39.138597 ], "pop": 4692, "state": "MD" }, { "_id": "20838", "city": "BARNESVILLE", "loc": [ -77.376426, 39.223321 ], "pop": 130, "state": "MD" }, { "_id": "20839", "city": "BEALLSVILLE", "loc": [ -77.41440299999999, 39.167095 ], "pop": 72, "state": "MD" }, { "_id": "20841", "city": "BOYDS", "loc": [ -77.316731, 39.210042 ], "pop": 2402, "state": "MD" }, { "_id": "20842", "city": "DICKERSON", "loc": [ -77.419853, 39.212615 ], "pop": 1726, "state": "MD" }, { "_id": "20850", "city": "ROCKVILLE", "loc": [ -77.167973, 39.087037 ], "pop": 24215, "state": "MD" }, { "_id": "20851", "city": "ROCKVILLE", "loc": [ -77.12344899999999, 39.076265 ], "pop": 11494, "state": "MD" }, { "_id": "20852", "city": "ROCKVILLE", "loc": [ -77.12041600000001, 39.049628 ], "pop": 32913, "state": "MD" }, { "_id": "20853", "city": "ROCKVILLE", "loc": [ -77.095037, 39.088738 ], "pop": 27339, "state": "MD" }, { "_id": "20854", "city": "POTOMAC", "loc": [ -77.192151, 39.03877 ], "pop": 44211, "state": "MD" }, { "_id": "20855", "city": "DERWOOD", "loc": [ -77.147707, 39.134539 ], "pop": 17235, "state": "MD" }, { "_id": "20860", "city": "SANDY SPRING", "loc": [ -77.029071, 39.150319 ], "pop": 1890, "state": "MD" }, { "_id": "20861", "city": "ASHTON", "loc": [ -76.99242, 39.151027 ], "pop": 1318, "state": "MD" }, { "_id": "20862", "city": "BRINKLOW", "loc": [ -77.016338, 39.183777 ], "pop": 286, "state": "MD" }, { "_id": "20866", "city": "BURTONSVILLE", "loc": [ -76.933851, 39.092151 ], "pop": 14497, "state": "MD" }, { "_id": "20868", "city": "SPENCERVILLE", "loc": [ -76.959802, 39.121343 ], "pop": 278, "state": "MD" }, { "_id": "20871", "city": "CLARKSBURG", "loc": [ -77.273579, 39.263719 ], "pop": 2674, "state": "MD" }, { "_id": "20872", "city": "DAMASCUS", "loc": [ -77.213088, 39.27606 ], "pop": 10446, "state": "MD" }, { "_id": "20874", "city": "DARNESTOWN", "loc": [ -77.269935, 39.17039 ], "pop": 33549, "state": "MD" }, { "_id": "20876", "city": "GERMANTOWN", "loc": [ -77.235829, 39.188001 ], "pop": 11734, "state": "MD" }, { "_id": "20877", "city": "GAITHERSBURG", "loc": [ -77.188993, 39.14187 ], "pop": 25136, "state": "MD" }, { "_id": "20878", "city": "DARNESTOWN", "loc": [ -77.236434, 39.115534 ], "pop": 45367, "state": "MD" }, { "_id": "20879", "city": "LAYTONSVILLE", "loc": [ -77.194599, 39.172597 ], "pop": 46879, "state": "MD" }, { "_id": "20882", "city": "LAYTONSVILLE", "loc": [ -77.174718, 39.238345 ], "pop": 9795, "state": "MD" }, { "_id": "20895", "city": "KENSINGTON", "loc": [ -77.07928099999999, 39.029803 ], "pop": 21848, "state": "MD" }, { "_id": "20901", "city": "SILVER SPRING", "loc": [ -77.00761300000001, 39.019106 ], "pop": 33858, "state": "MD" }, { "_id": "20902", "city": "WHEATON", "loc": [ -77.04634799999999, 39.04158 ], "pop": 40299, "state": "MD" }, { "_id": "20903", "city": "SILVER SPRING", "loc": [ -76.98464800000001, 39.009513 ], "pop": 16724, "state": "MD" }, { "_id": "20904", "city": "COLESVILLE", "loc": [ -76.976399, 39.06524 ], "pop": 39991, "state": "MD" }, { "_id": "20905", "city": "COLESVILLE", "loc": [ -76.98992800000001, 39.102438 ], "pop": 16800, "state": "MD" }, { "_id": "20906", "city": "ASPEN HILL", "loc": [ -77.063233, 39.081041 ], "pop": 52694, "state": "MD" }, { "_id": "20910", "city": "SILVER SPRING", "loc": [ -77.033776, 38.998198 ], "pop": 31954, "state": "MD" }, { "_id": "20912", "city": "TAKOMA PARK", "loc": [ -77.000715, 38.983214 ], "pop": 24356, "state": "MD" }, { "_id": "21001", "city": "ABERDEEN", "loc": [ -76.18053999999999, 39.510886 ], "pop": 19229, "state": "MD" }, { "_id": "21005", "city": "ABERDEEN PROVING", "loc": [ -76.130295, 39.472434 ], "pop": 5294, "state": "MD" }, { "_id": "21009", "city": "ABINGDON", "loc": [ -76.29972600000001, 39.47444 ], "pop": 12664, "state": "MD" }, { "_id": "21010", "city": "GUNPOWDER", "loc": [ -76.274261, 39.398249 ], "pop": 1082, "state": "MD" }, { "_id": "21012", "city": "ARNOLD", "loc": [ -76.49406, 39.047587 ], "pop": 19404, "state": "MD" }, { "_id": "21013", "city": "BALDWIN", "loc": [ -76.492711, 39.519395 ], "pop": 4945, "state": "MD" }, { "_id": "21014", "city": "BEL AIR", "loc": [ -76.356431, 39.539367 ], "pop": 18477, "state": "MD" }, { "_id": "21015", "city": "BEL AIR", "loc": [ -76.31532900000001, 39.530252 ], "pop": 23254, "state": "MD" }, { "_id": "21017", "city": "BELCAMP", "loc": [ -76.24201100000001, 39.475626 ], "pop": 2957, "state": "MD" }, { "_id": "21021", "city": "BRADSHAW", "loc": [ -76.38939999999999, 39.428113 ], "pop": 699, "state": "MD" }, { "_id": "21028", "city": "CHURCHVILLE", "loc": [ -76.24896200000001, 39.564845 ], "pop": 3038, "state": "MD" }, { "_id": "21029", "city": "CLARKSVILLE", "loc": [ -76.94227100000001, 39.194362 ], "pop": 3147, "state": "MD" }, { "_id": "21030", "city": "COCKEYSVILLE HUN", "loc": [ -76.62865499999999, 39.473554 ], "pop": 20331, "state": "MD" }, { "_id": "21031", "city": "COCKEYSVILLE HUN", "loc": [ -76.65984400000001, 39.502623 ], "pop": 159, "state": "MD" }, { "_id": "21032", "city": "CROWNSVILLE", "loc": [ -76.59347699999999, 39.048889 ], "pop": 7269, "state": "MD" }, { "_id": "21034", "city": "DARLINGTON", "loc": [ -76.227795, 39.654032 ], "pop": 3298, "state": "MD" }, { "_id": "21035", "city": "DAVIDSONVILLE", "loc": [ -76.637542, 38.937364 ], "pop": 6070, "state": "MD" }, { "_id": "21036", "city": "DAYTON", "loc": [ -76.99675499999999, 39.233882 ], "pop": 1707, "state": "MD" }, { "_id": "21037", "city": "EDGEWATER BEACH", "loc": [ -76.540374, 38.922511 ], "pop": 14576, "state": "MD" }, { "_id": "21040", "city": "EDGEWOOD", "loc": [ -76.30555, 39.427725 ], "pop": 22058, "state": "MD" }, { "_id": "21042", "city": "ELLICOTT CITY", "loc": [ -76.861362, 39.272632 ], "pop": 29589, "state": "MD" }, { "_id": "21043", "city": "DANIELS", "loc": [ -76.803929, 39.258216 ], "pop": 19217, "state": "MD" }, { "_id": "21044", "city": "COLUMBIA", "loc": [ -76.87880699999999, 39.214103 ], "pop": 32695, "state": "MD" }, { "_id": "21045", "city": "COLUMBIA", "loc": [ -76.83223, 39.205052 ], "pop": 32658, "state": "MD" }, { "_id": "21046", "city": "COLUMBIA", "loc": [ -76.853796, 39.170236 ], "pop": 13591, "state": "MD" }, { "_id": "21047", "city": "FALLSTON", "loc": [ -76.43277, 39.527048 ], "pop": 10230, "state": "MD" }, { "_id": "21048", "city": "PATAPSCO", "loc": [ -76.909862, 39.508645 ], "pop": 7680, "state": "MD" }, { "_id": "21050", "city": "FOREST HILL", "loc": [ -76.400767, 39.57549 ], "pop": 9029, "state": "MD" }, { "_id": "21051", "city": "FORK", "loc": [ -76.450361, 39.472937 ], "pop": 136, "state": "MD" }, { "_id": "21053", "city": "FREELAND", "loc": [ -76.72234899999999, 39.693957 ], "pop": 2482, "state": "MD" }, { "_id": "21054", "city": "GAMBRILLS", "loc": [ -76.681877, 39.04069 ], "pop": 7441, "state": "MD" }, { "_id": "21056", "city": "GIBSON ISLAND", "loc": [ -76.432418, 39.07511 ], "pop": 335, "state": "MD" }, { "_id": "21057", "city": "GLEN ARM", "loc": [ -76.515331, 39.457484 ], "pop": 3679, "state": "MD" }, { "_id": "21061", "city": "GLEN BURNIE", "loc": [ -76.61886199999999, 39.158968 ], "pop": 75692, "state": "MD" }, { "_id": "21071", "city": "GLYNDON", "loc": [ -76.78756799999999, 39.492782 ], "pop": 1761, "state": "MD" }, { "_id": "21074", "city": "GREENMOUNT", "loc": [ -76.849397, 39.61352 ], "pop": 10443, "state": "MD" }, { "_id": "21076", "city": "HANOVER", "loc": [ -76.721535, 39.155069 ], "pop": 6265, "state": "MD" }, { "_id": "21078", "city": "HAVRE DE GRACE", "loc": [ -76.117144, 39.552312 ], "pop": 13536, "state": "MD" }, { "_id": "21082", "city": "HYDES", "loc": [ -76.469538, 39.474049 ], "pop": 883, "state": "MD" }, { "_id": "21084", "city": "JARRETTSVILLE", "loc": [ -76.46842700000001, 39.616241 ], "pop": 6667, "state": "MD" }, { "_id": "21085", "city": "JOPPA", "loc": [ -76.354102, 39.424208 ], "pop": 15006, "state": "MD" }, { "_id": "21087", "city": "KINGSVILLE", "loc": [ -76.41473000000001, 39.455775 ], "pop": 4283, "state": "MD" }, { "_id": "21088", "city": "LINEBORO", "loc": [ -76.839476, 39.718498 ], "pop": 94, "state": "MD" }, { "_id": "21090", "city": "LINTHICUM HEIGHT", "loc": [ -76.657477, 39.208331 ], "pop": 9777, "state": "MD" }, { "_id": "21093", "city": "LUTHERVILLE", "loc": [ -76.633791, 39.438636 ], "pop": 31560, "state": "MD" }, { "_id": "21102", "city": "MANCHESTER", "loc": [ -76.89407300000001, 39.674746 ], "pop": 5476, "state": "MD" }, { "_id": "21104", "city": "MARRIOTTSVILLE", "loc": [ -76.913241, 39.334154 ], "pop": 1482, "state": "MD" }, { "_id": "21107", "city": "MILLERS", "loc": [ -76.82388400000001, 39.683224 ], "pop": 3218, "state": "MD" }, { "_id": "21108", "city": "MILLERSVILLE", "loc": [ -76.61902000000001, 39.104102 ], "pop": 16436, "state": "MD" }, { "_id": "21111", "city": "HEREFORD", "loc": [ -76.592957, 39.576611 ], "pop": 4615, "state": "MD" }, { "_id": "21113", "city": "ODENTON", "loc": [ -76.699583, 39.076197 ], "pop": 8201, "state": "MD" }, { "_id": "21114", "city": "CROFTON", "loc": [ -76.680166, 39.011163 ], "pop": 15590, "state": "MD" }, { "_id": "21117", "city": "OWINGS MILLS", "loc": [ -76.776934, 39.42688 ], "pop": 24913, "state": "MD" }, { "_id": "21120", "city": "BENTLEY SPRINGS", "loc": [ -76.67759100000001, 39.649937 ], "pop": 5320, "state": "MD" }, { "_id": "21122", "city": "RIVIERA BEACH", "loc": [ -76.516248, 39.129284 ], "pop": 51386, "state": "MD" }, { "_id": "21128", "city": "PERRY HALL", "loc": [ -76.450987, 39.401013 ], "pop": 6075, "state": "MD" }, { "_id": "21131", "city": "JACKSONVILLE", "loc": [ -76.564623, 39.506978 ], "pop": 6703, "state": "MD" }, { "_id": "21132", "city": "PYLESVILLE", "loc": [ -76.41125599999999, 39.695905 ], "pop": 2782, "state": "MD" }, { "_id": "21133", "city": "RANDALLSTOWN", "loc": [ -76.800245, 39.374571 ], "pop": 23994, "state": "MD" }, { "_id": "21136", "city": "REISTERSTOWN", "loc": [ -76.813452, 39.45996 ], "pop": 24812, "state": "MD" }, { "_id": "21140", "city": "RIVA", "loc": [ -76.585437, 38.950391 ], "pop": 3165, "state": "MD" }, { "_id": "21144", "city": "SEVERN", "loc": [ -76.697953, 39.127543 ], "pop": 25272, "state": "MD" }, { "_id": "21146", "city": "SEVERNA PARK", "loc": [ -76.55774599999999, 39.081078 ], "pop": 23392, "state": "MD" }, { "_id": "21152", "city": "GLENCOE", "loc": [ -76.66910900000001, 39.543086 ], "pop": 4450, "state": "MD" }, { "_id": "21154", "city": "ROCKS", "loc": [ -76.330174, 39.649928 ], "pop": 5018, "state": "MD" }, { "_id": "21155", "city": "FOWBELSBURG", "loc": [ -76.81623, 39.56394 ], "pop": 2487, "state": "MD" }, { "_id": "21156", "city": "UPPER FALLS", "loc": [ -76.400604, 39.43967 ], "pop": 464, "state": "MD" }, { "_id": "21157", "city": "CARROLLTON", "loc": [ -76.99404, 39.555654 ], "pop": 37148, "state": "MD" }, { "_id": "21158", "city": "UNIONTOWN", "loc": [ -77.036946, 39.655464 ], "pop": 8491, "state": "MD" }, { "_id": "21160", "city": "WHITEFORD", "loc": [ -76.31601499999999, 39.707709 ], "pop": 1766, "state": "MD" }, { "_id": "21161", "city": "WHITE HALL", "loc": [ -76.566639, 39.66176 ], "pop": 4970, "state": "MD" }, { "_id": "21162", "city": "WHITE MARSH", "loc": [ -76.413189, 39.392315 ], "pop": 2521, "state": "MD" }, { "_id": "21163", "city": "GRANITE", "loc": [ -76.85757, 39.339151 ], "pop": 2115, "state": "MD" }, { "_id": "21201", "city": "BALTIMORE", "loc": [ -76.625203, 39.29463 ], "pop": 16256, "state": "MD" }, { "_id": "21202", "city": "BALTIMORE", "loc": [ -76.607499, 39.299844 ], "pop": 28656, "state": "MD" }, { "_id": "21204", "city": "EUDOWOOD", "loc": [ -76.603224, 39.402517 ], "pop": 37257, "state": "MD" }, { "_id": "21205", "city": "BALTIMORE", "loc": [ -76.579915, 39.300871 ], "pop": 23763, "state": "MD" }, { "_id": "21206", "city": "BALTIMORE", "loc": [ -76.541135, 39.336494 ], "pop": 52114, "state": "MD" }, { "_id": "21207", "city": "GWYNN OAK", "loc": [ -76.734064, 39.329628 ], "pop": 76002, "state": "MD" }, { "_id": "21208", "city": "PIKESVILLE", "loc": [ -76.72901299999999, 39.376359 ], "pop": 27723, "state": "MD" }, { "_id": "21209", "city": "BALTIMORE", "loc": [ -76.674431, 39.371622 ], "pop": 20673, "state": "MD" }, { "_id": "21210", "city": "BALTIMORE", "loc": [ -76.632099, 39.350727 ], "pop": 12581, "state": "MD" }, { "_id": "21211", "city": "BALTIMORE", "loc": [ -76.63362499999999, 39.331642 ], "pop": 19797, "state": "MD" }, { "_id": "21212", "city": "BALTIMORE", "loc": [ -76.609989, 39.362571 ], "pop": 35680, "state": "MD" }, { "_id": "21213", "city": "BALTIMORE", "loc": [ -76.581012, 39.312667 ], "pop": 47171, "state": "MD" }, { "_id": "21214", "city": "BALTIMORE", "loc": [ -76.564375, 39.35206 ], "pop": 20949, "state": "MD" }, { "_id": "21215", "city": "BALTIMORE", "loc": [ -76.67939699999999, 39.344572 ], "pop": 74402, "state": "MD" }, { "_id": "21216", "city": "BALTIMORE", "loc": [ -76.66989100000001, 39.309349 ], "pop": 42501, "state": "MD" }, { "_id": "21217", "city": "BALTIMORE", "loc": [ -76.639267, 39.306416 ], "pop": 52502, "state": "MD" }, { "_id": "21218", "city": "BALTIMORE", "loc": [ -76.6048, 39.3265 ], "pop": 56677, "state": "MD" }, { "_id": "21219", "city": "DUNDALK SPARROWS", "loc": [ -76.44693700000001, 39.229068 ], "pop": 9467, "state": "MD" }, { "_id": "21220", "city": "MIDDLE RIVER", "loc": [ -76.415255, 39.340098 ], "pop": 37336, "state": "MD" }, { "_id": "21221", "city": "ESSEX", "loc": [ -76.453259, 39.308553 ], "pop": 44117, "state": "MD" }, { "_id": "21222", "city": "DUNDALK SPARROWS", "loc": [ -76.502484, 39.26486 ], "pop": 58181, "state": "MD" }, { "_id": "21223", "city": "BALTIMORE", "loc": [ -76.647586, 39.287 ], "pop": 39003, "state": "MD" }, { "_id": "21224", "city": "BALTIMORE", "loc": [ -76.556831, 39.287558 ], "pop": 53629, "state": "MD" }, { "_id": "21225", "city": "BROOKLYN CURTIS", "loc": [ -76.615026, 39.233343 ], "pop": 35032, "state": "MD" }, { "_id": "21226", "city": "BROOKLYN CURTIS", "loc": [ -76.569147, 39.209315 ], "pop": 5478, "state": "MD" }, { "_id": "21227", "city": "HALETHORPE", "loc": [ -76.696872, 39.230893 ], "pop": 45430, "state": "MD" }, { "_id": "21228", "city": "CATONSVILLE", "loc": [ -76.74012399999999, 39.27825 ], "pop": 43630, "state": "MD" }, { "_id": "21229", "city": "BALTIMORE", "loc": [ -76.689885, 39.285645 ], "pop": 53962, "state": "MD" }, { "_id": "21230", "city": "BALTIMORE", "loc": [ -76.626193, 39.269943 ], "pop": 34901, "state": "MD" }, { "_id": "21231", "city": "BALTIMORE", "loc": [ -76.589956, 39.289193 ], "pop": 15928, "state": "MD" }, { "_id": "21234", "city": "PARKVILLE", "loc": [ -76.54176699999999, 39.387581 ], "pop": 66477, "state": "MD" }, { "_id": "21236", "city": "NOTTINGHAM", "loc": [ -76.487106, 39.391412 ], "pop": 33099, "state": "MD" }, { "_id": "21237", "city": "ROSEDALE", "loc": [ -76.50138699999999, 39.336054 ], "pop": 24835, "state": "MD" }, { "_id": "21239", "city": "BALTIMORE", "loc": [ -76.589082, 39.360977 ], "pop": 31935, "state": "MD" }, { "_id": "21240", "city": "BALTIMORE", "loc": [ -76.648287, 39.17185 ], "pop": 1, "state": "MD" }, { "_id": "21401", "city": "CAPE SAINT CLAIR", "loc": [ -76.503139, 38.999645 ], "pop": 44757, "state": "MD" }, { "_id": "21402", "city": "NAVAL ACADEMY", "loc": [ -76.48079, 38.982436 ], "pop": 5780, "state": "MD" }, { "_id": "21403", "city": "ANNAPOLIS", "loc": [ -76.49102999999999, 38.952394 ], "pop": 26587, "state": "MD" }, { "_id": "21502", "city": "CRESAPTOWN", "loc": [ -78.77744199999999, 39.644796 ], "pop": 44371, "state": "MD" }, { "_id": "21520", "city": "ACCIDENT", "loc": [ -79.30846699999999, 39.635504 ], "pop": 1968, "state": "MD" }, { "_id": "21521", "city": "BARTON", "loc": [ -79.02813, 39.533135 ], "pop": 1305, "state": "MD" }, { "_id": "21522", "city": "BITTINGER", "loc": [ -79.214247, 39.597786 ], "pop": 479, "state": "MD" }, { "_id": "21523", "city": "BLOOMINGTON", "loc": [ -79.11370700000001, 39.487764 ], "pop": 898, "state": "MD" }, { "_id": "21530", "city": "FLINTSTONE", "loc": [ -78.573949, 39.699288 ], "pop": 1102, "state": "MD" }, { "_id": "21531", "city": "FRIENDSVILLE", "loc": [ -79.42191200000001, 39.666502 ], "pop": 2021, "state": "MD" }, { "_id": "21532", "city": "FROSTBURG", "loc": [ -78.930559, 39.649359 ], "pop": 15702, "state": "MD" }, { "_id": "21536", "city": "JENNINGS", "loc": [ -79.15166499999999, 39.684436 ], "pop": 3138, "state": "MD" }, { "_id": "21538", "city": "SHALLMAR", "loc": [ -79.202528, 39.396275 ], "pop": 759, "state": "MD" }, { "_id": "21539", "city": "LONACONING", "loc": [ -78.991477, 39.575703 ], "pop": 3494, "state": "MD" }, { "_id": "21540", "city": "LUKE", "loc": [ -79.059365, 39.477392 ], "pop": 184, "state": "MD" }, { "_id": "21541", "city": "SANG RUN", "loc": [ -79.36413400000001, 39.559709 ], "pop": 1673, "state": "MD" }, { "_id": "21545", "city": "MOUNT SAVAGE", "loc": [ -78.873892, 39.699128 ], "pop": 2067, "state": "MD" }, { "_id": "21550", "city": "DEER PARK", "loc": [ -79.38966000000001, 39.399993 ], "pop": 13531, "state": "MD" }, { "_id": "21555", "city": "OLDTOWN", "loc": [ -78.604373, 39.584598 ], "pop": 2079, "state": "MD" }, { "_id": "21557", "city": "RAWLINGS", "loc": [ -78.90623100000001, 39.521363 ], "pop": 1919, "state": "MD" }, { "_id": "21561", "city": "SWANTON", "loc": [ -79.240165, 39.476361 ], "pop": 1719, "state": "MD" }, { "_id": "21562", "city": "MCCOOLE", "loc": [ -79.030726, 39.482625 ], "pop": 3976, "state": "MD" }, { "_id": "21601", "city": "EASTON", "loc": [ -76.07577499999999, 38.77682 ], "pop": 16439, "state": "MD" }, { "_id": "21607", "city": "BARCLAY", "loc": [ -75.860079, 39.129871 ], "pop": 592, "state": "MD" }, { "_id": "21610", "city": "BETTERTON", "loc": [ -76.06393799999999, 39.365509 ], "pop": 485, "state": "MD" }, { "_id": "21612", "city": "BOZMAN", "loc": [ -76.27641, 38.751493 ], "pop": 847, "state": "MD" }, { "_id": "21613", "city": "CAMBRIDGE", "loc": [ -76.08735799999999, 38.564282 ], "pop": 16908, "state": "MD" }, { "_id": "21617", "city": "CENTREVILLE", "loc": [ -76.04497499999999, 39.056423 ], "pop": 5834, "state": "MD" }, { "_id": "21619", "city": "CHESTER", "loc": [ -76.284183, 38.958296 ], "pop": 4199, "state": "MD" }, { "_id": "21620", "city": "CHESTERTOWN", "loc": [ -76.080214, 39.212517 ], "pop": 10618, "state": "MD" }, { "_id": "21622", "city": "CHURCH CREEK", "loc": [ -76.169569, 38.427815 ], "pop": 593, "state": "MD" }, { "_id": "21623", "city": "CHURCH HILL", "loc": [ -75.988028, 39.145958 ], "pop": 813, "state": "MD" }, { "_id": "21625", "city": "CORDOVA", "loc": [ -76.00287899999999, 38.870426 ], "pop": 2346, "state": "MD" }, { "_id": "21626", "city": "CRAPO", "loc": [ -76.11420699999999, 38.329541 ], "pop": 173, "state": "MD" }, { "_id": "21628", "city": "CRUMPTON", "loc": [ -75.919522, 39.233019 ], "pop": 689, "state": "MD" }, { "_id": "21629", "city": "DENTON", "loc": [ -75.836071, 38.877928 ], "pop": 7126, "state": "MD" }, { "_id": "21631", "city": "EAST NEW MARKET", "loc": [ -75.956766, 38.592095 ], "pop": 2156, "state": "MD" }, { "_id": "21632", "city": "FEDERALSBURG", "loc": [ -75.77537599999999, 38.714681 ], "pop": 5535, "state": "MD" }, { "_id": "21634", "city": "FISHING CREEK", "loc": [ -76.21678300000001, 38.316292 ], "pop": 580, "state": "MD" }, { "_id": "21635", "city": "GALENA", "loc": [ -75.871673, 39.337417 ], "pop": 1087, "state": "MD" }, { "_id": "21636", "city": "GOLDSBORO", "loc": [ -75.792604, 39.022957 ], "pop": 1179, "state": "MD" }, { "_id": "21637", "city": "GOLTS", "loc": [ -75.805521, 39.355598 ], "pop": 533, "state": "MD" }, { "_id": "21638", "city": "GRASONVILLE", "loc": [ -76.199701, 38.945602 ], "pop": 3225, "state": "MD" }, { "_id": "21639", "city": "GREENSBORO", "loc": [ -75.80591099999999, 38.961632 ], "pop": 3516, "state": "MD" }, { "_id": "21640", "city": "HENDERSON", "loc": [ -75.794787, 39.067197 ], "pop": 1391, "state": "MD" }, { "_id": "21643", "city": "WILLIAMSBURG", "loc": [ -75.866254, 38.642826 ], "pop": 4625, "state": "MD" }, { "_id": "21644", "city": "INGLESIDE", "loc": [ -75.89174800000001, 39.124654 ], "pop": 159, "state": "MD" }, { "_id": "21645", "city": "KENNEDYVILLE", "loc": [ -75.981797, 39.297835 ], "pop": 1807, "state": "MD" }, { "_id": "21647", "city": "MCDANIEL", "loc": [ -76.280593, 38.819213 ], "pop": 610, "state": "MD" }, { "_id": "21649", "city": "MARYDEL", "loc": [ -75.762247, 39.108169 ], "pop": 1195, "state": "MD" }, { "_id": "21650", "city": "MASSEY", "loc": [ -75.821483, 39.312569 ], "pop": 112, "state": "MD" }, { "_id": "21651", "city": "MILLINGTON", "loc": [ -75.84996599999999, 39.257989 ], "pop": 2003, "state": "MD" }, { "_id": "21654", "city": "OXFORD", "loc": [ -76.153783, 38.686358 ], "pop": 1350, "state": "MD" }, { "_id": "21655", "city": "PRESTON", "loc": [ -75.916284, 38.746456 ], "pop": 4425, "state": "MD" }, { "_id": "21657", "city": "QUEEN ANNE", "loc": [ -75.977655, 38.945583 ], "pop": 1092, "state": "MD" }, { "_id": "21658", "city": "QUEENSTOWN", "loc": [ -76.152646, 38.956235 ], "pop": 3330, "state": "MD" }, { "_id": "21659", "city": "RHODESDALE", "loc": [ -75.774945, 38.602985 ], "pop": 2276, "state": "MD" }, { "_id": "21660", "city": "RIDGELY", "loc": [ -75.88482500000001, 38.956787 ], "pop": 2754, "state": "MD" }, { "_id": "21661", "city": "ROCK HALL", "loc": [ -76.230467, 39.134371 ], "pop": 2770, "state": "MD" }, { "_id": "21662", "city": "ROYAL OAK", "loc": [ -76.187788, 38.72883 ], "pop": 889, "state": "MD" }, { "_id": "21663", "city": "SAINT MICHAELS", "loc": [ -76.221547, 38.782965 ], "pop": 3247, "state": "MD" }, { "_id": "21665", "city": "SHERWOOD", "loc": [ -76.327822, 38.73741 ], "pop": 262, "state": "MD" }, { "_id": "21666", "city": "STEVENSVILLE", "loc": [ -76.337087, 38.939399 ], "pop": 8630, "state": "MD" }, { "_id": "21667", "city": "STILL POND", "loc": [ -76.052156, 39.327624 ], "pop": 289, "state": "MD" }, { "_id": "21668", "city": "SUDLERSVILLE", "loc": [ -75.849968, 39.182339 ], "pop": 2014, "state": "MD" }, { "_id": "21669", "city": "TAYLORS ISLAND", "loc": [ -76.296406, 38.463095 ], "pop": 246, "state": "MD" }, { "_id": "21671", "city": "TILGHMAN", "loc": [ -76.337653, 38.706309 ], "pop": 745, "state": "MD" }, { "_id": "21672", "city": "TODDVILLE", "loc": [ -76.059634, 38.272592 ], "pop": 361, "state": "MD" }, { "_id": "21673", "city": "TRAPPE", "loc": [ -76.05067, 38.66466 ], "pop": 2958, "state": "MD" }, { "_id": "21675", "city": "WINGATE", "loc": [ -76.086303, 38.289898 ], "pop": 160, "state": "MD" }, { "_id": "21676", "city": "WITTMAN", "loc": [ -76.29931000000001, 38.789187 ], "pop": 338, "state": "MD" }, { "_id": "21677", "city": "WOOLFORD", "loc": [ -76.20405700000001, 38.5066 ], "pop": 459, "state": "MD" }, { "_id": "21678", "city": "WORTON", "loc": [ -76.10078, 39.296346 ], "pop": 1680, "state": "MD" }, { "_id": "21679", "city": "WYE MILLS", "loc": [ -76.081366, 38.928114 ], "pop": 270, "state": "MD" }, { "_id": "21701", "city": "LEWISTOWN", "loc": [ -77.400875, 39.408235 ], "pop": 35492, "state": "MD" }, { "_id": "21702", "city": "FORT DETRICK", "loc": [ -77.44736899999999, 39.436532 ], "pop": 33704, "state": "MD" }, { "_id": "21710", "city": "DOUBS", "loc": [ -77.447693, 39.306452 ], "pop": 2085, "state": "MD" }, { "_id": "21711", "city": "BIG POOL", "loc": [ -78.01044899999999, 39.645685 ], "pop": 1083, "state": "MD" }, { "_id": "21713", "city": "FAHRNEY KEEDY ME", "loc": [ -77.683522, 39.532244 ], "pop": 10501, "state": "MD" }, { "_id": "21716", "city": "BRUNSWICK", "loc": [ -77.623002, 39.316356 ], "pop": 5160, "state": "MD" }, { "_id": "21718", "city": "BURKITTSVILLE", "loc": [ -77.626508, 39.397066 ], "pop": 285, "state": "MD" }, { "_id": "21719", "city": "FORT RITCHIE", "loc": [ -77.495609, 39.707341 ], "pop": 2672, "state": "MD" }, { "_id": "21722", "city": "BIG SPRING", "loc": [ -77.912592, 39.661693 ], "pop": 3661, "state": "MD" }, { "_id": "21723", "city": "COOKSVILLE", "loc": [ -77.005076, 39.321109 ], "pop": 353, "state": "MD" }, { "_id": "21725", "city": "DETOUR", "loc": [ -77.248272, 39.614661 ], "pop": 970, "state": "MD" }, { "_id": "21727", "city": "EMMITSBURG", "loc": [ -77.335658, 39.694044 ], "pop": 5095, "state": "MD" }, { "_id": "21733", "city": "FAIR PLAY", "loc": [ -77.76146799999999, 39.542279 ], "pop": 153, "state": "MD" }, { "_id": "21737", "city": "GLENELG", "loc": [ -77.005703, 39.262064 ], "pop": 681, "state": "MD" }, { "_id": "21738", "city": "GLENWOOD", "loc": [ -77.014821, 39.279519 ], "pop": 1632, "state": "MD" }, { "_id": "21740", "city": "HAGERSTOWN", "loc": [ -77.73721500000001, 39.632022 ], "pop": 47679, "state": "MD" }, { "_id": "21742", "city": "HAGERSTOWN", "loc": [ -77.69210200000001, 39.657291 ], "pop": 28398, "state": "MD" }, { "_id": "21750", "city": "HANCOCK", "loc": [ -78.17624600000001, 39.699083 ], "pop": 4275, "state": "MD" }, { "_id": "21754", "city": "IJAMSVILLE", "loc": [ -77.296363, 39.326737 ], "pop": 4078, "state": "MD" }, { "_id": "21755", "city": "JEFFERSON", "loc": [ -77.544061, 39.365291 ], "pop": 4132, "state": "MD" }, { "_id": "21756", "city": "KEEDYSVILLE", "loc": [ -77.694427, 39.456323 ], "pop": 2546, "state": "MD" }, { "_id": "21757", "city": "KEYMAR", "loc": [ -77.281661, 39.565619 ], "pop": 1691, "state": "MD" }, { "_id": "21758", "city": "KNOXVILLE", "loc": [ -77.651286, 39.347891 ], "pop": 3534, "state": "MD" }, { "_id": "21764", "city": "LINWOOD", "loc": [ -77.118443, 39.577654 ], "pop": 591, "state": "MD" }, { "_id": "21766", "city": "LITTLE ORLEANS", "loc": [ -78.378139, 39.687593 ], "pop": 699, "state": "MD" }, { "_id": "21767", "city": "MAUGANSVILLE", "loc": [ -77.749915, 39.6996 ], "pop": 598, "state": "MD" }, { "_id": "21769", "city": "MIDDLETOWN", "loc": [ -77.550241, 39.441586 ], "pop": 8732, "state": "MD" }, { "_id": "21770", "city": "MONROVIA", "loc": [ -77.249442, 39.351248 ], "pop": 5033, "state": "MD" }, { "_id": "21771", "city": "MOUNT AIRY", "loc": [ -77.172347, 39.388131 ], "pop": 21912, "state": "MD" }, { "_id": "21773", "city": "MYERSVILLE", "loc": [ -77.551322, 39.528194 ], "pop": 3363, "state": "MD" }, { "_id": "21776", "city": "NEW WINDSOR", "loc": [ -77.103397, 39.516233 ], "pop": 4576, "state": "MD" }, { "_id": "21777", "city": "POINT OF ROCKS", "loc": [ -77.53276200000001, 39.279089 ], "pop": 812, "state": "MD" }, { "_id": "21778", "city": "ROCKY RIDGE", "loc": [ -77.329635, 39.605696 ], "pop": 988, "state": "MD" }, { "_id": "21779", "city": "ROHRERSVILLE", "loc": [ -77.657977, 39.443052 ], "pop": 200, "state": "MD" }, { "_id": "21780", "city": "SABILLASVILLE", "loc": [ -77.469323, 39.682772 ], "pop": 1605, "state": "MD" }, { "_id": "21782", "city": "SHARPSBURG", "loc": [ -77.75107199999999, 39.442394 ], "pop": 3624, "state": "MD" }, { "_id": "21783", "city": "SMITHSBURG", "loc": [ -77.57056300000001, 39.647036 ], "pop": 6857, "state": "MD" }, { "_id": "21784", "city": "CARROLLTOWNE", "loc": [ -76.961439, 39.39887 ], "pop": 28493, "state": "MD" }, { "_id": "21787", "city": "TANEYTOWN", "loc": [ -77.16905800000001, 39.665798 ], "pop": 7612, "state": "MD" }, { "_id": "21788", "city": "GRACEHAM", "loc": [ -77.405114, 39.606576 ], "pop": 8929, "state": "MD" }, { "_id": "21790", "city": "TUSCARORA", "loc": [ -77.51011, 39.266689 ], "pop": 134, "state": "MD" }, { "_id": "21791", "city": "UNIONVILLE", "loc": [ -77.194346, 39.541484 ], "pop": 3942, "state": "MD" }, { "_id": "21793", "city": "WALKERSVILLE", "loc": [ -77.34838999999999, 39.47875 ], "pop": 8957, "state": "MD" }, { "_id": "21794", "city": "WEST FRIENDSHIP", "loc": [ -76.966031, 39.293447 ], "pop": 937, "state": "MD" }, { "_id": "21795", "city": "WILLIAMSPORT", "loc": [ -77.808705, 39.593023 ], "pop": 8739, "state": "MD" }, { "_id": "21797", "city": "WOODBINE", "loc": [ -77.06469800000001, 39.346438 ], "pop": 6224, "state": "MD" }, { "_id": "21798", "city": "WOODSBORO", "loc": [ -77.29718699999999, 39.531121 ], "pop": 1771, "state": "MD" }, { "_id": "21801", "city": "SALISBURY", "loc": [ -75.59223799999999, 38.362996 ], "pop": 52905, "state": "MD" }, { "_id": "21811", "city": "BERLIN", "loc": [ -75.18655699999999, 38.347514 ], "pop": 11613, "state": "MD" }, { "_id": "21813", "city": "BISHOPVILLE", "loc": [ -75.18554399999999, 38.429609 ], "pop": 1902, "state": "MD" }, { "_id": "21814", "city": "BIVALVE", "loc": [ -75.89140999999999, 38.295337 ], "pop": 307, "state": "MD" }, { "_id": "21816", "city": "CHANCE", "loc": [ -75.93919200000001, 38.178504 ], "pop": 415, "state": "MD" }, { "_id": "21817", "city": "CRISFIELD", "loc": [ -75.842882, 37.984496 ], "pop": 5342, "state": "MD" }, { "_id": "21820", "city": "DAMES QUARTER", "loc": [ -75.900082, 38.190568 ], "pop": 192, "state": "MD" }, { "_id": "21821", "city": "DEAL ISLAND", "loc": [ -75.94955899999999, 38.153326 ], "pop": 259, "state": "MD" }, { "_id": "21822", "city": "EDEN", "loc": [ -75.648167, 38.276155 ], "pop": 1042, "state": "MD" }, { "_id": "21824", "city": "EWELL", "loc": [ -76.03506, 37.99379 ], "pop": 252, "state": "MD" }, { "_id": "21826", "city": "FRUITLAND", "loc": [ -75.622782, 38.322523 ], "pop": 3771, "state": "MD" }, { "_id": "21829", "city": "GIRDLETREE", "loc": [ -75.390232, 38.095815 ], "pop": 495, "state": "MD" }, { "_id": "21830", "city": "HEBRON", "loc": [ -75.69626700000001, 38.402597 ], "pop": 2415, "state": "MD" }, { "_id": "21835", "city": "LINKWOOD", "loc": [ -75.963015, 38.540317 ], "pop": 576, "state": "MD" }, { "_id": "21837", "city": "MARDELA SPRINGS", "loc": [ -75.74144200000001, 38.486386 ], "pop": 3039, "state": "MD" }, { "_id": "21838", "city": "MARION STATION", "loc": [ -75.757903, 38.026637 ], "pop": 2323, "state": "MD" }, { "_id": "21840", "city": "NANTICOKE", "loc": [ -75.90212699999999, 38.267211 ], "pop": 358, "state": "MD" }, { "_id": "21841", "city": "NEWARK", "loc": [ -75.289316, 38.248875 ], "pop": 765, "state": "MD" }, { "_id": "21842", "city": "OCEAN CITY", "loc": [ -75.081011, 38.379248 ], "pop": 6914, "state": "MD" }, { "_id": "21849", "city": "PARSONSBURG", "loc": [ -75.473658, 38.391392 ], "pop": 2407, "state": "MD" }, { "_id": "21850", "city": "PITTSVILLE", "loc": [ -75.407589, 38.375465 ], "pop": 1997, "state": "MD" }, { "_id": "21851", "city": "POCOMOKE CITY", "loc": [ -75.555038, 38.071369 ], "pop": 7527, "state": "MD" }, { "_id": "21853", "city": "PRINCESS ANNE", "loc": [ -75.70723700000001, 38.191929 ], "pop": 10343, "state": "MD" }, { "_id": "21856", "city": "QUANTICO", "loc": [ -75.78510199999999, 38.333888 ], "pop": 1029, "state": "MD" }, { "_id": "21863", "city": "SNOW HILL", "loc": [ -75.40498700000001, 38.186794 ], "pop": 5195, "state": "MD" }, { "_id": "21864", "city": "STOCKTON", "loc": [ -75.41076200000001, 38.045155 ], "pop": 691, "state": "MD" }, { "_id": "21865", "city": "TYASKIN", "loc": [ -75.869032, 38.30706 ], "pop": 504, "state": "MD" }, { "_id": "21866", "city": "TYLERTON", "loc": [ -76.023036, 37.967436 ], "pop": 112, "state": "MD" }, { "_id": "21869", "city": "VIENNA", "loc": [ -75.87292600000001, 38.477376 ], "pop": 1119, "state": "MD" }, { "_id": "21870", "city": "WENONA", "loc": [ -75.94402100000001, 38.133222 ], "pop": 358, "state": "MD" }, { "_id": "21871", "city": "WESTOVER", "loc": [ -75.74056299999999, 38.10099 ], "pop": 1881, "state": "MD" }, { "_id": "21872", "city": "WHALEYSVILLE", "loc": [ -75.28886799999999, 38.404169 ], "pop": 758, "state": "MD" }, { "_id": "21874", "city": "WILLARDS", "loc": [ -75.355161, 38.393853 ], "pop": 1895, "state": "MD" }, { "_id": "21875", "city": "DELMAR", "loc": [ -75.55828, 38.44451 ], "pop": 3712, "state": "MD" }, { "_id": "21901", "city": "NORTH EAST", "loc": [ -75.953805, 39.604535 ], "pop": 10560, "state": "MD" }, { "_id": "21903", "city": "PERRYVILLE", "loc": [ -76.05922700000001, 39.564894 ], "pop": 4678, "state": "MD" }, { "_id": "21904", "city": "BAINBRIDGE", "loc": [ -76.08370600000001, 39.622264 ], "pop": 5507, "state": "MD" }, { "_id": "21911", "city": "RISING SUN", "loc": [ -76.049164, 39.688176 ], "pop": 7798, "state": "MD" }, { "_id": "21912", "city": "WARWICK", "loc": [ -75.799592, 39.428261 ], "pop": 745, "state": "MD" }, { "_id": "21913", "city": "CECILTON", "loc": [ -75.86539500000001, 39.40151 ], "pop": 611, "state": "MD" }, { "_id": "21914", "city": "CHARLESTOWN", "loc": [ -75.97953699999999, 39.57287 ], "pop": 638, "state": "MD" }, { "_id": "21915", "city": "CHESAPEAKE CITY", "loc": [ -75.840581, 39.513308 ], "pop": 2823, "state": "MD" }, { "_id": "21917", "city": "COLORA", "loc": [ -76.09336399999999, 39.669515 ], "pop": 1868, "state": "MD" }, { "_id": "21918", "city": "CONOWINGO", "loc": [ -76.15719799999999, 39.67775 ], "pop": 3025, "state": "MD" }, { "_id": "21919", "city": "EARLEVILLE", "loc": [ -75.94031, 39.427105 ], "pop": 2196, "state": "MD" }, { "_id": "21921", "city": "ELKTON", "loc": [ -75.84584, 39.626434 ], "pop": 30901, "state": "MD" }, { "_id": "22001", "city": "ALDIE", "loc": [ -77.602281, 38.957878 ], "pop": 1574, "state": "VA" }, { "_id": "22002", "city": "AMISSVILLE", "loc": [ -78.038053, 38.710055 ], "pop": 1581, "state": "VA" }, { "_id": "22003", "city": "ANNANDALE", "loc": [ -77.21424500000001, 38.830699 ], "pop": 50054, "state": "VA" }, { "_id": "22010", "city": "ARCOLA", "loc": [ -77.538721, 38.973626 ], "pop": 61, "state": "VA" }, { "_id": "22011", "city": "ASHBURN", "loc": [ -77.48061199999999, 39.039918 ], "pop": 3979, "state": "VA" }, { "_id": "22012", "city": "BLUEMONT", "loc": [ -77.831416, 39.097732 ], "pop": 557, "state": "VA" }, { "_id": "22013", "city": "BRISTOW", "loc": [ -77.57884300000001, 38.74644 ], "pop": 1568, "state": "VA" }, { "_id": "22014", "city": "BROAD RUN", "loc": [ -77.68611, 38.828653 ], "pop": 344, "state": "VA" }, { "_id": "22015", "city": "BURKE", "loc": [ -77.28175, 38.789408 ], "pop": 41783, "state": "VA" }, { "_id": "22018", "city": "CATHARPIN", "loc": [ -77.561155, 38.853007 ], "pop": 647, "state": "VA" }, { "_id": "22019", "city": "CATLETT", "loc": [ -77.653548, 38.635067 ], "pop": 4180, "state": "VA" }, { "_id": "22020", "city": "CENTREVILLE", "loc": [ -77.45117500000001, 38.841805 ], "pop": 33039, "state": "VA" }, { "_id": "22021", "city": "CHANTILLY", "loc": [ -77.435436, 38.884131 ], "pop": 14835, "state": "VA" }, { "_id": "22024", "city": "CLIFTON", "loc": [ -77.406955, 38.800662 ], "pop": 9554, "state": "VA" }, { "_id": "22025", "city": "DELAPLANE", "loc": [ -77.930176, 38.911293 ], "pop": 916, "state": "VA" }, { "_id": "22026", "city": "DUMFRIES", "loc": [ -77.33870400000001, 38.602344 ], "pop": 17563, "state": "VA" }, { "_id": "22027", "city": "DUNN LORING", "loc": [ -77.221351, 38.895368 ], "pop": 1084, "state": "VA" }, { "_id": "22030", "city": "FAIRFAX", "loc": [ -77.324151, 38.845826 ], "pop": 32754, "state": "VA" }, { "_id": "22031", "city": "FAIRFAX", "loc": [ -77.264937, 38.860353 ], "pop": 22035, "state": "VA" }, { "_id": "22032", "city": "FAIRFAX", "loc": [ -77.29252700000001, 38.817729 ], "pop": 29971, "state": "VA" }, { "_id": "22033", "city": "FAIRFAX", "loc": [ -77.388451, 38.877627 ], "pop": 20873, "state": "VA" }, { "_id": "22039", "city": "FAIRFAX STATION", "loc": [ -77.306388, 38.760205 ], "pop": 14491, "state": "VA" }, { "_id": "22041", "city": "BAILEYS CROSSROA", "loc": [ -77.136928, 38.848506 ], "pop": 21801, "state": "VA" }, { "_id": "22042", "city": "MOSBY", "loc": [ -77.19227100000001, 38.866272 ], "pop": 28441, "state": "VA" }, { "_id": "22043", "city": "PIMMIT", "loc": [ -77.20005, 38.901226 ], "pop": 20928, "state": "VA" }, { "_id": "22044", "city": "SEVEN CORNERS", "loc": [ -77.150819, 38.863544 ], "pop": 10100, "state": "VA" }, { "_id": "22046", "city": "FALLS CHURCH", "loc": [ -77.18023100000001, 38.88559 ], "pop": 14864, "state": "VA" }, { "_id": "22060", "city": "FORT BELVOIR", "loc": [ -77.143315, 38.694699 ], "pop": 6013, "state": "VA" }, { "_id": "22065", "city": "GAINESVILLE", "loc": [ -77.618673, 38.823192 ], "pop": 3929, "state": "VA" }, { "_id": "22066", "city": "GREAT FALLS", "loc": [ -77.30828700000001, 39.003893 ], "pop": 13542, "state": "VA" }, { "_id": "22068", "city": "HAMILTON", "loc": [ -77.663538, 39.135741 ], "pop": 2821, "state": "VA" }, { "_id": "22069", "city": "HAYMARKET", "loc": [ -77.647485, 38.876234 ], "pop": 5103, "state": "VA" }, { "_id": "22070", "city": "HERNDON", "loc": [ -77.386573, 38.977833 ], "pop": 30669, "state": "VA" }, { "_id": "22071", "city": "HERNDON", "loc": [ -77.395155, 38.919537 ], "pop": 21490, "state": "VA" }, { "_id": "22075", "city": "LEESBURG", "loc": [ -77.565918, 39.116517 ], "pop": 21011, "state": "VA" }, { "_id": "22079", "city": "MASON NECK", "loc": [ -77.21800399999999, 38.704716 ], "pop": 17438, "state": "VA" }, { "_id": "22080", "city": "LOVETTSVILLE", "loc": [ -77.639144, 39.265367 ], "pop": 3631, "state": "VA" }, { "_id": "22090", "city": "LAKE ANNE", "loc": [ -77.33760700000001, 38.964439 ], "pop": 12710, "state": "VA" }, { "_id": "22091", "city": "RESTON", "loc": [ -77.35144, 38.935007 ], "pop": 28381, "state": "VA" }, { "_id": "22094", "city": "RESTON", "loc": [ -77.350757, 38.975627 ], "pop": 5491, "state": "VA" }, { "_id": "22101", "city": "MC LEAN", "loc": [ -77.17062799999999, 38.932624 ], "pop": 27236, "state": "VA" }, { "_id": "22102", "city": "WEST MCLEAN", "loc": [ -77.221934, 38.936318 ], "pop": 15809, "state": "VA" }, { "_id": "22110", "city": "MANASSAS", "loc": [ -77.489474, 38.768922 ], "pop": 50680, "state": "VA" }, { "_id": "22111", "city": "MANASSAS PARK", "loc": [ -77.44568, 38.736143 ], "pop": 32739, "state": "VA" }, { "_id": "22115", "city": "MARSHALL", "loc": [ -77.887567, 38.831584 ], "pop": 5195, "state": "VA" }, { "_id": "22117", "city": "MIDDLEBURG", "loc": [ -77.735511, 38.996438 ], "pop": 2908, "state": "VA" }, { "_id": "22123", "city": "NOKESVILLE", "loc": [ -77.534249, 38.685015 ], "pop": 6729, "state": "VA" }, { "_id": "22124", "city": "OAKTON", "loc": [ -77.323345, 38.885187 ], "pop": 13019, "state": "VA" }, { "_id": "22129", "city": "PAEONIAN SPRINGS", "loc": [ -77.619845, 39.159792 ], "pop": 488, "state": "VA" }, { "_id": "22130", "city": "PARIS", "loc": [ -77.893855, 38.989926 ], "pop": 317, "state": "VA" }, { "_id": "22132", "city": "HILLSBORO", "loc": [ -77.721305, 39.150484 ], "pop": 5373, "state": "VA" }, { "_id": "22134", "city": "QUANTICO", "loc": [ -77.335819, 38.531039 ], "pop": 9039, "state": "VA" }, { "_id": "22141", "city": "ROUND HILL", "loc": [ -77.783305, 39.113378 ], "pop": 1926, "state": "VA" }, { "_id": "22150", "city": "SPRINGFIELD", "loc": [ -77.186582, 38.779718 ], "pop": 16811, "state": "VA" }, { "_id": "22151", "city": "NORTH SPRINGFIEL", "loc": [ -77.213908, 38.803323 ], "pop": 15979, "state": "VA" }, { "_id": "22152", "city": "WEST SPRINGFIELD", "loc": [ -77.233243, 38.776488 ], "pop": 26803, "state": "VA" }, { "_id": "22153", "city": "SPRINGFIELD", "loc": [ -77.237026, 38.744859 ], "pop": 32161, "state": "VA" }, { "_id": "22170", "city": "STERLING", "loc": [ -77.398624, 39.02147 ], "pop": 38891, "state": "VA" }, { "_id": "22171", "city": "THE PLAINS", "loc": [ -77.772092, 38.87393 ], "pop": 2071, "state": "VA" }, { "_id": "22172", "city": "TRIANGLE", "loc": [ -77.32287700000001, 38.550894 ], "pop": 5181, "state": "VA" }, { "_id": "22176", "city": "UPPERVILLE", "loc": [ -77.848438, 39.008747 ], "pop": 755, "state": "VA" }, { "_id": "22180", "city": "VIENNA", "loc": [ -77.253219, 38.893527 ], "pop": 20795, "state": "VA" }, { "_id": "22181", "city": "VIENNA", "loc": [ -77.288048, 38.897695 ], "pop": 12462, "state": "VA" }, { "_id": "22182", "city": "VIENNA", "loc": [ -77.264876, 38.928005 ], "pop": 19121, "state": "VA" }, { "_id": "22186", "city": "AIRLIE", "loc": [ -77.764809, 38.72593 ], "pop": 24248, "state": "VA" }, { "_id": "22190", "city": "WATERFORD", "loc": [ -77.642134, 39.208102 ], "pop": 264, "state": "VA" }, { "_id": "22191", "city": "WOODBRIDGE", "loc": [ -77.268264, 38.635573 ], "pop": 30657, "state": "VA" }, { "_id": "22192", "city": "LAKERIDGE", "loc": [ -77.305221, 38.68328 ], "pop": 38960, "state": "VA" }, { "_id": "22193", "city": "DALE CITY", "loc": [ -77.343238, 38.647188 ], "pop": 47213, "state": "VA" }, { "_id": "22201", "city": "ARLINGTON", "loc": [ -77.093197, 38.887103 ], "pop": 22034, "state": "VA" }, { "_id": "22202", "city": "ARLINGTON", "loc": [ -77.059228, 38.856547 ], "pop": 17453, "state": "VA" }, { "_id": "22203", "city": "ARLINGTON", "loc": [ -77.11419100000001, 38.873799 ], "pop": 14553, "state": "VA" }, { "_id": "22204", "city": "ARLINGTON", "loc": [ -77.099688, 38.858962 ], "pop": 41844, "state": "VA" }, { "_id": "22205", "city": "ARLINGTON", "loc": [ -77.139488, 38.883557 ], "pop": 15285, "state": "VA" }, { "_id": "22206", "city": "ARLINGTON", "loc": [ -77.09045999999999, 38.841508 ], "pop": 17628, "state": "VA" }, { "_id": "22207", "city": "ARLINGTON", "loc": [ -77.126287, 38.903321 ], "pop": 27999, "state": "VA" }, { "_id": "22209", "city": "ARLINGTON", "loc": [ -77.07531, 38.8926 ], "pop": 10118, "state": "VA" }, { "_id": "22211", "city": "ARLINGTON", "loc": [ -77.080258, 38.8795 ], "pop": 2432, "state": "VA" }, { "_id": "22213", "city": "ARLINGTON", "loc": [ -77.16329500000001, 38.895375 ], "pop": 2095, "state": "VA" }, { "_id": "22301", "city": "ALEXANDRIA", "loc": [ -77.05890100000001, 38.820042 ], "pop": 12109, "state": "VA" }, { "_id": "22302", "city": "ALEXANDRIA", "loc": [ -77.092412, 38.83354 ], "pop": 17021, "state": "VA" }, { "_id": "22303", "city": "JEFFERSON MANOR", "loc": [ -77.07660799999999, 38.791143 ], "pop": 12662, "state": "VA" }, { "_id": "22304", "city": "ALEXANDRIA", "loc": [ -77.12098899999999, 38.814871 ], "pop": 33747, "state": "VA" }, { "_id": "22305", "city": "ALEXANDRIA", "loc": [ -77.06403899999999, 38.837184 ], "pop": 13514, "state": "VA" }, { "_id": "22306", "city": "COMMUNITY", "loc": [ -77.08538900000001, 38.755769 ], "pop": 24374, "state": "VA" }, { "_id": "22307", "city": "BELLE VIEW", "loc": [ -77.062511, 38.77056 ], "pop": 9821, "state": "VA" }, { "_id": "22308", "city": "WELLINGTON", "loc": [ -77.06063899999999, 38.729122 ], "pop": 12023, "state": "VA" }, { "_id": "22309", "city": "ENGLESIDE", "loc": [ -77.10813899999999, 38.727855 ], "pop": 27479, "state": "VA" }, { "_id": "22310", "city": "FRANCONIA", "loc": [ -77.13170700000001, 38.769132 ], "pop": 39438, "state": "VA" }, { "_id": "22311", "city": "ALEXANDRIA", "loc": [ -77.119962, 38.832039 ], "pop": 11388, "state": "VA" }, { "_id": "22312", "city": "ALEXANDRIA", "loc": [ -77.148438, 38.819099 ], "pop": 23848, "state": "VA" }, { "_id": "22314", "city": "ALEXANDRIA", "loc": [ -77.05286700000001, 38.806018 ], "pop": 20606, "state": "VA" }, { "_id": "22401", "city": "FREDERICKSBURG", "loc": [ -77.477152, 38.299538 ], "pop": 19027, "state": "VA" }, { "_id": "22405", "city": "FALMOUTH", "loc": [ -77.404537, 38.314557 ], "pop": 20039, "state": "VA" }, { "_id": "22406", "city": "FREDERICKSBURG", "loc": [ -77.534892, 38.379627 ], "pop": 7583, "state": "VA" }, { "_id": "22407", "city": "FREDERICKSBURG", "loc": [ -77.547584, 38.268803 ], "pop": 27852, "state": "VA" }, { "_id": "22408", "city": "FREDERICKSBURG", "loc": [ -77.468068, 38.248141 ], "pop": 9433, "state": "VA" }, { "_id": "22427", "city": "BOWLING GREEN", "loc": [ -77.18024200000001, 38.013651 ], "pop": 559, "state": "VA" }, { "_id": "22432", "city": "BURGESS", "loc": [ -76.354164, 37.868682 ], "pop": 478, "state": "VA" }, { "_id": "22433", "city": "BURR HILL", "loc": [ -77.876166, 38.365841 ], "pop": 121, "state": "VA" }, { "_id": "22435", "city": "CALLAO", "loc": [ -76.573245, 37.977268 ], "pop": 1808, "state": "VA" }, { "_id": "22436", "city": "CARET", "loc": [ -76.915254, 37.971255 ], "pop": 675, "state": "VA" }, { "_id": "22437", "city": "CENTER CROSS", "loc": [ -76.75483699999999, 37.792875 ], "pop": 408, "state": "VA" }, { "_id": "22438", "city": "CHAMPLAIN", "loc": [ -76.971942, 38.021422 ], "pop": 187, "state": "VA" }, { "_id": "22439", "city": "CHANCE", "loc": [ -77.021051, 38.084061 ], "pop": 45, "state": "VA" }, { "_id": "22443", "city": "OAK GROVE", "loc": [ -76.98115799999999, 38.229076 ], "pop": 6864, "state": "VA" }, { "_id": "22448", "city": "DAHLGREN", "loc": [ -77.042905, 38.337485 ], "pop": 1509, "state": "VA" }, { "_id": "22454", "city": "HOWERTONS", "loc": [ -76.837022, 37.840429 ], "pop": 1795, "state": "VA" }, { "_id": "22460", "city": "FARNHAM", "loc": [ -76.605011, 37.873972 ], "pop": 1356, "state": "VA" }, { "_id": "22469", "city": "HAGUE", "loc": [ -76.661574, 38.057289 ], "pop": 2243, "state": "VA" }, { "_id": "22473", "city": "HEATHSVILLE", "loc": [ -76.41783, 37.907187 ], "pop": 2670, "state": "VA" }, { "_id": "22476", "city": "HUSTLE", "loc": [ -77.03642600000001, 38.022219 ], "pop": 782, "state": "VA" }, { "_id": "22480", "city": "IRVINGTON", "loc": [ -76.416016, 37.664516 ], "pop": 717, "state": "VA" }, { "_id": "22482", "city": "KILMARNOCK", "loc": [ -76.381986, 37.716222 ], "pop": 1436, "state": "VA" }, { "_id": "22485", "city": "KING GEORGE", "loc": [ -77.126023, 38.281142 ], "pop": 9088, "state": "VA" }, { "_id": "22488", "city": "KINSALE", "loc": [ -76.585525, 38.050472 ], "pop": 1537, "state": "VA" }, { "_id": "22503", "city": "LANCASTER", "loc": [ -76.5102, 37.750091 ], "pop": 4140, "state": "VA" }, { "_id": "22504", "city": "LANEVIEW", "loc": [ -76.711732, 37.768138 ], "pop": 179, "state": "VA" }, { "_id": "22508", "city": "LOCUST GROVE", "loc": [ -77.77087400000001, 38.335202 ], "pop": 4357, "state": "VA" }, { "_id": "22509", "city": "LORETTO", "loc": [ -76.966888, 38.062055 ], "pop": 38, "state": "VA" }, { "_id": "22511", "city": "LOTTSBURG", "loc": [ -76.501763, 37.979228 ], "pop": 1250, "state": "VA" }, { "_id": "22514", "city": "MILFORD", "loc": [ -77.31849800000001, 38.005834 ], "pop": 3385, "state": "VA" }, { "_id": "22520", "city": "MONTROSS", "loc": [ -76.78280599999999, 38.110483 ], "pop": 4836, "state": "VA" }, { "_id": "22534", "city": "PARTLOW", "loc": [ -77.658574, 38.064146 ], "pop": 2057, "state": "VA" }, { "_id": "22535", "city": "PORT ROYAL", "loc": [ -77.183657, 38.162088 ], "pop": 421, "state": "VA" }, { "_id": "22538", "city": "RAPPAHANNOCK ACA", "loc": [ -77.287437, 38.201817 ], "pop": 637, "state": "VA" }, { "_id": "22539", "city": "REEDVILLE", "loc": [ -76.282864, 37.856964 ], "pop": 2037, "state": "VA" }, { "_id": "22542", "city": "RHOADESVILLE", "loc": [ -77.923044, 38.286324 ], "pop": 1072, "state": "VA" }, { "_id": "22546", "city": "RUTHER GLEN", "loc": [ -77.47135, 37.945059 ], "pop": 7242, "state": "VA" }, { "_id": "22553", "city": "SNELL", "loc": [ -77.64868800000001, 38.19953 ], "pop": 17034, "state": "VA" }, { "_id": "22554", "city": "STAFFORD", "loc": [ -77.430618, 38.458629 ], "pop": 36544, "state": "VA" }, { "_id": "22559", "city": "SUPPLY", "loc": [ -77.109689, 38.082544 ], "pop": 387, "state": "VA" }, { "_id": "22560", "city": "TAPPAHANNOCK", "loc": [ -76.91245499999999, 37.914551 ], "pop": 4270, "state": "VA" }, { "_id": "22567", "city": "UNIONVILLE", "loc": [ -77.919299, 38.238302 ], "pop": 1754, "state": "VA" }, { "_id": "22568", "city": "MINE RUN", "loc": [ -77.81949299999999, 38.266106 ], "pop": 314, "state": "VA" }, { "_id": "22572", "city": "NOMINI GROVE", "loc": [ -76.73651700000001, 37.949992 ], "pop": 5917, "state": "VA" }, { "_id": "22576", "city": "WEEMS", "loc": [ -76.43132300000001, 37.684678 ], "pop": 2125, "state": "VA" }, { "_id": "22578", "city": "WINDMILL POINT", "loc": [ -76.36862600000001, 37.647458 ], "pop": 2474, "state": "VA" }, { "_id": "22579", "city": "WICOMICO CHURCH", "loc": [ -76.356522, 37.779027 ], "pop": 2285, "state": "VA" }, { "_id": "22580", "city": "WOODFORD", "loc": [ -77.439879, 38.084664 ], "pop": 6047, "state": "VA" }, { "_id": "22601", "city": "WINCHESTER", "loc": [ -78.182697, 39.185803 ], "pop": 45537, "state": "VA" }, { "_id": "22610", "city": "BROWNTOWN", "loc": [ -78.279111, 38.827272 ], "pop": 1522, "state": "VA" }, { "_id": "22611", "city": "BERRYVILLE", "loc": [ -77.96875900000001, 39.153178 ], "pop": 8339, "state": "VA" }, { "_id": "22620", "city": "BOYCE", "loc": [ -78.020302, 39.069797 ], "pop": 2984, "state": "VA" }, { "_id": "22624", "city": "CLEAR BROOK", "loc": [ -78.098788, 39.265461 ], "pop": 2656, "state": "VA" }, { "_id": "22625", "city": "WHITACRE", "loc": [ -78.299724, 39.3762 ], "pop": 1229, "state": "VA" }, { "_id": "22627", "city": "FLINT HILL", "loc": [ -78.075558, 38.733653 ], "pop": 276, "state": "VA" }, { "_id": "22630", "city": "FRONT ROYAL", "loc": [ -78.17961699999999, 38.926783 ], "pop": 22951, "state": "VA" }, { "_id": "22637", "city": "GORE", "loc": [ -78.34168699999999, 39.288685 ], "pop": 2000, "state": "VA" }, { "_id": "22639", "city": "HUME", "loc": [ -77.99489199999999, 38.827318 ], "pop": 517, "state": "VA" }, { "_id": "22640", "city": "HUNTLY", "loc": [ -78.130104, 38.813333 ], "pop": 782, "state": "VA" }, { "_id": "22641", "city": "LEBANON CHURCH", "loc": [ -78.359511, 39.056242 ], "pop": 1075, "state": "VA" }, { "_id": "22642", "city": "LINDEN", "loc": [ -78.047847, 38.881181 ], "pop": 352, "state": "VA" }, { "_id": "22643", "city": "MARKHAM", "loc": [ -77.994252, 38.930001 ], "pop": 429, "state": "VA" }, { "_id": "22644", "city": "MAURERTOWN", "loc": [ -78.46581500000001, 38.944052 ], "pop": 1483, "state": "VA" }, { "_id": "22645", "city": "MIDDLETOWN", "loc": [ -78.28145499999999, 39.036676 ], "pop": 2239, "state": "VA" }, { "_id": "22649", "city": "RELIANCE", "loc": [ -78.249152, 39.000946 ], "pop": 145, "state": "VA" }, { "_id": "22650", "city": "RILEYVILLE", "loc": [ -78.387326, 38.756374 ], "pop": 997, "state": "VA" }, { "_id": "22652", "city": "SAINT DAVIDS CHU", "loc": [ -78.439989, 38.827683 ], "pop": 1004, "state": "VA" }, { "_id": "22654", "city": "STAR TANNERY", "loc": [ -78.43430600000001, 39.090803 ], "pop": 332, "state": "VA" }, { "_id": "22655", "city": "STEPHENS CITY", "loc": [ -78.19067699999999, 39.083415 ], "pop": 10954, "state": "VA" }, { "_id": "22656", "city": "STEPHENSON", "loc": [ -78.094105, 39.197285 ], "pop": 2721, "state": "VA" }, { "_id": "22657", "city": "STRASBURG", "loc": [ -78.33862000000001, 38.988417 ], "pop": 5756, "state": "VA" }, { "_id": "22660", "city": "TOMS BROOK", "loc": [ -78.403757, 38.97016 ], "pop": 2796, "state": "VA" }, { "_id": "22663", "city": "WHITE POST", "loc": [ -78.11046, 39.057956 ], "pop": 778, "state": "VA" }, { "_id": "22664", "city": "WOODSTOCK", "loc": [ -78.521704, 38.887024 ], "pop": 6899, "state": "VA" }, { "_id": "22701", "city": "RACCOON FORD", "loc": [ -78.00406, 38.48115 ], "pop": 21359, "state": "VA" }, { "_id": "22709", "city": "ARODA", "loc": [ -78.236615, 38.325626 ], "pop": 1509, "state": "VA" }, { "_id": "22712", "city": "MORRISVILLE", "loc": [ -77.800436, 38.569667 ], "pop": 3863, "state": "VA" }, { "_id": "22713", "city": "BOSTON", "loc": [ -78.142285, 38.538241 ], "pop": 557, "state": "VA" }, { "_id": "22714", "city": "BRANDY STATION", "loc": [ -77.903745, 38.511003 ], "pop": 721, "state": "VA" }, { "_id": "22715", "city": "BRIGHTWOOD", "loc": [ -78.16980100000001, 38.411365 ], "pop": 1048, "state": "VA" }, { "_id": "22716", "city": "CASTLETON", "loc": [ -78.120801, 38.603235 ], "pop": 536, "state": "VA" }, { "_id": "22718", "city": "ELKWOOD", "loc": [ -77.817031, 38.465229 ], "pop": 414, "state": "VA" }, { "_id": "22719", "city": "ETLAN", "loc": [ -78.26379300000001, 38.509458 ], "pop": 167, "state": "VA" }, { "_id": "22720", "city": "GOLDVEIN", "loc": [ -77.639488, 38.488641 ], "pop": 1154, "state": "VA" }, { "_id": "22722", "city": "HAYWOOD", "loc": [ -78.179759, 38.46861 ], "pop": 139, "state": "VA" }, { "_id": "22724", "city": "JEFFERSONTON", "loc": [ -77.906943, 38.625578 ], "pop": 1000, "state": "VA" }, { "_id": "22725", "city": "LEON", "loc": [ -78.154579, 38.45724 ], "pop": 109, "state": "VA" }, { "_id": "22726", "city": "LIGNUM", "loc": [ -77.82995699999999, 38.395625 ], "pop": 176, "state": "VA" }, { "_id": "22727", "city": "AYLOR", "loc": [ -78.296458, 38.384495 ], "pop": 4344, "state": "VA" }, { "_id": "22728", "city": "MIDLAND", "loc": [ -77.712709, 38.567061 ], "pop": 1847, "state": "VA" }, { "_id": "22729", "city": "MITCHELLS", "loc": [ -78.01054600000001, 38.374429 ], "pop": 39, "state": "VA" }, { "_id": "22731", "city": "PRATTS", "loc": [ -78.272212, 38.349207 ], "pop": 88, "state": "VA" }, { "_id": "22732", "city": "RADIANT", "loc": [ -78.179799, 38.322706 ], "pop": 756, "state": "VA" }, { "_id": "22733", "city": "RAPIDAN", "loc": [ -78.047607, 38.339217 ], "pop": 1216, "state": "VA" }, { "_id": "22734", "city": "REMINGTON", "loc": [ -77.761365, 38.535091 ], "pop": 2377, "state": "VA" }, { "_id": "22735", "city": "REVA", "loc": [ -78.157195, 38.460446 ], "pop": 2134, "state": "VA" }, { "_id": "22736", "city": "RICHARDSVILLE", "loc": [ -77.71951900000001, 38.392388 ], "pop": 238, "state": "VA" }, { "_id": "22737", "city": "RIXEYVILLE", "loc": [ -78.028229, 38.585168 ], "pop": 2540, "state": "VA" }, { "_id": "22738", "city": "UNO", "loc": [ -78.26535800000001, 38.274342 ], "pop": 477, "state": "VA" }, { "_id": "22740", "city": "SPERRYVILLE", "loc": [ -78.246571, 38.620252 ], "pop": 1553, "state": "VA" }, { "_id": "22741", "city": "STEVENSBURG", "loc": [ -77.88423, 38.444135 ], "pop": 220, "state": "VA" }, { "_id": "22742", "city": "SUMERDUCK", "loc": [ -77.70435999999999, 38.467355 ], "pop": 1146, "state": "VA" }, { "_id": "22743", "city": "SYRIA", "loc": [ -78.32293900000001, 38.497229 ], "pop": 526, "state": "VA" }, { "_id": "22746", "city": "VIEWTOWN", "loc": [ -78.025769, 38.645704 ], "pop": 172, "state": "VA" }, { "_id": "22747", "city": "WASHINGTON", "loc": [ -78.1566, 38.707838 ], "pop": 1448, "state": "VA" }, { "_id": "22749", "city": "WOODVILLE", "loc": [ -78.173855, 38.648176 ], "pop": 371, "state": "VA" }, { "_id": "22801", "city": "HARRISONBURG", "loc": [ -78.871438, 38.448864 ], "pop": 42027, "state": "VA" }, { "_id": "22810", "city": "BASYE", "loc": [ -78.767363, 38.795806 ], "pop": 43, "state": "VA" }, { "_id": "22811", "city": "BERGTON", "loc": [ -78.966752, 38.792509 ], "pop": 341, "state": "VA" }, { "_id": "22812", "city": "BRIDGEWATER", "loc": [ -78.993684, 38.385866 ], "pop": 7160, "state": "VA" }, { "_id": "22815", "city": "BROADWAY", "loc": [ -78.787494, 38.608336 ], "pop": 7106, "state": "VA" }, { "_id": "22820", "city": "CRIDERS", "loc": [ -78.99735699999999, 38.749656 ], "pop": 445, "state": "VA" }, { "_id": "22821", "city": "MONTEZUMA", "loc": [ -78.993731, 38.433864 ], "pop": 4777, "state": "VA" }, { "_id": "22824", "city": "EDINBURG", "loc": [ -78.60033, 38.843206 ], "pop": 5079, "state": "VA" }, { "_id": "22827", "city": "ELKTON", "loc": [ -78.632143, 38.40252 ], "pop": 10331, "state": "VA" }, { "_id": "22830", "city": "FULKS RUN", "loc": [ -78.935799, 38.633871 ], "pop": 1255, "state": "VA" }, { "_id": "22831", "city": "HINTON", "loc": [ -79.01008400000001, 38.483378 ], "pop": 798, "state": "VA" }, { "_id": "22832", "city": "KEEZLETOWN", "loc": [ -78.77699800000001, 38.439588 ], "pop": 1204, "state": "VA" }, { "_id": "22834", "city": "LINVILLE", "loc": [ -78.896102, 38.555733 ], "pop": 1866, "state": "VA" }, { "_id": "22835", "city": "LURAY", "loc": [ -78.459559, 38.654839 ], "pop": 10559, "state": "VA" }, { "_id": "22840", "city": "MC GAHEYSVILLE", "loc": [ -78.741128, 38.371228 ], "pop": 2100, "state": "VA" }, { "_id": "22841", "city": "MOUNT CRAWFORD", "loc": [ -78.895679, 38.345656 ], "pop": 2070, "state": "VA" }, { "_id": "22842", "city": "CONICVILLE", "loc": [ -78.676655, 38.768819 ], "pop": 4601, "state": "VA" }, { "_id": "22843", "city": "MOUNT SOLON", "loc": [ -79.10283200000001, 38.332755 ], "pop": 1995, "state": "VA" }, { "_id": "22844", "city": "NEW MARKET", "loc": [ -78.67143299999999, 38.660555 ], "pop": 3502, "state": "VA" }, { "_id": "22845", "city": "ORKNEY SPRINGS", "loc": [ -78.811106, 38.793708 ], "pop": 266, "state": "VA" }, { "_id": "22846", "city": "MONTEVIDEO", "loc": [ -78.79790300000001, 38.369729 ], "pop": 704, "state": "VA" }, { "_id": "22847", "city": "SHENANDOAH CAVER", "loc": [ -78.698866, 38.714443 ], "pop": 352, "state": "VA" }, { "_id": "22849", "city": "SHENANDOAH", "loc": [ -78.608975, 38.501034 ], "pop": 5174, "state": "VA" }, { "_id": "22851", "city": "STANLEY", "loc": [ -78.509263, 38.566036 ], "pop": 4604, "state": "VA" }, { "_id": "22853", "city": "TIMBERVILLE", "loc": [ -78.771702, 38.647606 ], "pop": 3494, "state": "VA" }, { "_id": "22901", "city": "CHARLOTTESVILLE", "loc": [ -78.490869, 38.054752 ], "pop": 62708, "state": "VA" }, { "_id": "22903", "city": "UNIVERSITY", "loc": [ -78.505758, 38.032728 ], "pop": 25301, "state": "VA" }, { "_id": "22920", "city": "AFTON", "loc": [ -78.84104600000001, 37.962624 ], "pop": 2783, "state": "VA" }, { "_id": "22922", "city": "TYE RIVER", "loc": [ -78.91847300000001, 37.687713 ], "pop": 1439, "state": "VA" }, { "_id": "22923", "city": "BURNLEYS", "loc": [ -78.31271599999999, 38.199648 ], "pop": 1389, "state": "VA" }, { "_id": "22929", "city": "COBHAM", "loc": [ -78.37849, 38.037835 ], "pop": 45, "state": "VA" }, { "_id": "22931", "city": "COVESVILLE", "loc": [ -78.71274099999999, 37.907974 ], "pop": 304, "state": "VA" }, { "_id": "22932", "city": "YANCEY MILLS", "loc": [ -78.70440499999999, 38.081288 ], "pop": 4292, "state": "VA" }, { "_id": "22935", "city": "BOONESVILLE", "loc": [ -78.55461200000001, 38.253276 ], "pop": 566, "state": "VA" }, { "_id": "22936", "city": "EARLYSVILLE", "loc": [ -78.491945, 38.157761 ], "pop": 4294, "state": "VA" }, { "_id": "22937", "city": "ESMONT", "loc": [ -78.610646, 37.812543 ], "pop": 1157, "state": "VA" }, { "_id": "22938", "city": "FABER", "loc": [ -78.756495, 37.847545 ], "pop": 958, "state": "VA" }, { "_id": "22939", "city": "WOODROW WILSON", "loc": [ -78.969579, 38.097361 ], "pop": 1374, "state": "VA" }, { "_id": "22940", "city": "MISSION HOME", "loc": [ -78.595906, 38.206217 ], "pop": 1023, "state": "VA" }, { "_id": "22942", "city": "CASHS CORNER", "loc": [ -78.195195, 38.107261 ], "pop": 5852, "state": "VA" }, { "_id": "22943", "city": "GREENWOOD", "loc": [ -78.783282, 38.041545 ], "pop": 516, "state": "VA" }, { "_id": "22946", "city": "KEENE", "loc": [ -78.561386, 37.931273 ], "pop": 26, "state": "VA" }, { "_id": "22947", "city": "BOYD TAVERN", "loc": [ -78.340429, 38.001265 ], "pop": 2081, "state": "VA" }, { "_id": "22948", "city": "LOCUST DALE", "loc": [ -78.10157599999999, 38.334043 ], "pop": 155, "state": "VA" }, { "_id": "22949", "city": "LOVINGSTON", "loc": [ -78.868433, 37.792405 ], "pop": 1459, "state": "VA" }, { "_id": "22951", "city": "LOWESVILLE", "loc": [ -79.08334600000001, 37.749797 ], "pop": 175, "state": "VA" }, { "_id": "22952", "city": "SHERANDO", "loc": [ -78.95150599999999, 37.997903 ], "pop": 2267, "state": "VA" }, { "_id": "22958", "city": "WINTERGREEN", "loc": [ -78.89397200000001, 37.860398 ], "pop": 53, "state": "VA" }, { "_id": "22959", "city": "ALBERENE", "loc": [ -78.695414, 37.961992 ], "pop": 3134, "state": "VA" }, { "_id": "22960", "city": "MONTFORD", "loc": [ -78.091224, 38.233937 ], "pop": 8781, "state": "VA" }, { "_id": "22963", "city": "BYBEE", "loc": [ -78.297983, 37.881807 ], "pop": 5689, "state": "VA" }, { "_id": "22964", "city": "PINEY RIVER", "loc": [ -79.020571, 37.715785 ], "pop": 257, "state": "VA" }, { "_id": "22967", "city": "ROSELAND", "loc": [ -78.97117299999999, 37.807697 ], "pop": 2333, "state": "VA" }, { "_id": "22968", "city": "ADVANCE MILLS", "loc": [ -78.39103299999999, 38.233871 ], "pop": 5764, "state": "VA" }, { "_id": "22969", "city": "SCHUYLER", "loc": [ -78.692475, 37.797584 ], "pop": 1128, "state": "VA" }, { "_id": "22971", "city": "ROCKFISH", "loc": [ -78.824608, 37.747974 ], "pop": 1100, "state": "VA" }, { "_id": "22972", "city": "SOMERSET", "loc": [ -78.25042000000001, 38.204657 ], "pop": 720, "state": "VA" }, { "_id": "22973", "city": "GEER", "loc": [ -78.470755, 38.302556 ], "pop": 4114, "state": "VA" }, { "_id": "22974", "city": "TROY", "loc": [ -78.253494, 37.9636 ], "pop": 1868, "state": "VA" }, { "_id": "22980", "city": "WAYNESBORO", "loc": [ -78.90346099999999, 38.077412 ], "pop": 26450, "state": "VA" }, { "_id": "23002", "city": "AMELIA COURT HOU", "loc": [ -77.95517700000001, 37.35017 ], "pop": 6923, "state": "VA" }, { "_id": "23004", "city": "ARVONIA", "loc": [ -78.38888, 37.671355 ], "pop": 1114, "state": "VA" }, { "_id": "23005", "city": "ASHLAND", "loc": [ -77.478373, 37.73948 ], "pop": 14800, "state": "VA" }, { "_id": "23009", "city": "AYLETT", "loc": [ -77.188473, 37.822113 ], "pop": 1374, "state": "VA" }, { "_id": "23011", "city": "BARHAMSVILLE", "loc": [ -76.832097, 37.461662 ], "pop": 698, "state": "VA" }, { "_id": "23015", "city": "BEAVERDAM", "loc": [ -77.63082900000001, 37.903767 ], "pop": 2328, "state": "VA" }, { "_id": "23016", "city": "BEAVERLETT", "loc": [ -76.322425, 37.41587 ], "pop": 262, "state": "VA" }, { "_id": "23021", "city": "BOHANNON", "loc": [ -76.36136, 37.390457 ], "pop": 143, "state": "VA" }, { "_id": "23022", "city": "BREMO BLUFF", "loc": [ -78.26715799999999, 37.745256 ], "pop": 1058, "state": "VA" }, { "_id": "23023", "city": "BRUINGTON", "loc": [ -76.94019900000001, 37.780112 ], "pop": 172, "state": "VA" }, { "_id": "23024", "city": "BUMPASS", "loc": [ -77.79661400000001, 37.898381 ], "pop": 4399, "state": "VA" }, { "_id": "23025", "city": "MILES", "loc": [ -76.393959, 37.427339 ], "pop": 39, "state": "VA" }, { "_id": "23027", "city": "TAMWORTH", "loc": [ -78.128699, 37.641314 ], "pop": 1143, "state": "VA" }, { "_id": "23029", "city": "CAUTHORNVILLE", "loc": [ -77.039625, 37.858957 ], "pop": 380, "state": "VA" }, { "_id": "23030", "city": "CHARLES CITY", "loc": [ -77.108183, 37.366271 ], "pop": 4216, "state": "VA" }, { "_id": "23032", "city": "CHURCH VIEW", "loc": [ -76.66287, 37.674956 ], "pop": 493, "state": "VA" }, { "_id": "23037", "city": "COLOGNE", "loc": [ -76.683356, 37.555866 ], "pop": 95, "state": "VA" }, { "_id": "23038", "city": "COLUMBIA", "loc": [ -78.17940299999999, 37.714707 ], "pop": 641, "state": "VA" }, { "_id": "23039", "city": "CROZIER", "loc": [ -77.793958, 37.671764 ], "pop": 937, "state": "VA" }, { "_id": "23040", "city": "CUMBERLAND", "loc": [ -78.258149, 37.501861 ], "pop": 3429, "state": "VA" }, { "_id": "23043", "city": "DELTAVILLE", "loc": [ -76.34678099999999, 37.554852 ], "pop": 1565, "state": "VA" }, { "_id": "23045", "city": "DIGGS", "loc": [ -76.287172, 37.436273 ], "pop": 491, "state": "VA" }, { "_id": "23047", "city": "DOSWELL", "loc": [ -77.51252100000001, 37.841682 ], "pop": 2111, "state": "VA" }, { "_id": "23050", "city": "DUTTON", "loc": [ -76.435782, 37.486897 ], "pop": 416, "state": "VA" }, { "_id": "23055", "city": "FORK UNION", "loc": [ -78.23549800000001, 37.771526 ], "pop": 620, "state": "VA" }, { "_id": "23060", "city": "GLEN ALLEN", "loc": [ -77.53401599999999, 37.662848 ], "pop": 19953, "state": "VA" }, { "_id": "23061", "city": "PINERO", "loc": [ -76.55331200000001, 37.41922 ], "pop": 14924, "state": "VA" }, { "_id": "23062", "city": "GLOUCESTER POINT", "loc": [ -76.49585999999999, 37.258534 ], "pop": 2558, "state": "VA" }, { "_id": "23063", "city": "GOOCHLAND", "loc": [ -78.011216, 37.768789 ], "pop": 4772, "state": "VA" }, { "_id": "23065", "city": "GUM SPRING", "loc": [ -77.907049, 37.818374 ], "pop": 480, "state": "VA" }, { "_id": "23066", "city": "GWYNN", "loc": [ -76.29042, 37.500594 ], "pop": 681, "state": "VA" }, { "_id": "23069", "city": "HANOVER", "loc": [ -77.321572, 37.770116 ], "pop": 3796, "state": "VA" }, { "_id": "23070", "city": "HARDYVILLE", "loc": [ -76.418937, 37.547821 ], "pop": 546, "state": "VA" }, { "_id": "23071", "city": "HARTFIELD", "loc": [ -76.476949, 37.559437 ], "pop": 797, "state": "VA" }, { "_id": "23072", "city": "HAYES", "loc": [ -76.49045700000001, 37.291577 ], "pop": 11051, "state": "VA" }, { "_id": "23075", "city": "HIGHLAND SPRINGS", "loc": [ -77.32261, 37.543723 ], "pop": 9373, "state": "VA" }, { "_id": "23079", "city": "JAMAICA", "loc": [ -76.688962, 37.729997 ], "pop": 383, "state": "VA" }, { "_id": "23080", "city": "JAMES STORE", "loc": [ -76.464972, 37.480594 ], "pop": 795, "state": "VA" }, { "_id": "23083", "city": "JETERSVILLE", "loc": [ -78.104011, 37.31757 ], "pop": 1396, "state": "VA" }, { "_id": "23084", "city": "KENTS STORE", "loc": [ -78.12077600000001, 37.89425 ], "pop": 882, "state": "VA" }, { "_id": "23085", "city": "KING AND QUEEN C", "loc": [ -76.86305900000001, 37.717644 ], "pop": 548, "state": "VA" }, { "_id": "23086", "city": "KING WILLIAM", "loc": [ -77.09983699999999, 37.720194 ], "pop": 3887, "state": "VA" }, { "_id": "23089", "city": "LANEXA", "loc": [ -76.90268399999999, 37.419391 ], "pop": 3609, "state": "VA" }, { "_id": "23091", "city": "LITTLE PLYMOUTH", "loc": [ -76.825456, 37.664218 ], "pop": 103, "state": "VA" }, { "_id": "23092", "city": "LOCUST HILL", "loc": [ -76.501857, 37.598328 ], "pop": 375, "state": "VA" }, { "_id": "23093", "city": "LOUISA", "loc": [ -78.034666, 38.01317 ], "pop": 7503, "state": "VA" }, { "_id": "23102", "city": "DABNEYS", "loc": [ -77.871032, 37.703193 ], "pop": 2927, "state": "VA" }, { "_id": "23103", "city": "MANAKIN SABOT", "loc": [ -77.70769900000001, 37.638036 ], "pop": 5177, "state": "VA" }, { "_id": "23106", "city": "MANQUIN", "loc": [ -77.186016, 37.718441 ], "pop": 628, "state": "VA" }, { "_id": "23108", "city": "MASCOT", "loc": [ -76.73832400000001, 37.60683 ], "pop": 104, "state": "VA" }, { "_id": "23109", "city": "MATHEWS", "loc": [ -76.354416, 37.438349 ], "pop": 760, "state": "VA" }, { "_id": "23110", "city": "SHANGHAI", "loc": [ -76.78398, 37.641698 ], "pop": 331, "state": "VA" }, { "_id": "23111", "city": "MECHANICSVILLE", "loc": [ -77.33946400000001, 37.628146 ], "pop": 35675, "state": "VA" }, { "_id": "23112", "city": "MIDLOTHIAN", "loc": [ -77.65445800000001, 37.431027 ], "pop": 24114, "state": "VA" }, { "_id": "23113", "city": "MIDLOTHIAN", "loc": [ -77.642864, 37.510893 ], "pop": 21858, "state": "VA" }, { "_id": "23117", "city": "MINERAL", "loc": [ -77.878069, 37.998609 ], "pop": 5080, "state": "VA" }, { "_id": "23118", "city": "MOBJACK", "loc": [ -76.355244, 37.377579 ], "pop": 204, "state": "VA" }, { "_id": "23119", "city": "MOON", "loc": [ -76.306472, 37.449276 ], "pop": 629, "state": "VA" }, { "_id": "23120", "city": "MOSELEY", "loc": [ -77.758458, 37.426026 ], "pop": 1852, "state": "VA" }, { "_id": "23123", "city": "NEW CANTON", "loc": [ -78.31123100000001, 37.664499 ], "pop": 1546, "state": "VA" }, { "_id": "23124", "city": "NEW KENT", "loc": [ -77.074242, 37.553013 ], "pop": 1376, "state": "VA" }, { "_id": "23125", "city": "NEW POINT", "loc": [ -76.28346500000001, 37.349291 ], "pop": 153, "state": "VA" }, { "_id": "23126", "city": "NEWTOWN", "loc": [ -77.11382500000001, 37.878236 ], "pop": 926, "state": "VA" }, { "_id": "23128", "city": "NORTH", "loc": [ -76.370661, 37.477066 ], "pop": 1621, "state": "VA" }, { "_id": "23129", "city": "OILVILLE", "loc": [ -77.769955, 37.708879 ], "pop": 198, "state": "VA" }, { "_id": "23130", "city": "ONEMO", "loc": [ -76.294056, 37.398517 ], "pop": 582, "state": "VA" }, { "_id": "23138", "city": "BAVON", "loc": [ -76.304463, 37.374252 ], "pop": 475, "state": "VA" }, { "_id": "23139", "city": "POWHATAN", "loc": [ -77.879761, 37.556442 ], "pop": 14488, "state": "VA" }, { "_id": "23140", "city": "PROVIDENCE FORGE", "loc": [ -77.071117, 37.425907 ], "pop": 3211, "state": "VA" }, { "_id": "23141", "city": "QUINTON", "loc": [ -77.148607, 37.518466 ], "pop": 4589, "state": "VA" }, { "_id": "23146", "city": "ROCKVILLE", "loc": [ -77.699994, 37.733729 ], "pop": 1872, "state": "VA" }, { "_id": "23148", "city": "INDIAN NECK", "loc": [ -77.08420599999999, 37.905052 ], "pop": 191, "state": "VA" }, { "_id": "23149", "city": "SALUDA", "loc": [ -76.592082, 37.594944 ], "pop": 3215, "state": "VA" }, { "_id": "23150", "city": "SANDSTON", "loc": [ -77.27578, 37.515658 ], "pop": 9402, "state": "VA" }, { "_id": "23153", "city": "SANDY HOOK", "loc": [ -77.90455300000001, 37.751892 ], "pop": 152, "state": "VA" }, { "_id": "23156", "city": "PLAIN VIEW", "loc": [ -76.726901, 37.569811 ], "pop": 696, "state": "VA" }, { "_id": "23161", "city": "STEVENSVILLE", "loc": [ -76.935228, 37.714577 ], "pop": 59, "state": "VA" }, { "_id": "23163", "city": "SHADOW", "loc": [ -76.318617, 37.361945 ], "pop": 309, "state": "VA" }, { "_id": "23168", "city": "TOANO", "loc": [ -76.82526300000001, 37.39013 ], "pop": 2784, "state": "VA" }, { "_id": "23169", "city": "SYRINGA", "loc": [ -76.454876, 37.597824 ], "pop": 706, "state": "VA" }, { "_id": "23175", "city": "REMLIK", "loc": [ -76.612611, 37.655003 ], "pop": 698, "state": "VA" }, { "_id": "23176", "city": "WAKE", "loc": [ -76.432327, 37.568077 ], "pop": 368, "state": "VA" }, { "_id": "23177", "city": "WALKERTON", "loc": [ -77.018475, 37.755437 ], "pop": 1152, "state": "VA" }, { "_id": "23179", "city": "WARNER", "loc": [ -76.64616700000001, 37.651127 ], "pop": 37, "state": "VA" }, { "_id": "23180", "city": "WATER VIEW", "loc": [ -76.62268, 37.710486 ], "pop": 273, "state": "VA" }, { "_id": "23181", "city": "WEST POINT", "loc": [ -76.82373, 37.555604 ], "pop": 4365, "state": "VA" }, { "_id": "23185", "city": "MERRIMAC", "loc": [ -76.701686, 37.262698 ], "pop": 34777, "state": "VA" }, { "_id": "23188", "city": "WILLIAMSBURG", "loc": [ -76.763424, 37.317768 ], "pop": 14957, "state": "VA" }, { "_id": "23192", "city": "MONTPELIER", "loc": [ -77.692441, 37.817729 ], "pop": 4472, "state": "VA" }, { "_id": "23219", "city": "RICHMOND", "loc": [ -77.437798, 37.546265 ], "pop": 2780, "state": "VA" }, { "_id": "23220", "city": "RICHMOND", "loc": [ -77.458798, 37.549808 ], "pop": 29776, "state": "VA" }, { "_id": "23221", "city": "RICHMOND", "loc": [ -77.4845, 37.558301 ], "pop": 14452, "state": "VA" }, { "_id": "23222", "city": "RICHMOND", "loc": [ -77.426725, 37.574802 ], "pop": 30214, "state": "VA" }, { "_id": "23223", "city": "RICHMOND", "loc": [ -77.394772, 37.547721 ], "pop": 42379, "state": "VA" }, { "_id": "23224", "city": "RICHMOND", "loc": [ -77.471014, 37.495512 ], "pop": 32681, "state": "VA" }, { "_id": "23225", "city": "RICHMOND", "loc": [ -77.50470900000001, 37.515842 ], "pop": 37289, "state": "VA" }, { "_id": "23226", "city": "RICHMOND", "loc": [ -77.519657, 37.582473 ], "pop": 18085, "state": "VA" }, { "_id": "23227", "city": "BELLEVUE", "loc": [ -77.446309, 37.604181 ], "pop": 21661, "state": "VA" }, { "_id": "23228", "city": "LAKESIDE", "loc": [ -77.493308, 37.623503 ], "pop": 30611, "state": "VA" }, { "_id": "23229", "city": "REGENCY", "loc": [ -77.566202, 37.596351 ], "pop": 32028, "state": "VA" }, { "_id": "23230", "city": "WEST END", "loc": [ -77.49682799999999, 37.588376 ], "pop": 6447, "state": "VA" }, { "_id": "23231", "city": "RICHMOND", "loc": [ -77.368002, 37.491529 ], "pop": 23773, "state": "VA" }, { "_id": "23233", "city": "RIDGE", "loc": [ -77.61493299999999, 37.619354 ], "pop": 32811, "state": "VA" }, { "_id": "23234", "city": "AMPTHILL", "loc": [ -77.469798, 37.453158 ], "pop": 36331, "state": "VA" }, { "_id": "23235", "city": "BON AIR", "loc": [ -77.56510299999999, 37.512034 ], "pop": 30860, "state": "VA" }, { "_id": "23236", "city": "RICHMOND", "loc": [ -77.585413, 37.478165 ], "pop": 24305, "state": "VA" }, { "_id": "23237", "city": "RICHMOND", "loc": [ -77.461471, 37.401145 ], "pop": 19154, "state": "VA" }, { "_id": "23294", "city": "RICHMOND", "loc": [ -77.545125, 37.632923 ], "pop": 14713, "state": "VA" }, { "_id": "23301", "city": "ACCOMAC", "loc": [ -75.680272, 37.71588 ], "pop": 2562, "state": "VA" }, { "_id": "23302", "city": "ASSAWOMAN", "loc": [ -75.52966000000001, 37.86629 ], "pop": 82, "state": "VA" }, { "_id": "23306", "city": "BELLE HAVEN", "loc": [ -75.869443, 37.56448 ], "pop": 344, "state": "VA" }, { "_id": "23307", "city": "BIRDSNEST", "loc": [ -75.904347, 37.432077 ], "pop": 1057, "state": "VA" }, { "_id": "23308", "city": "BLOXOM", "loc": [ -75.615568, 37.827264 ], "pop": 1581, "state": "VA" }, { "_id": "23310", "city": "CAPE CHARLES", "loc": [ -75.972129, 37.279874 ], "pop": 6259, "state": "VA" }, { "_id": "23314", "city": "CARROLLTON", "loc": [ -76.542963, 36.954994 ], "pop": 3990, "state": "VA" }, { "_id": "23315", "city": "CARRSVILLE", "loc": [ -76.83647999999999, 36.74544 ], "pop": 1273, "state": "VA" }, { "_id": "23320", "city": "CHESAPEAKE", "loc": [ -76.23842999999999, 36.735246 ], "pop": 55836, "state": "VA" }, { "_id": "23321", "city": "BOWERS HILL", "loc": [ -76.411012, 36.827964 ], "pop": 23561, "state": "VA" }, { "_id": "23322", "city": "FENTRESS", "loc": [ -76.213064, 36.634008 ], "pop": 10023, "state": "VA" }, { "_id": "23323", "city": "CHESAPEAKE", "loc": [ -76.339743, 36.763424 ], "pop": 24412, "state": "VA" }, { "_id": "23324", "city": "CHESAPEAKE", "loc": [ -76.26655700000001, 36.805568 ], "pop": 21531, "state": "VA" }, { "_id": "23325", "city": "CHESAPEAKE", "loc": [ -76.240555, 36.813963 ], "pop": 16543, "state": "VA" }, { "_id": "23336", "city": "CHINCOTEAGUE", "loc": [ -75.371369, 37.927682 ], "pop": 3581, "state": "VA" }, { "_id": "23337", "city": "WALLOPS ISLAND", "loc": [ -75.506503, 37.827338 ], "pop": 0, "state": "VA" }, { "_id": "23350", "city": "EXMORE", "loc": [ -75.85262400000001, 37.511689 ], "pop": 4678, "state": "VA" }, { "_id": "23354", "city": "FRANKTOWN", "loc": [ -75.888971, 37.462009 ], "pop": 474, "state": "VA" }, { "_id": "23356", "city": "GREENBACKVILLE", "loc": [ -75.40289900000001, 38.006404 ], "pop": 400, "state": "VA" }, { "_id": "23357", "city": "GREENBUSH", "loc": [ -75.6664, 37.768121 ], "pop": 821, "state": "VA" }, { "_id": "23359", "city": "HALLWOOD", "loc": [ -75.561334, 37.853644 ], "pop": 322, "state": "VA" }, { "_id": "23395", "city": "HORNTOWN", "loc": [ -75.471608, 37.969916 ], "pop": 132, "state": "VA" }, { "_id": "23396", "city": "HORSEY", "loc": [ -75.56236, 37.933232 ], "pop": 200, "state": "VA" }, { "_id": "23399", "city": "JENKINS BRIDGE", "loc": [ -75.63194300000001, 37.919219 ], "pop": 301, "state": "VA" }, { "_id": "23404", "city": "LOCUSTVILLE", "loc": [ -75.673508, 37.6534 ], "pop": 92, "state": "VA" }, { "_id": "23405", "city": "MACHIPONGO", "loc": [ -75.908241, 37.401429 ], "pop": 593, "state": "VA" }, { "_id": "23407", "city": "MAPPSVILLE", "loc": [ -75.569886, 37.835419 ], "pop": 835, "state": "VA" }, { "_id": "23409", "city": "MEARS", "loc": [ -75.635443, 37.869189 ], "pop": 110, "state": "VA" }, { "_id": "23410", "city": "MELFA", "loc": [ -75.745355, 37.6407 ], "pop": 2987, "state": "VA" }, { "_id": "23415", "city": "NEW CHURCH", "loc": [ -75.511188, 37.952527 ], "pop": 2915, "state": "VA" }, { "_id": "23416", "city": "OAK HALL", "loc": [ -75.606483, 37.953686 ], "pop": 130, "state": "VA" }, { "_id": "23417", "city": "ONANCOCK", "loc": [ -75.752798, 37.710237 ], "pop": 3914, "state": "VA" }, { "_id": "23418", "city": "ONLEY", "loc": [ -75.6992, 37.670422 ], "pop": 97, "state": "VA" }, { "_id": "23420", "city": "PAINTER", "loc": [ -75.806612, 37.582821 ], "pop": 3782, "state": "VA" }, { "_id": "23421", "city": "PARKSLEY", "loc": [ -75.638634, 37.774404 ], "pop": 3466, "state": "VA" }, { "_id": "23426", "city": "SANFORD", "loc": [ -75.69570400000001, 37.92433 ], "pop": 679, "state": "VA" }, { "_id": "23430", "city": "SMITHFIELD", "loc": [ -76.63682, 36.981057 ], "pop": 11389, "state": "VA" }, { "_id": "23432", "city": "SUFFOLK", "loc": [ -76.559811, 36.866823 ], "pop": 1396, "state": "VA" }, { "_id": "23433", "city": "SUFFOLK", "loc": [ -76.49285999999999, 36.909027 ], "pop": 1219, "state": "VA" }, { "_id": "23434", "city": "SUFFOLK", "loc": [ -76.593147, 36.730433 ], "pop": 33717, "state": "VA" }, { "_id": "23435", "city": "SUFFOLK", "loc": [ -76.466397, 36.854427 ], "pop": 8556, "state": "VA" }, { "_id": "23436", "city": "SUFFOLK", "loc": [ -76.514157, 36.892625 ], "pop": 766, "state": "VA" }, { "_id": "23437", "city": "SUFFOLK", "loc": [ -76.79204300000001, 36.652611 ], "pop": 4414, "state": "VA" }, { "_id": "23438", "city": "SUFFOLK", "loc": [ -76.68709699999999, 36.591311 ], "pop": 2073, "state": "VA" }, { "_id": "23440", "city": "TANGIER", "loc": [ -75.993003, 37.824485 ], "pop": 700, "state": "VA" }, { "_id": "23442", "city": "TEMPERANCEVILLE", "loc": [ -75.55283, 37.895421 ], "pop": 1670, "state": "VA" }, { "_id": "23451", "city": "VIRGINIA BEACH", "loc": [ -76.00192800000001, 36.858451 ], "pop": 37212, "state": "VA" }, { "_id": "23452", "city": "VIRGINIA BEACH", "loc": [ -76.096142, 36.83481 ], "pop": 61895, "state": "VA" }, { "_id": "23454", "city": "VIRGINIA BEACH", "loc": [ -76.023723, 36.828187 ], "pop": 59937, "state": "VA" }, { "_id": "23455", "city": "VIRGINIA BEACH", "loc": [ -76.144552, 36.888121 ], "pop": 43055, "state": "VA" }, { "_id": "23456", "city": "VIRGINIA BEACH", "loc": [ -76.089162, 36.779851 ], "pop": 55909, "state": "VA" }, { "_id": "23457", "city": "BLACKWATER BRIDG", "loc": [ -76.03781600000001, 36.624793 ], "pop": 3448, "state": "VA" }, { "_id": "23459", "city": "VIRGINIA BEACH", "loc": [ -76.017122, 36.9216 ], "pop": 1164, "state": "VA" }, { "_id": "23462", "city": "VIRGINIA BEACH", "loc": [ -76.15218400000001, 36.839193 ], "pop": 58632, "state": "VA" }, { "_id": "23464", "city": "VIRGINIA BEACH", "loc": [ -76.175909, 36.797772 ], "pop": 67276, "state": "VA" }, { "_id": "23481", "city": "WALTERS", "loc": [ -76.87015599999999, 36.708974 ], "pop": 698, "state": "VA" }, { "_id": "23487", "city": "WINDSOR", "loc": [ -76.732372, 36.836881 ], "pop": 4773, "state": "VA" }, { "_id": "23502", "city": "NORFOLK", "loc": [ -76.214253, 36.854648 ], "pop": 21227, "state": "VA" }, { "_id": "23503", "city": "NORFOLK", "loc": [ -76.252008, 36.944196 ], "pop": 32435, "state": "VA" }, { "_id": "23504", "city": "NORFOLK", "loc": [ -76.26862800000001, 36.858554 ], "pop": 25706, "state": "VA" }, { "_id": "23505", "city": "NORFOLK", "loc": [ -76.28748, 36.91675 ], "pop": 30687, "state": "VA" }, { "_id": "23507", "city": "NORFOLK", "loc": [ -76.30038500000001, 36.864506 ], "pop": 6514, "state": "VA" }, { "_id": "23508", "city": "NORFOLK", "loc": [ -76.30035599999999, 36.885922 ], "pop": 19729, "state": "VA" }, { "_id": "23509", "city": "NORFOLK", "loc": [ -76.260361, 36.878743 ], "pop": 12539, "state": "VA" }, { "_id": "23510", "city": "NORFOLK", "loc": [ -76.287784, 36.852929 ], "pop": 4731, "state": "VA" }, { "_id": "23511", "city": "FLEET", "loc": [ -76.309206, 36.951164 ], "pop": 28108, "state": "VA" }, { "_id": "23513", "city": "NORFOLK", "loc": [ -76.23957799999999, 36.891395 ], "pop": 31348, "state": "VA" }, { "_id": "23517", "city": "NORFOLK", "loc": [ -76.29451899999999, 36.869547 ], "pop": 4433, "state": "VA" }, { "_id": "23518", "city": "NORFOLK", "loc": [ -76.216027, 36.920246 ], "pop": 35119, "state": "VA" }, { "_id": "23521", "city": "NAVAL AMPHIBIOUS", "loc": [ -76.163715, 36.916923 ], "pop": 4541, "state": "VA" }, { "_id": "23523", "city": "NORFOLK", "loc": [ -76.27012499999999, 36.82942 ], "pop": 8682, "state": "VA" }, { "_id": "23601", "city": "NEWPORT NEWS", "loc": [ -76.460722, 37.057951 ], "pop": 24325, "state": "VA" }, { "_id": "23602", "city": "NEWPORT NEWS", "loc": [ -76.53212499999999, 37.131684 ], "pop": 68525, "state": "VA" }, { "_id": "23603", "city": "NEWPORT NEWS", "loc": [ -76.582059, 37.198887 ], "pop": 3368, "state": "VA" }, { "_id": "23604", "city": "NEWPORT NEWS", "loc": [ -76.589727, 37.122112 ], "pop": 9967, "state": "VA" }, { "_id": "23605", "city": "NEWPORT NEWS", "loc": [ -76.43315800000001, 37.015583 ], "pop": 12649, "state": "VA" }, { "_id": "23606", "city": "NEWPORT NEWS", "loc": [ -76.496724, 37.076777 ], "pop": 22429, "state": "VA" }, { "_id": "23607", "city": "NEWPORT NEWS", "loc": [ -76.41646900000001, 36.986352 ], "pop": 28785, "state": "VA" }, { "_id": "23651", "city": "HAMPTON", "loc": [ -76.296896, 37.029671 ], "pop": 3325, "state": "VA" }, { "_id": "23661", "city": "HAMPTON", "loc": [ -76.38008499999999, 37.007432 ], "pop": 15313, "state": "VA" }, { "_id": "23662", "city": "POQUOSON", "loc": [ -76.380702, 37.131252 ], "pop": 11005, "state": "VA" }, { "_id": "23663", "city": "HAMPTON", "loc": [ -76.319875, 37.03181 ], "pop": 16889, "state": "VA" }, { "_id": "23664", "city": "HAMPTON", "loc": [ -76.296639, 37.056611 ], "pop": 7832, "state": "VA" }, { "_id": "23665", "city": "HAMPTON", "loc": [ -76.40993899999999, 37.100565 ], "pop": 15146, "state": "VA" }, { "_id": "23666", "city": "HAMPTON", "loc": [ -76.409617, 37.046241 ], "pop": 44985, "state": "VA" }, { "_id": "23669", "city": "HAMPTON", "loc": [ -76.342573, 37.043559 ], "pop": 41855, "state": "VA" }, { "_id": "23690", "city": "YORKTOWN", "loc": [ -76.54234599999999, 37.228657 ], "pop": 3216, "state": "VA" }, { "_id": "23692", "city": "GRAFTON", "loc": [ -76.459648, 37.170859 ], "pop": 14188, "state": "VA" }, { "_id": "23693", "city": "TABB", "loc": [ -76.450743, 37.122586 ], "pop": 2807, "state": "VA" }, { "_id": "23696", "city": "SEAFORD", "loc": [ -76.42899199999999, 37.188468 ], "pop": 3009, "state": "VA" }, { "_id": "23701", "city": "PORTSMOUTH", "loc": [ -76.36714000000001, 36.808902 ], "pop": 29788, "state": "VA" }, { "_id": "23702", "city": "PORTSMOUTH", "loc": [ -76.32697899999999, 36.803534 ], "pop": 12599, "state": "VA" }, { "_id": "23703", "city": "PORTSMOUTH", "loc": [ -76.386872, 36.869501 ], "pop": 22512, "state": "VA" }, { "_id": "23704", "city": "PORTSMOUTH", "loc": [ -76.314604, 36.829821 ], "pop": 23634, "state": "VA" }, { "_id": "23707", "city": "PORTSMOUTH", "loc": [ -76.34401099999999, 36.836234 ], "pop": 15199, "state": "VA" }, { "_id": "23709", "city": "PORTSMOUTH", "loc": [ -76.305188, 36.813883 ], "pop": 216, "state": "VA" }, { "_id": "23801", "city": "FORT LEE", "loc": [ -77.33405, 37.244738 ], "pop": 8817, "state": "VA" }, { "_id": "23803", "city": "ETTRICK", "loc": [ -77.43259399999999, 37.220001 ], "pop": 41772, "state": "VA" }, { "_id": "23805", "city": "PETERSBURG", "loc": [ -77.385385, 37.181937 ], "pop": 16432, "state": "VA" }, { "_id": "23821", "city": "ALBERTA", "loc": [ -77.905518, 36.880609 ], "pop": 1553, "state": "VA" }, { "_id": "23824", "city": "BLACKSTONE", "loc": [ -77.985063, 37.091578 ], "pop": 6351, "state": "VA" }, { "_id": "23827", "city": "BOYKINS", "loc": [ -77.197519, 36.595061 ], "pop": 1595, "state": "VA" }, { "_id": "23828", "city": "BRANCHVILLE", "loc": [ -77.27044100000001, 36.578701 ], "pop": 619, "state": "VA" }, { "_id": "23829", "city": "CAPRON", "loc": [ -77.239363, 36.724332 ], "pop": 2364, "state": "VA" }, { "_id": "23830", "city": "CARSON", "loc": [ -77.43509299999999, 37.039311 ], "pop": 1343, "state": "VA" }, { "_id": "23831", "city": "CHESTER", "loc": [ -77.41557, 37.342934 ], "pop": 24788, "state": "VA" }, { "_id": "23832", "city": "CHESTERFIELD", "loc": [ -77.566799, 37.392327 ], "pop": 25716, "state": "VA" }, { "_id": "23833", "city": "CHURCH ROAD", "loc": [ -77.66458799999999, 37.194964 ], "pop": 1515, "state": "VA" }, { "_id": "23834", "city": "COLONIAL HEIGHTS", "loc": [ -77.403829, 37.269968 ], "pop": 21056, "state": "VA" }, { "_id": "23837", "city": "COURTLAND", "loc": [ -77.078272, 36.722516 ], "pop": 3570, "state": "VA" }, { "_id": "23839", "city": "DENDRON", "loc": [ -76.896642, 37.098076 ], "pop": 805, "state": "VA" }, { "_id": "23840", "city": "DEWITT", "loc": [ -77.64255799999999, 37.053522 ], "pop": 1385, "state": "VA" }, { "_id": "23841", "city": "DINWIDDIE", "loc": [ -77.558539, 37.083283 ], "pop": 2781, "state": "VA" }, { "_id": "23842", "city": "DISPUTANTA", "loc": [ -77.273172, 37.148268 ], "pop": 4938, "state": "VA" }, { "_id": "23843", "city": "DOLPHIN", "loc": [ -77.788719, 36.831774 ], "pop": 982, "state": "VA" }, { "_id": "23844", "city": "DREWRYVILLE", "loc": [ -77.359098, 36.685433 ], "pop": 743, "state": "VA" }, { "_id": "23845", "city": "EBONY", "loc": [ -77.999431, 36.584993 ], "pop": 568, "state": "VA" }, { "_id": "23846", "city": "ELBERON", "loc": [ -76.83372300000001, 37.070133 ], "pop": 715, "state": "VA" }, { "_id": "23847", "city": "EMPORIA", "loc": [ -77.56295299999999, 36.685689 ], "pop": 13950, "state": "VA" }, { "_id": "23850", "city": "AMMON", "loc": [ -77.737189, 37.139672 ], "pop": 1315, "state": "VA" }, { "_id": "23851", "city": "FRANKLIN", "loc": [ -76.939108, 36.678625 ], "pop": 12786, "state": "VA" }, { "_id": "23856", "city": "FREEMAN", "loc": [ -77.720772, 36.789342 ], "pop": 920, "state": "VA" }, { "_id": "23857", "city": "GASBURG", "loc": [ -77.90292700000001, 36.576552 ], "pop": 771, "state": "VA" }, { "_id": "23859", "city": "HANDSOM", "loc": [ -77.023797, 36.609854 ], "pop": 371, "state": "VA" }, { "_id": "23860", "city": "HOPEWELL", "loc": [ -77.295013, 37.287576 ], "pop": 25764, "state": "VA" }, { "_id": "23866", "city": "IVOR", "loc": [ -76.886146, 36.907099 ], "pop": 2205, "state": "VA" }, { "_id": "23867", "city": "JARRATT", "loc": [ -77.48316199999999, 36.819129 ], "pop": 2055, "state": "VA" }, { "_id": "23868", "city": "TRIPLET", "loc": [ -77.838437, 36.744874 ], "pop": 6357, "state": "VA" }, { "_id": "23872", "city": "MC KENNEY", "loc": [ -77.73955599999999, 36.998609 ], "pop": 1866, "state": "VA" }, { "_id": "23874", "city": "NEWSOMS", "loc": [ -77.106949, 36.614814 ], "pop": 1193, "state": "VA" }, { "_id": "23875", "city": "PRINCE GEORGE", "loc": [ -77.27470599999999, 37.233339 ], "pop": 7713, "state": "VA" }, { "_id": "23876", "city": "RAWLINGS", "loc": [ -77.82371999999999, 36.953043 ], "pop": 527, "state": "VA" }, { "_id": "23878", "city": "SEDLEY", "loc": [ -77.012531, 36.790752 ], "pop": 491, "state": "VA" }, { "_id": "23879", "city": "SKIPPERS", "loc": [ -77.543663, 36.579685 ], "pop": 196, "state": "VA" }, { "_id": "23881", "city": "SPRING GROVE", "loc": [ -76.99233700000001, 37.190098 ], "pop": 1746, "state": "VA" }, { "_id": "23882", "city": "STONY CREEK", "loc": [ -77.444276, 36.936132 ], "pop": 2889, "state": "VA" }, { "_id": "23883", "city": "SURRY", "loc": [ -76.76514, 37.126024 ], "pop": 2271, "state": "VA" }, { "_id": "23885", "city": "SUTHERLAND", "loc": [ -77.56546299999999, 37.190149 ], "pop": 2470, "state": "VA" }, { "_id": "23887", "city": "VALENTINES", "loc": [ -77.83840499999999, 36.565024 ], "pop": 188, "state": "VA" }, { "_id": "23888", "city": "WAKEFIELD", "loc": [ -76.97898000000001, 36.975734 ], "pop": 2790, "state": "VA" }, { "_id": "23889", "city": "WARFIELD", "loc": [ -77.76731700000001, 36.901122 ], "pop": 580, "state": "VA" }, { "_id": "23890", "city": "WAVERLY", "loc": [ -77.105453, 37.025032 ], "pop": 4581, "state": "VA" }, { "_id": "23893", "city": "WHITE PLAINS", "loc": [ -77.959245, 36.633549 ], "pop": 522, "state": "VA" }, { "_id": "23894", "city": "WILSONS", "loc": [ -77.835193, 37.115678 ], "pop": 592, "state": "VA" }, { "_id": "23897", "city": "YALE", "loc": [ -77.286986, 36.837279 ], "pop": 626, "state": "VA" }, { "_id": "23898", "city": "ZUNI", "loc": [ -76.81096700000001, 36.843666 ], "pop": 2162, "state": "VA" }, { "_id": "23901", "city": "FARMVILLE", "loc": [ -78.40759199999999, 37.302692 ], "pop": 14084, "state": "VA" }, { "_id": "23915", "city": "BASKERVILLE", "loc": [ -78.27904700000001, 36.723595 ], "pop": 1114, "state": "VA" }, { "_id": "23917", "city": "BOYDTON", "loc": [ -78.375174, 36.654422 ], "pop": 2613, "state": "VA" }, { "_id": "23919", "city": "BRACEY", "loc": [ -78.105862, 36.576295 ], "pop": 1127, "state": "VA" }, { "_id": "23920", "city": "BRODNAX", "loc": [ -77.98984299999999, 36.731879 ], "pop": 2571, "state": "VA" }, { "_id": "23921", "city": "BUCKINGHAM", "loc": [ -78.59853699999999, 37.583335 ], "pop": 2056, "state": "VA" }, { "_id": "23922", "city": "BURKEVILLE", "loc": [ -78.196084, 37.195203 ], "pop": 3751, "state": "VA" }, { "_id": "23923", "city": "CHARLOTTE COURT", "loc": [ -78.660622, 37.086379 ], "pop": 2061, "state": "VA" }, { "_id": "23924", "city": "CHASE CITY", "loc": [ -78.455268, 36.805305 ], "pop": 5715, "state": "VA" }, { "_id": "23927", "city": "CLARKSVILLE", "loc": [ -78.53529399999999, 36.631437 ], "pop": 2736, "state": "VA" }, { "_id": "23930", "city": "CREWE", "loc": [ -78.10586600000001, 37.165676 ], "pop": 5565, "state": "VA" }, { "_id": "23934", "city": "CULLEN", "loc": [ -78.645912, 37.155211 ], "pop": 596, "state": "VA" }, { "_id": "23936", "city": "SPROUSES CORNER", "loc": [ -78.46092899999999, 37.545804 ], "pop": 5330, "state": "VA" }, { "_id": "23937", "city": "DRAKES BRANCH", "loc": [ -78.561542, 36.968767 ], "pop": 1509, "state": "VA" }, { "_id": "23938", "city": "DUNDAS", "loc": [ -78.01001599999999, 36.90532 ], "pop": 407, "state": "VA" }, { "_id": "23942", "city": "GREEN BAY", "loc": [ -78.30719499999999, 37.123417 ], "pop": 838, "state": "VA" }, { "_id": "23944", "city": "KENBRIDGE", "loc": [ -78.12423800000001, 36.932965 ], "pop": 4269, "state": "VA" }, { "_id": "23947", "city": "KEYSVILLE", "loc": [ -78.46991199999999, 37.041086 ], "pop": 3670, "state": "VA" }, { "_id": "23950", "city": "BLACKRIDGE", "loc": [ -78.095251, 36.68609 ], "pop": 3036, "state": "VA" }, { "_id": "23952", "city": "LUNENBURG", "loc": [ -78.290644, 36.922624 ], "pop": 156, "state": "VA" }, { "_id": "23954", "city": "MEHERRIN", "loc": [ -78.38735699999999, 37.101283 ], "pop": 1429, "state": "VA" }, { "_id": "23958", "city": "PAMPLIN", "loc": [ -78.65166000000001, 37.265333 ], "pop": 2298, "state": "VA" }, { "_id": "23959", "city": "PHENIX", "loc": [ -78.791195, 37.092506 ], "pop": 900, "state": "VA" }, { "_id": "23960", "city": "PROSPECT", "loc": [ -78.546162, 37.305838 ], "pop": 1661, "state": "VA" }, { "_id": "23962", "city": "RANDOLPH", "loc": [ -78.69924899999999, 36.963079 ], "pop": 600, "state": "VA" }, { "_id": "23963", "city": "RED HOUSE", "loc": [ -78.81446699999999, 37.191431 ], "pop": 616, "state": "VA" }, { "_id": "23964", "city": "RED OAK", "loc": [ -78.632057, 36.772403 ], "pop": 667, "state": "VA" }, { "_id": "23966", "city": "RICE", "loc": [ -78.279262, 37.272132 ], "pop": 1973, "state": "VA" }, { "_id": "23967", "city": "SAXE", "loc": [ -78.605699, 36.90569 ], "pop": 1095, "state": "VA" }, { "_id": "23968", "city": "SKIPWITH", "loc": [ -78.530552, 36.731704 ], "pop": 1177, "state": "VA" }, { "_id": "23970", "city": "SOUTH HILL", "loc": [ -78.15338800000001, 36.712388 ], "pop": 7056, "state": "VA" }, { "_id": "23974", "city": "VICTORIA", "loc": [ -78.23724300000001, 36.983543 ], "pop": 4027, "state": "VA" }, { "_id": "23976", "city": "WYLLIESBURG", "loc": [ -78.612655, 36.838968 ], "pop": 945, "state": "VA" }, { "_id": "24011", "city": "ROANOKE", "loc": [ -79.942019, 37.268997 ], "pop": 150, "state": "VA" }, { "_id": "24012", "city": "ROANOKE", "loc": [ -79.932179, 37.302912 ], "pop": 22982, "state": "VA" }, { "_id": "24013", "city": "ROANOKE", "loc": [ -79.924747, 37.267685 ], "pop": 8347, "state": "VA" }, { "_id": "24014", "city": "ROANOKE", "loc": [ -79.946332, 37.23268 ], "pop": 21753, "state": "VA" }, { "_id": "24015", "city": "ROANOKE", "loc": [ -79.980694, 37.258363 ], "pop": 15358, "state": "VA" }, { "_id": "24016", "city": "ROANOKE", "loc": [ -79.953495, 37.270407 ], "pop": 9782, "state": "VA" }, { "_id": "24017", "city": "ROANOKE", "loc": [ -79.99024799999999, 37.293655 ], "pop": 24776, "state": "VA" }, { "_id": "24018", "city": "CAVE SPRING", "loc": [ -80.021749, 37.231554 ], "pop": 24993, "state": "VA" }, { "_id": "24019", "city": "HOLLINS", "loc": [ -79.956328, 37.33585 ], "pop": 23189, "state": "VA" }, { "_id": "24053", "city": "ARARAT", "loc": [ -80.50933999999999, 36.613946 ], "pop": 960, "state": "VA" }, { "_id": "24054", "city": "AXTON", "loc": [ -79.73963999999999, 36.654839 ], "pop": 4428, "state": "VA" }, { "_id": "24055", "city": "BASSETT", "loc": [ -80.005506, 36.753425 ], "pop": 14101, "state": "VA" }, { "_id": "24059", "city": "BENT MOUNTAIN", "loc": [ -80.145501, 37.206793 ], "pop": 2388, "state": "VA" }, { "_id": "24060", "city": "WHITETHORNE", "loc": [ -80.427313, 37.228804 ], "pop": 42796, "state": "VA" }, { "_id": "24064", "city": "BLUE RIDGE", "loc": [ -79.817178, 37.388542 ], "pop": 1669, "state": "VA" }, { "_id": "24065", "city": "BOONES MILL", "loc": [ -79.95555400000001, 37.13313 ], "pop": 6767, "state": "VA" }, { "_id": "24066", "city": "LITHIA", "loc": [ -79.705287, 37.52844 ], "pop": 4145, "state": "VA" }, { "_id": "24067", "city": "CALLAWAY", "loc": [ -80.049592, 37.028495 ], "pop": 2012, "state": "VA" }, { "_id": "24069", "city": "CASCADE", "loc": [ -79.657438, 36.592697 ], "pop": 1435, "state": "VA" }, { "_id": "24070", "city": "CATAWBA", "loc": [ -80.128384, 37.369649 ], "pop": 3747, "state": "VA" }, { "_id": "24072", "city": "SIMPSONS", "loc": [ -80.23674699999999, 37.032642 ], "pop": 1048, "state": "VA" }, { "_id": "24073", "city": "CHRISTIANSBURG", "loc": [ -80.418774, 37.135286 ], "pop": 20714, "state": "VA" }, { "_id": "24076", "city": "CLAUDVILLE", "loc": [ -80.44417900000001, 36.583899 ], "pop": 1576, "state": "VA" }, { "_id": "24077", "city": "CLOVERDALE", "loc": [ -79.91276499999999, 37.366293 ], "pop": 582, "state": "VA" }, { "_id": "24078", "city": "COLLINSVILLE", "loc": [ -79.914192, 36.72379 ], "pop": 7668, "state": "VA" }, { "_id": "24079", "city": "COPPER HILL", "loc": [ -80.152469, 37.055568 ], "pop": 1765, "state": "VA" }, { "_id": "24082", "city": "CRITZ", "loc": [ -80.12976500000001, 36.621059 ], "pop": 260, "state": "VA" }, { "_id": "24083", "city": "DALEVILLE", "loc": [ -79.92109499999999, 37.41253 ], "pop": 1408, "state": "VA" }, { "_id": "24084", "city": "DUBLIN", "loc": [ -80.669696, 37.098879 ], "pop": 9521, "state": "VA" }, { "_id": "24085", "city": "EAGLE ROCK", "loc": [ -79.817215, 37.666727 ], "pop": 2939, "state": "VA" }, { "_id": "24086", "city": "EGGLESTON", "loc": [ -80.65275800000001, 37.290576 ], "pop": 374, "state": "VA" }, { "_id": "24087", "city": "IRONTO", "loc": [ -80.249658, 37.212651 ], "pop": 4216, "state": "VA" }, { "_id": "24088", "city": "FERRUM", "loc": [ -80.03492300000001, 36.916834 ], "pop": 4389, "state": "VA" }, { "_id": "24089", "city": "FIELDALE", "loc": [ -79.965245, 36.706414 ], "pop": 2594, "state": "VA" }, { "_id": "24090", "city": "FINCASTLE", "loc": [ -79.851116, 37.491099 ], "pop": 2843, "state": "VA" }, { "_id": "24091", "city": "ALUM RIDGE", "loc": [ -80.31905399999999, 36.919523 ], "pop": 4833, "state": "VA" }, { "_id": "24092", "city": "GLADEHILL", "loc": [ -79.77627099999999, 37.016866 ], "pop": 2047, "state": "VA" }, { "_id": "24093", "city": "GLEN LYN", "loc": [ -80.86335800000001, 37.366853 ], "pop": 126, "state": "VA" }, { "_id": "24094", "city": "GOLDBOND", "loc": [ -80.66315, 37.387221 ], "pop": 53, "state": "VA" }, { "_id": "24095", "city": "GOODVIEW", "loc": [ -79.72628400000001, 37.347167 ], "pop": 1686, "state": "VA" }, { "_id": "24101", "city": "HARDY", "loc": [ -79.81266100000001, 37.214473 ], "pop": 5955, "state": "VA" }, { "_id": "24102", "city": "HENRY", "loc": [ -79.99036, 36.839322 ], "pop": 1393, "state": "VA" }, { "_id": "24104", "city": "HUDDLESTON", "loc": [ -79.491017, 37.144155 ], "pop": 2299, "state": "VA" }, { "_id": "24105", "city": "INDIAN VALLEY", "loc": [ -80.57571, 36.898993 ], "pop": 502, "state": "VA" }, { "_id": "24112", "city": "MARTINSVILLE", "loc": [ -79.869136, 36.687067 ], "pop": 35994, "state": "VA" }, { "_id": "24120", "city": "MEADOWS OF DAN", "loc": [ -80.402227, 36.72504 ], "pop": 1532, "state": "VA" }, { "_id": "24121", "city": "MONETA", "loc": [ -79.652111, 37.178383 ], "pop": 4586, "state": "VA" }, { "_id": "24122", "city": "MONTVALE", "loc": [ -79.717462, 37.40696 ], "pop": 1747, "state": "VA" }, { "_id": "24124", "city": "NARROWS", "loc": [ -80.85485, 37.319846 ], "pop": 5250, "state": "VA" }, { "_id": "24127", "city": "NEW CASTLE", "loc": [ -80.17041999999999, 37.487132 ], "pop": 3400, "state": "VA" }, { "_id": "24128", "city": "NEWPORT", "loc": [ -80.50991999999999, 37.306852 ], "pop": 1578, "state": "VA" }, { "_id": "24131", "city": "PAINT BANK", "loc": [ -80.254436, 37.574482 ], "pop": 153, "state": "VA" }, { "_id": "24133", "city": "PATRICK SPRINGS", "loc": [ -80.138769, 36.674435 ], "pop": 2789, "state": "VA" }, { "_id": "24134", "city": "PEARISBURG", "loc": [ -80.726703, 37.304121 ], "pop": 5279, "state": "VA" }, { "_id": "24136", "city": "MOUNTAIN LAKE", "loc": [ -80.61550699999999, 37.33027 ], "pop": 3087, "state": "VA" }, { "_id": "24137", "city": "PENHOOK", "loc": [ -79.66449299999999, 36.920125 ], "pop": 1768, "state": "VA" }, { "_id": "24138", "city": "PILOT", "loc": [ -80.322901, 37.056476 ], "pop": 882, "state": "VA" }, { "_id": "24139", "city": "PITTSVILLE", "loc": [ -79.47941299999999, 36.971578 ], "pop": 415, "state": "VA" }, { "_id": "24141", "city": "FAIRLAWN", "loc": [ -80.571721, 37.135816 ], "pop": 22335, "state": "VA" }, { "_id": "24147", "city": "RICH CREEK", "loc": [ -80.82271799999999, 37.385048 ], "pop": 947, "state": "VA" }, { "_id": "24148", "city": "RIDGEWAY", "loc": [ -79.86859, 36.5874 ], "pop": 7953, "state": "VA" }, { "_id": "24149", "city": "RINER", "loc": [ -80.435309, 37.032209 ], "pop": 2947, "state": "VA" }, { "_id": "24150", "city": "RIPPLEMEAD", "loc": [ -80.671728, 37.366455 ], "pop": 37, "state": "VA" }, { "_id": "24151", "city": "ROCKY MOUNT", "loc": [ -79.883959, 36.989101 ], "pop": 15579, "state": "VA" }, { "_id": "24153", "city": "SALEM", "loc": [ -80.069185, 37.2853 ], "pop": 30570, "state": "VA" }, { "_id": "24161", "city": "SANDY LEVEL", "loc": [ -79.561404, 36.991042 ], "pop": 512, "state": "VA" }, { "_id": "24162", "city": "SHAWSVILLE", "loc": [ -80.27153, 37.146619 ], "pop": 2571, "state": "VA" }, { "_id": "24165", "city": "SPENCER", "loc": [ -80.037345, 36.59676 ], "pop": 1537, "state": "VA" }, { "_id": "24167", "city": "STAFFORDSVILLE", "loc": [ -80.740334, 37.245378 ], "pop": 464, "state": "VA" }, { "_id": "24168", "city": "STANLEYTOWN", "loc": [ -79.93548199999999, 36.734759 ], "pop": 153, "state": "VA" }, { "_id": "24171", "city": "STUART", "loc": [ -80.23923000000001, 36.651744 ], "pop": 7990, "state": "VA" }, { "_id": "24174", "city": "THAXTON", "loc": [ -79.652187, 37.360008 ], "pop": 1136, "state": "VA" }, { "_id": "24175", "city": "TROUTVILLE", "loc": [ -79.878636, 37.401855 ], "pop": 9211, "state": "VA" }, { "_id": "24176", "city": "UNION HALL", "loc": [ -79.686447, 37.013111 ], "pop": 804, "state": "VA" }, { "_id": "24179", "city": "STEWARTSVILLE", "loc": [ -79.835466, 37.271139 ], "pop": 18205, "state": "VA" }, { "_id": "24184", "city": "WIRTZ", "loc": [ -79.757254, 37.081794 ], "pop": 1675, "state": "VA" }, { "_id": "24185", "city": "WOOLWINE", "loc": [ -80.27742600000001, 36.792076 ], "pop": 898, "state": "VA" }, { "_id": "24201", "city": "BRISTOL", "loc": [ -82.18229700000001, 36.618093 ], "pop": 23166, "state": "VA" }, { "_id": "24210", "city": "ABINGDON", "loc": [ -82.019989, 36.691644 ], "pop": 25429, "state": "VA" }, { "_id": "24216", "city": "EXETER", "loc": [ -82.791394, 36.906001 ], "pop": 2916, "state": "VA" }, { "_id": "24217", "city": "BEE", "loc": [ -82.185632, 37.101358 ], "pop": 495, "state": "VA" }, { "_id": "24219", "city": "BIG STONE GAP", "loc": [ -82.762727, 36.858073 ], "pop": 10858, "state": "VA" }, { "_id": "24220", "city": "BIRCHLEAF", "loc": [ -82.248346, 37.169481 ], "pop": 997, "state": "VA" }, { "_id": "24221", "city": "BLACKWATER", "loc": [ -82.98658, 36.639011 ], "pop": 1008, "state": "VA" }, { "_id": "24224", "city": "CASTLEWOOD", "loc": [ -82.28757400000001, 36.876409 ], "pop": 7166, "state": "VA" }, { "_id": "24225", "city": "CLEVELAND", "loc": [ -82.131758, 36.950215 ], "pop": 1966, "state": "VA" }, { "_id": "24226", "city": "CLINCHCO", "loc": [ -82.342476, 37.140581 ], "pop": 2059, "state": "VA" }, { "_id": "24228", "city": "CLINTWOOD", "loc": [ -82.445339, 37.159206 ], "pop": 7866, "state": "VA" }, { "_id": "24230", "city": "COEBURN", "loc": [ -82.47349699999999, 36.960489 ], "pop": 11745, "state": "VA" }, { "_id": "24236", "city": "DAMASCUS", "loc": [ -81.77763299999999, 36.640264 ], "pop": 3312, "state": "VA" }, { "_id": "24237", "city": "DANTE", "loc": [ -82.281519, 37.005419 ], "pop": 1168, "state": "VA" }, { "_id": "24239", "city": "DAVENPORT", "loc": [ -82.122946, 37.068044 ], "pop": 49, "state": "VA" }, { "_id": "24243", "city": "DRYDEN", "loc": [ -82.93047799999999, 36.781825 ], "pop": 2185, "state": "VA" }, { "_id": "24244", "city": "CLINCHPORT", "loc": [ -82.80651, 36.704402 ], "pop": 5688, "state": "VA" }, { "_id": "24245", "city": "DUNGANNON", "loc": [ -82.496025, 36.82416 ], "pop": 1231, "state": "VA" }, { "_id": "24248", "city": "EWING", "loc": [ -83.50473700000001, 36.623694 ], "pop": 2599, "state": "VA" }, { "_id": "24250", "city": "FORT BLACKMORE", "loc": [ -82.610178, 36.743828 ], "pop": 1085, "state": "VA" }, { "_id": "24251", "city": "GATE CITY", "loc": [ -82.61117900000001, 36.646026 ], "pop": 7641, "state": "VA" }, { "_id": "24256", "city": "HAYSI", "loc": [ -82.28530600000001, 37.220552 ], "pop": 3813, "state": "VA" }, { "_id": "24258", "city": "HILTONS", "loc": [ -82.429929, 36.649778 ], "pop": 1937, "state": "VA" }, { "_id": "24260", "city": "COUNCIL", "loc": [ -81.996883, 37.027292 ], "pop": 6162, "state": "VA" }, { "_id": "24263", "city": "JONESVILLE", "loc": [ -83.13615, 36.689647 ], "pop": 6275, "state": "VA" }, { "_id": "24265", "city": "KEOKEE", "loc": [ -82.977161, 36.823931 ], "pop": 1807, "state": "VA" }, { "_id": "24266", "city": "LEBANON", "loc": [ -82.09563, 36.880895 ], "pop": 7818, "state": "VA" }, { "_id": "24269", "city": "MC CLURE", "loc": [ -82.38055300000001, 37.081412 ], "pop": 124, "state": "VA" }, { "_id": "24270", "city": "MENDOTA", "loc": [ -82.264888, 36.722302 ], "pop": 675, "state": "VA" }, { "_id": "24271", "city": "NICKELSVILLE", "loc": [ -82.42017199999999, 36.750221 ], "pop": 2749, "state": "VA" }, { "_id": "24272", "city": "NORA", "loc": [ -82.35002299999999, 37.018229 ], "pop": 514, "state": "VA" }, { "_id": "24273", "city": "NORTON", "loc": [ -82.624923, 36.937797 ], "pop": 4145, "state": "VA" }, { "_id": "24277", "city": "PENNINGTON GAP", "loc": [ -83.022299, 36.750752 ], "pop": 5859, "state": "VA" }, { "_id": "24279", "city": "POUND", "loc": [ -82.601555, 37.092734 ], "pop": 5330, "state": "VA" }, { "_id": "24280", "city": "ROSEDALE", "loc": [ -81.88879300000001, 36.973981 ], "pop": 2492, "state": "VA" }, { "_id": "24281", "city": "ROSE HILL", "loc": [ -83.34856499999999, 36.658257 ], "pop": 2404, "state": "VA" }, { "_id": "24282", "city": "SAINT CHARLES", "loc": [ -83.051838, 36.831515 ], "pop": 485, "state": "VA" }, { "_id": "24283", "city": "SAINT PAUL", "loc": [ -82.34184399999999, 36.932295 ], "pop": 2680, "state": "VA" }, { "_id": "24285", "city": "STONEGA", "loc": [ -82.819194, 36.950176 ], "pop": 670, "state": "VA" }, { "_id": "24289", "city": "TRAMMEL", "loc": [ -82.217563, 37.022959 ], "pop": 51, "state": "VA" }, { "_id": "24290", "city": "WEBER CITY", "loc": [ -82.545227, 36.620213 ], "pop": 2981, "state": "VA" }, { "_id": "24292", "city": "WHITETOP", "loc": [ -81.583938, 36.610559 ], "pop": 642, "state": "VA" }, { "_id": "24293", "city": "WISE", "loc": [ -82.594679, 36.975 ], "pop": 8957, "state": "VA" }, { "_id": "24301", "city": "PULASKI", "loc": [ -80.770961, 37.056708 ], "pop": 16576, "state": "VA" }, { "_id": "24311", "city": "ATKINS", "loc": [ -81.404791, 36.866532 ], "pop": 1108, "state": "VA" }, { "_id": "24312", "city": "AUSTINVILLE", "loc": [ -80.858322, 36.819461 ], "pop": 2488, "state": "VA" }, { "_id": "24313", "city": "BARREN SPRINGS", "loc": [ -80.809006, 36.907787 ], "pop": 575, "state": "VA" }, { "_id": "24314", "city": "BASTIAN", "loc": [ -81.19885499999999, 37.15742 ], "pop": 1656, "state": "VA" }, { "_id": "24315", "city": "BLAND", "loc": [ -81.020064, 37.137644 ], "pop": 3261, "state": "VA" }, { "_id": "24316", "city": "BROADFORD", "loc": [ -81.65938800000001, 36.93299 ], "pop": 132, "state": "VA" }, { "_id": "24317", "city": "CANA", "loc": [ -80.670452, 36.59574 ], "pop": 3363, "state": "VA" }, { "_id": "24318", "city": "CERES", "loc": [ -81.364272, 37.00456 ], "pop": 833, "state": "VA" }, { "_id": "24319", "city": "CHILHOWIE", "loc": [ -81.665103, 36.771912 ], "pop": 6087, "state": "VA" }, { "_id": "24322", "city": "CRIPPLE CREEK", "loc": [ -81.103928, 36.808612 ], "pop": 157, "state": "VA" }, { "_id": "24323", "city": "CROCKETT", "loc": [ -81.208883, 36.876755 ], "pop": 347, "state": "VA" }, { "_id": "24324", "city": "DRAPER", "loc": [ -80.818752, 36.969743 ], "pop": 1161, "state": "VA" }, { "_id": "24325", "city": "DUGSPUR", "loc": [ -80.612348, 36.814546 ], "pop": 1241, "state": "VA" }, { "_id": "24326", "city": "ELK CREEK", "loc": [ -81.19148800000001, 36.730579 ], "pop": 1161, "state": "VA" }, { "_id": "24328", "city": "FANCY GAP", "loc": [ -80.69074999999999, 36.663972 ], "pop": 1929, "state": "VA" }, { "_id": "24330", "city": "FRIES", "loc": [ -81.00415700000001, 36.724683 ], "pop": 4077, "state": "VA" }, { "_id": "24333", "city": "GALAX", "loc": [ -80.911744, 36.656503 ], "pop": 17442, "state": "VA" }, { "_id": "24340", "city": "GLADE SPRING", "loc": [ -81.767639, 36.7779 ], "pop": 4384, "state": "VA" }, { "_id": "24343", "city": "HILLSVILLE", "loc": [ -80.71973, 36.744225 ], "pop": 10578, "state": "VA" }, { "_id": "24347", "city": "ALLISONIA", "loc": [ -80.63817299999999, 36.997815 ], "pop": 2062, "state": "VA" }, { "_id": "24348", "city": "INDEPENDENCE", "loc": [ -81.158202, 36.629444 ], "pop": 3760, "state": "VA" }, { "_id": "24350", "city": "IVANHOE", "loc": [ -80.97791100000001, 36.827225 ], "pop": 1006, "state": "VA" }, { "_id": "24351", "city": "LAMBSBURG", "loc": [ -80.760133, 36.577483 ], "pop": 528, "state": "VA" }, { "_id": "24352", "city": "LAUREL FORK", "loc": [ -80.514776, 36.707347 ], "pop": 714, "state": "VA" }, { "_id": "24354", "city": "MARION", "loc": [ -81.534914, 36.827316 ], "pop": 16672, "state": "VA" }, { "_id": "24360", "city": "FOSTER FALLS", "loc": [ -80.921391, 36.91708 ], "pop": 4621, "state": "VA" }, { "_id": "24361", "city": "MEADOWVIEW", "loc": [ -81.85120499999999, 36.761175 ], "pop": 6288, "state": "VA" }, { "_id": "24363", "city": "MOUTH OF WILSON", "loc": [ -81.39545200000001, 36.610379 ], "pop": 1735, "state": "VA" }, { "_id": "24366", "city": "ROCKY GAP", "loc": [ -81.155236, 37.244242 ], "pop": 510, "state": "VA" }, { "_id": "24368", "city": "RURAL RETREAT", "loc": [ -81.28787199999999, 36.883616 ], "pop": 4350, "state": "VA" }, { "_id": "24370", "city": "SALTVILLE", "loc": [ -81.740201, 36.892699 ], "pop": 6739, "state": "VA" }, { "_id": "24373", "city": "SEVEN MILE FORD", "loc": [ -81.645672, 36.815329 ], "pop": 155, "state": "VA" }, { "_id": "24374", "city": "SPEEDWELL", "loc": [ -81.183404, 36.799843 ], "pop": 633, "state": "VA" }, { "_id": "24375", "city": "SUGAR GROVE", "loc": [ -81.40844300000001, 36.773633 ], "pop": 1237, "state": "VA" }, { "_id": "24377", "city": "TANNERSVILLE", "loc": [ -81.628017, 36.976331 ], "pop": 271, "state": "VA" }, { "_id": "24378", "city": "TROUT DALE", "loc": [ -81.43500400000001, 36.68546 ], "pop": 1261, "state": "VA" }, { "_id": "24380", "city": "WILLIS", "loc": [ -80.490861, 36.874927 ], "pop": 2769, "state": "VA" }, { "_id": "24381", "city": "WOODLAWN", "loc": [ -80.882437, 36.787948 ], "pop": 218, "state": "VA" }, { "_id": "24382", "city": "WYTHEVILLE", "loc": [ -81.094082, 36.940669 ], "pop": 13788, "state": "VA" }, { "_id": "24401", "city": "WOODRUM", "loc": [ -79.07519000000001, 38.145104 ], "pop": 34323, "state": "VA" }, { "_id": "24413", "city": "BLUE GRASS", "loc": [ -79.561272, 38.515231 ], "pop": 201, "state": "VA" }, { "_id": "24416", "city": "BUENA VISTA", "loc": [ -79.352311, 37.739585 ], "pop": 8464, "state": "VA" }, { "_id": "24421", "city": "CHURCHVILLE", "loc": [ -79.179126, 38.234605 ], "pop": 3411, "state": "VA" }, { "_id": "24422", "city": "CLIFTON FORGE", "loc": [ -79.805423, 37.820342 ], "pop": 7486, "state": "VA" }, { "_id": "24426", "city": "ALLEGHANY", "loc": [ -80.003176, 37.784203 ], "pop": 16958, "state": "VA" }, { "_id": "24430", "city": "CRAIGSVILLE", "loc": [ -79.36188300000001, 38.076826 ], "pop": 3008, "state": "VA" }, { "_id": "24431", "city": "CRIMORA", "loc": [ -78.841275, 38.168422 ], "pop": 2153, "state": "VA" }, { "_id": "24432", "city": "DEERFIELD", "loc": [ -79.41518600000001, 38.184231 ], "pop": 389, "state": "VA" }, { "_id": "24433", "city": "DOE HILL", "loc": [ -79.482176, 38.390248 ], "pop": 265, "state": "VA" }, { "_id": "24435", "city": "FAIRFIELD", "loc": [ -79.297922, 37.877825 ], "pop": 1314, "state": "VA" }, { "_id": "24437", "city": "FORT DEFIANCE", "loc": [ -78.93258299999999, 38.210928 ], "pop": 824, "state": "VA" }, { "_id": "24439", "city": "GOSHEN", "loc": [ -79.47732499999999, 37.987813 ], "pop": 1173, "state": "VA" }, { "_id": "24440", "city": "GREENVILLE", "loc": [ -79.135876, 38.001804 ], "pop": 1975, "state": "VA" }, { "_id": "24441", "city": "GROTTOES", "loc": [ -78.82552800000001, 38.248371 ], "pop": 3879, "state": "VA" }, { "_id": "24442", "city": "HEAD WATERS", "loc": [ -79.435272, 38.294611 ], "pop": 87, "state": "VA" }, { "_id": "24444", "city": "HIGHTOWN", "loc": [ -79.592927, 38.464597 ], "pop": 192, "state": "VA" }, { "_id": "24445", "city": "HOT SPRINGS", "loc": [ -79.871662, 37.963784 ], "pop": 2506, "state": "VA" }, { "_id": "24450", "city": "LEXINGTON", "loc": [ -79.458111, 37.788463 ], "pop": 14306, "state": "VA" }, { "_id": "24458", "city": "MC DOWELL", "loc": [ -79.49879799999999, 38.326588 ], "pop": 353, "state": "VA" }, { "_id": "24459", "city": "MIDDLEBROOK", "loc": [ -79.281165, 38.024158 ], "pop": 527, "state": "VA" }, { "_id": "24460", "city": "MILLBORO SPRING", "loc": [ -79.640649, 38.005795 ], "pop": 1586, "state": "VA" }, { "_id": "24464", "city": "MONTEBELLO", "loc": [ -79.06107900000001, 37.839931 ], "pop": 579, "state": "VA" }, { "_id": "24465", "city": "MONTEREY", "loc": [ -79.59407, 38.405821 ], "pop": 1335, "state": "VA" }, { "_id": "24467", "city": "MOUNT SIDNEY", "loc": [ -78.97296, 38.261185 ], "pop": 1787, "state": "VA" }, { "_id": "24468", "city": "MUSTOE", "loc": [ -79.659137, 38.286216 ], "pop": 202, "state": "VA" }, { "_id": "24471", "city": "PORT REPUBLIC", "loc": [ -78.810388, 38.317167 ], "pop": 1196, "state": "VA" }, { "_id": "24472", "city": "RAPHINE", "loc": [ -79.221903, 37.937353 ], "pop": 2238, "state": "VA" }, { "_id": "24473", "city": "ROCKBRIDGE BATHS", "loc": [ -79.387421, 37.896458 ], "pop": 677, "state": "VA" }, { "_id": "24475", "city": "SPOTTSWOOD", "loc": [ -79.221141, 37.968418 ], "pop": 393, "state": "VA" }, { "_id": "24477", "city": "STUARTS DRAFT", "loc": [ -79.029821, 38.014423 ], "pop": 5317, "state": "VA" }, { "_id": "24479", "city": "SWOOPE", "loc": [ -79.187281, 38.159117 ], "pop": 1477, "state": "VA" }, { "_id": "24482", "city": "VERONA", "loc": [ -79.005872, 38.203726 ], "pop": 4491, "state": "VA" }, { "_id": "24483", "city": "VESUVIUS", "loc": [ -79.21348500000001, 37.83777 ], "pop": 548, "state": "VA" }, { "_id": "24484", "city": "BOLAR", "loc": [ -79.80779200000001, 38.085119 ], "pop": 940, "state": "VA" }, { "_id": "24485", "city": "WEST AUGUSTA", "loc": [ -79.320139, 38.274397 ], "pop": 350, "state": "VA" }, { "_id": "24486", "city": "WEYERS CAVE", "loc": [ -78.92345400000001, 38.293145 ], "pop": 2190, "state": "VA" }, { "_id": "24487", "city": "BURNSVILLE", "loc": [ -79.65060699999999, 38.177907 ], "pop": 170, "state": "VA" }, { "_id": "24501", "city": "LYNCHBURG", "loc": [ -79.171464, 37.386228 ], "pop": 27264, "state": "VA" }, { "_id": "24502", "city": "TIMBERLAKE", "loc": [ -79.211783, 37.359635 ], "pop": 28755, "state": "VA" }, { "_id": "24503", "city": "LYNCHBURG", "loc": [ -79.204982, 37.437646 ], "pop": 17816, "state": "VA" }, { "_id": "24504", "city": "LYNCHBURG", "loc": [ -79.12142, 37.390422 ], "pop": 10889, "state": "VA" }, { "_id": "24517", "city": "ALTAVISTA", "loc": [ -79.291145, 37.122162 ], "pop": 4043, "state": "VA" }, { "_id": "24520", "city": "ALTON", "loc": [ -79.02023699999999, 36.589352 ], "pop": 2557, "state": "VA" }, { "_id": "24521", "city": "AMHERST", "loc": [ -79.050572, 37.602677 ], "pop": 7343, "state": "VA" }, { "_id": "24522", "city": "APPOMATTOX", "loc": [ -78.822445, 37.352951 ], "pop": 8904, "state": "VA" }, { "_id": "24523", "city": "BEDFORD", "loc": [ -79.53310999999999, 37.315345 ], "pop": 16245, "state": "VA" }, { "_id": "24526", "city": "BIG ISLAND", "loc": [ -79.382706, 37.530556 ], "pop": 1313, "state": "VA" }, { "_id": "24527", "city": "BLAIRS", "loc": [ -79.37886899999999, 36.667408 ], "pop": 5007, "state": "VA" }, { "_id": "24528", "city": "BROOKNEAL", "loc": [ -78.922679, 37.082663 ], "pop": 4364, "state": "VA" }, { "_id": "24529", "city": "BUFFALO JUNCTION", "loc": [ -78.60926600000001, 36.61676 ], "pop": 3300, "state": "VA" }, { "_id": "24530", "city": "CALLANDS", "loc": [ -79.62877899999999, 36.764748 ], "pop": 2143, "state": "VA" }, { "_id": "24531", "city": "CHATHAM", "loc": [ -79.429659, 36.83099 ], "pop": 7825, "state": "VA" }, { "_id": "24534", "city": "CLOVER", "loc": [ -78.78618, 36.863695 ], "pop": 1516, "state": "VA" }, { "_id": "24536", "city": "COLEMAN FALLS", "loc": [ -79.315757, 37.488659 ], "pop": 286, "state": "VA" }, { "_id": "24538", "city": "CONCORD", "loc": [ -78.98035299999999, 37.336953 ], "pop": 3845, "state": "VA" }, { "_id": "24539", "city": "CRYSTAL HILL", "loc": [ -78.970634, 36.873217 ], "pop": 280, "state": "VA" }, { "_id": "24540", "city": "DANVILLE", "loc": [ -79.412441, 36.621789 ], "pop": 32061, "state": "VA" }, { "_id": "24541", "city": "DANVILLE", "loc": [ -79.441112, 36.577937 ], "pop": 33751, "state": "VA" }, { "_id": "24549", "city": "DRY FORK", "loc": [ -79.457966, 36.743008 ], "pop": 1989, "state": "VA" }, { "_id": "24550", "city": "EVINGTON", "loc": [ -79.231723, 37.261049 ], "pop": 4961, "state": "VA" }, { "_id": "24551", "city": "FOREST", "loc": [ -79.279116, 37.337878 ], "pop": 12905, "state": "VA" }, { "_id": "24553", "city": "GLADSTONE", "loc": [ -78.850838, 37.547252 ], "pop": 2025, "state": "VA" }, { "_id": "24554", "city": "GLADYS", "loc": [ -79.104794, 37.138581 ], "pop": 3511, "state": "VA" }, { "_id": "24555", "city": "GLASGOW", "loc": [ -79.45898, 37.643 ], "pop": 1604, "state": "VA" }, { "_id": "24556", "city": "GOODE", "loc": [ -79.381277, 37.348098 ], "pop": 2516, "state": "VA" }, { "_id": "24557", "city": "GRETNA", "loc": [ -79.338874, 36.969515 ], "pop": 8304, "state": "VA" }, { "_id": "24558", "city": "HALIFAX", "loc": [ -78.94149400000001, 36.762571 ], "pop": 7127, "state": "VA" }, { "_id": "24562", "city": "HOWARDSVILLE", "loc": [ -78.58235500000001, 37.765891 ], "pop": 21, "state": "VA" }, { "_id": "24563", "city": "HURT", "loc": [ -79.299995, 37.079787 ], "pop": 5283, "state": "VA" }, { "_id": "24565", "city": "JAVA", "loc": [ -79.187034, 36.858582 ], "pop": 1111, "state": "VA" }, { "_id": "24566", "city": "KEELING", "loc": [ -79.278284, 36.715577 ], "pop": 2651, "state": "VA" }, { "_id": "24569", "city": "LONG ISLAND", "loc": [ -79.121933, 37.064374 ], "pop": 1308, "state": "VA" }, { "_id": "24570", "city": "LOWRY", "loc": [ -79.45559900000001, 37.33361 ], "pop": 1342, "state": "VA" }, { "_id": "24571", "city": "LYNCH STATION", "loc": [ -79.329716, 37.152826 ], "pop": 2819, "state": "VA" }, { "_id": "24572", "city": "MADISON HEIGHTS", "loc": [ -79.11408900000001, 37.453102 ], "pop": 15389, "state": "VA" }, { "_id": "24574", "city": "MONROE", "loc": [ -79.17034, 37.541366 ], "pop": 5050, "state": "VA" }, { "_id": "24577", "city": "LENNIG", "loc": [ -78.989766, 36.944179 ], "pop": 5018, "state": "VA" }, { "_id": "24578", "city": "NATURAL BRIDGE", "loc": [ -79.533045, 37.660625 ], "pop": 1236, "state": "VA" }, { "_id": "24579", "city": "NATURAL BRIDGE S", "loc": [ -79.503905, 37.595667 ], "pop": 1419, "state": "VA" }, { "_id": "24580", "city": "NELSON", "loc": [ -78.670959, 36.558558 ], "pop": 131, "state": "VA" }, { "_id": "24586", "city": "RINGGOLD", "loc": [ -79.298835, 36.603483 ], "pop": 4728, "state": "VA" }, { "_id": "24588", "city": "RUSTBURG", "loc": [ -79.12150699999999, 37.25454 ], "pop": 4723, "state": "VA" }, { "_id": "24589", "city": "SCOTTSBURG", "loc": [ -78.786601, 36.786194 ], "pop": 2965, "state": "VA" }, { "_id": "24590", "city": "SCOTTSVILLE", "loc": [ -78.47398099999999, 37.804937 ], "pop": 5769, "state": "VA" }, { "_id": "24592", "city": "SOUTH BOSTON", "loc": [ -78.918829, 36.696335 ], "pop": 12624, "state": "VA" }, { "_id": "24593", "city": "SPOUT SPRING", "loc": [ -78.90588700000001, 37.364345 ], "pop": 872, "state": "VA" }, { "_id": "24594", "city": "SUTHERLIN", "loc": [ -79.19495000000001, 36.625831 ], "pop": 1018, "state": "VA" }, { "_id": "24597", "city": "INGRAM", "loc": [ -79.110874, 36.786684 ], "pop": 1648, "state": "VA" }, { "_id": "24598", "city": "VIRGILINA", "loc": [ -78.760516, 36.606231 ], "pop": 2435, "state": "VA" }, { "_id": "24599", "city": "WINGINA", "loc": [ -78.755709, 37.641473 ], "pop": 833, "state": "VA" }, { "_id": "24602", "city": "BANDY", "loc": [ -81.6508, 37.166112 ], "pop": 2348, "state": "VA" }, { "_id": "24603", "city": "CONAWAY", "loc": [ -82.22459600000001, 37.318638 ], "pop": 1151, "state": "VA" }, { "_id": "24605", "city": "BLUEFIELD", "loc": [ -81.325114, 37.249512 ], "pop": 10931, "state": "VA" }, { "_id": "24609", "city": "CEDAR BLUFF", "loc": [ -81.76678800000001, 37.079076 ], "pop": 3486, "state": "VA" }, { "_id": "24613", "city": "FALLS MILLS", "loc": [ -81.318234, 37.271023 ], "pop": 960, "state": "VA" }, { "_id": "24614", "city": "GRUNDY", "loc": [ -82.106077, 37.296678 ], "pop": 10245, "state": "VA" }, { "_id": "24620", "city": "HURLEY", "loc": [ -82.02616399999999, 37.401741 ], "pop": 5296, "state": "VA" }, { "_id": "24622", "city": "JEWELL VALLEY", "loc": [ -81.810654, 37.222372 ], "pop": 1213, "state": "VA" }, { "_id": "24627", "city": "MAVISDALE", "loc": [ -82.221599, 37.200817 ], "pop": 141, "state": "VA" }, { "_id": "24630", "city": "TIPTOP", "loc": [ -81.525256, 37.152447 ], "pop": 6771, "state": "VA" }, { "_id": "24631", "city": "PATTERSON", "loc": [ -81.99157700000001, 37.184074 ], "pop": 1356, "state": "VA" }, { "_id": "24634", "city": "PILGRIMS KNOB", "loc": [ -81.911896, 37.298944 ], "pop": 766, "state": "VA" }, { "_id": "24637", "city": "POUNDING MILL", "loc": [ -81.730052, 37.059584 ], "pop": 3942, "state": "VA" }, { "_id": "24639", "city": "RAVEN", "loc": [ -81.889557, 37.148056 ], "pop": 3441, "state": "VA" }, { "_id": "24641", "city": "RICHLANDS", "loc": [ -81.812286, 37.094051 ], "pop": 8026, "state": "VA" }, { "_id": "24646", "city": "ROWE", "loc": [ -82.02738100000001, 37.127593 ], "pop": 1531, "state": "VA" }, { "_id": "24649", "city": "SWORDS CREEK", "loc": [ -81.908385, 37.073792 ], "pop": 2756, "state": "VA" }, { "_id": "24651", "city": "TAZEWELL", "loc": [ -81.50997599999999, 37.107773 ], "pop": 7023, "state": "VA" }, { "_id": "24656", "city": "VANSANT", "loc": [ -82.12771499999999, 37.173811 ], "pop": 4724, "state": "VA" }, { "_id": "24657", "city": "WHITEWOOD", "loc": [ -81.890361, 37.264409 ], "pop": 731, "state": "VA" }, { "_id": "24701", "city": "BLUEWELL", "loc": [ -81.229023, 37.279788 ], "pop": 22561, "state": "WV" }, { "_id": "24712", "city": "ATHENS", "loc": [ -80.997362, 37.432298 ], "pop": 2863, "state": "WV" }, { "_id": "24714", "city": "BEESON", "loc": [ -81.206215, 37.490894 ], "pop": 140, "state": "WV" }, { "_id": "24715", "city": "BRAMWELL", "loc": [ -81.32556, 37.332114 ], "pop": 762, "state": "WV" }, { "_id": "24726", "city": "HERNDON", "loc": [ -81.346777, 37.526431 ], "pop": 2220, "state": "WV" }, { "_id": "24731", "city": "KEGLEY", "loc": [ -81.140117, 37.408384 ], "pop": 259, "state": "WV" }, { "_id": "24733", "city": "LASHMEET", "loc": [ -81.21384500000001, 37.441997 ], "pop": 730, "state": "WV" }, { "_id": "24736", "city": "DOTT", "loc": [ -81.268017, 37.441778 ], "pop": 1365, "state": "WV" }, { "_id": "24740", "city": "ELGOOD", "loc": [ -81.086386, 37.366817 ], "pop": 29167, "state": "WV" }, { "_id": "24747", "city": "DUHRING", "loc": [ -81.218766, 37.38889 ], "pop": 5336, "state": "WV" }, { "_id": "24801", "city": "WELCH", "loc": [ -81.534412, 37.400032 ], "pop": 11143, "state": "WV" }, { "_id": "24810", "city": "MC DOWELL", "loc": [ -81.387601, 37.414348 ], "pop": 1968, "state": "WV" }, { "_id": "24818", "city": "BRENTON", "loc": [ -81.649502, 37.584362 ], "pop": 1908, "state": "WV" }, { "_id": "24819", "city": "VALLSCREEK", "loc": [ -81.69552, 37.295548 ], "pop": 4476, "state": "WV" }, { "_id": "24822", "city": "CLEAR FORK", "loc": [ -81.689268, 37.646301 ], "pop": 1173, "state": "WV" }, { "_id": "24823", "city": "COAL MOUNTAIN", "loc": [ -81.70786200000001, 37.688486 ], "pop": 850, "state": "WV" }, { "_id": "24827", "city": "CYCLONE", "loc": [ -81.650458, 37.74466 ], "pop": 1328, "state": "WV" }, { "_id": "24828", "city": "ASCO", "loc": [ -81.667889, 37.468339 ], "pop": 2765, "state": "WV" }, { "_id": "24834", "city": "FANROCK", "loc": [ -81.623631, 37.562721 ], "pop": 120, "state": "WV" }, { "_id": "24839", "city": "HANOVER", "loc": [ -81.81361699999999, 37.563029 ], "pop": 1523, "state": "WV" }, { "_id": "24844", "city": "IAEGER", "loc": [ -81.811992, 37.449878 ], "pop": 5720, "state": "WV" }, { "_id": "24849", "city": "JESSE", "loc": [ -81.562831, 37.660844 ], "pop": 585, "state": "WV" }, { "_id": "24850", "city": "JOLO", "loc": [ -81.831602, 37.332431 ], "pop": 3086, "state": "WV" }, { "_id": "24859", "city": "MARIANNA", "loc": [ -81.576052, 37.611425 ], "pop": 1008, "state": "WV" }, { "_id": "24860", "city": "MATHENY", "loc": [ -81.59571099999999, 37.661956 ], "pop": 1139, "state": "WV" }, { "_id": "24862", "city": "MOHAWK", "loc": [ -81.914174, 37.487926 ], "pop": 1705, "state": "WV" }, { "_id": "24868", "city": "ALGOMA", "loc": [ -81.41583900000001, 37.395262 ], "pop": 2158, "state": "WV" }, { "_id": "24869", "city": "NORTH SPRING", "loc": [ -81.797276, 37.517954 ], "pop": 226, "state": "WV" }, { "_id": "24870", "city": "OCEANA", "loc": [ -81.62156400000001, 37.703874 ], "pop": 4243, "state": "WV" }, { "_id": "24873", "city": "PAYNESVILLE", "loc": [ -81.68449, 37.365273 ], "pop": 1895, "state": "WV" }, { "_id": "24874", "city": "PINEVILLE", "loc": [ -81.533642, 37.584022 ], "pop": 4142, "state": "WV" }, { "_id": "24882", "city": "SIMON", "loc": [ -81.758566, 37.619708 ], "pop": 782, "state": "WV" }, { "_id": "24884", "city": "SQUIRE", "loc": [ -81.580478, 37.237019 ], "pop": 995, "state": "WV" }, { "_id": "24901", "city": "LEWISBURG", "loc": [ -80.440669, 37.808253 ], "pop": 8645, "state": "WV" }, { "_id": "24910", "city": "DAWSON", "loc": [ -80.671306, 37.730148 ], "pop": 4475, "state": "WV" }, { "_id": "24915", "city": "ARBOVALE", "loc": [ -79.793403, 38.454575 ], "pop": 528, "state": "WV" }, { "_id": "24916", "city": "ASBURY", "loc": [ -80.565319, 37.848766 ], "pop": 598, "state": "WV" }, { "_id": "24917", "city": "AUTO", "loc": [ -80.117105, 37.981697 ], "pop": 379, "state": "WV" }, { "_id": "24918", "city": "BALLARD", "loc": [ -80.76139000000001, 37.49803 ], "pop": 1194, "state": "WV" }, { "_id": "24919", "city": "BALLENGEE", "loc": [ -80.74033900000001, 37.616931 ], "pop": 184, "state": "WV" }, { "_id": "24920", "city": "BARTOW", "loc": [ -79.795242, 38.551266 ], "pop": 748, "state": "WV" }, { "_id": "24923", "city": "BOZOO", "loc": [ -80.814954, 37.457015 ], "pop": 651, "state": "WV" }, { "_id": "24924", "city": "BUCKEYE", "loc": [ -80.139342, 38.181506 ], "pop": 550, "state": "WV" }, { "_id": "24925", "city": "CALDWELL", "loc": [ -80.377298, 37.773488 ], "pop": 312, "state": "WV" }, { "_id": "24927", "city": "STONY BOTTOM", "loc": [ -79.885278, 38.433659 ], "pop": 844, "state": "WV" }, { "_id": "24928", "city": "CLINTONVILLE", "loc": [ -80.626192, 37.906141 ], "pop": 373, "state": "WV" }, { "_id": "24931", "city": "CRAWLEY", "loc": [ -80.6309, 37.939676 ], "pop": 286, "state": "WV" }, { "_id": "24934", "city": "DUNMORE", "loc": [ -79.855557, 38.363605 ], "pop": 265, "state": "WV" }, { "_id": "24935", "city": "INDIAN MILLS", "loc": [ -80.81492299999999, 37.56005 ], "pop": 368, "state": "WV" }, { "_id": "24936", "city": "FORT SPRING", "loc": [ -80.566723, 37.745661 ], "pop": 397, "state": "WV" }, { "_id": "24938", "city": "ANTHONY", "loc": [ -80.36469200000001, 37.90361 ], "pop": 814, "state": "WV" }, { "_id": "24941", "city": "GAP MILLS", "loc": [ -80.390497, 37.527978 ], "pop": 289, "state": "WV" }, { "_id": "24942", "city": "GLACE", "loc": [ -80.37471600000001, 37.609381 ], "pop": 399, "state": "WV" }, { "_id": "24943", "city": "GRASSY MEADOWS", "loc": [ -80.73023999999999, 37.842757 ], "pop": 185, "state": "WV" }, { "_id": "24944", "city": "GREEN BANK", "loc": [ -79.801535, 38.409664 ], "pop": 365, "state": "WV" }, { "_id": "24945", "city": "GREENVILLE", "loc": [ -80.67612800000001, 37.521184 ], "pop": 1139, "state": "WV" }, { "_id": "24946", "city": "DROOP", "loc": [ -80.244578, 38.125942 ], "pop": 1393, "state": "WV" }, { "_id": "24950", "city": "KIEFFER", "loc": [ -80.59022, 37.942998 ], "pop": 2, "state": "WV" }, { "_id": "24951", "city": "LINDSIDE", "loc": [ -80.62027999999999, 37.481651 ], "pop": 810, "state": "WV" }, { "_id": "24954", "city": "MINNEHAHA SPRING", "loc": [ -80.060884, 38.229303 ], "pop": 3713, "state": "WV" }, { "_id": "24957", "city": "MAXWELTON", "loc": [ -80.427492, 37.900465 ], "pop": 139, "state": "WV" }, { "_id": "24958", "city": "MEADOW BLUFF", "loc": [ -80.728162, 37.89587 ], "pop": 233, "state": "WV" }, { "_id": "24962", "city": "PENCE SPRINGS", "loc": [ -80.709234, 37.676694 ], "pop": 310, "state": "WV" }, { "_id": "24963", "city": "PETERSTOWN", "loc": [ -80.76860499999999, 37.414709 ], "pop": 3117, "state": "WV" }, { "_id": "24966", "city": "RENICK", "loc": [ -80.36529400000001, 37.992168 ], "pop": 1530, "state": "WV" }, { "_id": "24970", "city": "RONCEVERTE", "loc": [ -80.462583, 37.741758 ], "pop": 4167, "state": "WV" }, { "_id": "24974", "city": "SECONDCREEK", "loc": [ -80.41807900000001, 37.660246 ], "pop": 452, "state": "WV" }, { "_id": "24976", "city": "PICKAWAY", "loc": [ -80.51690499999999, 37.662078 ], "pop": 971, "state": "WV" }, { "_id": "24977", "city": "SMOOT", "loc": [ -80.668038, 37.877166 ], "pop": 634, "state": "WV" }, { "_id": "24980", "city": "SWEET SPRINGS", "loc": [ -80.298959, 37.611159 ], "pop": 571, "state": "WV" }, { "_id": "24981", "city": "TALCOTT", "loc": [ -80.746143, 37.649079 ], "pop": 511, "state": "WV" }, { "_id": "24983", "city": "UNION", "loc": [ -80.524767, 37.580175 ], "pop": 1737, "state": "WV" }, { "_id": "24984", "city": "WAITEVILLE", "loc": [ -80.463447, 37.464514 ], "pop": 62, "state": "WV" }, { "_id": "24985", "city": "WAYSIDE", "loc": [ -80.745806, 37.593657 ], "pop": 421, "state": "WV" }, { "_id": "24986", "city": "NEOLA", "loc": [ -80.27464000000001, 37.814618 ], "pop": 5096, "state": "WV" }, { "_id": "24991", "city": "TROUT", "loc": [ -80.517321, 37.94421 ], "pop": 998, "state": "WV" }, { "_id": "24993", "city": "WOLFCREEK", "loc": [ -80.611254, 37.618788 ], "pop": 249, "state": "WV" }, { "_id": "25003", "city": "ALUM CREEK", "loc": [ -81.786258, 38.285814 ], "pop": 1450, "state": "WV" }, { "_id": "25004", "city": "AMEAGLE", "loc": [ -81.406507, 37.964068 ], "pop": 623, "state": "WV" }, { "_id": "25005", "city": "AMMA", "loc": [ -81.253182, 38.545518 ], "pop": 414, "state": "WV" }, { "_id": "25007", "city": "ARNETT", "loc": [ -81.435484, 37.850214 ], "pop": 2073, "state": "WV" }, { "_id": "25008", "city": "ARTIE", "loc": [ -81.378772, 37.918139 ], "pop": 407, "state": "WV" }, { "_id": "25009", "city": "ASHFORD", "loc": [ -81.711324, 38.182291 ], "pop": 1329, "state": "WV" }, { "_id": "25010", "city": "BALD KNOB", "loc": [ -81.62294300000001, 37.844023 ], "pop": 666, "state": "WV" }, { "_id": "25013", "city": "BARRETT", "loc": [ -81.64831, 37.880201 ], "pop": 50, "state": "WV" }, { "_id": "25015", "city": "DIAMOND", "loc": [ -81.50581200000001, 38.225381 ], "pop": 7120, "state": "WV" }, { "_id": "25018", "city": "BENTREE", "loc": [ -81.21565, 38.297088 ], "pop": 377, "state": "WV" }, { "_id": "25019", "city": "FOLA", "loc": [ -81.106838, 38.365947 ], "pop": 793, "state": "WV" }, { "_id": "25021", "city": "BIM", "loc": [ -81.688047, 37.893437 ], "pop": 1061, "state": "WV" }, { "_id": "25024", "city": "BLOOMINGROSE", "loc": [ -81.636737, 38.141189 ], "pop": 191, "state": "WV" }, { "_id": "25025", "city": "BLOUNT", "loc": [ -81.40519399999999, 38.312116 ], "pop": 583, "state": "WV" }, { "_id": "25028", "city": "BOB WHITE", "loc": [ -81.720884, 37.958711 ], "pop": 570, "state": "WV" }, { "_id": "25030", "city": "BOMONT", "loc": [ -81.21999, 38.407295 ], "pop": 129, "state": "WV" }, { "_id": "25033", "city": "BUFFALO", "loc": [ -81.94997100000001, 38.60924 ], "pop": 1898, "state": "WV" }, { "_id": "25034", "city": "BURNWELL", "loc": [ -81.37647, 38.053014 ], "pop": 23, "state": "WV" }, { "_id": "25035", "city": "CABIN CREEK", "loc": [ -81.515258, 38.185795 ], "pop": 1289, "state": "WV" }, { "_id": "25039", "city": "CEDAR GROVE", "loc": [ -81.406711, 38.213286 ], "pop": 3463, "state": "WV" }, { "_id": "25043", "city": "CLAY", "loc": [ -81.069588, 38.476354 ], "pop": 2881, "state": "WV" }, { "_id": "25044", "city": "CLEAR CREEK", "loc": [ -81.320866, 37.89158 ], "pop": 262, "state": "WV" }, { "_id": "25045", "city": "QUICK", "loc": [ -81.356039, 38.477687 ], "pop": 5864, "state": "WV" }, { "_id": "25046", "city": "CLIO", "loc": [ -81.307188, 38.572686 ], "pop": 458, "state": "WV" }, { "_id": "25047", "city": "CLOTHIER", "loc": [ -81.988142, 37.79333 ], "pop": 1379, "state": "WV" }, { "_id": "25048", "city": "COLCORD", "loc": [ -81.443699, 37.949166 ], "pop": 405, "state": "WV" }, { "_id": "25049", "city": "COMFORT", "loc": [ -81.596177, 38.137191 ], "pop": 889, "state": "WV" }, { "_id": "25051", "city": "COSTA", "loc": [ -81.708015, 38.164693 ], "pop": 134, "state": "WV" }, { "_id": "25053", "city": "DANVILLE", "loc": [ -81.85422699999999, 38.03356 ], "pop": 4129, "state": "WV" }, { "_id": "25059", "city": "DIXIE", "loc": [ -81.186249, 38.26631 ], "pop": 795, "state": "WV" }, { "_id": "25060", "city": "DOROTHY", "loc": [ -81.496842, 37.96219 ], "pop": 524, "state": "WV" }, { "_id": "25062", "city": "DRY CREEK", "loc": [ -81.481398, 37.860686 ], "pop": 209, "state": "WV" }, { "_id": "25063", "city": "DUCK", "loc": [ -80.976416, 38.564652 ], "pop": 679, "state": "WV" }, { "_id": "25064", "city": "DUNBAR", "loc": [ -81.742467, 38.368271 ], "pop": 11543, "state": "WV" }, { "_id": "25071", "city": "FRAME", "loc": [ -81.481739, 38.432317 ], "pop": 10333, "state": "WV" }, { "_id": "25079", "city": "FALLING ROCK", "loc": [ -81.38087400000001, 38.475579 ], "pop": 353, "state": "WV" }, { "_id": "25081", "city": "FOSTER", "loc": [ -81.76587600000001, 38.090819 ], "pop": 1584, "state": "WV" }, { "_id": "25082", "city": "FRAZIERS BOTTOM", "loc": [ -82.01106799999999, 38.551678 ], "pop": 911, "state": "WV" }, { "_id": "25083", "city": "WHITTAKER", "loc": [ -81.386231, 38.189406 ], "pop": 2542, "state": "WV" }, { "_id": "25085", "city": "GAULEY BRIDGE", "loc": [ -81.19596, 38.168899 ], "pop": 826, "state": "WV" }, { "_id": "25088", "city": "GLEN", "loc": [ -81.223401, 38.368989 ], "pop": 74, "state": "WV" }, { "_id": "25093", "city": "GORDON", "loc": [ -81.67131999999999, 37.978191 ], "pop": 251, "state": "WV" }, { "_id": "25103", "city": "HANSFORD", "loc": [ -81.395026, 38.127158 ], "pop": 165, "state": "WV" }, { "_id": "25105", "city": "HARRISON", "loc": [ -80.916068, 38.498979 ], "pop": 163, "state": "WV" }, { "_id": "25106", "city": "HENDERSON", "loc": [ -82.136381, 38.826512 ], "pop": 747, "state": "WV" }, { "_id": "25107", "city": "HERNSHAW", "loc": [ -81.61298600000001, 38.194212 ], "pop": 745, "state": "WV" }, { "_id": "25108", "city": "HEWETT", "loc": [ -81.850919, 37.958097 ], "pop": 625, "state": "WV" }, { "_id": "25111", "city": "INDORE", "loc": [ -81.157495, 38.339672 ], "pop": 1173, "state": "WV" }, { "_id": "25113", "city": "BIG OTTER", "loc": [ -81.033506, 38.530476 ], "pop": 145, "state": "WV" }, { "_id": "25114", "city": "RAMAGE", "loc": [ -81.80030499999999, 37.957023 ], "pop": 593, "state": "WV" }, { "_id": "25115", "city": "KANAWHA FALLS", "loc": [ -81.162753, 38.107932 ], "pop": 98, "state": "WV" }, { "_id": "25118", "city": "KIMBERLY", "loc": [ -81.321721, 38.124928 ], "pop": 108, "state": "WV" }, { "_id": "25119", "city": "KINCAID", "loc": [ -81.26897, 38.032065 ], "pop": 94, "state": "WV" }, { "_id": "25121", "city": "LAKE", "loc": [ -81.95115199999999, 37.946191 ], "pop": 3384, "state": "WV" }, { "_id": "25122", "city": "CARBON", "loc": [ -81.451228, 38.098249 ], "pop": 2581, "state": "WV" }, { "_id": "25123", "city": "ARBUCKLE", "loc": [ -81.909244, 38.753046 ], "pop": 2325, "state": "WV" }, { "_id": "25124", "city": "LIBERTY", "loc": [ -81.767813, 38.619978 ], "pop": 1050, "state": "WV" }, { "_id": "25125", "city": "LIZEMORES", "loc": [ -81.16325500000001, 38.336609 ], "pop": 84, "state": "WV" }, { "_id": "25130", "city": "MADISON", "loc": [ -81.793757, 38.044426 ], "pop": 4476, "state": "WV" }, { "_id": "25132", "city": "MAMMOTH", "loc": [ -81.350893, 38.258319 ], "pop": 486, "state": "WV" }, { "_id": "25133", "city": "MAYSEL", "loc": [ -81.122653, 38.493924 ], "pop": 223, "state": "WV" }, { "_id": "25136", "city": "MONTGOMERY", "loc": [ -81.28135399999999, 38.141232 ], "pop": 10392, "state": "WV" }, { "_id": "25139", "city": "MOUNT CARBON", "loc": [ -81.33337299999999, 38.160097 ], "pop": 0, "state": "WV" }, { "_id": "25140", "city": "NAOMA", "loc": [ -81.521372, 37.915381 ], "pop": 864, "state": "WV" }, { "_id": "25141", "city": "NEBO", "loc": [ -81.025657, 38.627069 ], "pop": 222, "state": "WV" }, { "_id": "25142", "city": "NELLIS", "loc": [ -81.73990499999999, 38.152066 ], "pop": 104, "state": "WV" }, { "_id": "25143", "city": "NITRO", "loc": [ -81.829311, 38.419323 ], "pop": 9525, "state": "WV" }, { "_id": "25148", "city": "ORGAS", "loc": [ -81.57383, 38.073646 ], "pop": 840, "state": "WV" }, { "_id": "25150", "city": "OVAPA", "loc": [ -81.14846, 38.523398 ], "pop": 525, "state": "WV" }, { "_id": "25154", "city": "PEYTONA", "loc": [ -81.701836, 38.124952 ], "pop": 754, "state": "WV" }, { "_id": "25158", "city": "PLINY", "loc": [ -82.015494, 38.614206 ], "pop": 352, "state": "WV" }, { "_id": "25159", "city": "LANHAM", "loc": [ -81.80511, 38.488297 ], "pop": 5813, "state": "WV" }, { "_id": "25160", "city": "POND GAP", "loc": [ -81.28658, 38.290434 ], "pop": 394, "state": "WV" }, { "_id": "25161", "city": "POWELLTON", "loc": [ -81.31792299999999, 38.099172 ], "pop": 1148, "state": "WV" }, { "_id": "25163", "city": "WILLIAMS MOUNTAI", "loc": [ -81.623901, 38.008351 ], "pop": 684, "state": "WV" }, { "_id": "25164", "city": "PIGEON", "loc": [ -81.226286, 38.472167 ], "pop": 1064, "state": "WV" }, { "_id": "25165", "city": "RACINE", "loc": [ -81.655742, 38.149524 ], "pop": 539, "state": "WV" }, { "_id": "25168", "city": "RED HOUSE", "loc": [ -81.90447399999999, 38.546298 ], "pop": 3472, "state": "WV" }, { "_id": "25169", "city": "RIDGEVIEW", "loc": [ -81.772548, 38.148576 ], "pop": 793, "state": "WV" }, { "_id": "25172", "city": "ROBERTSBURG", "loc": [ -81.9109, 38.644143 ], "pop": 590, "state": "WV" }, { "_id": "25173", "city": "ROBSON", "loc": [ -81.248758, 38.097263 ], "pop": 39, "state": "WV" }, { "_id": "25174", "city": "ROCK CREEK", "loc": [ -81.48367399999999, 37.836673 ], "pop": 533, "state": "WV" }, { "_id": "25177", "city": "SAINT ALBANS", "loc": [ -81.83046299999999, 38.37743 ], "pop": 24409, "state": "WV" }, { "_id": "25180", "city": "SAXON", "loc": [ -81.43227899999999, 37.786108 ], "pop": 154, "state": "WV" }, { "_id": "25181", "city": "SETH", "loc": [ -81.639258, 38.097057 ], "pop": 1095, "state": "WV" }, { "_id": "25187", "city": "SOUTHSIDE", "loc": [ -81.996596, 38.711994 ], "pop": 446, "state": "WV" }, { "_id": "25189", "city": "STICKNEY", "loc": [ -81.497001, 37.876844 ], "pop": 18, "state": "WV" }, { "_id": "25193", "city": "SYLVESTER", "loc": [ -81.54915099999999, 38.009075 ], "pop": 1020, "state": "WV" }, { "_id": "25202", "city": "TORNADO", "loc": [ -81.847555, 38.335697 ], "pop": 1500, "state": "WV" }, { "_id": "25203", "city": "TURTLE CREEK", "loc": [ -81.853499, 38.042715 ], "pop": 669, "state": "WV" }, { "_id": "25204", "city": "BANDYTOWN", "loc": [ -81.635204, 37.921015 ], "pop": 500, "state": "WV" }, { "_id": "25206", "city": "VAN", "loc": [ -81.702175, 37.971152 ], "pop": 9, "state": "WV" }, { "_id": "25209", "city": "GARRISON", "loc": [ -81.534013, 37.978677 ], "pop": 681, "state": "WV" }, { "_id": "25213", "city": "WINFIELD", "loc": [ -81.889965, 38.507178 ], "pop": 3958, "state": "WV" }, { "_id": "25214", "city": "WINIFREDE", "loc": [ -81.558747, 38.185245 ], "pop": 126, "state": "WV" }, { "_id": "25231", "city": "ADVENT", "loc": [ -81.572063, 38.623595 ], "pop": 189, "state": "WV" }, { "_id": "25234", "city": "ARNOLDSBURG", "loc": [ -81.155135, 38.822704 ], "pop": 1683, "state": "WV" }, { "_id": "25235", "city": "FLOE", "loc": [ -81.090126, 38.671201 ], "pop": 886, "state": "WV" }, { "_id": "25239", "city": "COTTAGEVILLE", "loc": [ -81.818609, 38.863285 ], "pop": 1183, "state": "WV" }, { "_id": "25241", "city": "EVANS", "loc": [ -81.790858, 38.811281 ], "pop": 1296, "state": "WV" }, { "_id": "25243", "city": "GANDEEVILLE", "loc": [ -81.424329, 38.703382 ], "pop": 715, "state": "WV" }, { "_id": "25244", "city": "GAY", "loc": [ -81.570301, 38.797842 ], "pop": 1037, "state": "WV" }, { "_id": "25245", "city": "GIVEN", "loc": [ -81.682542, 38.713046 ], "pop": 994, "state": "WV" }, { "_id": "25246", "city": "HARMONY", "loc": [ -81.50763600000001, 38.692086 ], "pop": 372, "state": "WV" }, { "_id": "25248", "city": "ROMANCE", "loc": [ -81.651717, 38.623894 ], "pop": 1880, "state": "WV" }, { "_id": "25249", "city": "KENTUCK", "loc": [ -81.596018, 38.663886 ], "pop": 718, "state": "WV" }, { "_id": "25251", "city": "LEFT HAND", "loc": [ -81.246675, 38.606288 ], "pop": 397, "state": "WV" }, { "_id": "25252", "city": "DUNCAN", "loc": [ -81.57245, 38.957552 ], "pop": 743, "state": "WV" }, { "_id": "25253", "city": "LETART", "loc": [ -81.975129, 38.931079 ], "pop": 4478, "state": "WV" }, { "_id": "25255", "city": "LETTER GAP", "loc": [ -80.883768, 38.897074 ], "pop": 217, "state": "WV" }, { "_id": "25256", "city": "LINDEN", "loc": [ -81.229061, 38.698938 ], "pop": 270, "state": "WV" }, { "_id": "25258", "city": "LOCKNEY", "loc": [ -80.945075, 38.852919 ], "pop": 89, "state": "WV" }, { "_id": "25259", "city": "LOONEYVILLE", "loc": [ -81.28219, 38.664113 ], "pop": 600, "state": "WV" }, { "_id": "25260", "city": "MASON", "loc": [ -82.028215, 39.006442 ], "pop": 2598, "state": "WV" }, { "_id": "25261", "city": "MILLSTONE", "loc": [ -81.08635200000001, 38.86029 ], "pop": 748, "state": "WV" }, { "_id": "25262", "city": "MILLWOOD", "loc": [ -81.824832, 38.896206 ], "pop": 1379, "state": "WV" }, { "_id": "25264", "city": "MOUNT ALTO", "loc": [ -81.87837399999999, 38.863937 ], "pop": 275, "state": "WV" }, { "_id": "25266", "city": "ULER", "loc": [ -81.167579, 38.605219 ], "pop": 724, "state": "WV" }, { "_id": "25267", "city": "NORMANTOWN", "loc": [ -80.941936, 38.880173 ], "pop": 183, "state": "WV" }, { "_id": "25268", "city": "MINNORA", "loc": [ -81.09614000000001, 38.735979 ], "pop": 641, "state": "WV" }, { "_id": "25270", "city": "REEDY", "loc": [ -81.419785, 38.837119 ], "pop": 3014, "state": "WV" }, { "_id": "25271", "city": "RIPLEY", "loc": [ -81.701987, 38.809042 ], "pop": 6580, "state": "WV" }, { "_id": "25272", "city": "ROCK CASTLE", "loc": [ -81.767414, 38.708357 ], "pop": 82, "state": "WV" }, { "_id": "25274", "city": "SAND RIDGE", "loc": [ -81.032372, 38.850721 ], "pop": 163, "state": "WV" }, { "_id": "25275", "city": "SANDYVILLE", "loc": [ -81.654315, 38.909282 ], "pop": 1611, "state": "WV" }, { "_id": "25276", "city": "SPENCER", "loc": [ -81.33026, 38.789696 ], "pop": 6007, "state": "WV" }, { "_id": "25279", "city": "STATTS MILLS", "loc": [ -81.615579, 38.74076 ], "pop": 368, "state": "WV" }, { "_id": "25280", "city": "STUMPTOWN", "loc": [ -80.970026, 38.831619 ], "pop": 275, "state": "WV" }, { "_id": "25281", "city": "TARIFF", "loc": [ -81.212361, 38.652707 ], "pop": 191, "state": "WV" }, { "_id": "25283", "city": "VALLEY FORK", "loc": [ -81.15217699999999, 38.486906 ], "pop": 530, "state": "WV" }, { "_id": "25285", "city": "WALLBACK", "loc": [ -81.093535, 38.57254 ], "pop": 181, "state": "WV" }, { "_id": "25286", "city": "WALTON", "loc": [ -81.395757, 38.602264 ], "pop": 1961, "state": "WV" }, { "_id": "25287", "city": "WEST COLUMBIA", "loc": [ -82.090529, 38.926169 ], "pop": 1009, "state": "WV" }, { "_id": "25301", "city": "CHARLESTON", "loc": [ -81.630606, 38.349 ], "pop": 4139, "state": "WV" }, { "_id": "25302", "city": "BIG CHIMNEY", "loc": [ -81.623876, 38.383178 ], "pop": 20267, "state": "WV" }, { "_id": "25303", "city": "SOUTH CHARLESTON", "loc": [ -81.684079, 38.359226 ], "pop": 8198, "state": "WV" }, { "_id": "25304", "city": "CHARLESTON", "loc": [ -81.590272, 38.317289 ], "pop": 9368, "state": "WV" }, { "_id": "25306", "city": "MALDEN", "loc": [ -81.536813, 38.30028 ], "pop": 7992, "state": "WV" }, { "_id": "25309", "city": "SOUTH CHARLESTON", "loc": [ -81.73446199999999, 38.344903 ], "pop": 10179, "state": "WV" }, { "_id": "25311", "city": "CHARLESTON", "loc": [ -81.599282, 38.349032 ], "pop": 10091, "state": "WV" }, { "_id": "25312", "city": "CHARLESTON", "loc": [ -81.674688, 38.409563 ], "pop": 13224, "state": "WV" }, { "_id": "25313", "city": "CROSS LANES", "loc": [ -81.764877, 38.424982 ], "pop": 13061, "state": "WV" }, { "_id": "25314", "city": "CHARLESTON", "loc": [ -81.668988, 38.327442 ], "pop": 17108, "state": "WV" }, { "_id": "25315", "city": "MARMET", "loc": [ -81.554361, 38.233309 ], "pop": 4317, "state": "WV" }, { "_id": "25320", "city": "SISSONVILLE", "loc": [ -81.62958500000001, 38.509586 ], "pop": 7220, "state": "WV" }, { "_id": "25401", "city": "MARTINSBURG", "loc": [ -77.958915, 39.459959 ], "pop": 36800, "state": "WV" }, { "_id": "25411", "city": "HANCOCK", "loc": [ -78.219217, 39.58736 ], "pop": 9219, "state": "WV" }, { "_id": "25413", "city": "BUNKER HILL", "loc": [ -78.04871799999999, 39.327554 ], "pop": 5419, "state": "WV" }, { "_id": "25414", "city": "CHARLES TOWN", "loc": [ -77.85625400000001, 39.277085 ], "pop": 14351, "state": "WV" }, { "_id": "25419", "city": "FALLING WATERS", "loc": [ -77.88515200000001, 39.586473 ], "pop": 4428, "state": "WV" }, { "_id": "25420", "city": "GERRARDSTOWN", "loc": [ -78.114119, 39.378039 ], "pop": 2481, "state": "WV" }, { "_id": "25422", "city": "GREAT CACAPON", "loc": [ -78.33311999999999, 39.583557 ], "pop": 1108, "state": "WV" }, { "_id": "25425", "city": "HARPERS FERRY", "loc": [ -77.76944899999999, 39.315283 ], "pop": 7126, "state": "WV" }, { "_id": "25427", "city": "CHERRY RUN", "loc": [ -78.056016, 39.547034 ], "pop": 7415, "state": "WV" }, { "_id": "25428", "city": "INWOOD", "loc": [ -78.02418900000001, 39.370093 ], "pop": 3646, "state": "WV" }, { "_id": "25430", "city": "KEARNEYSVILLE", "loc": [ -77.95876199999999, 39.321994 ], "pop": 3468, "state": "WV" }, { "_id": "25431", "city": "LEVELS", "loc": [ -78.55078, 39.497637 ], "pop": 28, "state": "WV" }, { "_id": "25434", "city": "PAW PAW", "loc": [ -78.458573, 39.492297 ], "pop": 1696, "state": "WV" }, { "_id": "25437", "city": "POINTS", "loc": [ -78.564148, 39.457208 ], "pop": 106, "state": "WV" }, { "_id": "25438", "city": "RANSON", "loc": [ -77.860572, 39.299531 ], "pop": 3010, "state": "WV" }, { "_id": "25442", "city": "SHENANDOAH JUNCT", "loc": [ -77.88924, 39.371084 ], "pop": 1907, "state": "WV" }, { "_id": "25443", "city": "SHEPHERDSTOWN", "loc": [ -77.815819, 39.431124 ], "pop": 5388, "state": "WV" }, { "_id": "25444", "city": "SLANESVILLE", "loc": [ -78.505971, 39.402631 ], "pop": 468, "state": "WV" }, { "_id": "25446", "city": "SUMMIT POINT", "loc": [ -77.958552, 39.233753 ], "pop": 676, "state": "WV" }, { "_id": "25501", "city": "ALKOL", "loc": [ -81.98397199999999, 38.160884 ], "pop": 1161, "state": "WV" }, { "_id": "25502", "city": "APPLE GROVE", "loc": [ -82.172556, 38.713066 ], "pop": 115, "state": "WV" }, { "_id": "25503", "city": "ASHTON", "loc": [ -82.108907, 38.657102 ], "pop": 1494, "state": "WV" }, { "_id": "25504", "city": "BARBOURSVILLE", "loc": [ -82.295973, 38.389272 ], "pop": 10205, "state": "WV" }, { "_id": "25505", "city": "BIG CREEK", "loc": [ -82.01605600000001, 38.004555 ], "pop": 712, "state": "WV" }, { "_id": "25506", "city": "BRANCHLAND", "loc": [ -82.268367, 38.269444 ], "pop": 642, "state": "WV" }, { "_id": "25508", "city": "CHAPMANVILLE", "loc": [ -82.051241, 37.938535 ], "pop": 8874, "state": "WV" }, { "_id": "25510", "city": "CULLODEN", "loc": [ -82.068963, 38.419831 ], "pop": 2569, "state": "WV" }, { "_id": "25511", "city": "DUNLOW", "loc": [ -82.38266, 38.02829 ], "pop": 835, "state": "WV" }, { "_id": "25512", "city": "EAST LYNN", "loc": [ -82.32793100000001, 38.199474 ], "pop": 1722, "state": "WV" }, { "_id": "25514", "city": "FORT GAY", "loc": [ -82.554124, 38.133496 ], "pop": 3499, "state": "WV" }, { "_id": "25515", "city": "GALLIPOLIS FERRY", "loc": [ -82.153496, 38.765028 ], "pop": 2121, "state": "WV" }, { "_id": "25517", "city": "RADNOR", "loc": [ -82.46692, 38.088908 ], "pop": 2111, "state": "WV" }, { "_id": "25520", "city": "GLENWOOD", "loc": [ -82.14343100000001, 38.544936 ], "pop": 3201, "state": "WV" }, { "_id": "25521", "city": "GRIFFITHSVILLE", "loc": [ -81.982028, 38.246985 ], "pop": 521, "state": "WV" }, { "_id": "25523", "city": "HAMLIN", "loc": [ -82.10469500000001, 38.289556 ], "pop": 2993, "state": "WV" }, { "_id": "25524", "city": "FERRELLSBURG", "loc": [ -82.15535800000001, 38.008878 ], "pop": 1611, "state": "WV" }, { "_id": "25526", "city": "HURRICANE", "loc": [ -81.99432899999999, 38.425741 ], "pop": 16250, "state": "WV" }, { "_id": "25529", "city": "JULIAN", "loc": [ -81.86418500000001, 38.126437 ], "pop": 670, "state": "WV" }, { "_id": "25530", "city": "KENOVA", "loc": [ -82.573649, 38.386031 ], "pop": 7491, "state": "WV" }, { "_id": "25534", "city": "COVE GAP", "loc": [ -82.25620600000001, 38.077744 ], "pop": 326, "state": "WV" }, { "_id": "25535", "city": "LAVALETTE", "loc": [ -82.428707, 38.33046 ], "pop": 5928, "state": "WV" }, { "_id": "25537", "city": "LESAGE", "loc": [ -82.29566699999999, 38.477028 ], "pop": 2972, "state": "WV" }, { "_id": "25540", "city": "MIDKIFF", "loc": [ -82.15422700000001, 38.143908 ], "pop": 470, "state": "WV" }, { "_id": "25541", "city": "MILTON", "loc": [ -82.14578400000001, 38.413981 ], "pop": 7168, "state": "WV" }, { "_id": "25544", "city": "MYRA", "loc": [ -82.135097, 38.21978 ], "pop": 146, "state": "WV" }, { "_id": "25545", "city": "ONA", "loc": [ -82.218093, 38.452851 ], "pop": 5959, "state": "WV" }, { "_id": "25546", "city": "PALERMO", "loc": [ -82.046018, 38.12817 ], "pop": 115, "state": "WV" }, { "_id": "25547", "city": "PECKS MILL", "loc": [ -81.96538200000001, 37.929784 ], "pop": 117, "state": "WV" }, { "_id": "25550", "city": "POINT PLEASANT", "loc": [ -82.113247, 38.863249 ], "pop": 7981, "state": "WV" }, { "_id": "25555", "city": "PRICHARD", "loc": [ -82.57529700000001, 38.230009 ], "pop": 1215, "state": "WV" }, { "_id": "25557", "city": "RANGER", "loc": [ -82.19078, 38.155608 ], "pop": 5703, "state": "WV" }, { "_id": "25559", "city": "SALT ROCK", "loc": [ -82.247041, 38.326542 ], "pop": 1482, "state": "WV" }, { "_id": "25560", "city": "SCOTT DEPOT", "loc": [ -81.900481, 38.450063 ], "pop": 5893, "state": "WV" }, { "_id": "25563", "city": "SIAS", "loc": [ -82.085779, 38.189434 ], "pop": 384, "state": "WV" }, { "_id": "25564", "city": "SOD", "loc": [ -81.86814, 38.262967 ], "pop": 3529, "state": "WV" }, { "_id": "25565", "city": "MORRISVALE", "loc": [ -81.991778, 38.077015 ], "pop": 1449, "state": "WV" }, { "_id": "25567", "city": "SUMERCO", "loc": [ -81.894317, 38.205292 ], "pop": 638, "state": "WV" }, { "_id": "25568", "city": "SWEETLAND", "loc": [ -82.034464, 38.262874 ], "pop": 378, "state": "WV" }, { "_id": "25570", "city": "WAYNE", "loc": [ -82.433926, 38.225814 ], "pop": 4992, "state": "WV" }, { "_id": "25571", "city": "WEST HAMLIN", "loc": [ -82.184348, 38.288571 ], "pop": 1612, "state": "WV" }, { "_id": "25572", "city": "WOODVILLE", "loc": [ -81.911281, 38.157027 ], "pop": 262, "state": "WV" }, { "_id": "25573", "city": "YAWKEY", "loc": [ -81.956828, 38.219252 ], "pop": 690, "state": "WV" }, { "_id": "25601", "city": "WEST LOGAN", "loc": [ -82.002092, 37.847488 ], "pop": 14143, "state": "WV" }, { "_id": "25607", "city": "ROBINETTE", "loc": [ -81.758912, 37.795586 ], "pop": 2986, "state": "WV" }, { "_id": "25608", "city": "BAISDEN", "loc": [ -81.93275800000001, 37.571492 ], "pop": 1183, "state": "WV" }, { "_id": "25617", "city": "DAVIN", "loc": [ -81.805706, 37.726499 ], "pop": 2388, "state": "WV" }, { "_id": "25621", "city": "GILBERT", "loc": [ -81.866468, 37.594153 ], "pop": 2027, "state": "WV" }, { "_id": "25623", "city": "HAMPDEN", "loc": [ -81.947014, 37.639691 ], "pop": 1352, "state": "WV" }, { "_id": "25632", "city": "EARLING", "loc": [ -81.92929100000001, 37.774266 ], "pop": 847, "state": "WV" }, { "_id": "25635", "city": "HUNT", "loc": [ -81.865228, 37.729525 ], "pop": 3932, "state": "WV" }, { "_id": "25638", "city": "BARNABUS", "loc": [ -82.004931, 37.722368 ], "pop": 2369, "state": "WV" }, { "_id": "25650", "city": "VERNER", "loc": [ -81.864801, 37.64554 ], "pop": 1487, "state": "WV" }, { "_id": "25651", "city": "WHARNCLIFFE", "loc": [ -81.956604, 37.545161 ], "pop": 428, "state": "WV" }, { "_id": "25654", "city": "DEHUE", "loc": [ -81.872699, 37.866513 ], "pop": 2524, "state": "WV" }, { "_id": "25661", "city": "WILLIAMSON", "loc": [ -82.264163, 37.690248 ], "pop": 8866, "state": "WV" }, { "_id": "25666", "city": "BREEDEN", "loc": [ -82.25474800000001, 37.919751 ], "pop": 773, "state": "WV" }, { "_id": "25669", "city": "CRUM", "loc": [ -82.46235900000001, 37.938879 ], "pop": 763, "state": "WV" }, { "_id": "25670", "city": "MYRTLE", "loc": [ -82.131922, 37.703833 ], "pop": 4639, "state": "WV" }, { "_id": "25671", "city": "DINGESS", "loc": [ -82.195108, 37.870336 ], "pop": 2012, "state": "WV" }, { "_id": "25674", "city": "KERMIT", "loc": [ -82.374065, 37.864246 ], "pop": 3549, "state": "WV" }, { "_id": "25676", "city": "LENORE", "loc": [ -82.269336, 37.799436 ], "pop": 2521, "state": "WV" }, { "_id": "25678", "city": "LOBATA", "loc": [ -82.14569400000001, 37.649539 ], "pop": 3232, "state": "WV" }, { "_id": "25682", "city": "MEADOR", "loc": [ -82.065904, 37.592373 ], "pop": 1640, "state": "WV" }, { "_id": "25694", "city": "THACKER", "loc": [ -82.12733299999999, 37.608293 ], "pop": 1064, "state": "WV" }, { "_id": "25699", "city": "WILSONDALE", "loc": [ -82.38135800000001, 37.951598 ], "pop": 897, "state": "WV" }, { "_id": "25701", "city": "HUNTINGTON", "loc": [ -82.442348, 38.409726 ], "pop": 20896, "state": "WV" }, { "_id": "25702", "city": "HUNTINGTON", "loc": [ -82.39108299999999, 38.42862 ], "pop": 7290, "state": "WV" }, { "_id": "25703", "city": "HUNTINGTON", "loc": [ -82.42266600000001, 38.421116 ], "pop": 6570, "state": "WV" }, { "_id": "25704", "city": "HUNTINGTON", "loc": [ -82.503646, 38.384943 ], "pop": 18311, "state": "WV" }, { "_id": "25705", "city": "HUNTINGTON", "loc": [ -82.36901, 38.409588 ], "pop": 22276, "state": "WV" }, { "_id": "25801", "city": "BECKLEY", "loc": [ -81.206084, 37.793214 ], "pop": 45196, "state": "WV" }, { "_id": "25811", "city": "AMIGO", "loc": [ -81.34914499999999, 37.59211 ], "pop": 684, "state": "WV" }, { "_id": "25812", "city": "ANSTED", "loc": [ -81.09548700000001, 38.13686 ], "pop": 1451, "state": "WV" }, { "_id": "25813", "city": "BEAVER", "loc": [ -81.073104, 37.751581 ], "pop": 4868, "state": "WV" }, { "_id": "25817", "city": "BOLT", "loc": [ -81.415612, 37.767303 ], "pop": 524, "state": "WV" }, { "_id": "25820", "city": "CAMP CREEK", "loc": [ -81.111073, 37.484053 ], "pop": 65, "state": "WV" }, { "_id": "25825", "city": "COOL RIDGE", "loc": [ -81.10527999999999, 37.65735 ], "pop": 1731, "state": "WV" }, { "_id": "25827", "city": "CRAB ORCHARD", "loc": [ -81.249098, 37.720515 ], "pop": 5209, "state": "WV" }, { "_id": "25831", "city": "CLIFFTOP", "loc": [ -80.947114, 37.903615 ], "pop": 1432, "state": "WV" }, { "_id": "25832", "city": "DANIELS", "loc": [ -81.13910799999999, 37.732247 ], "pop": 2533, "state": "WV" }, { "_id": "25837", "city": "EDMOND", "loc": [ -81.032634, 38.054441 ], "pop": 69, "state": "WV" }, { "_id": "25839", "city": "FAIRDALE", "loc": [ -81.401758, 37.786578 ], "pop": 175, "state": "WV" }, { "_id": "25840", "city": "CUNARD", "loc": [ -81.080969, 38.062774 ], "pop": 8013, "state": "WV" }, { "_id": "25841", "city": "FLAT TOP", "loc": [ -81.127976, 37.550028 ], "pop": 623, "state": "WV" }, { "_id": "25843", "city": "GHENT", "loc": [ -81.101921, 37.62079 ], "pop": 749, "state": "WV" }, { "_id": "25844", "city": "GLEN DANIEL", "loc": [ -81.403294, 37.754698 ], "pop": 123, "state": "WV" }, { "_id": "25845", "city": "GLEN FORK", "loc": [ -81.540209, 37.644691 ], "pop": 189, "state": "WV" }, { "_id": "25847", "city": "SULLIVAN", "loc": [ -81.13048000000001, 37.790384 ], "pop": 99, "state": "WV" }, { "_id": "25848", "city": "GLEN ROGERS", "loc": [ -81.428989, 37.721685 ], "pop": 367, "state": "WV" }, { "_id": "25854", "city": "HICO", "loc": [ -80.963763, 38.109373 ], "pop": 721, "state": "WV" }, { "_id": "25857", "city": "JOSEPHINE", "loc": [ -81.217584, 37.622135 ], "pop": 476, "state": "WV" }, { "_id": "25862", "city": "LANSING", "loc": [ -81.02772, 38.110793 ], "pop": 89, "state": "WV" }, { "_id": "25864", "city": "LAWTON", "loc": [ -80.99244899999999, 37.865779 ], "pop": 17, "state": "WV" }, { "_id": "25865", "city": "LESTER", "loc": [ -81.30954199999999, 37.726522 ], "pop": 1157, "state": "WV" }, { "_id": "25868", "city": "LOOKOUT", "loc": [ -80.92006000000001, 38.052822 ], "pop": 338, "state": "WV" }, { "_id": "25870", "city": "MABEN", "loc": [ -81.39137100000001, 37.654294 ], "pop": 415, "state": "WV" }, { "_id": "25876", "city": "SAULSVILLE", "loc": [ -81.457706, 37.655573 ], "pop": 624, "state": "WV" }, { "_id": "25880", "city": "MOUNT HOPE", "loc": [ -81.170419, 37.911048 ], "pop": 4348, "state": "WV" }, { "_id": "25882", "city": "MULLENS", "loc": [ -81.389015, 37.584172 ], "pop": 2590, "state": "WV" }, { "_id": "25901", "city": "HARVEY", "loc": [ -81.13442499999999, 37.984874 ], "pop": 14805, "state": "WV" }, { "_id": "25902", "city": "ODD", "loc": [ -81.187183, 37.592997 ], "pop": 577, "state": "WV" }, { "_id": "25908", "city": "WINDING GULF", "loc": [ -81.231022, 37.643456 ], "pop": 13, "state": "WV" }, { "_id": "25912", "city": "RAMSEY", "loc": [ -81.015047, 38.178142 ], "pop": 460, "state": "WV" }, { "_id": "25913", "city": "RAVENCLIFF", "loc": [ -81.496736, 37.697961 ], "pop": 1457, "state": "WV" }, { "_id": "25915", "city": "EAST GULF", "loc": [ -81.294753, 37.628587 ], "pop": 1183, "state": "WV" }, { "_id": "25917", "city": "SCARBRO", "loc": [ -81.24573100000001, 37.947073 ], "pop": 1074, "state": "WV" }, { "_id": "25918", "city": "ABRAHAM", "loc": [ -81.1023, 37.697802 ], "pop": 2548, "state": "WV" }, { "_id": "25920", "city": "SLAB FORK", "loc": [ -81.22792800000001, 37.679605 ], "pop": 2872, "state": "WV" }, { "_id": "25922", "city": "SPANISHBURG", "loc": [ -81.10694100000001, 37.46314 ], "pop": 883, "state": "WV" }, { "_id": "25928", "city": "STEPHENSON", "loc": [ -81.33391399999999, 37.579847 ], "pop": 441, "state": "WV" }, { "_id": "25932", "city": "SURVEYOR", "loc": [ -81.33919, 37.748 ], "pop": 416, "state": "WV" }, { "_id": "25936", "city": "THURMOND", "loc": [ -81.071428, 37.955437 ], "pop": 62, "state": "WV" }, { "_id": "25938", "city": "VICTOR", "loc": [ -81.032223, 38.140194 ], "pop": 516, "state": "WV" }, { "_id": "25951", "city": "HINTON", "loc": [ -80.867779, 37.663983 ], "pop": 6150, "state": "WV" }, { "_id": "25958", "city": "CHARMCO", "loc": [ -80.707745, 37.98948 ], "pop": 1643, "state": "WV" }, { "_id": "25962", "city": "RAINELLE", "loc": [ -80.78206400000001, 37.966112 ], "pop": 3320, "state": "WV" }, { "_id": "25965", "city": "ELTON", "loc": [ -80.82520700000001, 37.846825 ], "pop": 208, "state": "WV" }, { "_id": "25966", "city": "GREEN SULPHUR SP", "loc": [ -80.839922, 37.808553 ], "pop": 742, "state": "WV" }, { "_id": "25969", "city": "STREETER", "loc": [ -80.995717, 37.639732 ], "pop": 1270, "state": "WV" }, { "_id": "25971", "city": "LERONA", "loc": [ -80.979574, 37.492498 ], "pop": 507, "state": "WV" }, { "_id": "25976", "city": "MEADOW BRIDGE", "loc": [ -80.852144, 37.878048 ], "pop": 1446, "state": "WV" }, { "_id": "25977", "city": "MEADOW CREEK", "loc": [ -80.91742000000001, 37.804824 ], "pop": 157, "state": "WV" }, { "_id": "25978", "city": "NIMITZ", "loc": [ -80.94462, 37.628584 ], "pop": 577, "state": "WV" }, { "_id": "25979", "city": "PIPESTEM", "loc": [ -80.94634499999999, 37.530345 ], "pop": 677, "state": "WV" }, { "_id": "25981", "city": "MARFRANCE", "loc": [ -80.717286, 38.051937 ], "pop": 1936, "state": "WV" }, { "_id": "25984", "city": "KESSLER", "loc": [ -80.689971, 37.963882 ], "pop": 1464, "state": "WV" }, { "_id": "25985", "city": "SANDSTONE", "loc": [ -80.87156400000001, 37.759879 ], "pop": 435, "state": "WV" }, { "_id": "25986", "city": "SPRING DALE", "loc": [ -80.81499599999999, 37.86947 ], "pop": 79, "state": "WV" }, { "_id": "25988", "city": "TRUE", "loc": [ -80.930837, 37.580031 ], "pop": 340, "state": "WV" }, { "_id": "25989", "city": "WHITE OAK", "loc": [ -81.058875, 37.68008 ], "pop": 284, "state": "WV" }, { "_id": "26003", "city": "ELM GROVE", "loc": [ -80.685126, 40.072736 ], "pop": 49136, "state": "WV" }, { "_id": "26031", "city": "BENWOOD", "loc": [ -80.71603, 40.013299 ], "pop": 4032, "state": "WV" }, { "_id": "26032", "city": "BETHANY", "loc": [ -80.55463, 40.202 ], "pop": 487, "state": "WV" }, { "_id": "26033", "city": "CAMERON", "loc": [ -80.56687599999999, 39.82272 ], "pop": 2743, "state": "WV" }, { "_id": "26034", "city": "CHESTER", "loc": [ -80.55843900000001, 40.598109 ], "pop": 5966, "state": "WV" }, { "_id": "26035", "city": "COLLIERS", "loc": [ -80.549341, 40.348391 ], "pop": 2602, "state": "WV" }, { "_id": "26036", "city": "DALLAS", "loc": [ -80.550804, 39.978343 ], "pop": 822, "state": "WV" }, { "_id": "26037", "city": "FOLLANSBEE", "loc": [ -80.584954, 40.329552 ], "pop": 7676, "state": "WV" }, { "_id": "26038", "city": "GLEN DALE", "loc": [ -80.732263, 39.959732 ], "pop": 3418, "state": "WV" }, { "_id": "26039", "city": "GLEN EASTON", "loc": [ -80.66606899999999, 39.853121 ], "pop": 2477, "state": "WV" }, { "_id": "26040", "city": "MC MECHEN", "loc": [ -80.73081999999999, 39.987793 ], "pop": 2130, "state": "WV" }, { "_id": "26041", "city": "MOUNDSVILLE", "loc": [ -80.730971, 39.914819 ], "pop": 18627, "state": "WV" }, { "_id": "26047", "city": "NEW CUMBERLAND", "loc": [ -80.590108, 40.522777 ], "pop": 5779, "state": "WV" }, { "_id": "26050", "city": "NEWELL", "loc": [ -80.60112599999999, 40.613971 ], "pop": 2316, "state": "WV" }, { "_id": "26055", "city": "PROCTOR", "loc": [ -80.761779, 39.720683 ], "pop": 1785, "state": "WV" }, { "_id": "26059", "city": "TRIADELPHIA", "loc": [ -80.59529000000001, 40.069945 ], "pop": 2320, "state": "WV" }, { "_id": "26060", "city": "VALLEY GROVE", "loc": [ -80.555059, 40.094649 ], "pop": 1705, "state": "WV" }, { "_id": "26062", "city": "WEIRTON", "loc": [ -80.568307, 40.413673 ], "pop": 25107, "state": "WV" }, { "_id": "26070", "city": "WELLSBURG", "loc": [ -80.59606100000001, 40.254792 ], "pop": 12292, "state": "WV" }, { "_id": "26101", "city": "PARKERSBURG", "loc": [ -81.53541199999999, 39.264433 ], "pop": 35886, "state": "WV" }, { "_id": "26104", "city": "NORTH PARKERSBUR", "loc": [ -81.52610900000001, 39.285316 ], "pop": 9260, "state": "WV" }, { "_id": "26105", "city": "VIENNA", "loc": [ -81.54114300000001, 39.325089 ], "pop": 11696, "state": "WV" }, { "_id": "26133", "city": "BELLEVILLE", "loc": [ -81.69231600000001, 39.131417 ], "pop": 1240, "state": "WV" }, { "_id": "26134", "city": "WILLOW ISLAND", "loc": [ -81.27880999999999, 39.367927 ], "pop": 1562, "state": "WV" }, { "_id": "26135", "city": "BENS RUN", "loc": [ -81.066534, 39.44641 ], "pop": 282, "state": "WV" }, { "_id": "26136", "city": "BIG BEND", "loc": [ -81.13603000000001, 38.971941 ], "pop": 844, "state": "WV" }, { "_id": "26137", "city": "NOBE", "loc": [ -81.069813, 38.996306 ], "pop": 371, "state": "WV" }, { "_id": "26138", "city": "BROHARD", "loc": [ -81.177528, 39.033756 ], "pop": 23, "state": "WV" }, { "_id": "26141", "city": "CRESTON", "loc": [ -81.23690499999999, 38.937805 ], "pop": 340, "state": "WV" }, { "_id": "26142", "city": "DAVISVILLE", "loc": [ -81.47986299999999, 39.212635 ], "pop": 3667, "state": "WV" }, { "_id": "26143", "city": "ELIZABETH", "loc": [ -81.398889, 39.056618 ], "pop": 3052, "state": "WV" }, { "_id": "26145", "city": "FIVE FORKS", "loc": [ -81.086623, 38.975331 ], "pop": 78, "state": "WV" }, { "_id": "26146", "city": "FRIENDLY", "loc": [ -81.034544, 39.502444 ], "pop": 1073, "state": "WV" }, { "_id": "26147", "city": "GRANTSVILLE", "loc": [ -81.076294, 38.932436 ], "pop": 1873, "state": "WV" }, { "_id": "26148", "city": "MACFARLAN", "loc": [ -81.177627, 39.08058 ], "pop": 437, "state": "WV" }, { "_id": "26149", "city": "MIDDLEBOURNE", "loc": [ -80.886067, 39.50537 ], "pop": 2527, "state": "WV" }, { "_id": "26150", "city": "MINERALWELLS", "loc": [ -81.519096, 39.179846 ], "pop": 5463, "state": "WV" }, { "_id": "26151", "city": "MOUNT ZION", "loc": [ -81.119473, 38.877455 ], "pop": 227, "state": "WV" }, { "_id": "26152", "city": "MUNDAY", "loc": [ -81.204048, 39.021423 ], "pop": 117, "state": "WV" }, { "_id": "26153", "city": "MURRAYSVILLE", "loc": [ -81.771368, 39.059143 ], "pop": 452, "state": "WV" }, { "_id": "26155", "city": "NEW MARTINSVILLE", "loc": [ -80.85654100000001, 39.658798 ], "pop": 7617, "state": "WV" }, { "_id": "26159", "city": "PADEN CITY", "loc": [ -80.92648199999999, 39.604408 ], "pop": 3513, "state": "WV" }, { "_id": "26160", "city": "PALESTINE", "loc": [ -81.42803000000001, 38.974141 ], "pop": 935, "state": "WV" }, { "_id": "26161", "city": "PETROLEUM", "loc": [ -81.240607, 39.174139 ], "pop": 419, "state": "WV" }, { "_id": "26164", "city": "RAVENSWOOD", "loc": [ -81.752377, 38.94675 ], "pop": 6428, "state": "WV" }, { "_id": "26167", "city": "READER", "loc": [ -80.751583, 39.583595 ], "pop": 2289, "state": "WV" }, { "_id": "26169", "city": "ROCKPORT", "loc": [ -81.571333, 39.079774 ], "pop": 1068, "state": "WV" }, { "_id": "26170", "city": "SAINT MARYS", "loc": [ -81.172499, 39.38597 ], "pop": 5523, "state": "WV" }, { "_id": "26173", "city": "SHERMAN", "loc": [ -81.70091600000001, 39.013094 ], "pop": 749, "state": "WV" }, { "_id": "26175", "city": "SISTERSVILLE", "loc": [ -80.98182799999999, 39.558365 ], "pop": 3113, "state": "WV" }, { "_id": "26178", "city": "SMITHVILLE", "loc": [ -81.061953, 39.067078 ], "pop": 590, "state": "WV" }, { "_id": "26179", "city": "TANNER", "loc": [ -80.95971900000001, 38.966435 ], "pop": 389, "state": "WV" }, { "_id": "26180", "city": "WALKER", "loc": [ -81.386577, 39.182082 ], "pop": 3218, "state": "WV" }, { "_id": "26181", "city": "NEW ENGLAND", "loc": [ -81.640719, 39.233911 ], "pop": 8532, "state": "WV" }, { "_id": "26184", "city": "WAVERLY", "loc": [ -81.38193800000001, 39.315681 ], "pop": 2836, "state": "WV" }, { "_id": "26185", "city": "WICK", "loc": [ -80.96804400000001, 39.421653 ], "pop": 479, "state": "WV" }, { "_id": "26186", "city": "WILEYVILLE", "loc": [ -80.647251, 39.662593 ], "pop": 343, "state": "WV" }, { "_id": "26187", "city": "WILLIAMSTOWN", "loc": [ -81.456608, 39.38243 ], "pop": 5207, "state": "WV" }, { "_id": "26201", "city": "TENNERTON", "loc": [ -80.21782399999999, 38.98407 ], "pop": 16829, "state": "WV" }, { "_id": "26202", "city": "FENWICK", "loc": [ -80.634972, 38.244657 ], "pop": 393, "state": "WV" }, { "_id": "26203", "city": "ERBACON", "loc": [ -80.57423199999999, 38.541864 ], "pop": 318, "state": "WV" }, { "_id": "26205", "city": "CRAIGSVILLE", "loc": [ -80.64438, 38.325389 ], "pop": 3070, "state": "WV" }, { "_id": "26206", "city": "COWEN", "loc": [ -80.53580700000001, 38.413273 ], "pop": 2469, "state": "WV" }, { "_id": "26208", "city": "GAULEY MILLS", "loc": [ -80.591408, 38.379246 ], "pop": 1191, "state": "WV" }, { "_id": "26210", "city": "ADRIAN", "loc": [ -80.288663, 38.913422 ], "pop": 794, "state": "WV" }, { "_id": "26214", "city": "CENTURY", "loc": [ -80.17568799999999, 39.093287 ], "pop": 235, "state": "WV" }, { "_id": "26215", "city": "CLEVELAND", "loc": [ -80.342849, 38.839225 ], "pop": 456, "state": "WV" }, { "_id": "26217", "city": "DIANA", "loc": [ -80.431962, 38.575471 ], "pop": 1172, "state": "WV" }, { "_id": "26218", "city": "ALEXANDER", "loc": [ -80.274339, 38.851145 ], "pop": 2398, "state": "WV" }, { "_id": "26222", "city": "REPLETE", "loc": [ -80.402345, 38.679583 ], "pop": 730, "state": "WV" }, { "_id": "26224", "city": "HELVETIA", "loc": [ -80.138167, 38.771258 ], "pop": 27, "state": "WV" }, { "_id": "26228", "city": "KANAWHA HEAD", "loc": [ -80.37273399999999, 38.76183 ], "pop": 171, "state": "WV" }, { "_id": "26230", "city": "PICKENS", "loc": [ -80.209784, 38.684242 ], "pop": 382, "state": "WV" }, { "_id": "26234", "city": "ROCK CAVE", "loc": [ -80.316276, 38.781128 ], "pop": 649, "state": "WV" }, { "_id": "26236", "city": "SELBYVILLE", "loc": [ -80.312955, 38.719393 ], "pop": 40, "state": "WV" }, { "_id": "26237", "city": "TALLMANSVILLE", "loc": [ -80.15799, 38.856405 ], "pop": 507, "state": "WV" }, { "_id": "26238", "city": "VOLGA", "loc": [ -80.143209, 39.068445 ], "pop": 969, "state": "WV" }, { "_id": "26241", "city": "ELKINS", "loc": [ -79.847115, 38.925304 ], "pop": 14027, "state": "WV" }, { "_id": "26250", "city": "BELINGTON", "loc": [ -79.94950799999999, 39.024439 ], "pop": 5189, "state": "WV" }, { "_id": "26253", "city": "BEVERLY", "loc": [ -79.865121, 38.828021 ], "pop": 3206, "state": "WV" }, { "_id": "26254", "city": "WYMER", "loc": [ -79.619347, 38.934863 ], "pop": 128, "state": "WV" }, { "_id": "26257", "city": "COALTON", "loc": [ -79.976724, 38.91438 ], "pop": 1422, "state": "WV" }, { "_id": "26260", "city": "DAVIS", "loc": [ -79.456278, 39.088227 ], "pop": 1459, "state": "WV" }, { "_id": "26261", "city": "RICHWOOD", "loc": [ -80.544481, 38.222988 ], "pop": 4129, "state": "WV" }, { "_id": "26263", "city": "DRYFORK", "loc": [ -79.45340299999999, 38.957616 ], "pop": 116, "state": "WV" }, { "_id": "26264", "city": "DURBIN", "loc": [ -79.793464, 38.616313 ], "pop": 75, "state": "WV" }, { "_id": "26266", "city": "UPPERGLADE", "loc": [ -80.496464, 38.418528 ], "pop": 383, "state": "WV" }, { "_id": "26267", "city": "ELLAMORE", "loc": [ -80.09261100000001, 38.933966 ], "pop": 482, "state": "WV" }, { "_id": "26268", "city": "GLADY", "loc": [ -79.734202, 38.866925 ], "pop": 615, "state": "WV" }, { "_id": "26269", "city": "HAMBLETON", "loc": [ -79.641565, 39.116836 ], "pop": 930, "state": "WV" }, { "_id": "26270", "city": "HARMAN", "loc": [ -79.52459899999999, 38.923369 ], "pop": 700, "state": "WV" }, { "_id": "26271", "city": "HENDRICKS", "loc": [ -79.630302, 39.074814 ], "pop": 318, "state": "WV" }, { "_id": "26273", "city": "HUTTONSVILLE", "loc": [ -79.97754399999999, 38.678433 ], "pop": 1072, "state": "WV" }, { "_id": "26276", "city": "KERENS", "loc": [ -79.77542699999999, 39.029854 ], "pop": 569, "state": "WV" }, { "_id": "26278", "city": "MABIE", "loc": [ -80.01306099999999, 38.822158 ], "pop": 427, "state": "WV" }, { "_id": "26280", "city": "MILL CREEK", "loc": [ -79.97856899999999, 38.732493 ], "pop": 2219, "state": "WV" }, { "_id": "26282", "city": "MONTERVILLE", "loc": [ -80.12239099999999, 38.551707 ], "pop": 79, "state": "WV" }, { "_id": "26283", "city": "MONTROSE", "loc": [ -79.78957699999999, 39.096357 ], "pop": 1513, "state": "WV" }, { "_id": "26287", "city": "PARSONS", "loc": [ -79.67344799999999, 39.105857 ], "pop": 2432, "state": "WV" }, { "_id": "26288", "city": "BOLAIR", "loc": [ -80.399798, 38.476362 ], "pop": 3914, "state": "WV" }, { "_id": "26289", "city": "RED CREEK", "loc": [ -79.53009, 39.019628 ], "pop": 318, "state": "WV" }, { "_id": "26291", "city": "SLATYFORK", "loc": [ -80.040353, 38.381207 ], "pop": 448, "state": "WV" }, { "_id": "26292", "city": "THOMAS", "loc": [ -79.503, 39.150517 ], "pop": 966, "state": "WV" }, { "_id": "26293", "city": "VALLEY BEND", "loc": [ -79.916037, 38.784903 ], "pop": 804, "state": "WV" }, { "_id": "26294", "city": "MINGO", "loc": [ -80.044911, 38.536637 ], "pop": 1013, "state": "WV" }, { "_id": "26296", "city": "JOB", "loc": [ -79.55775199999999, 38.808289 ], "pop": 384, "state": "WV" }, { "_id": "26299", "city": "BOGGS", "loc": [ -80.607389, 38.482119 ], "pop": 544, "state": "WV" }, { "_id": "26301", "city": "NUTTER FORT STON", "loc": [ -80.34868299999999, 39.278422 ], "pop": 33089, "state": "WV" }, { "_id": "26320", "city": "WILBUR", "loc": [ -80.81715699999999, 39.429757 ], "pop": 1201, "state": "WV" }, { "_id": "26321", "city": "ALUM BRIDGE", "loc": [ -80.688196, 39.042474 ], "pop": 1015, "state": "WV" }, { "_id": "26322", "city": "ALVY", "loc": [ -80.668921, 39.451106 ], "pop": 143, "state": "WV" }, { "_id": "26325", "city": "AUBURN", "loc": [ -80.883656, 39.086382 ], "pop": 326, "state": "WV" }, { "_id": "26327", "city": "BEREA", "loc": [ -80.92232199999999, 39.130452 ], "pop": 106, "state": "WV" }, { "_id": "26328", "city": "BLANDVILLE", "loc": [ -80.735856, 39.265169 ], "pop": 35, "state": "WV" }, { "_id": "26330", "city": "BRIDGEPORT", "loc": [ -80.24269200000001, 39.29537 ], "pop": 11747, "state": "WV" }, { "_id": "26332", "city": "BRISTOL", "loc": [ -80.510541, 39.290425 ], "pop": 1424, "state": "WV" }, { "_id": "26335", "city": "GEM", "loc": [ -80.65898900000001, 38.850391 ], "pop": 1513, "state": "WV" }, { "_id": "26337", "city": "CAIRO", "loc": [ -81.155427, 39.23249 ], "pop": 1379, "state": "WV" }, { "_id": "26338", "city": "CAMDEN", "loc": [ -80.591531, 39.089268 ], "pop": 584, "state": "WV" }, { "_id": "26339", "city": "CENTER POINT", "loc": [ -80.635227, 39.412472 ], "pop": 121, "state": "WV" }, { "_id": "26342", "city": "COXS MILLS", "loc": [ -80.87459200000001, 39.002102 ], "pop": 796, "state": "WV" }, { "_id": "26343", "city": "CRAWFORD", "loc": [ -80.400749, 38.840065 ], "pop": 517, "state": "WV" }, { "_id": "26346", "city": "HIGHLAND", "loc": [ -81.060382, 39.282364 ], "pop": 880, "state": "WV" }, { "_id": "26347", "city": "WENDEL", "loc": [ -80.128179, 39.271069 ], "pop": 2620, "state": "WV" }, { "_id": "26348", "city": "FOLSOM", "loc": [ -80.525806, 39.469345 ], "pop": 359, "state": "WV" }, { "_id": "26351", "city": "BALDWIN", "loc": [ -80.82783000000001, 38.933619 ], "pop": 2768, "state": "WV" }, { "_id": "26354", "city": "GRAFTON", "loc": [ -80.028509, 39.341386 ], "pop": 10102, "state": "WV" }, { "_id": "26360", "city": "GREENWOOD", "loc": [ -80.878899, 39.290761 ], "pop": 454, "state": "WV" }, { "_id": "26362", "city": "MAHONE", "loc": [ -81.045967, 39.199608 ], "pop": 2962, "state": "WV" }, { "_id": "26367", "city": "HAZELGREEN", "loc": [ -80.98057799999999, 39.063075 ], "pop": 203, "state": "WV" }, { "_id": "26372", "city": "HORNER", "loc": [ -80.365576, 38.972628 ], "pop": 365, "state": "WV" }, { "_id": "26374", "city": "INDEPENDENCE", "loc": [ -79.882161, 39.446372 ], "pop": 1227, "state": "WV" }, { "_id": "26376", "city": "WILDCAT", "loc": [ -80.477002, 38.767689 ], "pop": 589, "state": "WV" }, { "_id": "26377", "city": "JACKSONBURG", "loc": [ -80.643697, 39.541553 ], "pop": 406, "state": "WV" }, { "_id": "26378", "city": "JANE LEW", "loc": [ -80.431059, 39.109989 ], "pop": 4529, "state": "WV" }, { "_id": "26383", "city": "LIMA", "loc": [ -80.72470300000001, 39.438973 ], "pop": 153, "state": "WV" }, { "_id": "26384", "city": "LINN", "loc": [ -80.730046, 38.957294 ], "pop": 759, "state": "WV" }, { "_id": "26385", "city": "LOST CREEK", "loc": [ -80.377674, 39.172528 ], "pop": 3740, "state": "WV" }, { "_id": "26386", "city": "LUMBERPORT", "loc": [ -80.36763500000001, 39.378108 ], "pop": 2300, "state": "WV" }, { "_id": "26404", "city": "MEADOWBROOK", "loc": [ -80.32566799999999, 39.335367 ], "pop": 1373, "state": "WV" }, { "_id": "26405", "city": "KASSON", "loc": [ -79.92157400000001, 39.212271 ], "pop": 1382, "state": "WV" }, { "_id": "26408", "city": "MOUNT CLARE", "loc": [ -80.289948, 39.210708 ], "pop": 1558, "state": "WV" }, { "_id": "26409", "city": "NEWBERNE", "loc": [ -80.902838, 39.040743 ], "pop": 86, "state": "WV" }, { "_id": "26410", "city": "NEWBURG", "loc": [ -79.828036, 39.402722 ], "pop": 1206, "state": "WV" }, { "_id": "26411", "city": "NEW MILTON", "loc": [ -80.707617, 39.189917 ], "pop": 783, "state": "WV" }, { "_id": "26412", "city": "ORLANDO", "loc": [ -80.56012200000001, 38.885349 ], "pop": 209, "state": "WV" }, { "_id": "26415", "city": "TOLL GATE", "loc": [ -80.958482, 39.292064 ], "pop": 2597, "state": "WV" }, { "_id": "26416", "city": "BROADDUS", "loc": [ -80.03853100000001, 39.150789 ], "pop": 7934, "state": "WV" }, { "_id": "26419", "city": "HASTINGS", "loc": [ -80.67721299999999, 39.565069 ], "pop": 881, "state": "WV" }, { "_id": "26421", "city": "PULLMAN", "loc": [ -80.934685, 39.190013 ], "pop": 247, "state": "WV" }, { "_id": "26423", "city": "ROANOKE", "loc": [ -80.498537, 38.930494 ], "pop": 576, "state": "WV" }, { "_id": "26425", "city": "MANHEIM", "loc": [ -79.642977, 39.221575 ], "pop": 404, "state": "WV" }, { "_id": "26426", "city": "SALEM", "loc": [ -80.589792, 39.294761 ], "pop": 5874, "state": "WV" }, { "_id": "26431", "city": "SHINNSTON", "loc": [ -80.283399, 39.388809 ], "pop": 6044, "state": "WV" }, { "_id": "26437", "city": "SMITHFIELD", "loc": [ -80.558245, 39.5134 ], "pop": 775, "state": "WV" }, { "_id": "26439", "city": "STOUTS MILLS", "loc": [ -80.741131, 38.893335 ], "pop": 717, "state": "WV" }, { "_id": "26440", "city": "THORNTON", "loc": [ -79.909645, 39.332879 ], "pop": 1144, "state": "WV" }, { "_id": "26443", "city": "TROY", "loc": [ -80.754921, 39.083881 ], "pop": 115, "state": "WV" }, { "_id": "26444", "city": "TUNNELTON", "loc": [ -79.747818, 39.362502 ], "pop": 4076, "state": "WV" }, { "_id": "26447", "city": "WALKERSVILLE", "loc": [ -80.480221, 38.850738 ], "pop": 737, "state": "WV" }, { "_id": "26448", "city": "WALLACE", "loc": [ -80.486468, 39.411667 ], "pop": 1372, "state": "WV" }, { "_id": "26451", "city": "WEST MILFORD", "loc": [ -80.363049, 39.203906 ], "pop": 1365, "state": "WV" }, { "_id": "26452", "city": "WESTON", "loc": [ -80.47365600000001, 39.041104 ], "pop": 9912, "state": "WV" }, { "_id": "26456", "city": "WEST UNION", "loc": [ -80.791057, 39.276185 ], "pop": 3133, "state": "WV" }, { "_id": "26462", "city": "WOLF SUMMIT", "loc": [ -80.438704, 39.232985 ], "pop": 1116, "state": "WV" }, { "_id": "26505", "city": "STAR CITY", "loc": [ -79.95422499999999, 39.633858 ], "pop": 70185, "state": "WV" }, { "_id": "26519", "city": "ALBRIGHT", "loc": [ -79.635811, 39.570116 ], "pop": 858, "state": "WV" }, { "_id": "26521", "city": "BLACKSVILLE", "loc": [ -80.232646, 39.695821 ], "pop": 13, "state": "WV" }, { "_id": "26525", "city": "BRUCETON MILLS", "loc": [ -79.61594100000001, 39.645394 ], "pop": 3857, "state": "WV" }, { "_id": "26529", "city": "CORE", "loc": [ -80.23068000000001, 39.654037 ], "pop": 453, "state": "WV" }, { "_id": "26537", "city": "KINGWOOD", "loc": [ -79.70629, 39.481912 ], "pop": 6716, "state": "WV" }, { "_id": "26541", "city": "MAIDSVILLE", "loc": [ -80.08319299999999, 39.709308 ], "pop": 2047, "state": "WV" }, { "_id": "26542", "city": "CASCADE", "loc": [ -79.80099300000001, 39.576413 ], "pop": 658, "state": "WV" }, { "_id": "26546", "city": "PURSGLOVE", "loc": [ -80.061798, 39.699543 ], "pop": 322, "state": "WV" }, { "_id": "26547", "city": "REEDSVILLE", "loc": [ -79.810061, 39.51823 ], "pop": 3551, "state": "WV" }, { "_id": "26554", "city": "MONONGAH", "loc": [ -80.146041, 39.472677 ], "pop": 41565, "state": "WV" }, { "_id": "26560", "city": "BAXTER", "loc": [ -80.14169099999999, 39.536056 ], "pop": 748, "state": "WV" }, { "_id": "26561", "city": "BIG RUN", "loc": [ -80.58371699999999, 39.59414 ], "pop": 647, "state": "WV" }, { "_id": "26562", "city": "COBURN", "loc": [ -80.405931, 39.667984 ], "pop": 697, "state": "WV" }, { "_id": "26568", "city": "ENTERPRISE", "loc": [ -80.316704, 39.425998 ], "pop": 1800, "state": "WV" }, { "_id": "26570", "city": "FAIRVIEW", "loc": [ -80.25291799999999, 39.610335 ], "pop": 2406, "state": "WV" }, { "_id": "26571", "city": "FARMINGTON", "loc": [ -80.256643, 39.50287 ], "pop": 3622, "state": "WV" }, { "_id": "26575", "city": "HUNDRED", "loc": [ -80.474552, 39.691744 ], "pop": 1214, "state": "WV" }, { "_id": "26581", "city": "LITTLETON", "loc": [ -80.569478, 39.659205 ], "pop": 458, "state": "WV" }, { "_id": "26582", "city": "MANNINGTON", "loc": [ -80.355243, 39.522031 ], "pop": 5323, "state": "WV" }, { "_id": "26585", "city": "METZ", "loc": [ -80.416815, 39.607762 ], "pop": 924, "state": "WV" }, { "_id": "26587", "city": "RACHEL", "loc": [ -80.295694, 39.52254 ], "pop": 274, "state": "WV" }, { "_id": "26588", "city": "RIVESVILLE", "loc": [ -80.141744, 39.556839 ], "pop": 2938, "state": "WV" }, { "_id": "26589", "city": "WADESTOWN", "loc": [ -80.327462, 39.636926 ], "pop": 329, "state": "WV" }, { "_id": "26590", "city": "WANA", "loc": [ -80.30510599999999, 39.702072 ], "pop": 272, "state": "WV" }, { "_id": "26591", "city": "WORTHINGTON", "loc": [ -80.290468, 39.452213 ], "pop": 1506, "state": "WV" }, { "_id": "26601", "city": "HEROLD", "loc": [ -80.681072, 38.673855 ], "pop": 3517, "state": "WV" }, { "_id": "26610", "city": "BIRCH RIVER", "loc": [ -80.745873, 38.491424 ], "pop": 1440, "state": "WV" }, { "_id": "26611", "city": "FLOWER", "loc": [ -80.84034200000001, 38.839711 ], "pop": 308, "state": "WV" }, { "_id": "26615", "city": "COPEN", "loc": [ -80.728481, 38.830556 ], "pop": 161, "state": "WV" }, { "_id": "26617", "city": "DILLE", "loc": [ -80.853784, 38.474704 ], "pop": 410, "state": "WV" }, { "_id": "26618", "city": "ELMIRA", "loc": [ -80.984972, 38.658907 ], "pop": 276, "state": "WV" }, { "_id": "26619", "city": "RIFFLE", "loc": [ -80.768123, 38.806866 ], "pop": 230, "state": "WV" }, { "_id": "26620", "city": "FALLS MILL", "loc": [ -80.550618, 38.77566 ], "pop": 25, "state": "WV" }, { "_id": "26621", "city": "CORLEY", "loc": [ -80.63847800000001, 38.724475 ], "pop": 658, "state": "WV" }, { "_id": "26623", "city": "CLEM", "loc": [ -80.877416, 38.636828 ], "pop": 1276, "state": "WV" }, { "_id": "26624", "city": "GASSAWAY", "loc": [ -80.786339, 38.686193 ], "pop": 2665, "state": "WV" }, { "_id": "26626", "city": "GLENDON", "loc": [ -80.939459, 38.610857 ], "pop": 223, "state": "WV" }, { "_id": "26627", "city": "HEATERS", "loc": [ -80.642884, 38.755807 ], "pop": 368, "state": "WV" }, { "_id": "26629", "city": "TESLA", "loc": [ -80.706293, 38.581046 ], "pop": 1325, "state": "WV" }, { "_id": "26631", "city": "NAPIER", "loc": [ -80.584104, 38.77462 ], "pop": 107, "state": "WV" }, { "_id": "26633", "city": "NICUT", "loc": [ -81.011, 38.715133 ], "pop": 151, "state": "WV" }, { "_id": "26634", "city": "PERKINS", "loc": [ -80.919336, 38.809049 ], "pop": 242, "state": "WV" }, { "_id": "26636", "city": "ROSEDALE", "loc": [ -80.906127, 38.770103 ], "pop": 88, "state": "WV" }, { "_id": "26638", "city": "SHOCK", "loc": [ -80.96866300000001, 38.757527 ], "pop": 250, "state": "WV" }, { "_id": "26639", "city": "STRANGE CREEK", "loc": [ -80.903077, 38.573823 ], "pop": 206, "state": "WV" }, { "_id": "26641", "city": "WILSIE", "loc": [ -80.86805099999999, 38.672723 ], "pop": 150, "state": "WV" }, { "_id": "26651", "city": "SUMMERSVILLE", "loc": [ -80.835278, 38.30089 ], "pop": 6520, "state": "WV" }, { "_id": "26656", "city": "BELVA", "loc": [ -81.156572, 38.249105 ], "pop": 415, "state": "WV" }, { "_id": "26660", "city": "CALVIN", "loc": [ -80.70162999999999, 38.327679 ], "pop": 603, "state": "WV" }, { "_id": "26662", "city": "CANVAS", "loc": [ -80.744637, 38.262445 ], "pop": 1163, "state": "WV" }, { "_id": "26667", "city": "DRENNEN", "loc": [ -81.00886800000001, 38.258729 ], "pop": 263, "state": "WV" }, { "_id": "26671", "city": "GILBOA", "loc": [ -80.952232, 38.298304 ], "pop": 422, "state": "WV" }, { "_id": "26674", "city": "JODIE", "loc": [ -81.134657, 38.208319 ], "pop": 510, "state": "WV" }, { "_id": "26675", "city": "KESLERS CROSS LA", "loc": [ -80.93336499999999, 38.225762 ], "pop": 188, "state": "WV" }, { "_id": "26676", "city": "LEIVASY", "loc": [ -80.717213, 38.135019 ], "pop": 1107, "state": "WV" }, { "_id": "26678", "city": "MOUNT LOOKOUT", "loc": [ -80.91077, 38.182109 ], "pop": 1029, "state": "WV" }, { "_id": "26679", "city": "RUNA", "loc": [ -80.820204, 38.197064 ], "pop": 1698, "state": "WV" }, { "_id": "26680", "city": "RUSSELVILLE", "loc": [ -80.885777, 38.10829 ], "pop": 99, "state": "WV" }, { "_id": "26681", "city": "NETTIE", "loc": [ -80.69527100000001, 38.209042 ], "pop": 1196, "state": "WV" }, { "_id": "26683", "city": "POE", "loc": [ -80.952167, 38.256458 ], "pop": 818, "state": "WV" }, { "_id": "26684", "city": "POOL", "loc": [ -80.885907, 38.146004 ], "pop": 112, "state": "WV" }, { "_id": "26690", "city": "SWISS", "loc": [ -81.080703, 38.279058 ], "pop": 684, "state": "WV" }, { "_id": "26691", "city": "TIOGA", "loc": [ -80.661663, 38.375989 ], "pop": 808, "state": "WV" }, { "_id": "26704", "city": "AUGUSTA", "loc": [ -78.59308900000001, 39.299821 ], "pop": 2769, "state": "WV" }, { "_id": "26705", "city": "AMBOY", "loc": [ -79.571088, 39.304719 ], "pop": 1143, "state": "WV" }, { "_id": "26710", "city": "BURLINGTON", "loc": [ -78.912278, 39.388709 ], "pop": 3883, "state": "WV" }, { "_id": "26711", "city": "CAPON BRIDGE", "loc": [ -78.46441299999999, 39.280198 ], "pop": 997, "state": "WV" }, { "_id": "26713", "city": "CORINTH", "loc": [ -79.50396499999999, 39.43183 ], "pop": 503, "state": "WV" }, { "_id": "26714", "city": "DELRAY", "loc": [ -78.639427, 39.179564 ], "pop": 467, "state": "WV" }, { "_id": "26716", "city": "EGLON", "loc": [ -79.510919, 39.292514 ], "pop": 249, "state": "WV" }, { "_id": "26717", "city": "ELK GARDEN", "loc": [ -79.153871, 39.363088 ], "pop": 1168, "state": "WV" }, { "_id": "26719", "city": "FORT ASHBY", "loc": [ -78.77429600000001, 39.497045 ], "pop": 2212, "state": "WV" }, { "_id": "26720", "city": "GORMANIA", "loc": [ -79.340136, 39.271499 ], "pop": 823, "state": "WV" }, { "_id": "26722", "city": "GREEN SPRING", "loc": [ -78.627191, 39.502931 ], "pop": 739, "state": "WV" }, { "_id": "26726", "city": "SCHERR", "loc": [ -78.98866700000001, 39.430406 ], "pop": 9579, "state": "WV" }, { "_id": "26729", "city": "KIRBY", "loc": [ -78.73146800000001, 39.195588 ], "pop": 303, "state": "WV" }, { "_id": "26731", "city": "LAHMANSVILLE", "loc": [ -79.043319, 39.164225 ], "pop": 32, "state": "WV" }, { "_id": "26734", "city": "MEDLEY", "loc": [ -79.0984, 39.236079 ], "pop": 430, "state": "WV" }, { "_id": "26739", "city": "MOUNT STORM", "loc": [ -79.225454, 39.265224 ], "pop": 861, "state": "WV" }, { "_id": "26743", "city": "NEW CREEK", "loc": [ -79.04521200000001, 39.361155 ], "pop": 1417, "state": "WV" }, { "_id": "26750", "city": "PIEDMONT", "loc": [ -79.048862, 39.479901 ], "pop": 1094, "state": "WV" }, { "_id": "26753", "city": "PATTERSON CREEK", "loc": [ -78.792006, 39.581796 ], "pop": 5929, "state": "WV" }, { "_id": "26755", "city": "RIO", "loc": [ -78.69354800000001, 39.180663 ], "pop": 47, "state": "WV" }, { "_id": "26757", "city": "ROMNEY", "loc": [ -78.748075, 39.342369 ], "pop": 4007, "state": "WV" }, { "_id": "26761", "city": "SHANKS", "loc": [ -78.69953099999999, 39.284859 ], "pop": 779, "state": "WV" }, { "_id": "26763", "city": "SPRINGFIELD", "loc": [ -78.695019, 39.462996 ], "pop": 1321, "state": "WV" }, { "_id": "26764", "city": "HOPEMONT", "loc": [ -79.55723399999999, 39.441575 ], "pop": 4487, "state": "WV" }, { "_id": "26765", "city": "THREE CHURCHES", "loc": [ -78.661061, 39.351578 ], "pop": 1253, "state": "WV" }, { "_id": "26767", "city": "WILEY FORD", "loc": [ -78.774992, 39.613308 ], "pop": 1139, "state": "WV" }, { "_id": "26769", "city": "HORSE SHOE RUN", "loc": [ -79.51231199999999, 39.252842 ], "pop": 367, "state": "WV" }, { "_id": "26801", "city": "BAKER", "loc": [ -78.774826, 39.065588 ], "pop": 1321, "state": "WV" }, { "_id": "26802", "city": "BRANDYWINE", "loc": [ -79.20962900000001, 38.635701 ], "pop": 941, "state": "WV" }, { "_id": "26804", "city": "CIRCLEVILLE", "loc": [ -79.53672, 38.623039 ], "pop": 658, "state": "WV" }, { "_id": "26806", "city": "FORT SEYBERT", "loc": [ -79.140781, 38.739489 ], "pop": 167, "state": "WV" }, { "_id": "26807", "city": "FRANKLIN", "loc": [ -79.353776, 38.639985 ], "pop": 2733, "state": "WV" }, { "_id": "26808", "city": "HIGH VIEW", "loc": [ -78.442548, 39.222497 ], "pop": 922, "state": "WV" }, { "_id": "26810", "city": "LOST CITY", "loc": [ -78.822684, 38.895361 ], "pop": 190, "state": "WV" }, { "_id": "26811", "city": "LOST RIVER", "loc": [ -78.79317, 38.93448 ], "pop": 167, "state": "WV" }, { "_id": "26812", "city": "MATHIAS", "loc": [ -78.88141299999999, 38.874443 ], "pop": 1228, "state": "WV" }, { "_id": "26813", "city": "MOYERS", "loc": [ -79.383011, 38.500561 ], "pop": 461, "state": "WV" }, { "_id": "26814", "city": "RIVERTON", "loc": [ -79.465531, 38.697871 ], "pop": 348, "state": "WV" }, { "_id": "26815", "city": "SUGAR GROVE", "loc": [ -79.290329, 38.52011 ], "pop": 512, "state": "WV" }, { "_id": "26816", "city": "ARTHUR", "loc": [ -79.099576, 39.101237 ], "pop": 581, "state": "WV" }, { "_id": "26817", "city": "BLOOMERY", "loc": [ -78.381561, 39.328606 ], "pop": 675, "state": "WV" }, { "_id": "26818", "city": "FISHER", "loc": [ -78.988756, 39.04796 ], "pop": 1, "state": "WV" }, { "_id": "26824", "city": "JUNCTION", "loc": [ -78.832785, 39.330441 ], "pop": 200, "state": "WV" }, { "_id": "26833", "city": "MAYSVILLE", "loc": [ -79.19370000000001, 39.071174 ], "pop": 2615, "state": "WV" }, { "_id": "26836", "city": "RIG", "loc": [ -78.97793, 39.056812 ], "pop": 6314, "state": "WV" }, { "_id": "26838", "city": "MILAM", "loc": [ -79.072936, 38.812526 ], "pop": 30, "state": "WV" }, { "_id": "26845", "city": "OLD FIELDS", "loc": [ -78.95094400000001, 39.150245 ], "pop": 120, "state": "WV" }, { "_id": "26847", "city": "DORCAS", "loc": [ -79.130701, 38.976602 ], "pop": 4991, "state": "WV" }, { "_id": "26851", "city": "WARDENSVILLE", "loc": [ -78.617457, 39.056238 ], "pop": 1606, "state": "WV" }, { "_id": "26852", "city": "PURGITSVILLE", "loc": [ -78.905951, 39.268065 ], "pop": 672, "state": "WV" }, { "_id": "26855", "city": "CABINS", "loc": [ -79.27833200000001, 38.951199 ], "pop": 95, "state": "WV" }, { "_id": "26865", "city": "LEHEW", "loc": [ -78.494998, 39.183038 ], "pop": 190, "state": "WV" }, { "_id": "26866", "city": "UPPER TRACT", "loc": [ -79.258589, 38.794952 ], "pop": 1161, "state": "WV" }, { "_id": "26884", "city": "SENECA ROCKS", "loc": [ -79.386577, 38.829615 ], "pop": 840, "state": "WV" }, { "_id": "26886", "city": "ONEGO", "loc": [ -79.45070200000001, 38.801718 ], "pop": 233, "state": "WV" }, { "_id": "27006", "city": "ADVANCE", "loc": [ -80.44630100000001, 36.006496 ], "pop": 3325, "state": "NC" }, { "_id": "27007", "city": "ARARAT", "loc": [ -80.608887, 36.386932 ], "pop": 3101, "state": "NC" }, { "_id": "27009", "city": "BELEWS CREEK", "loc": [ -80.09298800000001, 36.226874 ], "pop": 1556, "state": "NC" }, { "_id": "27011", "city": "BOONVILLE", "loc": [ -80.63569, 36.234012 ], "pop": 262, "state": "NC" }, { "_id": "27012", "city": "CLEMMONS", "loc": [ -80.39623, 36.034112 ], "pop": 12694, "state": "NC" }, { "_id": "27013", "city": "CLEVELAND", "loc": [ -80.711254, 35.737397 ], "pop": 4070, "state": "NC" }, { "_id": "27016", "city": "DANBURY", "loc": [ -80.219354, 36.455857 ], "pop": 1560, "state": "NC" }, { "_id": "27017", "city": "DOBSON", "loc": [ -80.710065, 36.369826 ], "pop": 6092, "state": "NC" }, { "_id": "27018", "city": "EAST BEND", "loc": [ -80.52840500000001, 36.203152 ], "pop": 6140, "state": "NC" }, { "_id": "27019", "city": "GERMANTON", "loc": [ -80.225432, 36.272513 ], "pop": 4428, "state": "NC" }, { "_id": "27020", "city": "HAMPTONVILLE", "loc": [ -80.813687, 36.124248 ], "pop": 4691, "state": "NC" }, { "_id": "27021", "city": "KING", "loc": [ -80.355957, 36.295033 ], "pop": 12631, "state": "NC" }, { "_id": "27022", "city": "LAWSONVILLE", "loc": [ -80.210291, 36.513228 ], "pop": 1550, "state": "NC" }, { "_id": "27023", "city": "LEWISVILLE", "loc": [ -80.420638, 36.0967 ], "pop": 7165, "state": "NC" }, { "_id": "27024", "city": "LOWGAP", "loc": [ -80.78886199999999, 36.503041 ], "pop": 5065, "state": "NC" }, { "_id": "27025", "city": "MADISON", "loc": [ -79.96543800000001, 36.369507 ], "pop": 10393, "state": "NC" }, { "_id": "27027", "city": "MAYODAN", "loc": [ -79.95674200000001, 36.427677 ], "pop": 6545, "state": "NC" }, { "_id": "27028", "city": "MOCKSVILLE", "loc": [ -80.536965, 35.922007 ], "pop": 24999, "state": "NC" }, { "_id": "27030", "city": "MOUNT AIRY", "loc": [ -80.61187099999999, 36.500739 ], "pop": 29155, "state": "NC" }, { "_id": "27040", "city": "PFAFFTOWN", "loc": [ -80.37982599999999, 36.166914 ], "pop": 8160, "state": "NC" }, { "_id": "27041", "city": "PILOT MOUNTAIN", "loc": [ -80.492065, 36.41094 ], "pop": 7058, "state": "NC" }, { "_id": "27042", "city": "PINE HALL", "loc": [ -80.049533, 36.348178 ], "pop": 377, "state": "NC" }, { "_id": "27043", "city": "PINNACLE", "loc": [ -80.439111, 36.333905 ], "pop": 4275, "state": "NC" }, { "_id": "27045", "city": "RURAL HALL", "loc": [ -80.293643, 36.229251 ], "pop": 6635, "state": "NC" }, { "_id": "27046", "city": "SANDY RIDGE", "loc": [ -80.085857, 36.489973 ], "pop": 1580, "state": "NC" }, { "_id": "27047", "city": "SILOAM", "loc": [ -80.577162, 36.300208 ], "pop": 524, "state": "NC" }, { "_id": "27048", "city": "STONEVILLE", "loc": [ -79.901297, 36.470483 ], "pop": 4166, "state": "NC" }, { "_id": "27050", "city": "TOBACCOVILLE", "loc": [ -80.391549, 36.233627 ], "pop": 2697, "state": "NC" }, { "_id": "27051", "city": "WALKERTOWN", "loc": [ -80.162865, 36.179999 ], "pop": 6199, "state": "NC" }, { "_id": "27052", "city": "WALNUT COVE", "loc": [ -80.148414, 36.318872 ], "pop": 9048, "state": "NC" }, { "_id": "27053", "city": "WESTFIELD", "loc": [ -80.367739, 36.467405 ], "pop": 3500, "state": "NC" }, { "_id": "27054", "city": "WOODLEAF", "loc": [ -80.60394100000001, 35.787564 ], "pop": 2735, "state": "NC" }, { "_id": "27055", "city": "YADKINVILLE", "loc": [ -80.65302, 36.127694 ], "pop": 11978, "state": "NC" }, { "_id": "27101", "city": "WINSTON SALEM", "loc": [ -80.222798, 36.10237 ], "pop": 19333, "state": "NC" }, { "_id": "27103", "city": "WINSTON SALEM", "loc": [ -80.302509, 36.067127 ], "pop": 24299, "state": "NC" }, { "_id": "27104", "city": "WINSTON SALEM", "loc": [ -80.322423, 36.091985 ], "pop": 23677, "state": "NC" }, { "_id": "27105", "city": "WINSTON SALEM", "loc": [ -80.237646, 36.144039 ], "pop": 40194, "state": "NC" }, { "_id": "27106", "city": "WINSTON SALEM", "loc": [ -80.306866, 36.142762 ], "pop": 35209, "state": "NC" }, { "_id": "27107", "city": "WINSTON SALEM", "loc": [ -80.193265, 36.040324 ], "pop": 33085, "state": "NC" }, { "_id": "27127", "city": "WINSTON SALEM", "loc": [ -80.260946, 36.042534 ], "pop": 20784, "state": "NC" }, { "_id": "27203", "city": "FARMER", "loc": [ -79.819678, 35.693496 ], "pop": 41541, "state": "NC" }, { "_id": "27207", "city": "BEAR CREEK", "loc": [ -79.372606, 35.612882 ], "pop": 3894, "state": "NC" }, { "_id": "27208", "city": "BENNETT", "loc": [ -79.522524, 35.567269 ], "pop": 1218, "state": "NC" }, { "_id": "27209", "city": "BISCOE", "loc": [ -79.75955500000001, 35.325654 ], "pop": 3528, "state": "NC" }, { "_id": "27212", "city": "BLANCH", "loc": [ -79.304185, 36.533839 ], "pop": 94, "state": "NC" }, { "_id": "27214", "city": "BROWNS SUMMIT", "loc": [ -79.71008, 36.201868 ], "pop": 5688, "state": "NC" }, { "_id": "27215", "city": "GLEN RAVEN", "loc": [ -79.462152, 36.072011 ], "pop": 29107, "state": "NC" }, { "_id": "27217", "city": "BURLINGTON", "loc": [ -79.411447, 36.1288 ], "pop": 30651, "state": "NC" }, { "_id": "27229", "city": "CANDOR", "loc": [ -79.787623, 35.22335 ], "pop": 967, "state": "NC" }, { "_id": "27231", "city": "CEDAR GROVE", "loc": [ -79.166588, 36.201986 ], "pop": 1594, "state": "NC" }, { "_id": "27233", "city": "CLIMAX", "loc": [ -79.701858, 35.934512 ], "pop": 1085, "state": "NC" }, { "_id": "27235", "city": "COLFAX", "loc": [ -80.010276, 36.100272 ], "pop": 1983, "state": "NC" }, { "_id": "27239", "city": "DENTON", "loc": [ -80.09592600000001, 35.619567 ], "pop": 7102, "state": "NC" }, { "_id": "27242", "city": "EAGLE SPRINGS", "loc": [ -79.630983, 35.335957 ], "pop": 1742, "state": "NC" }, { "_id": "27243", "city": "EFLAND", "loc": [ -79.18841500000001, 36.091166 ], "pop": 2661, "state": "NC" }, { "_id": "27244", "city": "ELON COLLEGE", "loc": [ -79.502334, 36.146638 ], "pop": 10269, "state": "NC" }, { "_id": "27248", "city": "FRANKLINVILLE", "loc": [ -79.713178, 35.791739 ], "pop": 4613, "state": "NC" }, { "_id": "27249", "city": "GIBSONVILLE", "loc": [ -79.568454, 36.118304 ], "pop": 8409, "state": "NC" }, { "_id": "27252", "city": "GOLDSTON", "loc": [ -79.33852, 35.56428 ], "pop": 1814, "state": "NC" }, { "_id": "27253", "city": "GRAHAM", "loc": [ -79.381384, 36.030967 ], "pop": 19723, "state": "NC" }, { "_id": "27258", "city": "HAW RIVER", "loc": [ -79.334557, 36.055085 ], "pop": 4964, "state": "NC" }, { "_id": "27260", "city": "HIGH POINT", "loc": [ -80.011673, 35.959313 ], "pop": 36887, "state": "NC" }, { "_id": "27262", "city": "HIGH POINT", "loc": [ -80.010677, 35.973406 ], "pop": 11401, "state": "NC" }, { "_id": "27263", "city": "ARCHDALE", "loc": [ -79.961764, 35.910757 ], "pop": 17140, "state": "NC" }, { "_id": "27265", "city": "HIGH POINT", "loc": [ -80.00357099999999, 36.003584 ], "pop": 22310, "state": "NC" }, { "_id": "27278", "city": "HILLSBOROUGH", "loc": [ -79.091416, 36.07558 ], "pop": 15811, "state": "NC" }, { "_id": "27281", "city": "JACKSON SPRINGS", "loc": [ -79.66853500000001, 35.225941 ], "pop": 2167, "state": "NC" }, { "_id": "27282", "city": "JAMESTOWN", "loc": [ -79.929286, 35.998993 ], "pop": 9812, "state": "NC" }, { "_id": "27283", "city": "JULIAN", "loc": [ -79.63862899999999, 35.95429 ], "pop": 2894, "state": "NC" }, { "_id": "27284", "city": "KERNERSVILLE", "loc": [ -80.08311500000001, 36.116534 ], "pop": 34795, "state": "NC" }, { "_id": "27288", "city": "EDEN", "loc": [ -79.75899800000001, 36.500003 ], "pop": 26675, "state": "NC" }, { "_id": "27291", "city": "LEASBURG", "loc": [ -79.194188, 36.415113 ], "pop": 2700, "state": "NC" }, { "_id": "27292", "city": "LEXINGTON", "loc": [ -80.262049, 35.82306 ], "pop": 69179, "state": "NC" }, { "_id": "27298", "city": "LIBERTY", "loc": [ -79.582144, 35.872878 ], "pop": 7303, "state": "NC" }, { "_id": "27299", "city": "LINWOOD", "loc": [ -80.374895, 35.75623 ], "pop": 2823, "state": "NC" }, { "_id": "27301", "city": "MC LEANSVILLE", "loc": [ -79.66838799999999, 36.116291 ], "pop": 5200, "state": "NC" }, { "_id": "27302", "city": "MEBANE", "loc": [ -79.271895, 36.097862 ], "pop": 14650, "state": "NC" }, { "_id": "27305", "city": "MILTON", "loc": [ -79.208699, 36.515784 ], "pop": 1383, "state": "NC" }, { "_id": "27306", "city": "MOUNT GILEAD", "loc": [ -79.98708999999999, 35.227447 ], "pop": 5829, "state": "NC" }, { "_id": "27310", "city": "OAK RIDGE", "loc": [ -79.980366, 36.167315 ], "pop": 2231, "state": "NC" }, { "_id": "27311", "city": "PELHAM", "loc": [ -79.47360500000001, 36.489912 ], "pop": 3964, "state": "NC" }, { "_id": "27312", "city": "PITTSBORO", "loc": [ -79.17550900000001, 35.769436 ], "pop": 10601, "state": "NC" }, { "_id": "27313", "city": "PLEASANT GARDEN", "loc": [ -79.754943, 35.952243 ], "pop": 4064, "state": "NC" }, { "_id": "27314", "city": "PROSPECT HILL", "loc": [ -79.215644, 36.293195 ], "pop": 1116, "state": "NC" }, { "_id": "27315", "city": "PROVIDENCE", "loc": [ -79.36306, 36.48314 ], "pop": 3462, "state": "NC" }, { "_id": "27316", "city": "COLERIDGE", "loc": [ -79.63510100000001, 35.708349 ], "pop": 5238, "state": "NC" }, { "_id": "27317", "city": "RANDLEMAN", "loc": [ -79.801794, 35.848805 ], "pop": 14220, "state": "NC" }, { "_id": "27320", "city": "REIDSVILLE", "loc": [ -79.66421200000001, 36.343209 ], "pop": 34283, "state": "NC" }, { "_id": "27325", "city": "ROBBINS", "loc": [ -79.58203399999999, 35.452839 ], "pop": 6383, "state": "NC" }, { "_id": "27326", "city": "RUFFIN", "loc": [ -79.560551, 36.442763 ], "pop": 4138, "state": "NC" }, { "_id": "27330", "city": "COLON", "loc": [ -79.176446, 35.464148 ], "pop": 39537, "state": "NC" }, { "_id": "27341", "city": "SEAGROVE", "loc": [ -79.69786999999999, 35.528309 ], "pop": 4656, "state": "NC" }, { "_id": "27343", "city": "SEMORA", "loc": [ -79.094168, 36.511414 ], "pop": 1214, "state": "NC" }, { "_id": "27344", "city": "SILER CITY", "loc": [ -79.45662400000001, 35.735392 ], "pop": 12298, "state": "NC" }, { "_id": "27349", "city": "SNOW CAMP", "loc": [ -79.427893, 35.906583 ], "pop": 3424, "state": "NC" }, { "_id": "27350", "city": "SOPHIA", "loc": [ -79.898634, 35.829845 ], "pop": 4165, "state": "NC" }, { "_id": "27355", "city": "STALEY", "loc": [ -79.584391, 35.801485 ], "pop": 1747, "state": "NC" }, { "_id": "27356", "city": "STAR", "loc": [ -79.782607, 35.421113 ], "pop": 3077, "state": "NC" }, { "_id": "27357", "city": "STOKESDALE", "loc": [ -79.970528, 36.255217 ], "pop": 3807, "state": "NC" }, { "_id": "27358", "city": "SUMMERFIELD", "loc": [ -79.890136, 36.224454 ], "pop": 5937, "state": "NC" }, { "_id": "27360", "city": "THOMASVILLE", "loc": [ -80.09128, 35.87128 ], "pop": 32777, "state": "NC" }, { "_id": "27370", "city": "TRINITY", "loc": [ -79.990206, 35.842949 ], "pop": 14290, "state": "NC" }, { "_id": "27371", "city": "TROY", "loc": [ -79.909252, 35.377702 ], "pop": 9536, "state": "NC" }, { "_id": "27376", "city": "WEST END", "loc": [ -79.53598, 35.251239 ], "pop": 5480, "state": "NC" }, { "_id": "27377", "city": "WHITSETT", "loc": [ -79.597151, 36.032981 ], "pop": 2345, "state": "NC" }, { "_id": "27379", "city": "YANCEYVILLE", "loc": [ -79.346485, 36.390695 ], "pop": 3011, "state": "NC" }, { "_id": "27401", "city": "GREENSBORO", "loc": [ -79.768151, 36.069741 ], "pop": 19389, "state": "NC" }, { "_id": "27403", "city": "GREENSBORO", "loc": [ -79.82018100000001, 36.064147 ], "pop": 21666, "state": "NC" }, { "_id": "27405", "city": "GREENSBORO", "loc": [ -79.77330000000001, 36.121408 ], "pop": 46387, "state": "NC" }, { "_id": "27406", "city": "GREENSBORO", "loc": [ -79.78205800000001, 36.021969 ], "pop": 45221, "state": "NC" }, { "_id": "27407", "city": "GREENSBORO", "loc": [ -79.862647, 36.033442 ], "pop": 29591, "state": "NC" }, { "_id": "27408", "city": "GREENSBORO", "loc": [ -79.816531, 36.1064 ], "pop": 19970, "state": "NC" }, { "_id": "27409", "city": "GREENSBORO", "loc": [ -79.908602, 36.077683 ], "pop": 8734, "state": "NC" }, { "_id": "27410", "city": "GREENSBORO", "loc": [ -79.87936500000001, 36.103164 ], "pop": 33819, "state": "NC" }, { "_id": "27501", "city": "ANGIER", "loc": [ -78.724931, 35.489725 ], "pop": 6349, "state": "NC" }, { "_id": "27502", "city": "APEX", "loc": [ -78.840816, 35.722504 ], "pop": 19391, "state": "NC" }, { "_id": "27503", "city": "BAHAMA", "loc": [ -78.89028399999999, 36.156581 ], "pop": 3276, "state": "NC" }, { "_id": "27504", "city": "BENSON", "loc": [ -78.54213, 35.403661 ], "pop": 9995, "state": "NC" }, { "_id": "27505", "city": "BROADWAY", "loc": [ -79.043547, 35.418088 ], "pop": 5551, "state": "NC" }, { "_id": "27507", "city": "BULLOCK", "loc": [ -78.56458000000001, 36.507642 ], "pop": 1423, "state": "NC" }, { "_id": "27509", "city": "BUTNER", "loc": [ -78.7636, 36.135939 ], "pop": 6310, "state": "NC" }, { "_id": "27510", "city": "CARRBORO", "loc": [ -79.08183200000001, 35.912409 ], "pop": 10049, "state": "NC" }, { "_id": "27511", "city": "CARY", "loc": [ -78.77856800000001, 35.764119 ], "pop": 31040, "state": "NC" }, { "_id": "27513", "city": "CARY", "loc": [ -78.794061, 35.795642 ], "pop": 15082, "state": "NC" }, { "_id": "27514", "city": "CHAPEL HILL", "loc": [ -79.037189, 35.920322 ], "pop": 39733, "state": "NC" }, { "_id": "27516", "city": "CHAPEL HILL", "loc": [ -79.099867, 35.916175 ], "pop": 21377, "state": "NC" }, { "_id": "27520", "city": "CLAYTON", "loc": [ -78.451013, 35.63484 ], "pop": 15067, "state": "NC" }, { "_id": "27521", "city": "COATS", "loc": [ -78.66270400000001, 35.40822 ], "pop": 4437, "state": "NC" }, { "_id": "27522", "city": "CREEDMOOR", "loc": [ -78.647587, 36.112433 ], "pop": 7620, "state": "NC" }, { "_id": "27524", "city": "FOUR OAKS", "loc": [ -78.415282, 35.404017 ], "pop": 9270, "state": "NC" }, { "_id": "27525", "city": "FRANKLINTON", "loc": [ -78.448618, 36.095505 ], "pop": 8242, "state": "NC" }, { "_id": "27526", "city": "FUQUAY VARINA", "loc": [ -78.790807, 35.579952 ], "pop": 16537, "state": "NC" }, { "_id": "27529", "city": "GARNER", "loc": [ -78.597527, 35.681254 ], "pop": 21063, "state": "NC" }, { "_id": "27530", "city": "GRANTHAM", "loc": [ -78.01581299999999, 35.382585 ], "pop": 37791, "state": "NC" }, { "_id": "27531", "city": "SEYMOUR JOHNSON", "loc": [ -77.96431200000001, 35.352611 ], "pop": 4747, "state": "NC" }, { "_id": "27534", "city": "GOLDSBORO", "loc": [ -77.92206899999999, 35.36643 ], "pop": 31892, "state": "NC" }, { "_id": "27536", "city": "HENDERSON", "loc": [ -78.39808600000001, 36.330068 ], "pop": 36983, "state": "NC" }, { "_id": "27540", "city": "HOLLY SPRINGS", "loc": [ -78.845816, 35.626263 ], "pop": 2282, "state": "NC" }, { "_id": "27541", "city": "HURDLE MILLS", "loc": [ -79.08266, 36.251788 ], "pop": 2773, "state": "NC" }, { "_id": "27542", "city": "KENLY", "loc": [ -78.138227, 35.607742 ], "pop": 6729, "state": "NC" }, { "_id": "27544", "city": "KITTRELL", "loc": [ -78.42407300000001, 36.204175 ], "pop": 2967, "state": "NC" }, { "_id": "27545", "city": "KNIGHTDALE", "loc": [ -78.489814, 35.778926 ], "pop": 11525, "state": "NC" }, { "_id": "27546", "city": "LILLINGTON", "loc": [ -78.921223, 35.331954 ], "pop": 23302, "state": "NC" }, { "_id": "27549", "city": "LOUISBURG", "loc": [ -78.25862499999999, 36.05781 ], "pop": 20285, "state": "NC" }, { "_id": "27551", "city": "MACON", "loc": [ -77.99870900000001, 36.444697 ], "pop": 4044, "state": "NC" }, { "_id": "27553", "city": "MANSON", "loc": [ -78.29525, 36.460264 ], "pop": 1976, "state": "NC" }, { "_id": "27557", "city": "MIDDLESEX", "loc": [ -78.20616200000001, 35.766499 ], "pop": 4318, "state": "NC" }, { "_id": "27559", "city": "MONCURE", "loc": [ -79.083915, 35.630615 ], "pop": 2695, "state": "NC" }, { "_id": "27560", "city": "MORRISVILLE", "loc": [ -78.846594, 35.834371 ], "pop": 3922, "state": "NC" }, { "_id": "27562", "city": "NEW HILL", "loc": [ -78.93653399999999, 35.680877 ], "pop": 991, "state": "NC" }, { "_id": "27563", "city": "NORLINA", "loc": [ -78.189455, 36.475364 ], "pop": 3605, "state": "NC" }, { "_id": "27565", "city": "OXFORD", "loc": [ -78.613433, 36.331269 ], "pop": 20568, "state": "NC" }, { "_id": "27569", "city": "PRINCETON", "loc": [ -78.167368, 35.455833 ], "pop": 5378, "state": "NC" }, { "_id": "27571", "city": "ROLESVILLE", "loc": [ -78.46584300000001, 35.915575 ], "pop": 3975, "state": "NC" }, { "_id": "27572", "city": "ROUGEMONT", "loc": [ -78.901867, 36.239251 ], "pop": 4253, "state": "NC" }, { "_id": "27573", "city": "ROXBORO", "loc": [ -78.973698, 36.405902 ], "pop": 22321, "state": "NC" }, { "_id": "27576", "city": "SELMA", "loc": [ -78.264025, 35.556531 ], "pop": 13335, "state": "NC" }, { "_id": "27577", "city": "SMITHFIELD", "loc": [ -78.347866, 35.50684 ], "pop": 15031, "state": "NC" }, { "_id": "27581", "city": "STEM", "loc": [ -78.70012, 36.21004 ], "pop": 2421, "state": "NC" }, { "_id": "27583", "city": "TIMBERLAKE", "loc": [ -78.935287, 36.291763 ], "pop": 3424, "state": "NC" }, { "_id": "27587", "city": "WAKE FOREST", "loc": [ -78.539213, 35.981544 ], "pop": 11878, "state": "NC" }, { "_id": "27589", "city": "WARRENTON", "loc": [ -78.159389, 36.353944 ], "pop": 8240, "state": "NC" }, { "_id": "27591", "city": "WENDELL", "loc": [ -78.392601, 35.797964 ], "pop": 12418, "state": "NC" }, { "_id": "27592", "city": "WILLOW SPRING", "loc": [ -78.671738, 35.547031 ], "pop": 4672, "state": "NC" }, { "_id": "27596", "city": "YOUNGSVILLE", "loc": [ -78.441198, 36.007782 ], "pop": 4549, "state": "NC" }, { "_id": "27597", "city": "ZEBULON", "loc": [ -78.317368, 35.832078 ], "pop": 10153, "state": "NC" }, { "_id": "27601", "city": "RALEIGH", "loc": [ -78.63243900000001, 35.772701 ], "pop": 9810, "state": "NC" }, { "_id": "27603", "city": "RALEIGH", "loc": [ -78.656265, 35.707569 ], "pop": 25366, "state": "NC" }, { "_id": "27604", "city": "RALEIGH", "loc": [ -78.579949, 35.833407 ], "pop": 35217, "state": "NC" }, { "_id": "27605", "city": "RALEIGH", "loc": [ -78.653025, 35.790795 ], "pop": 4169, "state": "NC" }, { "_id": "27606", "city": "RALEIGH", "loc": [ -78.711189, 35.764499 ], "pop": 29446, "state": "NC" }, { "_id": "27607", "city": "RALEIGH", "loc": [ -78.687747, 35.801385 ], "pop": 19515, "state": "NC" }, { "_id": "27608", "city": "RALEIGH", "loc": [ -78.646277, 35.807746 ], "pop": 10130, "state": "NC" }, { "_id": "27609", "city": "RALEIGH", "loc": [ -78.631654, 35.847989 ], "pop": 29872, "state": "NC" }, { "_id": "27610", "city": "RALEIGH", "loc": [ -78.60075999999999, 35.766674 ], "pop": 32494, "state": "NC" }, { "_id": "27612", "city": "RALEIGH", "loc": [ -78.684119, 35.851997 ], "pop": 20962, "state": "NC" }, { "_id": "27613", "city": "RALEIGH", "loc": [ -78.70505900000001, 35.894932 ], "pop": 19518, "state": "NC" }, { "_id": "27614", "city": "RALEIGH", "loc": [ -78.643339, 35.945711 ], "pop": 7200, "state": "NC" }, { "_id": "27615", "city": "RALEIGH", "loc": [ -78.63927700000001, 35.888744 ], "pop": 29771, "state": "NC" }, { "_id": "27701", "city": "DURHAM", "loc": [ -78.896613, 35.996725 ], "pop": 20284, "state": "NC" }, { "_id": "27703", "city": "DURHAM", "loc": [ -78.843874, 35.978122 ], "pop": 24362, "state": "NC" }, { "_id": "27704", "city": "DURHAM", "loc": [ -78.876437, 36.038297 ], "pop": 23460, "state": "NC" }, { "_id": "27705", "city": "DURHAM", "loc": [ -78.947776, 36.021846 ], "pop": 32916, "state": "NC" }, { "_id": "27706", "city": "DURHAM", "loc": [ -78.937524, 36.002427 ], "pop": 4790, "state": "NC" }, { "_id": "27707", "city": "DURHAM", "loc": [ -78.931484, 35.963076 ], "pop": 36264, "state": "NC" }, { "_id": "27712", "city": "DURHAM", "loc": [ -78.929919, 36.091779 ], "pop": 15138, "state": "NC" }, { "_id": "27713", "city": "RESEARCH TRIANGL", "loc": [ -78.916641, 35.916105 ], "pop": 19493, "state": "NC" }, { "_id": "27801", "city": "ROCKY MOUNT", "loc": [ -77.76081600000001, 35.94265 ], "pop": 25072, "state": "NC" }, { "_id": "27803", "city": "ROCKY MOUNT", "loc": [ -77.835022, 35.923784 ], "pop": 20416, "state": "NC" }, { "_id": "27804", "city": "WESLEYAN COLLEGE", "loc": [ -77.82754300000001, 35.979634 ], "pop": 24367, "state": "NC" }, { "_id": "27805", "city": "AULANDER", "loc": [ -77.114086, 36.147452 ], "pop": 4880, "state": "NC" }, { "_id": "27806", "city": "AURORA", "loc": [ -76.799448, 35.302282 ], "pop": 2957, "state": "NC" }, { "_id": "27807", "city": "BAILEY", "loc": [ -78.089226, 35.807167 ], "pop": 4399, "state": "NC" }, { "_id": "27808", "city": "BATH", "loc": [ -76.771531, 35.470161 ], "pop": 1915, "state": "NC" }, { "_id": "27809", "city": "BATTLEBORO", "loc": [ -77.431107, 35.84387 ], "pop": 808, "state": "NC" }, { "_id": "27810", "city": "BELHAVEN", "loc": [ -76.623574, 35.520493 ], "pop": 4130, "state": "NC" }, { "_id": "27812", "city": "BETHEL", "loc": [ -77.374765, 35.790885 ], "pop": 3116, "state": "NC" }, { "_id": "27814", "city": "BLOUNTS CREEK", "loc": [ -76.925004, 35.382029 ], "pop": 1272, "state": "NC" }, { "_id": "27816", "city": "CASTALIA", "loc": [ -78.070452, 36.090124 ], "pop": 2623, "state": "NC" }, { "_id": "27817", "city": "CHOCOWINITY", "loc": [ -77.08680099999999, 35.481409 ], "pop": 5553, "state": "NC" }, { "_id": "27818", "city": "COMO", "loc": [ -77.051526, 36.497818 ], "pop": 1484, "state": "NC" }, { "_id": "27820", "city": "CONWAY", "loc": [ -77.250243, 36.416382 ], "pop": 3474, "state": "NC" }, { "_id": "27821", "city": "EDWARD", "loc": [ -76.87938800000001, 35.323588 ], "pop": 122, "state": "NC" }, { "_id": "27822", "city": "ELM CITY", "loc": [ -77.856032, 35.810954 ], "pop": 8507, "state": "NC" }, { "_id": "27823", "city": "ENFIELD", "loc": [ -77.712907, 36.197331 ], "pop": 8876, "state": "NC" }, { "_id": "27824", "city": "MIDDLETOWN", "loc": [ -76.037434, 35.49806 ], "pop": 1822, "state": "NC" }, { "_id": "27826", "city": "FAIRFIELD", "loc": [ -76.231768, 35.565873 ], "pop": 585, "state": "NC" }, { "_id": "27828", "city": "FARMVILLE", "loc": [ -77.579303, 35.580606 ], "pop": 8260, "state": "NC" }, { "_id": "27829", "city": "FOUNTAIN", "loc": [ -77.621448, 35.669436 ], "pop": 1419, "state": "NC" }, { "_id": "27830", "city": "EUREKA", "loc": [ -77.996302, 35.518558 ], "pop": 6803, "state": "NC" }, { "_id": "27831", "city": "GARYSBURG", "loc": [ -77.571905, 36.476147 ], "pop": 2824, "state": "NC" }, { "_id": "27832", "city": "GASTON", "loc": [ -77.682379, 36.51153 ], "pop": 2560, "state": "NC" }, { "_id": "27834", "city": "GREENVILLE", "loc": [ -77.397542, 35.619221 ], "pop": 35377, "state": "NC" }, { "_id": "27837", "city": "GRIMESLAND", "loc": [ -77.256612, 35.558005 ], "pop": 6998, "state": "NC" }, { "_id": "27839", "city": "HALIFAX", "loc": [ -77.56072500000001, 36.30492 ], "pop": 4264, "state": "NC" }, { "_id": "27840", "city": "HAMILTON", "loc": [ -77.21762, 35.944119 ], "pop": 1060, "state": "NC" }, { "_id": "27842", "city": "HENRICO", "loc": [ -77.854625, 36.527409 ], "pop": 800, "state": "NC" }, { "_id": "27843", "city": "HOBGOOD", "loc": [ -77.436959, 36.004281 ], "pop": 2408, "state": "NC" }, { "_id": "27844", "city": "HOLLISTER", "loc": [ -77.931916, 36.25898 ], "pop": 2691, "state": "NC" }, { "_id": "27845", "city": "JACKSON", "loc": [ -77.468144, 36.386984 ], "pop": 2703, "state": "NC" }, { "_id": "27846", "city": "JAMESVILLE", "loc": [ -76.898332, 35.78385 ], "pop": 3141, "state": "NC" }, { "_id": "27847", "city": "KELFORD", "loc": [ -77.259214, 36.199173 ], "pop": 150, "state": "NC" }, { "_id": "27848", "city": "LASKER", "loc": [ -77.348266, 36.376664 ], "pop": 80, "state": "NC" }, { "_id": "27849", "city": "LEWISTON WOODVIL", "loc": [ -77.206631, 36.134416 ], "pop": 634, "state": "NC" }, { "_id": "27850", "city": "LITTLETON", "loc": [ -77.85281500000001, 36.416877 ], "pop": 4388, "state": "NC" }, { "_id": "27851", "city": "LUCAMA", "loc": [ -78.019687, 35.641504 ], "pop": 4537, "state": "NC" }, { "_id": "27852", "city": "CRISP", "loc": [ -77.596442, 35.773741 ], "pop": 4145, "state": "NC" }, { "_id": "27853", "city": "MARGARETTSVILLE", "loc": [ -77.325997, 36.524494 ], "pop": 289, "state": "NC" }, { "_id": "27855", "city": "MURFREESBORO", "loc": [ -77.10269599999999, 36.43192 ], "pop": 6186, "state": "NC" }, { "_id": "27856", "city": "NASHVILLE", "loc": [ -77.959485, 35.98428 ], "pop": 12069, "state": "NC" }, { "_id": "27857", "city": "OAK CITY", "loc": [ -77.30036200000001, 35.959736 ], "pop": 2268, "state": "NC" }, { "_id": "27858", "city": "GREENVILLE", "loc": [ -77.348505, 35.586567 ], "pop": 31246, "state": "NC" }, { "_id": "27859", "city": "PALMYRA", "loc": [ -77.364288, 36.106268 ], "pop": 344, "state": "NC" }, { "_id": "27860", "city": "PANTEGO", "loc": [ -76.698848, 35.620058 ], "pop": 1915, "state": "NC" }, { "_id": "27862", "city": "PENDLETON", "loc": [ -77.191112, 36.493676 ], "pop": 1127, "state": "NC" }, { "_id": "27863", "city": "PIKEVILLE", "loc": [ -77.957787, 35.49289 ], "pop": 1968, "state": "NC" }, { "_id": "27864", "city": "PINETOPS", "loc": [ -77.691952, 35.819611 ], "pop": 5935, "state": "NC" }, { "_id": "27865", "city": "PINETOWN", "loc": [ -76.807565, 35.57576 ], "pop": 1829, "state": "NC" }, { "_id": "27866", "city": "PLEASANT HILL", "loc": [ -77.519217, 36.521246 ], "pop": 639, "state": "NC" }, { "_id": "27869", "city": "RICH SQUARE", "loc": [ -77.296947, 36.277256 ], "pop": 2621, "state": "NC" }, { "_id": "27870", "city": "ROANOKE RAPIDS", "loc": [ -77.67306000000001, 36.446146 ], "pop": 25628, "state": "NC" }, { "_id": "27871", "city": "ROBERSONVILLE", "loc": [ -77.26004, 35.821797 ], "pop": 4941, "state": "NC" }, { "_id": "27872", "city": "ROXOBEL", "loc": [ -77.22706100000001, 36.194464 ], "pop": 623, "state": "NC" }, { "_id": "27873", "city": "SARATOGA", "loc": [ -77.767613, 35.662778 ], "pop": 1870, "state": "NC" }, { "_id": "27874", "city": "SCOTLAND NECK", "loc": [ -77.427274, 36.130141 ], "pop": 5219, "state": "NC" }, { "_id": "27875", "city": "SCRANTON", "loc": [ -76.49170599999999, 35.525039 ], "pop": 1184, "state": "NC" }, { "_id": "27876", "city": "SEABOARD", "loc": [ -77.411306, 36.488552 ], "pop": 1767, "state": "NC" }, { "_id": "27880", "city": "SIMS", "loc": [ -78.085854, 35.74351 ], "pop": 2214, "state": "NC" }, { "_id": "27882", "city": "SPRING HOPE", "loc": [ -78.10850000000001, 35.930193 ], "pop": 6180, "state": "NC" }, { "_id": "27883", "city": "STANTONSBURG", "loc": [ -77.837773, 35.593998 ], "pop": 2117, "state": "NC" }, { "_id": "27884", "city": "STOKES", "loc": [ -77.272178, 35.710402 ], "pop": 922, "state": "NC" }, { "_id": "27885", "city": "SWANQUARTER", "loc": [ -76.287521, 35.422207 ], "pop": 1203, "state": "NC" }, { "_id": "27886", "city": "TARBORO", "loc": [ -77.542067, 35.898257 ], "pop": 16144, "state": "NC" }, { "_id": "27888", "city": "WALSTONBURG", "loc": [ -77.698336, 35.588204 ], "pop": 2649, "state": "NC" }, { "_id": "27889", "city": "WASHINGTON", "loc": [ -77.140356, 35.588392 ], "pop": 865, "state": "NC" }, { "_id": "27890", "city": "WELDON", "loc": [ -77.60346, 36.420643 ], "pop": 2819, "state": "NC" }, { "_id": "27891", "city": "WHITAKERS", "loc": [ -77.71674299999999, 36.075797 ], "pop": 6281, "state": "NC" }, { "_id": "27892", "city": "WILLIAMSTON", "loc": [ -77.048344, 35.660154 ], "pop": 36648, "state": "NC" }, { "_id": "27893", "city": "WILSON", "loc": [ -77.92273299999999, 35.727022 ], "pop": 47823, "state": "NC" }, { "_id": "27897", "city": "GEORGE", "loc": [ -77.197782, 36.320465 ], "pop": 2164, "state": "NC" }, { "_id": "27909", "city": "ELIZABETH CITY", "loc": [ -76.24454799999999, 36.295051 ], "pop": 31298, "state": "NC" }, { "_id": "27910", "city": "AHOSKIE", "loc": [ -76.99663200000001, 36.295737 ], "pop": 11451, "state": "NC" }, { "_id": "27916", "city": "AYDLETT", "loc": [ -75.902914, 36.304469 ], "pop": 356, "state": "NC" }, { "_id": "27917", "city": "BARCO", "loc": [ -75.97928400000001, 36.358778 ], "pop": 1031, "state": "NC" }, { "_id": "27919", "city": "BELVIDERE", "loc": [ -76.543586, 36.309644 ], "pop": 1614, "state": "NC" }, { "_id": "27921", "city": "CAMDEN", "loc": [ -76.150002, 36.324985 ], "pop": 2439, "state": "NC" }, { "_id": "27922", "city": "COFIELD", "loc": [ -76.874568, 36.333316 ], "pop": 661, "state": "NC" }, { "_id": "27923", "city": "COINJOCK", "loc": [ -75.934012, 36.375064 ], "pop": 434, "state": "NC" }, { "_id": "27924", "city": "COLERAIN", "loc": [ -76.854799, 36.190083 ], "pop": 3709, "state": "NC" }, { "_id": "27925", "city": "COLUMBIA", "loc": [ -76.234481, 35.905664 ], "pop": 3650, "state": "NC" }, { "_id": "27926", "city": "CORAPEAKE", "loc": [ -76.597852, 36.517946 ], "pop": 1377, "state": "NC" }, { "_id": "27927", "city": "COROLLA", "loc": [ -75.81321699999999, 36.320646 ], "pop": 288, "state": "NC" }, { "_id": "27928", "city": "CRESWELL", "loc": [ -76.419555, 35.865303 ], "pop": 2287, "state": "NC" }, { "_id": "27929", "city": "CURRITUCK", "loc": [ -75.988399, 36.429691 ], "pop": 498, "state": "NC" }, { "_id": "27932", "city": "EDENTON", "loc": [ -76.622384, 36.090777 ], "pop": 11572, "state": "NC" }, { "_id": "27935", "city": "EURE", "loc": [ -76.846341, 36.434117 ], "pop": 1346, "state": "NC" }, { "_id": "27937", "city": "GATES", "loc": [ -76.764563, 36.503618 ], "pop": 2598, "state": "NC" }, { "_id": "27938", "city": "GATESVILLE", "loc": [ -76.732462, 36.407171 ], "pop": 1398, "state": "NC" }, { "_id": "27939", "city": "GRANDY", "loc": [ -75.876808, 36.233889 ], "pop": 908, "state": "NC" }, { "_id": "27941", "city": "HARBINGER", "loc": [ -75.81214300000001, 36.086392 ], "pop": 189, "state": "NC" }, { "_id": "27942", "city": "HARRELLSVILLE", "loc": [ -76.77667700000001, 36.286586 ], "pop": 1046, "state": "NC" }, { "_id": "27944", "city": "DURANTS NECK", "loc": [ -76.424299, 36.177058 ], "pop": 9357, "state": "NC" }, { "_id": "27946", "city": "HOBBSVILLE", "loc": [ -76.617813, 36.354303 ], "pop": 722, "state": "NC" }, { "_id": "27947", "city": "JARVISBURG", "loc": [ -75.859469, 36.173963 ], "pop": 653, "state": "NC" }, { "_id": "27948", "city": "KILL DEVIL HILLS", "loc": [ -75.67565399999999, 36.008793 ], "pop": 7870, "state": "NC" }, { "_id": "27949", "city": "SOUTHERN SHORES", "loc": [ -75.725373, 36.100694 ], "pop": 4046, "state": "NC" }, { "_id": "27950", "city": "KNOTTS ISLAND", "loc": [ -75.970247, 36.523167 ], "pop": 1493, "state": "NC" }, { "_id": "27953", "city": "EAST LAKE", "loc": [ -75.94440400000001, 35.887191 ], "pop": 139, "state": "NC" }, { "_id": "27954", "city": "MANTEO", "loc": [ -75.671418, 35.894774 ], "pop": 5726, "state": "NC" }, { "_id": "27956", "city": "MAPLE", "loc": [ -76.003874, 36.398686 ], "pop": 321, "state": "NC" }, { "_id": "27957", "city": "MERRY HILL", "loc": [ -76.77755999999999, 36.087121 ], "pop": 1187, "state": "NC" }, { "_id": "27958", "city": "MOYOCK", "loc": [ -76.114575, 36.487094 ], "pop": 5475, "state": "NC" }, { "_id": "27959", "city": "NAGS HEAD", "loc": [ -75.567592, 35.347209 ], "pop": 4085, "state": "NC" }, { "_id": "27962", "city": "PLYMOUTH", "loc": [ -76.74314800000001, 35.850826 ], "pop": 7951, "state": "NC" }, { "_id": "27964", "city": "POINT HARBOR", "loc": [ -75.79828500000001, 36.078114 ], "pop": 65, "state": "NC" }, { "_id": "27965", "city": "POPLAR BRANCH", "loc": [ -75.88301800000001, 36.257028 ], "pop": 733, "state": "NC" }, { "_id": "27966", "city": "POWELLS POINT", "loc": [ -75.827314, 36.120674 ], "pop": 959, "state": "NC" }, { "_id": "27970", "city": "ROPER", "loc": [ -76.580918, 35.899413 ], "pop": 3869, "state": "NC" }, { "_id": "27973", "city": "SHAWBORO", "loc": [ -76.09445100000001, 36.377875 ], "pop": 333, "state": "NC" }, { "_id": "27974", "city": "SHILOH", "loc": [ -76.04316799999999, 36.258449 ], "pop": 1378, "state": "NC" }, { "_id": "27976", "city": "SOUTH MILLS", "loc": [ -76.303284, 36.453576 ], "pop": 2087, "state": "NC" }, { "_id": "27978", "city": "STUMPY POINT", "loc": [ -75.77909, 35.863007 ], "pop": 880, "state": "NC" }, { "_id": "27979", "city": "SUNBURY", "loc": [ -76.609568, 36.431605 ], "pop": 1711, "state": "NC" }, { "_id": "27980", "city": "TYNER", "loc": [ -76.642796, 36.250239 ], "pop": 1563, "state": "NC" }, { "_id": "27983", "city": "WINDSOR", "loc": [ -76.933612, 36.015881 ], "pop": 9205, "state": "NC" }, { "_id": "27986", "city": "WINTON", "loc": [ -76.936007, 36.382616 ], "pop": 1443, "state": "NC" }, { "_id": "28001", "city": "ALBEMARLE", "loc": [ -80.204363, 35.357276 ], "pop": 26329, "state": "NC" }, { "_id": "28006", "city": "ALEXIS", "loc": [ -81.102204, 35.383613 ], "pop": 4724, "state": "NC" }, { "_id": "28012", "city": "BELMONT", "loc": [ -81.044016, 35.244029 ], "pop": 19504, "state": "NC" }, { "_id": "28016", "city": "BESSEMER CITY", "loc": [ -81.28635, 35.284904 ], "pop": 8858, "state": "NC" }, { "_id": "28018", "city": "BOSTIC", "loc": [ -81.81183, 35.453259 ], "pop": 3094, "state": "NC" }, { "_id": "28020", "city": "CASAR", "loc": [ -81.63574199999999, 35.514496 ], "pop": 1646, "state": "NC" }, { "_id": "28021", "city": "CHERRYVILLE", "loc": [ -81.350893, 35.374742 ], "pop": 16445, "state": "NC" }, { "_id": "28023", "city": "CHINA GROVE", "loc": [ -80.59004, 35.5669 ], "pop": 13040, "state": "NC" }, { "_id": "28025", "city": "CONCORD", "loc": [ -80.530027, 35.371614 ], "pop": 15094, "state": "NC" }, { "_id": "28027", "city": "CONCORD", "loc": [ -80.61622699999999, 35.414115 ], "pop": 39900, "state": "NC" }, { "_id": "28032", "city": "CRAMERTON", "loc": [ -81.083061, 35.23965 ], "pop": 2835, "state": "NC" }, { "_id": "28033", "city": "CROUSE", "loc": [ -81.34185100000001, 35.483722 ], "pop": 5431, "state": "NC" }, { "_id": "28034", "city": "DALLAS", "loc": [ -81.1862, 35.334853 ], "pop": 13328, "state": "NC" }, { "_id": "28036", "city": "CORNELIUS", "loc": [ -80.857229, 35.495692 ], "pop": 7301, "state": "NC" }, { "_id": "28037", "city": "DENVER", "loc": [ -80.989785, 35.483677 ], "pop": 6776, "state": "NC" }, { "_id": "28040", "city": "ELLENBORO", "loc": [ -81.770652, 35.334426 ], "pop": 8287, "state": "NC" }, { "_id": "28043", "city": "ALEXANDER MILLS", "loc": [ -81.86424700000001, 35.301753 ], "pop": 25940, "state": "NC" }, { "_id": "28052", "city": "GASTONIA", "loc": [ -81.219449, 35.244917 ], "pop": 37403, "state": "NC" }, { "_id": "28054", "city": "GASTONIA", "loc": [ -81.145409, 35.200537 ], "pop": 15997, "state": "NC" }, { "_id": "28056", "city": "GASTONIA", "loc": [ -81.14962199999999, 35.258331 ], "pop": 33472, "state": "NC" }, { "_id": "28071", "city": "GOLD HILL", "loc": [ -80.334558, 35.549784 ], "pop": 977, "state": "NC" }, { "_id": "28073", "city": "GROVER", "loc": [ -81.45518199999999, 35.183639 ], "pop": 2011, "state": "NC" }, { "_id": "28075", "city": "HARRISBURG", "loc": [ -80.659401, 35.324731 ], "pop": 8810, "state": "NC" }, { "_id": "28078", "city": "CORNELIUS", "loc": [ -80.864664, 35.421992 ], "pop": 15259, "state": "NC" }, { "_id": "28079", "city": "INDIAN TRAIL", "loc": [ -80.65974300000001, 35.08307 ], "pop": 13274, "state": "NC" }, { "_id": "28080", "city": "IRON STATION", "loc": [ -81.10700900000001, 35.465654 ], "pop": 9616, "state": "NC" }, { "_id": "28081", "city": "KANNAPOLIS", "loc": [ -80.635875, 35.502016 ], "pop": 25583, "state": "NC" }, { "_id": "28083", "city": "KANNAPOLIS", "loc": [ -80.601536, 35.484807 ], "pop": 14113, "state": "NC" }, { "_id": "28086", "city": "KINGS MOUNTAIN", "loc": [ -81.380567, 35.251578 ], "pop": 21012, "state": "NC" }, { "_id": "28088", "city": "LANDIS", "loc": [ -80.612926, 35.5435 ], "pop": 2651, "state": "NC" }, { "_id": "28090", "city": "LAWNDALE", "loc": [ -81.533625, 35.444932 ], "pop": 6842, "state": "NC" }, { "_id": "28091", "city": "LILESVILLE", "loc": [ -79.97208000000001, 34.968914 ], "pop": 2923, "state": "NC" }, { "_id": "28092", "city": "BOGER CITY", "loc": [ -81.228039, 35.482138 ], "pop": 24325, "state": "NC" }, { "_id": "28097", "city": "LOCUST", "loc": [ -80.42106099999999, 35.270416 ], "pop": 3077, "state": "NC" }, { "_id": "28098", "city": "LOWELL", "loc": [ -81.096037, 35.265481 ], "pop": 3424, "state": "NC" }, { "_id": "28103", "city": "MARSHVILLE", "loc": [ -80.378113, 35.016684 ], "pop": 7900, "state": "NC" }, { "_id": "28105", "city": "STALLINGS", "loc": [ -80.713568, 35.121879 ], "pop": 18586, "state": "NC" }, { "_id": "28107", "city": "MIDLAND", "loc": [ -80.531853, 35.247724 ], "pop": 4012, "state": "NC" }, { "_id": "28110", "city": "MONROE", "loc": [ -80.53722999999999, 35.017775 ], "pop": 34880, "state": "NC" }, { "_id": "28112", "city": "MONROE", "loc": [ -80.553952, 34.894621 ], "pop": 9986, "state": "NC" }, { "_id": "28114", "city": "MOORESBORO", "loc": [ -81.67217100000001, 35.248389 ], "pop": 7554, "state": "NC" }, { "_id": "28115", "city": "MOORESVILLE", "loc": [ -80.82262900000001, 35.577358 ], "pop": 28805, "state": "NC" }, { "_id": "28119", "city": "MORVEN", "loc": [ -80.002529, 34.85106 ], "pop": 1808, "state": "NC" }, { "_id": "28120", "city": "MOUNT HOLLY", "loc": [ -81.030567, 35.311872 ], "pop": 14505, "state": "NC" }, { "_id": "28124", "city": "MOUNT PLEASANT", "loc": [ -80.417081, 35.414576 ], "pop": 4640, "state": "NC" }, { "_id": "28125", "city": "MOUNT ULLA", "loc": [ -80.72386, 35.638934 ], "pop": 683, "state": "NC" }, { "_id": "28127", "city": "NEW LONDON", "loc": [ -80.205737, 35.428518 ], "pop": 5156, "state": "NC" }, { "_id": "28128", "city": "NORWOOD", "loc": [ -80.14326, 35.227493 ], "pop": 7069, "state": "NC" }, { "_id": "28129", "city": "OAKBORO", "loc": [ -80.341272, 35.245997 ], "pop": 6336, "state": "NC" }, { "_id": "28133", "city": "PEACHLAND", "loc": [ -80.282943, 35.005434 ], "pop": 3310, "state": "NC" }, { "_id": "28134", "city": "PINEVILLE", "loc": [ -80.885852, 35.070942 ], "pop": 4457, "state": "NC" }, { "_id": "28135", "city": "POLKTON", "loc": [ -80.153812, 34.982288 ], "pop": 6679, "state": "NC" }, { "_id": "28137", "city": "RICHFIELD", "loc": [ -80.267135, 35.511035 ], "pop": 2307, "state": "NC" }, { "_id": "28138", "city": "ROCKWELL", "loc": [ -80.422568, 35.549437 ], "pop": 8739, "state": "NC" }, { "_id": "28139", "city": "RUTHERFORDTON", "loc": [ -81.97810699999999, 35.37058 ], "pop": 10091, "state": "NC" }, { "_id": "28144", "city": "SALISBURY", "loc": [ -80.488945, 35.651498 ], "pop": 34563, "state": "NC" }, { "_id": "28146", "city": "SALISBURY", "loc": [ -80.46569, 35.667564 ], "pop": 23261, "state": "NC" }, { "_id": "28150", "city": "KINGSTOWN", "loc": [ -81.58157300000001, 35.347075 ], "pop": 13326, "state": "NC" }, { "_id": "28152", "city": "SHELBY", "loc": [ -81.53367299999999, 35.268889 ], "pop": 31162, "state": "NC" }, { "_id": "28159", "city": "SPENCER", "loc": [ -80.431049, 35.695312 ], "pop": 4083, "state": "NC" }, { "_id": "28160", "city": "SPINDALE", "loc": [ -81.92514199999999, 35.360131 ], "pop": 4017, "state": "NC" }, { "_id": "28163", "city": "STANFIELD", "loc": [ -80.44067200000001, 35.21061 ], "pop": 2436, "state": "NC" }, { "_id": "28164", "city": "STANLEY", "loc": [ -81.095921, 35.351565 ], "pop": 6510, "state": "NC" }, { "_id": "28166", "city": "TROUTMAN", "loc": [ -80.882229, 35.686271 ], "pop": 5013, "state": "NC" }, { "_id": "28167", "city": "UNION MILLS", "loc": [ -81.96845999999999, 35.47324 ], "pop": 3731, "state": "NC" }, { "_id": "28168", "city": "VALE", "loc": [ -81.458887, 35.518796 ], "pop": 3422, "state": "NC" }, { "_id": "28170", "city": "WADESBORO", "loc": [ -80.069586, 34.980938 ], "pop": 9765, "state": "NC" }, { "_id": "28173", "city": "WEDDINGTON", "loc": [ -80.727901, 34.955334 ], "pop": 14423, "state": "NC" }, { "_id": "28174", "city": "WINGATE", "loc": [ -80.44759500000001, 34.984666 ], "pop": 2747, "state": "NC" }, { "_id": "28202", "city": "CHARLOTTE", "loc": [ -80.841864, 35.229002 ], "pop": 5143, "state": "NC" }, { "_id": "28203", "city": "CHARLOTTE", "loc": [ -80.858279, 35.208139 ], "pop": 10274, "state": "NC" }, { "_id": "28204", "city": "CHARLOTTE", "loc": [ -80.823149, 35.213178 ], "pop": 6114, "state": "NC" }, { "_id": "28205", "city": "CHARLOTTE", "loc": [ -80.788129, 35.219951 ], "pop": 44092, "state": "NC" }, { "_id": "28206", "city": "CHARLOTTE", "loc": [ -80.826505, 35.252173 ], "pop": 13051, "state": "NC" }, { "_id": "28207", "city": "CHARLOTTE", "loc": [ -80.827248, 35.193474 ], "pop": 7921, "state": "NC" }, { "_id": "28208", "city": "CHARLOTTE", "loc": [ -80.89635199999999, 35.235795 ], "pop": 38236, "state": "NC" }, { "_id": "28209", "city": "CHARLOTTE", "loc": [ -80.855926, 35.179629 ], "pop": 18190, "state": "NC" }, { "_id": "28210", "city": "CHARLOTTE", "loc": [ -80.857749, 35.131586 ], "pop": 35211, "state": "NC" }, { "_id": "28211", "city": "CHARLOTTE", "loc": [ -80.793244, 35.167653 ], "pop": 25478, "state": "NC" }, { "_id": "28212", "city": "CHARLOTTE", "loc": [ -80.744777, 35.190797 ], "pop": 30347, "state": "NC" }, { "_id": "28213", "city": "CHARLOTTE", "loc": [ -80.750079, 35.317868 ], "pop": 20336, "state": "NC" }, { "_id": "28214", "city": "CHARLOTTE", "loc": [ -80.95708999999999, 35.273095 ], "pop": 16852, "state": "NC" }, { "_id": "28215", "city": "CHARLOTTE", "loc": [ -80.738669, 35.243962 ], "pop": 27936, "state": "NC" }, { "_id": "28216", "city": "CHARLOTTE", "loc": [ -80.870216, 35.283377 ], "pop": 22464, "state": "NC" }, { "_id": "28217", "city": "CHARLOTTE", "loc": [ -81.007848, 35.0972 ], "pop": 2795, "state": "NC" }, { "_id": "28226", "city": "CHARLOTTE", "loc": [ -80.816675, 35.086856 ], "pop": 41260, "state": "NC" }, { "_id": "28227", "city": "CHARLOTTE", "loc": [ -80.684634, 35.193612 ], "pop": 33273, "state": "NC" }, { "_id": "28262", "city": "CHARLOTTE", "loc": [ -80.775958, 35.272506 ], "pop": 15114, "state": "NC" }, { "_id": "28269", "city": "CHARLOTTE", "loc": [ -80.820941, 35.288635 ], "pop": 6659, "state": "NC" }, { "_id": "28270", "city": "CHARLOTTE", "loc": [ -80.76687200000001, 35.135473 ], "pop": 13791, "state": "NC" }, { "_id": "28273", "city": "CHARLOTTE", "loc": [ -80.89667300000001, 35.159646 ], "pop": 19148, "state": "NC" }, { "_id": "28277", "city": "CHARLOTTE", "loc": [ -80.800174, 35.134486 ], "pop": 6737, "state": "NC" }, { "_id": "28278", "city": "CHARLOTTE", "loc": [ -80.960421, 35.146685 ], "pop": 5411, "state": "NC" }, { "_id": "28301", "city": "EAST FAYETTEVILL", "loc": [ -78.84225499999999, 35.05099 ], "pop": 35253, "state": "NC" }, { "_id": "28303", "city": "BONNIE DOONE", "loc": [ -78.96013499999999, 35.084046 ], "pop": 35745, "state": "NC" }, { "_id": "28304", "city": "FAYETTEVILLE", "loc": [ -78.970494, 35.025683 ], "pop": 33868, "state": "NC" }, { "_id": "28305", "city": "FAYETTEVILLE", "loc": [ -78.904658, 35.056022 ], "pop": 6670, "state": "NC" }, { "_id": "28306", "city": "FAYETTEVILLE", "loc": [ -78.936408, 35.001874 ], "pop": 20122, "state": "NC" }, { "_id": "28307", "city": "FORT BRAGG", "loc": [ -79.00245700000001, 35.141649 ], "pop": 37688, "state": "NC" }, { "_id": "28311", "city": "FAYETTEVILLE", "loc": [ -78.898217, 35.129416 ], "pop": 29497, "state": "NC" }, { "_id": "28314", "city": "FAYETTEVILLE", "loc": [ -79.00798500000001, 35.058322 ], "pop": 34856, "state": "NC" }, { "_id": "28315", "city": "ABERDEEN", "loc": [ -79.44503899999999, 35.121641 ], "pop": 7767, "state": "NC" }, { "_id": "28318", "city": "AUTRYVILLE", "loc": [ -78.60211099999999, 35.099673 ], "pop": 4129, "state": "NC" }, { "_id": "28320", "city": "BLADENBORO", "loc": [ -78.779295, 34.565832 ], "pop": 7957, "state": "NC" }, { "_id": "28323", "city": "BUNNLEVEL", "loc": [ -78.855189, 35.281057 ], "pop": 4749, "state": "NC" }, { "_id": "28326", "city": "JOHNSONVILLE", "loc": [ -79.268826, 35.313581 ], "pop": 1851, "state": "NC" }, { "_id": "28327", "city": "CARTHAGE", "loc": [ -79.396939, 35.306066 ], "pop": 11774, "state": "NC" }, { "_id": "28328", "city": "CLINTON", "loc": [ -78.326007, 35.015143 ], "pop": 17737, "state": "NC" }, { "_id": "28333", "city": "DUDLEY", "loc": [ -78.02727400000001, 35.292564 ], "pop": 8450, "state": "NC" }, { "_id": "28334", "city": "DUNN", "loc": [ -78.61507899999999, 35.316511 ], "pop": 15795, "state": "NC" }, { "_id": "28337", "city": "ELIZABETHTOWN", "loc": [ -78.574693, 34.64714 ], "pop": 10444, "state": "NC" }, { "_id": "28338", "city": "ELLERBE", "loc": [ -79.75236099999999, 35.091422 ], "pop": 4245, "state": "NC" }, { "_id": "28339", "city": "ERWIN", "loc": [ -78.685935, 35.328651 ], "pop": 5574, "state": "NC" }, { "_id": "28340", "city": "MCDONALD", "loc": [ -79.128596, 34.481402 ], "pop": 10978, "state": "NC" }, { "_id": "28341", "city": "FAISON", "loc": [ -78.117983, 35.119884 ], "pop": 2658, "state": "NC" }, { "_id": "28343", "city": "GIBSON", "loc": [ -79.583854, 34.754857 ], "pop": 1638, "state": "NC" }, { "_id": "28344", "city": "GODWIN", "loc": [ -78.66247199999999, 35.196919 ], "pop": 1886, "state": "NC" }, { "_id": "28345", "city": "HAMLET", "loc": [ -79.702217, 34.889375 ], "pop": 13443, "state": "NC" }, { "_id": "28347", "city": "HOFFMAN", "loc": [ -79.56002700000001, 35.032607 ], "pop": 1073, "state": "NC" }, { "_id": "28348", "city": "HOPE MILLS", "loc": [ -78.93536400000001, 34.953564 ], "pop": 18396, "state": "NC" }, { "_id": "28349", "city": "KENANSVILLE", "loc": [ -77.967743, 35.039621 ], "pop": 4998, "state": "NC" }, { "_id": "28351", "city": "LAUREL HILL", "loc": [ -79.54913500000001, 34.823831 ], "pop": 5726, "state": "NC" }, { "_id": "28352", "city": "LAURINBURG", "loc": [ -79.467316, 34.759869 ], "pop": 23387, "state": "NC" }, { "_id": "28356", "city": "LINDEN", "loc": [ -78.800361, 35.227645 ], "pop": 2903, "state": "NC" }, { "_id": "28357", "city": "LUMBER BRIDGE", "loc": [ -79.066417, 34.876192 ], "pop": 1343, "state": "NC" }, { "_id": "28358", "city": "LUMBERTON", "loc": [ -79.008309, 34.629301 ], "pop": 42871, "state": "NC" }, { "_id": "28363", "city": "MARSTON", "loc": [ -79.659554, 34.989628 ], "pop": 963, "state": "NC" }, { "_id": "28364", "city": "MAXTON", "loc": [ -79.309725, 34.733435 ], "pop": 11494, "state": "NC" }, { "_id": "28365", "city": "MOUNT OLIVE", "loc": [ -78.09833999999999, 35.210923 ], "pop": 8636, "state": "NC" }, { "_id": "28366", "city": "NEWTON GROVE", "loc": [ -78.42603699999999, 35.221258 ], "pop": 6775, "state": "NC" }, { "_id": "28369", "city": "ORRUM", "loc": [ -79.031037, 34.447347 ], "pop": 1915, "state": "NC" }, { "_id": "28371", "city": "PARKTON", "loc": [ -78.996943, 34.900569 ], "pop": 2195, "state": "NC" }, { "_id": "28372", "city": "PEMBROKE", "loc": [ -79.18337, 34.690198 ], "pop": 10673, "state": "NC" }, { "_id": "28374", "city": "PINEHURST", "loc": [ -79.47319400000001, 35.188408 ], "pop": 5803, "state": "NC" }, { "_id": "28376", "city": "RAEFORD", "loc": [ -79.22275999999999, 34.989009 ], "pop": 20742, "state": "NC" }, { "_id": "28377", "city": "RED SPRINGS", "loc": [ -79.163619, 34.808315 ], "pop": 8683, "state": "NC" }, { "_id": "28379", "city": "ROCKINGHAM", "loc": [ -79.766566, 34.933613 ], "pop": 24282, "state": "NC" }, { "_id": "28382", "city": "ROSEBORO", "loc": [ -78.504109, 34.994081 ], "pop": 6495, "state": "NC" }, { "_id": "28383", "city": "ROWLAND", "loc": [ -79.261843, 34.588664 ], "pop": 7047, "state": "NC" }, { "_id": "28384", "city": "SAINT PAULS", "loc": [ -78.973077, 34.800962 ], "pop": 7976, "state": "NC" }, { "_id": "28385", "city": "SALEMBURG", "loc": [ -78.471385, 35.051459 ], "pop": 2821, "state": "NC" }, { "_id": "28386", "city": "SHANNON", "loc": [ -79.180617, 34.898762 ], "pop": 2120, "state": "NC" }, { "_id": "28387", "city": "SOUTHERN PINES", "loc": [ -79.39568199999999, 35.169747 ], "pop": 11523, "state": "NC" }, { "_id": "28390", "city": "SPRING LAKE", "loc": [ -78.978555, 35.182981 ], "pop": 11537, "state": "NC" }, { "_id": "28391", "city": "STEDMAN", "loc": [ -78.69493199999999, 35.034749 ], "pop": 4776, "state": "NC" }, { "_id": "28392", "city": "TAR HEEL", "loc": [ -78.81341, 34.746541 ], "pop": 1989, "state": "NC" }, { "_id": "28393", "city": "TURKEY", "loc": [ -78.212086, 34.985673 ], "pop": 3224, "state": "NC" }, { "_id": "28394", "city": "VASS", "loc": [ -79.25618900000001, 35.217133 ], "pop": 3932, "state": "NC" }, { "_id": "28395", "city": "WADE", "loc": [ -78.724929, 35.160559 ], "pop": 1369, "state": "NC" }, { "_id": "28396", "city": "WAGRAM", "loc": [ -79.39594, 34.904432 ], "pop": 3007, "state": "NC" }, { "_id": "28398", "city": "BOWDENS", "loc": [ -78.08673899999999, 34.99818 ], "pop": 5817, "state": "NC" }, { "_id": "28399", "city": "WHITE OAK", "loc": [ -78.73014000000001, 34.766206 ], "pop": 1292, "state": "NC" }, { "_id": "28401", "city": "CAPE FEAR", "loc": [ -77.937856, 34.225304 ], "pop": 21522, "state": "NC" }, { "_id": "28403", "city": "WILMINGTON", "loc": [ -77.886213, 34.223653 ], "pop": 25319, "state": "NC" }, { "_id": "28405", "city": "OGDEN", "loc": [ -77.852937, 34.264065 ], "pop": 26744, "state": "NC" }, { "_id": "28409", "city": "WILMINGTON", "loc": [ -77.87227, 34.166256 ], "pop": 17418, "state": "NC" }, { "_id": "28412", "city": "WILMINGTON", "loc": [ -77.914137, 34.157173 ], "pop": 13932, "state": "NC" }, { "_id": "28420", "city": "ASH", "loc": [ -78.50563699999999, 34.065871 ], "pop": 2212, "state": "NC" }, { "_id": "28421", "city": "ATKINSON", "loc": [ -78.167108, 34.530445 ], "pop": 1418, "state": "NC" }, { "_id": "28422", "city": "BOLIVIA", "loc": [ -78.16813999999999, 34.025962 ], "pop": 3392, "state": "NC" }, { "_id": "28423", "city": "BOLTON", "loc": [ -78.337177, 34.309085 ], "pop": 3071, "state": "NC" }, { "_id": "28425", "city": "BURGAW", "loc": [ -77.94031699999999, 34.548679 ], "pop": 6405, "state": "NC" }, { "_id": "28428", "city": "CAROLINA BEACH", "loc": [ -77.896289, 34.036599 ], "pop": 4524, "state": "NC" }, { "_id": "28429", "city": "CASTLE HAYNE", "loc": [ -77.91085, 34.323596 ], "pop": 7329, "state": "NC" }, { "_id": "28430", "city": "CERRO GORDO", "loc": [ -78.921571, 34.302483 ], "pop": 1742, "state": "NC" }, { "_id": "28431", "city": "CHADBOURN", "loc": [ -78.826683, 34.322303 ], "pop": 2015, "state": "NC" }, { "_id": "28432", "city": "CLARENDON", "loc": [ -78.788844, 34.199517 ], "pop": 3940, "state": "NC" }, { "_id": "28433", "city": "CLARKTON", "loc": [ -78.631271, 34.503011 ], "pop": 3493, "state": "NC" }, { "_id": "28434", "city": "COUNCIL", "loc": [ -78.411511, 34.429042 ], "pop": 2768, "state": "NC" }, { "_id": "28435", "city": "CURRIE", "loc": [ -78.092516, 34.449668 ], "pop": 2094, "state": "NC" }, { "_id": "28436", "city": "DELCO", "loc": [ -78.19168999999999, 34.327419 ], "pop": 229, "state": "NC" }, { "_id": "28438", "city": "EVERGREEN", "loc": [ -78.884638, 34.375234 ], "pop": 3906, "state": "NC" }, { "_id": "28439", "city": "FAIR BLUFF", "loc": [ -79.01750199999999, 34.302275 ], "pop": 1931, "state": "NC" }, { "_id": "28441", "city": "GARLAND", "loc": [ -78.34142, 34.822906 ], "pop": 4133, "state": "NC" }, { "_id": "28442", "city": "HALLSBORO", "loc": [ -78.60427199999999, 34.318087 ], "pop": 2551, "state": "NC" }, { "_id": "28443", "city": "HAMPSTEAD", "loc": [ -77.662808, 34.3879 ], "pop": 8159, "state": "NC" }, { "_id": "28444", "city": "HARRELLS", "loc": [ -78.24297300000001, 34.676918 ], "pop": 1635, "state": "NC" }, { "_id": "28445", "city": "SURF CITY", "loc": [ -77.51005000000001, 34.4644 ], "pop": 1279, "state": "NC" }, { "_id": "28447", "city": "IVANHOE", "loc": [ -78.162333, 34.697169 ], "pop": 352, "state": "NC" }, { "_id": "28448", "city": "KELLY", "loc": [ -78.294161, 34.459064 ], "pop": 723, "state": "NC" }, { "_id": "28449", "city": "KURE BEACH", "loc": [ -77.909875, 33.992707 ], "pop": 568, "state": "NC" }, { "_id": "28450", "city": "LAKE WACCAMAW", "loc": [ -78.51020800000001, 34.339359 ], "pop": 1941, "state": "NC" }, { "_id": "28451", "city": "LELAND", "loc": [ -78.05781500000001, 34.267952 ], "pop": 7803, "state": "NC" }, { "_id": "28452", "city": "LONGWOOD", "loc": [ -78.531531, 33.950059 ], "pop": 1913, "state": "NC" }, { "_id": "28453", "city": "MAGNOLIA", "loc": [ -78.04321299999999, 34.895702 ], "pop": 2056, "state": "NC" }, { "_id": "28454", "city": "MAPLE HILL", "loc": [ -77.736588, 34.617753 ], "pop": 2095, "state": "NC" }, { "_id": "28455", "city": "NAKINA", "loc": [ -78.657005, 34.115293 ], "pop": 1581, "state": "NC" }, { "_id": "28456", "city": "RIEGELWOOD", "loc": [ -78.257473, 34.34706 ], "pop": 2038, "state": "NC" }, { "_id": "28457", "city": "ROCKY POINT", "loc": [ -77.92344799999999, 34.434418 ], "pop": 4657, "state": "NC" }, { "_id": "28458", "city": "ROSE HILL", "loc": [ -78.01662399999999, 34.823462 ], "pop": 4421, "state": "NC" }, { "_id": "28459", "city": "SHALLOTTE", "loc": [ -78.41068, 33.943011 ], "pop": 6537, "state": "NC" }, { "_id": "28460", "city": "SNEADS FERRY", "loc": [ -77.403801, 34.542589 ], "pop": 4586, "state": "NC" }, { "_id": "28461", "city": "BOILING SPRING L", "loc": [ -78.045551, 34.012137 ], "pop": 8878, "state": "NC" }, { "_id": "28462", "city": "HOLDEN BEACH", "loc": [ -78.29608899999999, 33.962504 ], "pop": 7513, "state": "NC" }, { "_id": "28463", "city": "TABOR CITY", "loc": [ -78.823178, 34.123314 ], "pop": 6573, "state": "NC" }, { "_id": "28464", "city": "TEACHEY", "loc": [ -78.022091, 34.770036 ], "pop": 1461, "state": "NC" }, { "_id": "28465", "city": "OAK ISLAND", "loc": [ -78.125455, 33.916122 ], "pop": 4752, "state": "NC" }, { "_id": "28466", "city": "WALLACE", "loc": [ -77.942922, 34.754166 ], "pop": 7328, "state": "NC" }, { "_id": "28467", "city": "CALABASH", "loc": [ -78.574406, 33.904668 ], "pop": 3061, "state": "NC" }, { "_id": "28468", "city": "SUNSET BEACH", "loc": [ -78.519955, 33.883569 ], "pop": 1347, "state": "NC" }, { "_id": "28469", "city": "OCEAN ISLE BEACH", "loc": [ -78.429849, 33.891271 ], "pop": 493, "state": "NC" }, { "_id": "28471", "city": "WATHA", "loc": [ -78.007351, 34.620725 ], "pop": 1327, "state": "NC" }, { "_id": "28472", "city": "WHITEVILLE", "loc": [ -78.716048, 34.324142 ], "pop": 18066, "state": "NC" }, { "_id": "28478", "city": "WILLARD", "loc": [ -78.023445, 34.684451 ], "pop": 2456, "state": "NC" }, { "_id": "28479", "city": "WINNABOW", "loc": [ -78.056211, 34.214511 ], "pop": 3084, "state": "NC" }, { "_id": "28480", "city": "WRIGHTSVILLE BEA", "loc": [ -77.79816599999999, 34.212228 ], "pop": 2928, "state": "NC" }, { "_id": "28501", "city": "KINSTON", "loc": [ -77.58596900000001, 35.278333 ], "pop": 44135, "state": "NC" }, { "_id": "28508", "city": "ALBERTSON", "loc": [ -77.851517, 35.117647 ], "pop": 2644, "state": "NC" }, { "_id": "28510", "city": "ARAPAHOE", "loc": [ -76.814909, 35.0055 ], "pop": 1378, "state": "NC" }, { "_id": "28511", "city": "ATLANTIC", "loc": [ -76.352097, 34.888827 ], "pop": 808, "state": "NC" }, { "_id": "28512", "city": "PINE KNOLL SHORE", "loc": [ -76.815163, 34.697295 ], "pop": 1441, "state": "NC" }, { "_id": "28513", "city": "AYDEN", "loc": [ -77.40512699999999, 35.456471 ], "pop": 8831, "state": "NC" }, { "_id": "28515", "city": "BAYBORO", "loc": [ -76.75179300000001, 35.152598 ], "pop": 1853, "state": "NC" }, { "_id": "28516", "city": "BEAUFORT", "loc": [ -76.622834, 34.758037 ], "pop": 10606, "state": "NC" }, { "_id": "28518", "city": "BEULAVILLE", "loc": [ -77.769655, 34.933962 ], "pop": 7278, "state": "NC" }, { "_id": "28520", "city": "CEDAR ISLAND", "loc": [ -76.08049, 35.074881 ], "pop": 1029, "state": "NC" }, { "_id": "28521", "city": "CHINQUAPIN", "loc": [ -77.76357299999999, 34.827609 ], "pop": 1334, "state": "NC" }, { "_id": "28523", "city": "COVE CITY", "loc": [ -77.296306, 35.202274 ], "pop": 2007, "state": "NC" }, { "_id": "28525", "city": "DEEP RUN", "loc": [ -77.69275, 35.162991 ], "pop": 4252, "state": "NC" }, { "_id": "28526", "city": "DOVER", "loc": [ -77.372688, 35.262652 ], "pop": 2198, "state": "NC" }, { "_id": "28527", "city": "ERNUL", "loc": [ -77.050164, 35.254693 ], "pop": 303, "state": "NC" }, { "_id": "28528", "city": "GLOUCESTER", "loc": [ -76.527627, 34.685645 ], "pop": 0, "state": "NC" }, { "_id": "28529", "city": "GRANTSBORO", "loc": [ -76.884387, 35.122186 ], "pop": 3485, "state": "NC" }, { "_id": "28530", "city": "GRIFTON", "loc": [ -77.41930000000001, 35.375681 ], "pop": 3029, "state": "NC" }, { "_id": "28531", "city": "HARKERS ISLAND", "loc": [ -76.558301, 34.69663 ], "pop": 1761, "state": "NC" }, { "_id": "28532", "city": "HAVELOCK", "loc": [ -76.89004199999999, 34.896753 ], "pop": 25957, "state": "NC" }, { "_id": "28537", "city": "HOBUCKEN", "loc": [ -76.569602, 35.251838 ], "pop": 323, "state": "NC" }, { "_id": "28538", "city": "HOOKERTON", "loc": [ -77.565555, 35.437976 ], "pop": 2112, "state": "NC" }, { "_id": "28539", "city": "HUBERT", "loc": [ -77.207928, 34.69929 ], "pop": 8527, "state": "NC" }, { "_id": "28540", "city": "JACKSONVILLE", "loc": [ -77.46281500000001, 34.737456 ], "pop": 52792, "state": "NC" }, { "_id": "28542", "city": "CAMP LEJEUNE", "loc": [ -77.3373, 34.665806 ], "pop": 23717, "state": "NC" }, { "_id": "28543", "city": "TARAWA TERRACE", "loc": [ -77.38311400000001, 34.73542 ], "pop": 11054, "state": "NC" }, { "_id": "28544", "city": "MIDWAY PARK", "loc": [ -77.320001, 34.726994 ], "pop": 6799, "state": "NC" }, { "_id": "28546", "city": "JACKSONVILLE", "loc": [ -77.378097, 34.77401 ], "pop": 27976, "state": "NC" }, { "_id": "28551", "city": "LA GRANGE", "loc": [ -77.76862, 35.305381 ], "pop": 6686, "state": "NC" }, { "_id": "28552", "city": "LOWLAND", "loc": [ -76.57769999999999, 35.305955 ], "pop": 367, "state": "NC" }, { "_id": "28553", "city": "MARSHALLBERG", "loc": [ -76.517323, 34.726472 ], "pop": 565, "state": "NC" }, { "_id": "28555", "city": "MAYSVILLE", "loc": [ -77.23145599999999, 34.869077 ], "pop": 3899, "state": "NC" }, { "_id": "28556", "city": "MERRITT", "loc": [ -76.69940099999999, 35.1228 ], "pop": 1146, "state": "NC" }, { "_id": "28557", "city": "MOREHEAD CITY", "loc": [ -76.753069, 34.72532 ], "pop": 13985, "state": "NC" }, { "_id": "28560", "city": "NEW BERN", "loc": [ -77.03194499999999, 35.101941 ], "pop": 24585, "state": "NC" }, { "_id": "28562", "city": "NEW BERN", "loc": [ -77.102874, 35.100434 ], "pop": 20936, "state": "NC" }, { "_id": "28570", "city": "NEWPORT", "loc": [ -76.90694499999999, 34.755076 ], "pop": 18841, "state": "NC" }, { "_id": "28571", "city": "ORIENTAL", "loc": [ -76.701521, 35.036406 ], "pop": 1985, "state": "NC" }, { "_id": "28572", "city": "PINK HILL", "loc": [ -77.712148, 35.066351 ], "pop": 2201, "state": "NC" }, { "_id": "28573", "city": "POLLOCKSVILLE", "loc": [ -77.22872700000001, 35.015105 ], "pop": 2406, "state": "NC" }, { "_id": "28574", "city": "RICHLANDS", "loc": [ -77.586305, 34.862426 ], "pop": 8868, "state": "NC" }, { "_id": "28577", "city": "SEALEVEL", "loc": [ -76.38977800000001, 34.876949 ], "pop": 521, "state": "NC" }, { "_id": "28578", "city": "SEVEN SPRINGS", "loc": [ -77.914621, 35.210466 ], "pop": 2228, "state": "NC" }, { "_id": "28579", "city": "SMYRNA", "loc": [ -76.51531300000001, 34.773384 ], "pop": 651, "state": "NC" }, { "_id": "28580", "city": "SNOW HILL", "loc": [ -77.695565, 35.443848 ], "pop": 9637, "state": "NC" }, { "_id": "28581", "city": "STACY", "loc": [ -76.428877, 34.84124 ], "pop": 264, "state": "NC" }, { "_id": "28582", "city": "STELLA", "loc": [ -77.130807, 34.777672 ], "pop": 365, "state": "NC" }, { "_id": "28584", "city": "SWANSBORO", "loc": [ -77.135013, 34.699066 ], "pop": 2535, "state": "NC" }, { "_id": "28585", "city": "TRENTON", "loc": [ -77.459473, 35.074481 ], "pop": 5058, "state": "NC" }, { "_id": "28586", "city": "VANCEBORO", "loc": [ -77.171618, 35.306255 ], "pop": 5627, "state": "NC" }, { "_id": "28587", "city": "VANDEMERE", "loc": [ -76.657088, 35.195298 ], "pop": 835, "state": "NC" }, { "_id": "28590", "city": "WINTERVILLE", "loc": [ -77.39097, 35.533582 ], "pop": 8382, "state": "NC" }, { "_id": "28594", "city": "EMERALD ISLE", "loc": [ -77.025961, 34.666195 ], "pop": 2432, "state": "NC" }, { "_id": "28601", "city": "HICKORY", "loc": [ -81.328858, 35.75757 ], "pop": 44977, "state": "NC" }, { "_id": "28602", "city": "HICKORY", "loc": [ -81.36122899999999, 35.68837 ], "pop": 21020, "state": "NC" }, { "_id": "28604", "city": "BANNER ELK", "loc": [ -81.841194, 36.170461 ], "pop": 4570, "state": "NC" }, { "_id": "28605", "city": "BLOWING ROCK", "loc": [ -81.750968, 36.094594 ], "pop": 2372, "state": "NC" }, { "_id": "28606", "city": "BOOMER", "loc": [ -81.313704, 36.055192 ], "pop": 2146, "state": "NC" }, { "_id": "28607", "city": "BOONE", "loc": [ -81.666025, 36.214237 ], "pop": 24897, "state": "NC" }, { "_id": "28609", "city": "CATAWBA", "loc": [ -81.050307, 35.675708 ], "pop": 1767, "state": "NC" }, { "_id": "28610", "city": "CLAREMONT", "loc": [ -81.129672, 35.721053 ], "pop": 8902, "state": "NC" }, { "_id": "28611", "city": "COLLETTSVILLE", "loc": [ -81.674188, 35.951946 ], "pop": 2121, "state": "NC" }, { "_id": "28612", "city": "CONNELLYS SPRING", "loc": [ -81.492958, 35.706972 ], "pop": 15391, "state": "NC" }, { "_id": "28613", "city": "CONOVER", "loc": [ -81.216455, 35.731343 ], "pop": 15222, "state": "NC" }, { "_id": "28615", "city": "CRESTON", "loc": [ -81.65062399999999, 36.449959 ], "pop": 2527, "state": "NC" }, { "_id": "28617", "city": "CRUMPLER", "loc": [ -81.403886, 36.464057 ], "pop": 2532, "state": "NC" }, { "_id": "28618", "city": "DEEP GAP", "loc": [ -81.516265, 36.213573 ], "pop": 1176, "state": "NC" }, { "_id": "28621", "city": "ELKIN", "loc": [ -80.85536500000001, 36.28723 ], "pop": 10672, "state": "NC" }, { "_id": "28622", "city": "ELK PARK", "loc": [ -81.963882, 36.164623 ], "pop": 3223, "state": "NC" }, { "_id": "28623", "city": "ENNICE", "loc": [ -80.977141, 36.525278 ], "pop": 1509, "state": "NC" }, { "_id": "28624", "city": "FERGUSON", "loc": [ -81.38640700000001, 36.128316 ], "pop": 1551, "state": "NC" }, { "_id": "28626", "city": "FLEETWOOD", "loc": [ -81.514008, 36.281382 ], "pop": 1693, "state": "NC" }, { "_id": "28627", "city": "GLADE VALLEY", "loc": [ -81.01678200000001, 36.442889 ], "pop": 1115, "state": "NC" }, { "_id": "28630", "city": "GRANITE FALLS", "loc": [ -81.457145, 35.819663 ], "pop": 17749, "state": "NC" }, { "_id": "28631", "city": "GRASSY CREEK", "loc": [ -81.44675100000001, 36.541524 ], "pop": 837, "state": "NC" }, { "_id": "28634", "city": "HARMONY", "loc": [ -80.75846199999999, 35.957975 ], "pop": 3881, "state": "NC" }, { "_id": "28635", "city": "HAYS", "loc": [ -81.11611600000001, 36.310015 ], "pop": 1085, "state": "NC" }, { "_id": "28636", "city": "HIDDENITE", "loc": [ -81.048663, 35.95045 ], "pop": 1703, "state": "NC" }, { "_id": "28638", "city": "HUDSON", "loc": [ -81.48974699999999, 35.840295 ], "pop": 9771, "state": "NC" }, { "_id": "28640", "city": "JEFFERSON", "loc": [ -81.439626, 36.408987 ], "pop": 3080, "state": "NC" }, { "_id": "28642", "city": "JONESVILLE", "loc": [ -80.787029, 36.228571 ], "pop": 7105, "state": "NC" }, { "_id": "28643", "city": "LANSING", "loc": [ -81.52692500000001, 36.517641 ], "pop": 3211, "state": "NC" }, { "_id": "28644", "city": "LAUREL SPRINGS", "loc": [ -81.26061, 36.444897 ], "pop": 1837, "state": "NC" }, { "_id": "28645", "city": "LENOIR", "loc": [ -81.539793, 35.914935 ], "pop": 39525, "state": "NC" }, { "_id": "28648", "city": "LONGISLAND", "loc": [ -80.990403, 35.665814 ], "pop": 279, "state": "NC" }, { "_id": "28649", "city": "MC GRADY", "loc": [ -81.19120700000001, 36.310345 ], "pop": 1261, "state": "NC" }, { "_id": "28650", "city": "MAIDEN", "loc": [ -81.174492, 35.575884 ], "pop": 7388, "state": "NC" }, { "_id": "28651", "city": "MILLERS CREEK", "loc": [ -81.24853299999999, 36.211949 ], "pop": 7018, "state": "NC" }, { "_id": "28654", "city": "MORAVIAN FALLS", "loc": [ -81.178073, 36.078762 ], "pop": 3071, "state": "NC" }, { "_id": "28655", "city": "MORGANTON", "loc": [ -81.704216, 35.73458 ], "pop": 50932, "state": "NC" }, { "_id": "28657", "city": "FRANK", "loc": [ -81.952276, 36.040203 ], "pop": 8906, "state": "NC" }, { "_id": "28658", "city": "NEWTON", "loc": [ -81.242546, 35.649766 ], "pop": 20759, "state": "NC" }, { "_id": "28659", "city": "NORTH WILKESBORO", "loc": [ -81.128603, 36.20174 ], "pop": 20167, "state": "NC" }, { "_id": "28660", "city": "OLIN", "loc": [ -80.851084, 35.959333 ], "pop": 723, "state": "NC" }, { "_id": "28665", "city": "PURLEAR", "loc": [ -81.352773, 36.196391 ], "pop": 1102, "state": "NC" }, { "_id": "28668", "city": "ROARING GAP", "loc": [ -81.018781, 36.383553 ], "pop": 21, "state": "NC" }, { "_id": "28669", "city": "ROARING RIVER", "loc": [ -81.000373, 36.191561 ], "pop": 978, "state": "NC" }, { "_id": "28670", "city": "RONDA", "loc": [ -80.926964, 36.20594 ], "pop": 2739, "state": "NC" }, { "_id": "28673", "city": "SHERRILLS FORD", "loc": [ -81.03385900000001, 35.596244 ], "pop": 5567, "state": "NC" }, { "_id": "28675", "city": "SPARTA", "loc": [ -81.138442, 36.508851 ], "pop": 5746, "state": "NC" }, { "_id": "28676", "city": "STATE ROAD", "loc": [ -80.86529400000001, 36.34218 ], "pop": 3080, "state": "NC" }, { "_id": "28677", "city": "STATESVILLE", "loc": [ -80.894009, 35.799022 ], "pop": 52895, "state": "NC" }, { "_id": "28678", "city": "STONY POINT", "loc": [ -81.06413499999999, 35.866109 ], "pop": 5212, "state": "NC" }, { "_id": "28679", "city": "SUGAR GROVE", "loc": [ -81.844094, 36.262672 ], "pop": 1631, "state": "NC" }, { "_id": "28681", "city": "TAYLORSVILLE", "loc": [ -81.212429, 35.901046 ], "pop": 19679, "state": "NC" }, { "_id": "28682", "city": "TERRELL", "loc": [ -80.963064, 35.583587 ], "pop": 440, "state": "NC" }, { "_id": "28683", "city": "THURMOND", "loc": [ -80.931674, 36.356188 ], "pop": 556, "state": "NC" }, { "_id": "28684", "city": "TODD", "loc": [ -81.58740299999999, 36.324527 ], "pop": 1039, "state": "NC" }, { "_id": "28685", "city": "TRAPHILL", "loc": [ -81.015126, 36.330097 ], "pop": 1781, "state": "NC" }, { "_id": "28686", "city": "TRIPLETT", "loc": [ -81.489649, 36.181685 ], "pop": 64, "state": "NC" }, { "_id": "28689", "city": "UNION GROVE", "loc": [ -80.89669499999999, 36.036947 ], "pop": 2264, "state": "NC" }, { "_id": "28690", "city": "VALDESE", "loc": [ -81.56695999999999, 35.744739 ], "pop": 4227, "state": "NC" }, { "_id": "28691", "city": "VALLE CRUCIS", "loc": [ -81.880563, 36.207041 ], "pop": 238, "state": "NC" }, { "_id": "28692", "city": "VILAS", "loc": [ -81.765203, 36.257375 ], "pop": 3022, "state": "NC" }, { "_id": "28693", "city": "WARRENSVILLE", "loc": [ -81.546522, 36.45723 ], "pop": 994, "state": "NC" }, { "_id": "28694", "city": "WEST JEFFERSON", "loc": [ -81.487218, 36.377648 ], "pop": 6348, "state": "NC" }, { "_id": "28697", "city": "WILKESBORO", "loc": [ -81.157292, 36.135857 ], "pop": 11889, "state": "NC" }, { "_id": "28698", "city": "ZIONVILLE", "loc": [ -81.747567, 36.319437 ], "pop": 1633, "state": "NC" }, { "_id": "28701", "city": "ALEXANDER", "loc": [ -82.631134, 35.706394 ], "pop": 2960, "state": "NC" }, { "_id": "28702", "city": "ALMOND", "loc": [ -83.578406, 35.3295 ], "pop": 678, "state": "NC" }, { "_id": "28703", "city": "AQUONE", "loc": [ -83.56621800000001, 35.240254 ], "pop": 1423, "state": "NC" }, { "_id": "28704", "city": "ARDEN", "loc": [ -82.535372, 35.463666 ], "pop": 11386, "state": "NC" }, { "_id": "28705", "city": "BAKERSVILLE", "loc": [ -82.171133, 36.028588 ], "pop": 6862, "state": "NC" }, { "_id": "28708", "city": "BALSAM GROVE", "loc": [ -82.87795, 35.229751 ], "pop": 342, "state": "NC" }, { "_id": "28709", "city": "BARNARDSVILLE", "loc": [ -82.456682, 35.77483 ], "pop": 2757, "state": "NC" }, { "_id": "28711", "city": "BLACK MOUNTAIN S", "loc": [ -82.325087, 35.612494 ], "pop": 11914, "state": "NC" }, { "_id": "28712", "city": "BREVARD", "loc": [ -82.740444, 35.22076 ], "pop": 14212, "state": "NC" }, { "_id": "28713", "city": "BRYSON CITY", "loc": [ -83.439246, 35.424128 ], "pop": 7248, "state": "NC" }, { "_id": "28714", "city": "BURNSVILLE", "loc": [ -82.287623, 35.902974 ], "pop": 13735, "state": "NC" }, { "_id": "28715", "city": "CANDLER", "loc": [ -82.700081, 35.537626 ], "pop": 15823, "state": "NC" }, { "_id": "28716", "city": "CANTON", "loc": [ -82.841291, 35.512651 ], "pop": 14331, "state": "NC" }, { "_id": "28717", "city": "CASHIERS", "loc": [ -83.087074, 35.097117 ], "pop": 1099, "state": "NC" }, { "_id": "28719", "city": "CHEROKEE", "loc": [ -83.31444, 35.50937 ], "pop": 3339, "state": "NC" }, { "_id": "28721", "city": "CLYDE", "loc": [ -82.921582, 35.559654 ], "pop": 7400, "state": "NC" }, { "_id": "28722", "city": "COLUMBUS", "loc": [ -82.120631, 35.241031 ], "pop": 5976, "state": "NC" }, { "_id": "28723", "city": "CULLOWHEE", "loc": [ -83.147522, 35.240876 ], "pop": 2886, "state": "NC" }, { "_id": "28726", "city": "EAST FLAT ROCK", "loc": [ -82.420423, 35.279868 ], "pop": 3770, "state": "NC" }, { "_id": "28729", "city": "ETOWAH", "loc": [ -82.597705, 35.317192 ], "pop": 2461, "state": "NC" }, { "_id": "28730", "city": "FAIRVIEW", "loc": [ -82.398534, 35.525759 ], "pop": 5156, "state": "NC" }, { "_id": "28731", "city": "FLAT ROCK", "loc": [ -82.39156800000001, 35.288993 ], "pop": 4240, "state": "NC" }, { "_id": "28732", "city": "FLETCHER", "loc": [ -82.496559, 35.44989 ], "pop": 7201, "state": "NC" }, { "_id": "28733", "city": "FONTANA DAM", "loc": [ -83.81763100000001, 35.428187 ], "pop": 187, "state": "NC" }, { "_id": "28734", "city": "FRANKLIN", "loc": [ -83.388479, 35.180984 ], "pop": 16689, "state": "NC" }, { "_id": "28735", "city": "GERTON", "loc": [ -82.30620399999999, 35.468723 ], "pop": 280, "state": "NC" }, { "_id": "28736", "city": "GLENVILLE", "loc": [ -83.09003300000001, 35.188164 ], "pop": 125, "state": "NC" }, { "_id": "28738", "city": "HAZELWOOD", "loc": [ -83.004284, 35.476877 ], "pop": 1759, "state": "NC" }, { "_id": "28739", "city": "HENDERSONVILLE", "loc": [ -82.499995, 35.319213 ], "pop": 26125, "state": "NC" }, { "_id": "28740", "city": "GREENMOUNTAIN", "loc": [ -82.28786700000001, 35.995619 ], "pop": 1471, "state": "NC" }, { "_id": "28741", "city": "HIGHLANDS", "loc": [ -83.216044, 35.070546 ], "pop": 2685, "state": "NC" }, { "_id": "28742", "city": "HORSE SHOE", "loc": [ -82.598128, 35.370267 ], "pop": 4069, "state": "NC" }, { "_id": "28743", "city": "HOT SPRINGS", "loc": [ -82.812011, 35.816175 ], "pop": 3595, "state": "NC" }, { "_id": "28745", "city": "LAKE JUNALUSKA", "loc": [ -82.970235, 35.525916 ], "pop": 539, "state": "NC" }, { "_id": "28746", "city": "LAKE LURE", "loc": [ -82.175203, 35.446447 ], "pop": 1843, "state": "NC" }, { "_id": "28747", "city": "LAKE TOXAWAY", "loc": [ -82.91908100000001, 35.145052 ], "pop": 1849, "state": "NC" }, { "_id": "28748", "city": "LEICESTER", "loc": [ -82.710622, 35.649781 ], "pop": 7709, "state": "NC" }, { "_id": "28751", "city": "MAGGIE VALLEY", "loc": [ -83.092928, 35.52006 ], "pop": 1989, "state": "NC" }, { "_id": "28752", "city": "MARION", "loc": [ -82.017993, 35.681916 ], "pop": 24988, "state": "NC" }, { "_id": "28753", "city": "WALNUT", "loc": [ -82.656577, 35.856074 ], "pop": 7623, "state": "NC" }, { "_id": "28754", "city": "MARS HILL", "loc": [ -82.525352, 35.852825 ], "pop": 5949, "state": "NC" }, { "_id": "28756", "city": "MILL SPRING", "loc": [ -82.155733, 35.333792 ], "pop": 3075, "state": "NC" }, { "_id": "28761", "city": "NEBO", "loc": [ -81.905581, 35.673158 ], "pop": 5018, "state": "NC" }, { "_id": "28762", "city": "OLD FORT", "loc": [ -82.168621, 35.616948 ], "pop": 5594, "state": "NC" }, { "_id": "28763", "city": "OTTO", "loc": [ -83.384755, 35.062668 ], "pop": 2297, "state": "NC" }, { "_id": "28766", "city": "PENROSE", "loc": [ -82.62223899999999, 35.252407 ], "pop": 653, "state": "NC" }, { "_id": "28768", "city": "PISGAH FOREST", "loc": [ -82.669516, 35.259931 ], "pop": 5623, "state": "NC" }, { "_id": "28771", "city": "ROBBINSVILLE", "loc": [ -83.788775, 35.325932 ], "pop": 6879, "state": "NC" }, { "_id": "28772", "city": "ROSMAN", "loc": [ -82.818916, 35.119695 ], "pop": 2779, "state": "NC" }, { "_id": "28773", "city": "SALUDA", "loc": [ -82.330595, 35.238341 ], "pop": 1451, "state": "NC" }, { "_id": "28774", "city": "SAPPHIRE", "loc": [ -83.001924, 35.066578 ], "pop": 62, "state": "NC" }, { "_id": "28775", "city": "SCALY MOUNTAIN", "loc": [ -83.31133800000001, 35.024036 ], "pop": 405, "state": "NC" }, { "_id": "28777", "city": "SPRUCE PINE", "loc": [ -82.070492, 35.905971 ], "pop": 7570, "state": "NC" }, { "_id": "28778", "city": "WARREN WILSON CO", "loc": [ -82.40649000000001, 35.604843 ], "pop": 5911, "state": "NC" }, { "_id": "28779", "city": "SYLVA", "loc": [ -83.20305399999999, 35.348055 ], "pop": 16275, "state": "NC" }, { "_id": "28780", "city": "TAPOCO", "loc": [ -83.905415, 35.442023 ], "pop": 130, "state": "NC" }, { "_id": "28781", "city": "TOPTON", "loc": [ -83.74511699999999, 35.230604 ], "pop": 481, "state": "NC" }, { "_id": "28782", "city": "TRYON", "loc": [ -82.23942, 35.215703 ], "pop": 3914, "state": "NC" }, { "_id": "28783", "city": "TUCKASEGEE", "loc": [ -83.07486400000001, 35.259934 ], "pop": 1096, "state": "NC" }, { "_id": "28786", "city": "WAYNESVILLE", "loc": [ -82.99134599999999, 35.501767 ], "pop": 20924, "state": "NC" }, { "_id": "28787", "city": "WEAVERVILLE", "loc": [ -82.549109, 35.712642 ], "pop": 11884, "state": "NC" }, { "_id": "28789", "city": "WHITTIER", "loc": [ -83.287239, 35.446934 ], "pop": 5368, "state": "NC" }, { "_id": "28790", "city": "ZIRCONIA", "loc": [ -82.457368, 35.215291 ], "pop": 2350, "state": "NC" }, { "_id": "28792", "city": "HENDERSONVILLE", "loc": [ -82.42644300000001, 35.361342 ], "pop": 21037, "state": "NC" }, { "_id": "28801", "city": "ASHEVILLE", "loc": [ -82.556533, 35.597075 ], "pop": 13316, "state": "NC" }, { "_id": "28803", "city": "ASHEVILLE", "loc": [ -82.518021, 35.539291 ], "pop": 20904, "state": "NC" }, { "_id": "28804", "city": "ASHEVILLE", "loc": [ -82.56462500000001, 35.63743 ], "pop": 16709, "state": "NC" }, { "_id": "28805", "city": "ASHEVILLE", "loc": [ -82.491781, 35.600363 ], "pop": 15335, "state": "NC" }, { "_id": "28806", "city": "ASHEVILLE", "loc": [ -82.607787, 35.580814 ], "pop": 30809, "state": "NC" }, { "_id": "28901", "city": "ANDREWS", "loc": [ -83.822836, 35.195948 ], "pop": 4469, "state": "NC" }, { "_id": "28902", "city": "BRASSTOWN", "loc": [ -83.966773, 35.031392 ], "pop": 1390, "state": "NC" }, { "_id": "28904", "city": "HAYESVILLE", "loc": [ -83.78668, 35.04172 ], "pop": 5965, "state": "NC" }, { "_id": "28905", "city": "MARBLE", "loc": [ -83.93806499999999, 35.14748 ], "pop": 3230, "state": "NC" }, { "_id": "28906", "city": "UNAKA", "loc": [ -84.101454, 35.079228 ], "pop": 11333, "state": "NC" }, { "_id": "28909", "city": "WARNE", "loc": [ -83.90454099999999, 35.002437 ], "pop": 457, "state": "NC" }, { "_id": "29001", "city": "ALCOLU", "loc": [ -80.178782, 33.768402 ], "pop": 2319, "state": "SC" }, { "_id": "29003", "city": "BAMBERG", "loc": [ -81.01774399999999, 33.277915 ], "pop": 7096, "state": "SC" }, { "_id": "29006", "city": "BATESBURG", "loc": [ -81.54898799999999, 33.938595 ], "pop": 9300, "state": "SC" }, { "_id": "29009", "city": "BETHUNE", "loc": [ -80.36620600000001, 34.42012 ], "pop": 2172, "state": "SC" }, { "_id": "29010", "city": "BISHOPVILLE", "loc": [ -80.27498799999999, 34.224101 ], "pop": 11965, "state": "SC" }, { "_id": "29014", "city": "BLACKSTOCK", "loc": [ -81.12485700000001, 34.577876 ], "pop": 249, "state": "SC" }, { "_id": "29015", "city": "BLAIR", "loc": [ -81.345945, 34.496668 ], "pop": 895, "state": "SC" }, { "_id": "29016", "city": "BLYTHEWOOD", "loc": [ -80.975756, 34.191112 ], "pop": 7321, "state": "SC" }, { "_id": "29018", "city": "BOWMAN", "loc": [ -80.670868, 33.347466 ], "pop": 3993, "state": "SC" }, { "_id": "29020", "city": "CAMDEN", "loc": [ -80.590997, 34.269636 ], "pop": 20667, "state": "SC" }, { "_id": "29030", "city": "CAMERON", "loc": [ -80.64660499999999, 33.557789 ], "pop": 2356, "state": "SC" }, { "_id": "29031", "city": "CARLISLE", "loc": [ -81.50910500000001, 34.614332 ], "pop": 2021, "state": "SC" }, { "_id": "29032", "city": "CASSATT", "loc": [ -80.499993, 34.342414 ], "pop": 2164, "state": "SC" }, { "_id": "29033", "city": "CAYCE", "loc": [ -81.06708399999999, 33.962567 ], "pop": 12191, "state": "SC" }, { "_id": "29036", "city": "CHAPIN", "loc": [ -81.33181999999999, 34.131158 ], "pop": 8744, "state": "SC" }, { "_id": "29037", "city": "CHAPPELLS", "loc": [ -81.83525299999999, 34.235834 ], "pop": 940, "state": "SC" }, { "_id": "29038", "city": "COPE", "loc": [ -80.963111, 33.372555 ], "pop": 1962, "state": "SC" }, { "_id": "29039", "city": "CORDOVA", "loc": [ -80.88571899999999, 33.42753 ], "pop": 2808, "state": "SC" }, { "_id": "29040", "city": "DALZELL", "loc": [ -80.466533, 34.014412 ], "pop": 7540, "state": "SC" }, { "_id": "29042", "city": "DENMARK", "loc": [ -81.14072, 33.320925 ], "pop": 6602, "state": "SC" }, { "_id": "29044", "city": "EASTOVER", "loc": [ -80.699647, 33.915274 ], "pop": 4666, "state": "SC" }, { "_id": "29045", "city": "ELGIN", "loc": [ -80.81129199999999, 34.161963 ], "pop": 9447, "state": "SC" }, { "_id": "29046", "city": "ELLIOTT", "loc": [ -80.17544100000001, 34.117149 ], "pop": 1235, "state": "SC" }, { "_id": "29047", "city": "ELLOREE", "loc": [ -80.56784, 33.490608 ], "pop": 4202, "state": "SC" }, { "_id": "29048", "city": "EUTAWVILLE", "loc": [ -80.31998299999999, 33.392189 ], "pop": 4298, "state": "SC" }, { "_id": "29051", "city": "GABLE", "loc": [ -80.081377, 33.840989 ], "pop": 790, "state": "SC" }, { "_id": "29052", "city": "GADSDEN", "loc": [ -80.753199, 33.845461 ], "pop": 2235, "state": "SC" }, { "_id": "29053", "city": "GASTON", "loc": [ -81.117395, 33.833712 ], "pop": 7863, "state": "SC" }, { "_id": "29054", "city": "GILBERT", "loc": [ -81.39136000000001, 33.95805 ], "pop": 4018, "state": "SC" }, { "_id": "29055", "city": "GREAT FALLS", "loc": [ -80.913263, 34.57053 ], "pop": 3562, "state": "SC" }, { "_id": "29056", "city": "GREELEYVILLE", "loc": [ -79.98022, 33.59664 ], "pop": 2773, "state": "SC" }, { "_id": "29058", "city": "HEATH SPRINGS", "loc": [ -80.71031000000001, 34.602422 ], "pop": 5101, "state": "SC" }, { "_id": "29059", "city": "HOLLY HILL", "loc": [ -80.402393, 33.327586 ], "pop": 4959, "state": "SC" }, { "_id": "29061", "city": "HOPKINS", "loc": [ -80.84490599999999, 33.934868 ], "pop": 12297, "state": "SC" }, { "_id": "29063", "city": "IRMO", "loc": [ -81.19655299999999, 34.110254 ], "pop": 15479, "state": "SC" }, { "_id": "29065", "city": "JENKINSVILLE", "loc": [ -81.271153, 34.271693 ], "pop": 809, "state": "SC" }, { "_id": "29067", "city": "KERSHAW", "loc": [ -80.554633, 34.557809 ], "pop": 8189, "state": "SC" }, { "_id": "29069", "city": "LAMAR", "loc": [ -80.030134, 34.189044 ], "pop": 6964, "state": "SC" }, { "_id": "29070", "city": "LEESVILLE", "loc": [ -81.45975300000001, 33.913169 ], "pop": 8605, "state": "SC" }, { "_id": "29072", "city": "LEXINGTON", "loc": [ -81.23586, 33.972383 ], "pop": 33576, "state": "SC" }, { "_id": "29073", "city": "LEXINGTON", "loc": [ -81.235102, 33.863206 ], "pop": 4683, "state": "SC" }, { "_id": "29075", "city": "LITTLE MOUNTAIN", "loc": [ -81.418375, 34.167569 ], "pop": 3322, "state": "SC" }, { "_id": "29077", "city": "LONE STAR", "loc": [ -80.645025, 33.673574 ], "pop": 1030, "state": "SC" }, { "_id": "29078", "city": "LUGOFF", "loc": [ -80.71471200000001, 34.22961 ], "pop": 8991, "state": "SC" }, { "_id": "29080", "city": "LYNCHBURG", "loc": [ -80.098821, 34.052603 ], "pop": 2091, "state": "SC" }, { "_id": "29081", "city": "EHRHARDT", "loc": [ -81.022137, 33.104436 ], "pop": 1525, "state": "SC" }, { "_id": "29082", "city": "LODGE", "loc": [ -80.934641, 32.982263 ], "pop": 1877, "state": "SC" }, { "_id": "29101", "city": "MC BEE", "loc": [ -80.254434, 34.46056 ], "pop": 2331, "state": "SC" }, { "_id": "29102", "city": "PAXVILLE", "loc": [ -80.222078, 33.667716 ], "pop": 14407, "state": "SC" }, { "_id": "29104", "city": "SAINT CHARLES", "loc": [ -80.234927, 34.046463 ], "pop": 2403, "state": "SC" }, { "_id": "29105", "city": "MONETTA", "loc": [ -81.536299, 33.774729 ], "pop": 2068, "state": "SC" }, { "_id": "29107", "city": "NEESES", "loc": [ -81.083433, 33.534282 ], "pop": 3416, "state": "SC" }, { "_id": "29108", "city": "NEWBERRY", "loc": [ -81.615741, 34.284661 ], "pop": 15468, "state": "SC" }, { "_id": "29111", "city": "NEW ZION", "loc": [ -80.014753, 33.795736 ], "pop": 1072, "state": "SC" }, { "_id": "29112", "city": "NORTH", "loc": [ -81.060096, 33.621121 ], "pop": 3410, "state": "SC" }, { "_id": "29113", "city": "NORWAY", "loc": [ -81.10974400000001, 33.453402 ], "pop": 2487, "state": "SC" }, { "_id": "29114", "city": "OLANTA", "loc": [ -79.91534900000001, 33.928545 ], "pop": 2415, "state": "SC" }, { "_id": "29115", "city": "ORANGEBURG", "loc": [ -80.85928199999999, 33.502545 ], "pop": 43095, "state": "SC" }, { "_id": "29123", "city": "PELION", "loc": [ -81.25016100000001, 33.776628 ], "pop": 3139, "state": "SC" }, { "_id": "29125", "city": "PINEWOOD", "loc": [ -80.497761, 33.764216 ], "pop": 937, "state": "SC" }, { "_id": "29126", "city": "POMARIA", "loc": [ -81.449973, 34.306281 ], "pop": 3278, "state": "SC" }, { "_id": "29127", "city": "PROSPERITY", "loc": [ -81.532353, 34.183243 ], "pop": 4782, "state": "SC" }, { "_id": "29128", "city": "REMBERT", "loc": [ -80.494544, 34.108467 ], "pop": 5577, "state": "SC" }, { "_id": "29129", "city": "RIDGE SPRING", "loc": [ -81.65594900000001, 33.871403 ], "pop": 2172, "state": "SC" }, { "_id": "29130", "city": "RIDGEWAY", "loc": [ -80.92881300000001, 34.316651 ], "pop": 4405, "state": "SC" }, { "_id": "29131", "city": "RIMINI", "loc": [ -80.47267100000001, 33.672155 ], "pop": 778, "state": "SC" }, { "_id": "29133", "city": "ROWESVILLE", "loc": [ -80.83311500000001, 33.370257 ], "pop": 488, "state": "SC" }, { "_id": "29135", "city": "FORT MOTTE", "loc": [ -80.856286, 33.694212 ], "pop": 9367, "state": "SC" }, { "_id": "29137", "city": "SALLEY", "loc": [ -81.31841799999999, 33.597233 ], "pop": 2537, "state": "SC" }, { "_id": "29138", "city": "SALUDA", "loc": [ -81.775398, 34.017451 ], "pop": 9586, "state": "SC" }, { "_id": "29142", "city": "SANTEE", "loc": [ -80.480498, 33.483533 ], "pop": 1891, "state": "SC" }, { "_id": "29145", "city": "SILVERSTREET", "loc": [ -81.703684, 34.235553 ], "pop": 1851, "state": "SC" }, { "_id": "29146", "city": "SPRINGFIELD", "loc": [ -81.249858, 33.534265 ], "pop": 2184, "state": "SC" }, { "_id": "29148", "city": "SUMMERTON", "loc": [ -80.36056600000001, 33.594578 ], "pop": 5946, "state": "SC" }, { "_id": "29150", "city": "OSWEGO", "loc": [ -80.32100800000001, 33.928199 ], "pop": 46394, "state": "SC" }, { "_id": "29152", "city": "SHAW A F B", "loc": [ -80.481093, 33.980262 ], "pop": 13353, "state": "SC" }, { "_id": "29154", "city": "SUMTER", "loc": [ -80.402761, 33.882067 ], "pop": 24816, "state": "SC" }, { "_id": "29160", "city": "SWANSEA", "loc": [ -81.093309, 33.733917 ], "pop": 3822, "state": "SC" }, { "_id": "29161", "city": "TIMMONSVILLE", "loc": [ -79.937845, 34.101241 ], "pop": 6644, "state": "SC" }, { "_id": "29162", "city": "TURBEVILLE", "loc": [ -79.985174, 33.87857 ], "pop": 3138, "state": "SC" }, { "_id": "29163", "city": "VANCE", "loc": [ -80.461716, 33.413882 ], "pop": 3445, "state": "SC" }, { "_id": "29164", "city": "WAGENER", "loc": [ -81.39952, 33.649417 ], "pop": 3278, "state": "SC" }, { "_id": "29166", "city": "WARD", "loc": [ -81.728341, 33.884856 ], "pop": 823, "state": "SC" }, { "_id": "29168", "city": "WEDGEFIELD", "loc": [ -80.49871899999999, 33.943002 ], "pop": 5490, "state": "SC" }, { "_id": "29169", "city": "WEST COLUMBIA", "loc": [ -81.088836, 33.995024 ], "pop": 18309, "state": "SC" }, { "_id": "29170", "city": "WEST COLUMBIA", "loc": [ -81.140474, 33.956751 ], "pop": 17399, "state": "SC" }, { "_id": "29172", "city": "WEST COLUMBIA", "loc": [ -81.091008, 33.900022 ], "pop": 9939, "state": "SC" }, { "_id": "29175", "city": "WESTVILLE", "loc": [ -80.579554, 34.449177 ], "pop": 867, "state": "SC" }, { "_id": "29178", "city": "WHITMIRE", "loc": [ -81.605981, 34.495485 ], "pop": 3677, "state": "SC" }, { "_id": "29180", "city": "WINNSBORO", "loc": [ -81.10899000000001, 34.381008 ], "pop": 16188, "state": "SC" }, { "_id": "29201", "city": "COLUMBIA", "loc": [ -81.033418, 34.0004 ], "pop": 18758, "state": "SC" }, { "_id": "29203", "city": "COLUMBIA", "loc": [ -81.026462, 34.063452 ], "pop": 45907, "state": "SC" }, { "_id": "29204", "city": "COLUMBIA", "loc": [ -81.00464700000001, 34.026037 ], "pop": 23682, "state": "SC" }, { "_id": "29205", "city": "COLUMBIA", "loc": [ -80.999731, 33.990309 ], "pop": 27239, "state": "SC" }, { "_id": "29206", "city": "COLUMBIA", "loc": [ -80.953152, 34.024655 ], "pop": 25605, "state": "SC" }, { "_id": "29209", "city": "COLUMBIA", "loc": [ -80.935525, 33.965863 ], "pop": 26378, "state": "SC" }, { "_id": "29210", "city": "COLUMBIA", "loc": [ -81.11006, 34.047863 ], "pop": 37526, "state": "SC" }, { "_id": "29212", "city": "COLUMBIA", "loc": [ -81.17961699999999, 34.072613 ], "pop": 22080, "state": "SC" }, { "_id": "29223", "city": "COLUMBIA", "loc": [ -80.91667, 34.085267 ], "pop": 42346, "state": "SC" }, { "_id": "29301", "city": "SPARTANBURG", "loc": [ -81.965377, 34.935211 ], "pop": 45811, "state": "SC" }, { "_id": "29302", "city": "SPARTANBURG", "loc": [ -81.873625, 34.956283 ], "pop": 36446, "state": "SC" }, { "_id": "29303", "city": "VALLEY FALLS", "loc": [ -81.957566, 34.993728 ], "pop": 29166, "state": "SC" }, { "_id": "29321", "city": "BUFFALO", "loc": [ -81.682576, 34.724703 ], "pop": 1810, "state": "SC" }, { "_id": "29322", "city": "CAMPOBELLO", "loc": [ -82.140343, 35.108003 ], "pop": 7479, "state": "SC" }, { "_id": "29323", "city": "CHESNEE", "loc": [ -81.86782700000001, 35.115398 ], "pop": 14714, "state": "SC" }, { "_id": "29325", "city": "CLINTON", "loc": [ -81.87717000000001, 34.470692 ], "pop": 16265, "state": "SC" }, { "_id": "29330", "city": "COWPENS", "loc": [ -81.822019, 35.038979 ], "pop": 5279, "state": "SC" }, { "_id": "29332", "city": "CROSS HILL", "loc": [ -81.984278, 34.269274 ], "pop": 1089, "state": "SC" }, { "_id": "29334", "city": "DUNCAN", "loc": [ -82.125821, 34.917645 ], "pop": 5512, "state": "SC" }, { "_id": "29335", "city": "ENOREE", "loc": [ -81.92373000000001, 34.670952 ], "pop": 3310, "state": "SC" }, { "_id": "29340", "city": "GAFFNEY", "loc": [ -81.649061, 35.061508 ], "pop": 32761, "state": "SC" }, { "_id": "29349", "city": "INMAN", "loc": [ -82.054013, 35.052795 ], "pop": 23348, "state": "SC" }, { "_id": "29351", "city": "JOANNA", "loc": [ -81.81907, 34.406795 ], "pop": 2592, "state": "SC" }, { "_id": "29353", "city": "KELTON", "loc": [ -81.684218, 34.837368 ], "pop": 3504, "state": "SC" }, { "_id": "29355", "city": "KINARDS", "loc": [ -81.71975, 34.355219 ], "pop": 678, "state": "SC" }, { "_id": "29356", "city": "LANDRUM", "loc": [ -82.211473, 35.156486 ], "pop": 6521, "state": "SC" }, { "_id": "29360", "city": "ORA", "loc": [ -82.026774, 34.500714 ], "pop": 21437, "state": "SC" }, { "_id": "29365", "city": "LYMAN", "loc": [ -82.143479, 34.968443 ], "pop": 4515, "state": "SC" }, { "_id": "29369", "city": "MOORE", "loc": [ -82.017893, 34.883453 ], "pop": 6791, "state": "SC" }, { "_id": "29370", "city": "MOUNTVILLE", "loc": [ -81.958429, 34.340791 ], "pop": 1139, "state": "SC" }, { "_id": "29372", "city": "PACOLET", "loc": [ -81.758703, 34.901708 ], "pop": 4129, "state": "SC" }, { "_id": "29374", "city": "GLENN SPRINGS", "loc": [ -81.85785300000001, 34.774808 ], "pop": 4588, "state": "SC" }, { "_id": "29376", "city": "ROEBUCK", "loc": [ -81.95255, 34.8688 ], "pop": 5009, "state": "SC" }, { "_id": "29379", "city": "UNION", "loc": [ -81.62023499999999, 34.726855 ], "pop": 22553, "state": "SC" }, { "_id": "29384", "city": "WATERLOO", "loc": [ -82.087968, 34.33673 ], "pop": 2992, "state": "SC" }, { "_id": "29385", "city": "WELLFORD", "loc": [ -82.09270600000001, 34.951394 ], "pop": 6637, "state": "SC" }, { "_id": "29388", "city": "WOODRUFF", "loc": [ -82.044658, 34.757864 ], "pop": 10206, "state": "SC" }, { "_id": "29401", "city": "CHARLESTON", "loc": [ -79.93706899999999, 32.779506 ], "pop": 12475, "state": "SC" }, { "_id": "29403", "city": "CHARLESTON", "loc": [ -79.94928299999999, 32.797575 ], "pop": 24620, "state": "SC" }, { "_id": "29404", "city": "CHARLESTON", "loc": [ -80.06768700000001, 32.895816 ], "pop": 5420, "state": "SC" }, { "_id": "29405", "city": "CHARLESTON", "loc": [ -79.97644200000001, 32.851206 ], "pop": 30621, "state": "SC" }, { "_id": "29406", "city": "NORTH CHARLESTON", "loc": [ -80.001053, 32.903035 ], "pop": 27726, "state": "SC" }, { "_id": "29407", "city": "CHARLESTON", "loc": [ -80.00595300000001, 32.799322 ], "pop": 38597, "state": "SC" }, { "_id": "29412", "city": "CHARLESTON", "loc": [ -79.95472700000001, 32.732319 ], "pop": 29969, "state": "SC" }, { "_id": "29414", "city": "CHARLESTON", "loc": [ -80.05675599999999, 32.821538 ], "pop": 19404, "state": "SC" }, { "_id": "29418", "city": "CHARLESTON", "loc": [ -80.055126, 32.907135 ], "pop": 39784, "state": "SC" }, { "_id": "29420", "city": "CHARLESTON", "loc": [ -80.08646299999999, 32.933096 ], "pop": 11598, "state": "SC" }, { "_id": "29426", "city": "JERICHO", "loc": [ -80.368197, 32.749318 ], "pop": 1723, "state": "SC" }, { "_id": "29429", "city": "AWENDAW", "loc": [ -79.686075, 32.951475 ], "pop": 1831, "state": "SC" }, { "_id": "29431", "city": "BONNEAU", "loc": [ -79.92164, 33.297332 ], "pop": 7431, "state": "SC" }, { "_id": "29432", "city": "BRANCHVILLE", "loc": [ -80.805931, 33.262802 ], "pop": 2165, "state": "SC" }, { "_id": "29434", "city": "CORDESVILLE", "loc": [ -79.920492, 33.162127 ], "pop": 1382, "state": "SC" }, { "_id": "29435", "city": "COTTAGEVILLE", "loc": [ -80.47941400000001, 32.961171 ], "pop": 4105, "state": "SC" }, { "_id": "29436", "city": "CROSS", "loc": [ -80.185901, 33.336373 ], "pop": 3016, "state": "SC" }, { "_id": "29437", "city": "DORCHESTER", "loc": [ -80.403398, 33.124688 ], "pop": 928, "state": "SC" }, { "_id": "29438", "city": "EDISTO ISLAND", "loc": [ -80.30701000000001, 32.548572 ], "pop": 1669, "state": "SC" }, { "_id": "29440", "city": "GEORGETOWN", "loc": [ -79.323459, 33.430776 ], "pop": 29148, "state": "SC" }, { "_id": "29445", "city": "MOUNT HOLLY", "loc": [ -80.019948, 32.988699 ], "pop": 44954, "state": "SC" }, { "_id": "29446", "city": "GREEN POND", "loc": [ -80.528035, 32.662827 ], "pop": 2068, "state": "SC" }, { "_id": "29448", "city": "HARLEYVILLE", "loc": [ -80.45009400000001, 33.220511 ], "pop": 3289, "state": "SC" }, { "_id": "29449", "city": "MEGGETT", "loc": [ -80.25956600000001, 32.722306 ], "pop": 6397, "state": "SC" }, { "_id": "29450", "city": "HUGER", "loc": [ -79.807254, 33.018436 ], "pop": 1964, "state": "SC" }, { "_id": "29451", "city": "ISLE OF PALMS", "loc": [ -79.772949, 32.794252 ], "pop": 3680, "state": "SC" }, { "_id": "29453", "city": "SHULERVILLE", "loc": [ -79.715551, 33.228797 ], "pop": 1852, "state": "SC" }, { "_id": "29455", "city": "JOHNS ISLAND", "loc": [ -80.094294, 32.709697 ], "pop": 11756, "state": "SC" }, { "_id": "29456", "city": "LADSON", "loc": [ -80.12570100000001, 32.993019 ], "pop": 16216, "state": "SC" }, { "_id": "29458", "city": "MC CLELLANVILLE", "loc": [ -79.47998200000001, 33.10472 ], "pop": 3020, "state": "SC" }, { "_id": "29461", "city": "OAKLEY", "loc": [ -80.036576, 33.163071 ], "pop": 17822, "state": "SC" }, { "_id": "29464", "city": "MOUNT PLEASANT", "loc": [ -79.852031, 32.816211 ], "pop": 35432, "state": "SC" }, { "_id": "29468", "city": "PINEVILLE", "loc": [ -80.093181, 33.419926 ], "pop": 1411, "state": "SC" }, { "_id": "29469", "city": "PINOPOLIS", "loc": [ -80.039761, 33.224125 ], "pop": 958, "state": "SC" }, { "_id": "29470", "city": "RAVENEL", "loc": [ -80.222346, 32.788088 ], "pop": 3248, "state": "SC" }, { "_id": "29471", "city": "REEVESVILLE", "loc": [ -80.66725, 33.187213 ], "pop": 1342, "state": "SC" }, { "_id": "29472", "city": "RIDGEVILLE", "loc": [ -80.308611, 33.108017 ], "pop": 7494, "state": "SC" }, { "_id": "29474", "city": "ROUND O", "loc": [ -80.573882, 32.940516 ], "pop": 64, "state": "SC" }, { "_id": "29475", "city": "RUFFIN", "loc": [ -80.813653, 33.010319 ], "pop": 269, "state": "SC" }, { "_id": "29477", "city": "SAINT GEORGE", "loc": [ -80.573246, 33.184532 ], "pop": 6940, "state": "SC" }, { "_id": "29479", "city": "ALVIN", "loc": [ -79.937635, 33.405953 ], "pop": 5483, "state": "SC" }, { "_id": "29481", "city": "SMOAKS", "loc": [ -80.81302100000001, 33.096319 ], "pop": 2074, "state": "SC" }, { "_id": "29482", "city": "SULLIVANS ISLAND", "loc": [ -79.839905, 32.763652 ], "pop": 1623, "state": "SC" }, { "_id": "29483", "city": "SUMMERVILLE", "loc": [ -80.173852, 33.028045 ], "pop": 45292, "state": "SC" }, { "_id": "29485", "city": "SUMMERVILLE", "loc": [ -80.183082, 32.975556 ], "pop": 24856, "state": "SC" }, { "_id": "29487", "city": "WADMALAW ISLAND", "loc": [ -80.182867, 32.652854 ], "pop": 2570, "state": "SC" }, { "_id": "29488", "city": "RITTER", "loc": [ -80.679225, 32.897367 ], "pop": 24002, "state": "SC" }, { "_id": "29492", "city": "WANDO", "loc": [ -79.86533, 32.962223 ], "pop": 1433, "state": "SC" }, { "_id": "29501", "city": "FLORENCE", "loc": [ -79.772786, 34.18375 ], "pop": 66990, "state": "SC" }, { "_id": "29505", "city": "FLORENCE", "loc": [ -79.775983, 34.256368 ], "pop": 1440, "state": "SC" }, { "_id": "29506", "city": "QUINBY", "loc": [ -79.79454699999999, 34.245178 ], "pop": 0, "state": "SC" }, { "_id": "29510", "city": "ANDREWS", "loc": [ -79.560438, 33.452525 ], "pop": 9845, "state": "SC" }, { "_id": "29511", "city": "AYNOR", "loc": [ -79.17773, 33.982271 ], "pop": 6786, "state": "SC" }, { "_id": "29512", "city": "BENNETTSVILLE", "loc": [ -79.689826, 34.625501 ], "pop": 15751, "state": "SC" }, { "_id": "29516", "city": "BLENHEIM", "loc": [ -79.65942200000001, 34.502033 ], "pop": 2123, "state": "SC" }, { "_id": "29518", "city": "CADES", "loc": [ -79.817567, 33.812017 ], "pop": 2748, "state": "SC" }, { "_id": "29520", "city": "CHERAW", "loc": [ -79.91741399999999, 34.686275 ], "pop": 13063, "state": "SC" }, { "_id": "29525", "city": "CLIO", "loc": [ -79.545255, 34.58052 ], "pop": 2870, "state": "SC" }, { "_id": "29526", "city": "CONWAY", "loc": [ -79.055712, 33.873066 ], "pop": 17560, "state": "SC" }, { "_id": "29527", "city": "BUCKSPORT", "loc": [ -79.050836, 33.77922 ], "pop": 19781, "state": "SC" }, { "_id": "29530", "city": "COWARD", "loc": [ -79.75152300000001, 33.990514 ], "pop": 2098, "state": "SC" }, { "_id": "29532", "city": "DARLINGTON", "loc": [ -79.873221, 34.300294 ], "pop": 22271, "state": "SC" }, { "_id": "29536", "city": "DILLON", "loc": [ -79.377015, 34.414553 ], "pop": 9113, "state": "SC" }, { "_id": "29541", "city": "EFFINGHAM", "loc": [ -79.791822, 34.094571 ], "pop": 8031, "state": "SC" }, { "_id": "29543", "city": "FORK", "loc": [ -79.250063, 34.28733 ], "pop": 916, "state": "SC" }, { "_id": "29544", "city": "GALIVANTS FERRY", "loc": [ -79.105915, 34.123801 ], "pop": 1129, "state": "SC" }, { "_id": "29545", "city": "GREEN SEA", "loc": [ -79.051613, 34.205105 ], "pop": 1814, "state": "SC" }, { "_id": "29546", "city": "GRESHAM", "loc": [ -79.356426, 33.906941 ], "pop": 2262, "state": "SC" }, { "_id": "29547", "city": "SOUTH OF THE BOR", "loc": [ -79.377871, 34.484556 ], "pop": 4643, "state": "SC" }, { "_id": "29550", "city": "HARTSVILLE", "loc": [ -80.084237, 34.375616 ], "pop": 27888, "state": "SC" }, { "_id": "29554", "city": "HEMINGWAY", "loc": [ -79.44889499999999, 33.741887 ], "pop": 5578, "state": "SC" }, { "_id": "29555", "city": "JOHNSONVILLE", "loc": [ -79.478256, 33.829873 ], "pop": 6115, "state": "SC" }, { "_id": "29556", "city": "KINGSTREE", "loc": [ -79.783221, 33.687841 ], "pop": 16365, "state": "SC" }, { "_id": "29560", "city": "LAKE CITY", "loc": [ -79.741794, 33.865473 ], "pop": 11664, "state": "SC" }, { "_id": "29563", "city": "LAKE VIEW", "loc": [ -79.192869, 34.34449 ], "pop": 3513, "state": "SC" }, { "_id": "29564", "city": "LANE", "loc": [ -79.871545, 33.50827 ], "pop": 1730, "state": "SC" }, { "_id": "29565", "city": "LATTA", "loc": [ -79.441704, 34.339829 ], "pop": 6435, "state": "SC" }, { "_id": "29566", "city": "LITTLE RIVER", "loc": [ -78.650829, 33.876806 ], "pop": 6473, "state": "SC" }, { "_id": "29567", "city": "LITTLE ROCK", "loc": [ -79.326948, 34.404803 ], "pop": 4489, "state": "SC" }, { "_id": "29568", "city": "LONGS", "loc": [ -78.793359, 33.906408 ], "pop": 5936, "state": "SC" }, { "_id": "29569", "city": "LORIS", "loc": [ -78.916096, 34.055756 ], "pop": 11189, "state": "SC" }, { "_id": "29570", "city": "MC COLL", "loc": [ -79.559741, 34.670406 ], "pop": 5224, "state": "SC" }, { "_id": "29571", "city": "MARION", "loc": [ -79.389822, 34.156195 ], "pop": 16285, "state": "SC" }, { "_id": "29572", "city": "MYRTLE BEACH", "loc": [ -78.80444799999999, 33.758701 ], "pop": 7039, "state": "SC" }, { "_id": "29574", "city": "MULLINS", "loc": [ -79.254155, 34.204441 ], "pop": 12118, "state": "SC" }, { "_id": "29575", "city": "SURFSIDE BEACH", "loc": [ -78.995228, 33.625245 ], "pop": 24545, "state": "SC" }, { "_id": "29576", "city": "MURRELLS INLET", "loc": [ -79.05275, 33.550717 ], "pop": 4209, "state": "SC" }, { "_id": "29577", "city": "MYRTLE BEACH", "loc": [ -78.913697, 33.699363 ], "pop": 31917, "state": "SC" }, { "_id": "29580", "city": "NESMITH", "loc": [ -79.551301, 33.591652 ], "pop": 3297, "state": "SC" }, { "_id": "29581", "city": "NICHOLS", "loc": [ -79.162493, 34.242629 ], "pop": 1258, "state": "SC" }, { "_id": "29582", "city": "CHERRY GROVE BEA", "loc": [ -78.67792, 33.822801 ], "pop": 9910, "state": "SC" }, { "_id": "29583", "city": "PAMPLICO", "loc": [ -79.592917, 33.992166 ], "pop": 6291, "state": "SC" }, { "_id": "29584", "city": "PATRICK", "loc": [ -80.064984, 34.559823 ], "pop": 3800, "state": "SC" }, { "_id": "29585", "city": "PAWLEYS ISLAND", "loc": [ -79.134128, 33.450825 ], "pop": 5445, "state": "SC" }, { "_id": "29590", "city": "SALTERS", "loc": [ -79.83002399999999, 33.561138 ], "pop": 1932, "state": "SC" }, { "_id": "29591", "city": "SCRANTON", "loc": [ -79.773101, 33.92813 ], "pop": 4122, "state": "SC" }, { "_id": "29592", "city": "SELLERS", "loc": [ -79.436948, 34.269522 ], "pop": 1976, "state": "SC" }, { "_id": "29593", "city": "SOCIETY HILL", "loc": [ -79.886494, 34.451161 ], "pop": 3278, "state": "SC" }, { "_id": "29596", "city": "WALLACE", "loc": [ -79.801142, 34.730704 ], "pop": 3398, "state": "SC" }, { "_id": "29601", "city": "GREENVILLE", "loc": [ -82.406049, 34.847165 ], "pop": 11198, "state": "SC" }, { "_id": "29605", "city": "GREENVILLE", "loc": [ -82.393218, 34.800117 ], "pop": 32092, "state": "SC" }, { "_id": "29607", "city": "GREENVILLE", "loc": [ -82.35155, 34.828507 ], "pop": 26926, "state": "SC" }, { "_id": "29609", "city": "GREENVILLE", "loc": [ -82.400195, 34.892101 ], "pop": 35346, "state": "SC" }, { "_id": "29611", "city": "GREENVILLE", "loc": [ -82.449296, 34.85331 ], "pop": 43522, "state": "SC" }, { "_id": "29615", "city": "GREENVILLE", "loc": [ -82.31981500000001, 34.866095 ], "pop": 25818, "state": "SC" }, { "_id": "29620", "city": "ABBEVILLE", "loc": [ -82.378452, 34.18186 ], "pop": 11344, "state": "SC" }, { "_id": "29621", "city": "ANDERSON", "loc": [ -82.630436, 34.526051 ], "pop": 24256, "state": "SC" }, { "_id": "29624", "city": "ANDERSON", "loc": [ -82.677052, 34.474807 ], "pop": 26962, "state": "SC" }, { "_id": "29625", "city": "ANDERSON", "loc": [ -82.70868, 34.527134 ], "pop": 20105, "state": "SC" }, { "_id": "29627", "city": "BELTON", "loc": [ -82.51010599999999, 34.508715 ], "pop": 11371, "state": "SC" }, { "_id": "29628", "city": "CALHOUN FALLS", "loc": [ -82.580544, 34.099912 ], "pop": 3289, "state": "SC" }, { "_id": "29630", "city": "CENTRAL", "loc": [ -82.79472699999999, 34.74007 ], "pop": 8226, "state": "SC" }, { "_id": "29631", "city": "CLEMSON", "loc": [ -82.825003, 34.683061 ], "pop": 17987, "state": "SC" }, { "_id": "29635", "city": "CLEVELAND", "loc": [ -82.609256, 35.06537 ], "pop": 960, "state": "SC" }, { "_id": "29638", "city": "SHOALS JUNCTION", "loc": [ -82.36661599999999, 34.399772 ], "pop": 1347, "state": "SC" }, { "_id": "29639", "city": "DUE WEST", "loc": [ -82.400164, 34.334425 ], "pop": 3499, "state": "SC" }, { "_id": "29640", "city": "EASLEY", "loc": [ -82.57955200000001, 34.829031 ], "pop": 37862, "state": "SC" }, { "_id": "29642", "city": "EASLEY", "loc": [ -82.561716, 34.960694 ], "pop": 830, "state": "SC" }, { "_id": "29643", "city": "FAIR PLAY", "loc": [ -82.99987400000001, 34.577548 ], "pop": 6110, "state": "SC" }, { "_id": "29644", "city": "FOUNTAIN INN", "loc": [ -82.264593, 34.653334 ], "pop": 15233, "state": "SC" }, { "_id": "29645", "city": "ORA", "loc": [ -82.15703499999999, 34.580984 ], "pop": 9987, "state": "SC" }, { "_id": "29646", "city": "GREENWOOD", "loc": [ -82.156211, 34.175802 ], "pop": 23138, "state": "SC" }, { "_id": "29649", "city": "GREENWOOD", "loc": [ -82.15818899999999, 34.222988 ], "pop": 18588, "state": "SC" }, { "_id": "29650", "city": "GREER", "loc": [ -82.267442, 34.8968 ], "pop": 16460, "state": "SC" }, { "_id": "29651", "city": "GREER", "loc": [ -82.220857, 34.94532 ], "pop": 26573, "state": "SC" }, { "_id": "29653", "city": "HODGES", "loc": [ -82.214225, 34.288167 ], "pop": 5262, "state": "SC" }, { "_id": "29654", "city": "HONEA PATH", "loc": [ -82.425471, 34.441723 ], "pop": 7621, "state": "SC" }, { "_id": "29655", "city": "IVA", "loc": [ -82.657437, 34.319847 ], "pop": 5342, "state": "SC" }, { "_id": "29657", "city": "LIBERTY", "loc": [ -82.697429, 34.787189 ], "pop": 9519, "state": "SC" }, { "_id": "29658", "city": "LONG CREEK", "loc": [ -83.18472800000001, 34.754954 ], "pop": 1972, "state": "SC" }, { "_id": "29659", "city": "LOWNDESVILLE", "loc": [ -82.571021, 34.26624 ], "pop": 2565, "state": "SC" }, { "_id": "29661", "city": "MARIETTA", "loc": [ -82.513622, 35.029644 ], "pop": 6321, "state": "SC" }, { "_id": "29662", "city": "MAULDIN", "loc": [ -82.303507, 34.780675 ], "pop": 8871, "state": "SC" }, { "_id": "29664", "city": "MOUNTAIN REST", "loc": [ -83.11340199999999, 34.854119 ], "pop": 1717, "state": "SC" }, { "_id": "29666", "city": "NINETY SIX", "loc": [ -82.029185, 34.165198 ], "pop": 8668, "state": "SC" }, { "_id": "29667", "city": "CATEECHEE", "loc": [ -82.755492, 34.765472 ], "pop": 738, "state": "SC" }, { "_id": "29669", "city": "PELZER", "loc": [ -82.46733399999999, 34.646063 ], "pop": 3224, "state": "SC" }, { "_id": "29670", "city": "PENDLETON", "loc": [ -82.740623, 34.63694 ], "pop": 12288, "state": "SC" }, { "_id": "29671", "city": "PICKENS", "loc": [ -82.70578399999999, 34.902403 ], "pop": 16227, "state": "SC" }, { "_id": "29673", "city": "PIEDMONT", "loc": [ -82.47021599999999, 34.724433 ], "pop": 24083, "state": "SC" }, { "_id": "29676", "city": "SALEM", "loc": [ -82.96068699999999, 34.872836 ], "pop": 4091, "state": "SC" }, { "_id": "29678", "city": "SENECA", "loc": [ -82.936162, 34.682797 ], "pop": 20361, "state": "SC" }, { "_id": "29681", "city": "SIMPSONVILLE", "loc": [ -82.255009, 34.751228 ], "pop": 28438, "state": "SC" }, { "_id": "29682", "city": "SIX MILE", "loc": [ -82.82779499999999, 34.828287 ], "pop": 2757, "state": "SC" }, { "_id": "29684", "city": "STARR", "loc": [ -82.68971000000001, 34.396196 ], "pop": 2995, "state": "SC" }, { "_id": "29685", "city": "SUNSET", "loc": [ -82.80763899999999, 34.970617 ], "pop": 850, "state": "SC" }, { "_id": "29686", "city": "TAMASSEE", "loc": [ -82.986138, 34.898229 ], "pop": 156, "state": "SC" }, { "_id": "29687", "city": "TAYLORS", "loc": [ -82.31968000000001, 34.924517 ], "pop": 32831, "state": "SC" }, { "_id": "29688", "city": "TIGERVILLE", "loc": [ -82.35823600000001, 35.094443 ], "pop": 231, "state": "SC" }, { "_id": "29689", "city": "TOWNVILLE", "loc": [ -82.89633000000001, 34.522638 ], "pop": 1784, "state": "SC" }, { "_id": "29690", "city": "TRAVELERS REST", "loc": [ -82.427179, 35.003929 ], "pop": 14029, "state": "SC" }, { "_id": "29691", "city": "WALHALLA", "loc": [ -83.03877799999999, 34.768902 ], "pop": 14047, "state": "SC" }, { "_id": "29692", "city": "WARE SHOALS", "loc": [ -82.26779000000001, 34.402491 ], "pop": 4442, "state": "SC" }, { "_id": "29693", "city": "MADISON", "loc": [ -83.110782, 34.658857 ], "pop": 8933, "state": "SC" }, { "_id": "29696", "city": "WEST UNION", "loc": [ -83.03988699999999, 34.751572 ], "pop": 170, "state": "SC" }, { "_id": "29697", "city": "WILLIAMSTON", "loc": [ -82.51100599999999, 34.620572 ], "pop": 13511, "state": "SC" }, { "_id": "29702", "city": "CHEROKEE FALLS", "loc": [ -81.508004, 35.115047 ], "pop": 7481, "state": "SC" }, { "_id": "29704", "city": "CATAWBA", "loc": [ -80.93415400000001, 34.850712 ], "pop": 2451, "state": "SC" }, { "_id": "29706", "city": "CHESTER", "loc": [ -81.21856, 34.714897 ], "pop": 21920, "state": "SC" }, { "_id": "29709", "city": "CHESTERFIELD", "loc": [ -80.09577, 34.727834 ], "pop": 6286, "state": "SC" }, { "_id": "29710", "city": "LAKE WYLIE", "loc": [ -81.186358, 35.110728 ], "pop": 17905, "state": "SC" }, { "_id": "29712", "city": "EDGEMOOR", "loc": [ -80.98909500000001, 34.797006 ], "pop": 1725, "state": "SC" }, { "_id": "29714", "city": "FORT LAWN", "loc": [ -80.909175, 34.70064 ], "pop": 2106, "state": "SC" }, { "_id": "29715", "city": "TEGA CAY", "loc": [ -80.95855899999999, 35.026001 ], "pop": 17343, "state": "SC" }, { "_id": "29717", "city": "HICKORY GROVE", "loc": [ -81.430599, 34.970833 ], "pop": 932, "state": "SC" }, { "_id": "29718", "city": "JEFFERSON", "loc": [ -80.363934, 34.654581 ], "pop": 3257, "state": "SC" }, { "_id": "29720", "city": "LANCASTER", "loc": [ -80.76157600000001, 34.749006 ], "pop": 43745, "state": "SC" }, { "_id": "29726", "city": "MC CONNELLS", "loc": [ -81.23680299999999, 34.867667 ], "pop": 1431, "state": "SC" }, { "_id": "29727", "city": "MOUNT CROGHAN", "loc": [ -80.242791, 34.743895 ], "pop": 1584, "state": "SC" }, { "_id": "29728", "city": "PAGELAND", "loc": [ -80.396615, 34.772193 ], "pop": 7778, "state": "SC" }, { "_id": "29729", "city": "RICHBURG", "loc": [ -80.98906100000001, 34.682185 ], "pop": 2393, "state": "SC" }, { "_id": "29730", "city": "ROCK HILL", "loc": [ -81.01290400000001, 34.915068 ], "pop": 41461, "state": "SC" }, { "_id": "29732", "city": "ROCK HILL", "loc": [ -81.04888099999999, 34.968066 ], "pop": 30532, "state": "SC" }, { "_id": "29741", "city": "RUBY", "loc": [ -80.190966, 34.737928 ], "pop": 478, "state": "SC" }, { "_id": "29742", "city": "SHARON", "loc": [ -81.372907, 34.908396 ], "pop": 1175, "state": "SC" }, { "_id": "29743", "city": "SMYRNA", "loc": [ -81.389606, 35.030784 ], "pop": 877, "state": "SC" }, { "_id": "29745", "city": "YORK", "loc": [ -81.224462, 34.994669 ], "pop": 17279, "state": "SC" }, { "_id": "29801", "city": "AIKEN", "loc": [ -81.71942900000001, 33.553024 ], "pop": 51233, "state": "SC" }, { "_id": "29803", "city": "AIKEN", "loc": [ -81.594702, 33.531868 ], "pop": 743, "state": "SC" }, { "_id": "29809", "city": "NEW ELLENTON", "loc": [ -81.687376, 33.417242 ], "pop": 2586, "state": "SC" }, { "_id": "29810", "city": "ALLENDALE", "loc": [ -81.32025400000001, 33.007676 ], "pop": 5704, "state": "SC" }, { "_id": "29812", "city": "BARNWELL", "loc": [ -81.35231, 33.233492 ], "pop": 11016, "state": "SC" }, { "_id": "29817", "city": "BLACKVILLE", "loc": [ -81.271844, 33.364476 ], "pop": 4254, "state": "SC" }, { "_id": "29819", "city": "BRADLEY", "loc": [ -82.20272300000001, 34.032587 ], "pop": 1287, "state": "SC" }, { "_id": "29821", "city": "CLARKS HILL", "loc": [ -82.14875000000001, 33.65052 ], "pop": 439, "state": "SC" }, { "_id": "29824", "city": "EDGEFIELD", "loc": [ -81.96602, 33.805553 ], "pop": 6884, "state": "SC" }, { "_id": "29827", "city": "FAIRFAX", "loc": [ -81.25864, 32.951455 ], "pop": 4017, "state": "SC" }, { "_id": "29829", "city": "GRANITEVILLE", "loc": [ -81.81468599999999, 33.563016 ], "pop": 2858, "state": "SC" }, { "_id": "29831", "city": "JACKSON", "loc": [ -81.797628, 33.338886 ], "pop": 2810, "state": "SC" }, { "_id": "29832", "city": "JOHNSTON", "loc": [ -81.797242, 33.823075 ], "pop": 4616, "state": "SC" }, { "_id": "29835", "city": "MC CORMICK", "loc": [ -82.271862, 33.914646 ], "pop": 5426, "state": "SC" }, { "_id": "29836", "city": "MARTIN", "loc": [ -81.500304, 33.109286 ], "pop": 566, "state": "SC" }, { "_id": "29838", "city": "MODOC", "loc": [ -82.203469, 33.724894 ], "pop": 380, "state": "SC" }, { "_id": "29840", "city": "MOUNT CARMEL", "loc": [ -82.43607, 33.970323 ], "pop": 1354, "state": "SC" }, { "_id": "29841", "city": "BEECH ISLAND", "loc": [ -81.934794, 33.517766 ], "pop": 45886, "state": "SC" }, { "_id": "29843", "city": "OLAR", "loc": [ -81.16404199999999, 33.18364 ], "pop": 1503, "state": "SC" }, { "_id": "29845", "city": "PLUM BRANCH", "loc": [ -82.248041, 33.832893 ], "pop": 1144, "state": "SC" }, { "_id": "29847", "city": "TRENTON", "loc": [ -81.853392, 33.693757 ], "pop": 2825, "state": "SC" }, { "_id": "29848", "city": "TROY", "loc": [ -82.294077, 33.955654 ], "pop": 125, "state": "SC" }, { "_id": "29849", "city": "ULMER", "loc": [ -81.22129200000001, 33.057597 ], "pop": 1241, "state": "SC" }, { "_id": "29851", "city": "WARRENVILLE", "loc": [ -81.829397, 33.519917 ], "pop": 8739, "state": "SC" }, { "_id": "29853", "city": "WILLISTON", "loc": [ -81.416146, 33.392608 ], "pop": 5011, "state": "SC" }, { "_id": "29856", "city": "WINDSOR", "loc": [ -81.513626, 33.467446 ], "pop": 2264, "state": "SC" }, { "_id": "29902", "city": "BURTON", "loc": [ -80.70902599999999, 32.418035 ], "pop": 43849, "state": "SC" }, { "_id": "29910", "city": "BLUFFTON", "loc": [ -80.872079, 32.251275 ], "pop": 6912, "state": "SC" }, { "_id": "29911", "city": "BRUNSON", "loc": [ -81.180719, 32.941297 ], "pop": 1422, "state": "SC" }, { "_id": "29916", "city": "EARLY BRANCH", "loc": [ -81.030011, 32.628893 ], "pop": 1494, "state": "SC" }, { "_id": "29918", "city": "ESTILL", "loc": [ -81.21776800000001, 32.737514 ], "pop": 6210, "state": "SC" }, { "_id": "29920", "city": "ST HELENA ISLAND", "loc": [ -80.533863, 32.380213 ], "pop": 4669, "state": "SC" }, { "_id": "29922", "city": "GARNETT", "loc": [ -81.23962899999999, 32.600666 ], "pop": 61, "state": "SC" }, { "_id": "29924", "city": "HAMPTON", "loc": [ -81.09733300000001, 32.87288 ], "pop": 5987, "state": "SC" }, { "_id": "29926", "city": "HILTON HEAD ISLA", "loc": [ -80.728088, 32.229426 ], "pop": 9480, "state": "SC" }, { "_id": "29927", "city": "HARDEEVILLE", "loc": [ -81.06686500000001, 32.263512 ], "pop": 4948, "state": "SC" }, { "_id": "29928", "city": "HILTON HEAD ISLA", "loc": [ -80.75657699999999, 32.158718 ], "pop": 14504, "state": "SC" }, { "_id": "29929", "city": "ISLANDTON", "loc": [ -80.891589, 32.950324 ], "pop": 119, "state": "SC" }, { "_id": "29932", "city": "LURAY", "loc": [ -81.223506, 32.86177 ], "pop": 687, "state": "SC" }, { "_id": "29934", "city": "PINELAND", "loc": [ -81.17611599999999, 32.602065 ], "pop": 925, "state": "SC" }, { "_id": "29935", "city": "PORT ROYAL", "loc": [ -80.69278, 32.384205 ], "pop": 2526, "state": "SC" }, { "_id": "29936", "city": "COOSAWATCHIE", "loc": [ -80.94943499999999, 32.491938 ], "pop": 6342, "state": "SC" }, { "_id": "29940", "city": "SEABROOK", "loc": [ -80.740793, 32.526884 ], "pop": 915, "state": "SC" }, { "_id": "29943", "city": "TILLMAN", "loc": [ -81.077567, 32.492719 ], "pop": 1679, "state": "SC" }, { "_id": "29944", "city": "VARNVILLE", "loc": [ -81.028839, 32.834893 ], "pop": 1890, "state": "SC" }, { "_id": "29945", "city": "YEMASSEE", "loc": [ -80.812932, 32.642983 ], "pop": 5421, "state": "SC" }, { "_id": "30001", "city": "AUSTELL", "loc": [ -84.605026, 33.807226 ], "pop": 25021, "state": "GA" }, { "_id": "30002", "city": "AVONDALE ESTATES", "loc": [ -84.26069099999999, 33.771727 ], "pop": 4459, "state": "GA" }, { "_id": "30021", "city": "CLARKSTON", "loc": [ -84.23882500000001, 33.810107 ], "pop": 17325, "state": "GA" }, { "_id": "30027", "city": "CONLEY", "loc": [ -84.32757100000001, 33.645104 ], "pop": 6815, "state": "GA" }, { "_id": "30030", "city": "DECATUR", "loc": [ -84.295044, 33.769883 ], "pop": 23185, "state": "GA" }, { "_id": "30032", "city": "DECATUR", "loc": [ -84.263165, 33.740825 ], "pop": 56056, "state": "GA" }, { "_id": "30033", "city": "DECATUR", "loc": [ -84.281918, 33.812305 ], "pop": 22071, "state": "GA" }, { "_id": "30034", "city": "DECATUR", "loc": [ -84.24893899999999, 33.695385 ], "pop": 32312, "state": "GA" }, { "_id": "30035", "city": "DECATUR", "loc": [ -84.21429999999999, 33.72784 ], "pop": 15062, "state": "GA" }, { "_id": "30038", "city": "LITHONIA", "loc": [ -84.16099699999999, 33.682311 ], "pop": 15583, "state": "GA" }, { "_id": "30049", "city": "ELLENWOOD", "loc": [ -84.26433299999999, 33.635376 ], "pop": 16742, "state": "GA" }, { "_id": "30050", "city": "FOREST PARK", "loc": [ -84.367075, 33.609737 ], "pop": 26825, "state": "GA" }, { "_id": "30057", "city": "LITHIA SPRINGS", "loc": [ -84.66081, 33.772999 ], "pop": 14533, "state": "GA" }, { "_id": "30058", "city": "CENTERVILLE GWIN", "loc": [ -84.09929099999999, 33.746412 ], "pop": 37322, "state": "GA" }, { "_id": "30059", "city": "MABLETON", "loc": [ -84.565062, 33.816572 ], "pop": 22519, "state": "GA" }, { "_id": "30060", "city": "MARIETTA", "loc": [ -84.564881, 33.909199 ], "pop": 52530, "state": "GA" }, { "_id": "30062", "city": "MARIETTA", "loc": [ -84.463291, 34.002521 ], "pop": 52642, "state": "GA" }, { "_id": "30064", "city": "MARIETTA", "loc": [ -84.607584, 33.934285 ], "pop": 30260, "state": "GA" }, { "_id": "30066", "city": "MARIETTA", "loc": [ -84.503817, 34.037807 ], "pop": 41948, "state": "GA" }, { "_id": "30067", "city": "MARIETTA", "loc": [ -84.473251, 33.928198 ], "pop": 40460, "state": "GA" }, { "_id": "30068", "city": "MARIETTA", "loc": [ -84.43854899999999, 33.967861 ], "pop": 29488, "state": "GA" }, { "_id": "30071", "city": "NORCROSS", "loc": [ -84.197158, 33.938145 ], "pop": 16266, "state": "GA" }, { "_id": "30073", "city": "POWDER SPRINGS", "loc": [ -84.68564499999999, 33.875377 ], "pop": 27767, "state": "GA" }, { "_id": "30075", "city": "ROSWELL", "loc": [ -84.385901, 34.040832 ], "pop": 32144, "state": "GA" }, { "_id": "30076", "city": "ROSWELL", "loc": [ -84.310408, 34.021324 ], "pop": 34027, "state": "GA" }, { "_id": "30079", "city": "SCOTTDALE", "loc": [ -84.258521, 33.793396 ], "pop": 3288, "state": "GA" }, { "_id": "30080", "city": "SMYRNA", "loc": [ -84.502284, 33.879602 ], "pop": 36899, "state": "GA" }, { "_id": "30082", "city": "SMYRNA", "loc": [ -84.538234, 33.863051 ], "pop": 17917, "state": "GA" }, { "_id": "30083", "city": "STONE MOUNTAIN", "loc": [ -84.20175399999999, 33.794233 ], "pop": 48785, "state": "GA" }, { "_id": "30084", "city": "TUCKER", "loc": [ -84.21602, 33.856986 ], "pop": 29307, "state": "GA" }, { "_id": "30087", "city": "STONE MOUNTAIN", "loc": [ -84.128829, 33.811511 ], "pop": 27251, "state": "GA" }, { "_id": "30088", "city": "STONE MOUNTAIN", "loc": [ -84.18022000000001, 33.75798 ], "pop": 24029, "state": "GA" }, { "_id": "30092", "city": "NORCROSS", "loc": [ -84.243787, 33.967688 ], "pop": 19901, "state": "GA" }, { "_id": "30093", "city": "NORCROSS", "loc": [ -84.183953, 33.905964 ], "pop": 32345, "state": "GA" }, { "_id": "30101", "city": "ACWORTH", "loc": [ -84.647741, 34.075627 ], "pop": 37976, "state": "GA" }, { "_id": "30103", "city": "ADAIRSVILLE", "loc": [ -84.91763400000001, 34.359527 ], "pop": 7273, "state": "GA" }, { "_id": "30104", "city": "ARAGON", "loc": [ -85.069559, 34.066556 ], "pop": 4692, "state": "GA" }, { "_id": "30105", "city": "ARMUCHEE", "loc": [ -85.184298, 34.441082 ], "pop": 2131, "state": "GA" }, { "_id": "30107", "city": "BALL GROUND", "loc": [ -84.375756, 34.339262 ], "pop": 4064, "state": "GA" }, { "_id": "30108", "city": "BOWDON", "loc": [ -85.25329000000001, 33.537259 ], "pop": 7318, "state": "GA" }, { "_id": "30110", "city": "BREMEN", "loc": [ -85.128638, 33.730872 ], "pop": 8495, "state": "GA" }, { "_id": "30113", "city": "BUCHANAN", "loc": [ -85.15055099999999, 33.82828 ], "pop": 5931, "state": "GA" }, { "_id": "30114", "city": "CANTON", "loc": [ -84.457756, 34.205874 ], "pop": 35773, "state": "GA" }, { "_id": "30117", "city": "CARROLLTON", "loc": [ -85.081211, 33.579751 ], "pop": 40344, "state": "GA" }, { "_id": "30120", "city": "CARTERSVILLE", "loc": [ -84.820401, 34.186975 ], "pop": 33846, "state": "GA" }, { "_id": "30124", "city": "CAVE SPRING", "loc": [ -85.337906, 34.116683 ], "pop": 2650, "state": "GA" }, { "_id": "30125", "city": "CEDARTOWN", "loc": [ -85.24590000000001, 34.011196 ], "pop": 20720, "state": "GA" }, { "_id": "30130", "city": "CUMMING", "loc": [ -84.146762, 34.220197 ], "pop": 35496, "state": "GA" }, { "_id": "30132", "city": "DALLAS", "loc": [ -84.827791, 33.916315 ], "pop": 28118, "state": "GA" }, { "_id": "30134", "city": "DOUGLASVILLE", "loc": [ -84.747719, 33.760645 ], "pop": 17182, "state": "GA" }, { "_id": "30135", "city": "DOUGLASVILLE", "loc": [ -84.745441, 33.698936 ], "pop": 32887, "state": "GA" }, { "_id": "30136", "city": "DULUTH", "loc": [ -84.15793600000001, 33.98619 ], "pop": 30932, "state": "GA" }, { "_id": "30137", "city": "EMERSON", "loc": [ -84.75704500000001, 34.119969 ], "pop": 1353, "state": "GA" }, { "_id": "30139", "city": "FAIRMOUNT", "loc": [ -84.76687800000001, 34.465241 ], "pop": 3405, "state": "GA" }, { "_id": "30140", "city": "FELTON", "loc": [ -85.220781, 33.887066 ], "pop": 489, "state": "GA" }, { "_id": "30141", "city": "HIRAM", "loc": [ -84.769875, 33.867286 ], "pop": 6613, "state": "GA" }, { "_id": "30143", "city": "JASPER", "loc": [ -84.475881, 34.461965 ], "pop": 8256, "state": "GA" }, { "_id": "30144", "city": "KENNESAW", "loc": [ -84.60466, 34.028656 ], "pop": 37120, "state": "GA" }, { "_id": "30145", "city": "KINGSTON", "loc": [ -84.997299, 34.250053 ], "pop": 2534, "state": "GA" }, { "_id": "30147", "city": "LINDALE", "loc": [ -85.182491, 34.170741 ], "pop": 3502, "state": "GA" }, { "_id": "30148", "city": "MARBLE HILL", "loc": [ -84.33715100000001, 34.415353 ], "pop": 98, "state": "GA" }, { "_id": "30153", "city": "ROCKMART", "loc": [ -85.05937, 33.997912 ], "pop": 8946, "state": "GA" }, { "_id": "30161", "city": "ROME", "loc": [ -85.146501, 34.250726 ], "pop": 33058, "state": "GA" }, { "_id": "30165", "city": "ROME", "loc": [ -85.223122, 34.283679 ], "pop": 32739, "state": "GA" }, { "_id": "30170", "city": "ROOPVILLE", "loc": [ -85.167148, 33.432226 ], "pop": 2952, "state": "GA" }, { "_id": "30171", "city": "PINE LOG", "loc": [ -84.780315, 34.392732 ], "pop": 2257, "state": "GA" }, { "_id": "30173", "city": "SILVER CREEK", "loc": [ -85.142933, 34.159272 ], "pop": 5968, "state": "GA" }, { "_id": "30174", "city": "SUWANEE", "loc": [ -84.082391, 34.057245 ], "pop": 5965, "state": "GA" }, { "_id": "30175", "city": "TALKING ROCK", "loc": [ -84.49115399999999, 34.539356 ], "pop": 3037, "state": "GA" }, { "_id": "30176", "city": "TALLAPOOSA", "loc": [ -85.30004700000001, 33.760174 ], "pop": 6172, "state": "GA" }, { "_id": "30177", "city": "TATE", "loc": [ -84.36529899999999, 34.42387 ], "pop": 4286, "state": "GA" }, { "_id": "30178", "city": "TAYLORSVILLE", "loc": [ -84.973859, 34.122941 ], "pop": 2360, "state": "GA" }, { "_id": "30179", "city": "TEMPLE", "loc": [ -85.01331500000001, 33.767687 ], "pop": 7111, "state": "GA" }, { "_id": "30180", "city": "VILLA RICA", "loc": [ -84.929697, 33.71729 ], "pop": 12063, "state": "GA" }, { "_id": "30182", "city": "WACO", "loc": [ -85.219674, 33.683986 ], "pop": 2297, "state": "GA" }, { "_id": "30183", "city": "WALESKA", "loc": [ -84.561981, 34.321662 ], "pop": 3576, "state": "GA" }, { "_id": "30184", "city": "WHITE", "loc": [ -84.738327, 34.271683 ], "pop": 3231, "state": "GA" }, { "_id": "30185", "city": "WHITESBURG", "loc": [ -84.925426, 33.511093 ], "pop": 3115, "state": "GA" }, { "_id": "30187", "city": "WINSTON", "loc": [ -84.86391500000001, 33.663419 ], "pop": 6850, "state": "GA" }, { "_id": "30188", "city": "WOODSTOCK", "loc": [ -84.511683, 34.106005 ], "pop": 33172, "state": "GA" }, { "_id": "30201", "city": "ALPHARETTA", "loc": [ -84.29516700000001, 34.107677 ], "pop": 19393, "state": "GA" }, { "_id": "30202", "city": "ALPHARETTA", "loc": [ -84.238972, 34.035487 ], "pop": 24814, "state": "GA" }, { "_id": "30203", "city": "AUBURN", "loc": [ -83.824128, 34.007758 ], "pop": 6457, "state": "GA" }, { "_id": "30204", "city": "BARNESVILLE", "loc": [ -84.15147, 33.045713 ], "pop": 9595, "state": "GA" }, { "_id": "30205", "city": "BROOKS", "loc": [ -84.476941, 33.298433 ], "pop": 1662, "state": "GA" }, { "_id": "30206", "city": "CONCORD", "loc": [ -84.447025, 33.099836 ], "pop": 1591, "state": "GA" }, { "_id": "30207", "city": "CONYERS", "loc": [ -84.019818, 33.682932 ], "pop": 24526, "state": "GA" }, { "_id": "30208", "city": "CONYERS", "loc": [ -84.01268899999999, 33.607711 ], "pop": 24236, "state": "GA" }, { "_id": "30209", "city": "STARRSVILLE", "loc": [ -83.89075200000001, 33.570328 ], "pop": 35231, "state": "GA" }, { "_id": "30211", "city": "DACULA", "loc": [ -83.883849, 33.988234 ], "pop": 7320, "state": "GA" }, { "_id": "30213", "city": "FAIRBURN", "loc": [ -84.58085699999999, 33.56482 ], "pop": 14110, "state": "GA" }, { "_id": "30214", "city": "WOOLSEY", "loc": [ -84.46358600000001, 33.448054 ], "pop": 35007, "state": "GA" }, { "_id": "30216", "city": "FLOVILLA", "loc": [ -83.907938, 33.250012 ], "pop": 2238, "state": "GA" }, { "_id": "30217", "city": "GLENN", "loc": [ -85.105459, 33.291073 ], "pop": 7230, "state": "GA" }, { "_id": "30218", "city": "ALVATON", "loc": [ -84.58057599999999, 33.149902 ], "pop": 2327, "state": "GA" }, { "_id": "30220", "city": "GRANTVILLE", "loc": [ -84.83497699999999, 33.247253 ], "pop": 1825, "state": "GA" }, { "_id": "30221", "city": "GRAYSON", "loc": [ -83.97984599999999, 33.898344 ], "pop": 5528, "state": "GA" }, { "_id": "30222", "city": "STOVALL", "loc": [ -84.74217299999999, 33.037169 ], "pop": 4507, "state": "GA" }, { "_id": "30223", "city": "GRIFFIN", "loc": [ -84.27275899999999, 33.2549 ], "pop": 53247, "state": "GA" }, { "_id": "30228", "city": "HAMPTON", "loc": [ -84.29474399999999, 33.412398 ], "pop": 10969, "state": "GA" }, { "_id": "30230", "city": "HOGANSVILLE", "loc": [ -84.93085600000001, 33.164382 ], "pop": 6378, "state": "GA" }, { "_id": "30233", "city": "JACKSON", "loc": [ -83.978391, 33.282006 ], "pop": 13206, "state": "GA" }, { "_id": "30234", "city": "JENKINSBURG", "loc": [ -84.026122, 33.318619 ], "pop": 1242, "state": "GA" }, { "_id": "30236", "city": "JONESBORO", "loc": [ -84.358968, 33.524236 ], "pop": 55409, "state": "GA" }, { "_id": "30240", "city": "LA GRANGE", "loc": [ -85.039511, 33.034025 ], "pop": 43081, "state": "GA" }, { "_id": "30243", "city": "LAWRENCEVILLE", "loc": [ -84.014944, 34.005049 ], "pop": 24119, "state": "GA" }, { "_id": "30244", "city": "LAWRENCEVILLE", "loc": [ -84.08165200000001, 33.923781 ], "pop": 37778, "state": "GA" }, { "_id": "30245", "city": "LAWRENCEVILLE", "loc": [ -83.996413, 33.944293 ], "pop": 30171, "state": "GA" }, { "_id": "30247", "city": "LILBURN", "loc": [ -84.119595, 33.873182 ], "pop": 46637, "state": "GA" }, { "_id": "30248", "city": "LOCUST GROVE", "loc": [ -84.09824999999999, 33.344936 ], "pop": 5812, "state": "GA" }, { "_id": "30249", "city": "LOGANVILLE", "loc": [ -83.903631, 33.83366 ], "pop": 14843, "state": "GA" }, { "_id": "30251", "city": "LUTHERSVILLE", "loc": [ -84.757707, 33.179817 ], "pop": 3389, "state": "GA" }, { "_id": "30253", "city": "MC DONOUGH", "loc": [ -84.135751, 33.46466 ], "pop": 18550, "state": "GA" }, { "_id": "30255", "city": "MANSFIELD", "loc": [ -83.727638, 33.540373 ], "pop": 1438, "state": "GA" }, { "_id": "30256", "city": "MEANSVILLE", "loc": [ -84.31693799999999, 33.013387 ], "pop": 1668, "state": "GA" }, { "_id": "30257", "city": "MILNER", "loc": [ -84.175909, 33.141023 ], "pop": 3789, "state": "GA" }, { "_id": "30258", "city": "MOLENA", "loc": [ -84.45578, 32.997845 ], "pop": 2055, "state": "GA" }, { "_id": "30259", "city": "MORELAND", "loc": [ -84.75655999999999, 33.273437 ], "pop": 2056, "state": "GA" }, { "_id": "30260", "city": "MORROW", "loc": [ -84.32469500000001, 33.584934 ], "pop": 20584, "state": "GA" }, { "_id": "30262", "city": "NEWBORN", "loc": [ -83.668396, 33.494923 ], "pop": 1491, "state": "GA" }, { "_id": "30263", "city": "RAYMOND", "loc": [ -84.816952, 33.389404 ], "pop": 32379, "state": "GA" }, { "_id": "30265", "city": "NEWNAN", "loc": [ -84.712062, 33.39576 ], "pop": 5345, "state": "GA" }, { "_id": "30267", "city": "OXFORD", "loc": [ -83.863517, 33.686474 ], "pop": 10601, "state": "GA" }, { "_id": "30268", "city": "PALMETTO", "loc": [ -84.678999, 33.524195 ], "pop": 5838, "state": "GA" }, { "_id": "30269", "city": "PEACHTREE CITY", "loc": [ -84.563478, 33.391467 ], "pop": 18724, "state": "GA" }, { "_id": "30273", "city": "REX", "loc": [ -84.278228, 33.580805 ], "pop": 7218, "state": "GA" }, { "_id": "30274", "city": "RIVERDALE", "loc": [ -84.40034799999999, 33.553126 ], "pop": 23621, "state": "GA" }, { "_id": "30276", "city": "SENOIA", "loc": [ -84.591779, 33.284459 ], "pop": 4653, "state": "GA" }, { "_id": "30277", "city": "SHARPSBURG", "loc": [ -84.654027, 33.401287 ], "pop": 5956, "state": "GA" }, { "_id": "30278", "city": "SNELLVILLE", "loc": [ -84.02801100000001, 33.848607 ], "pop": 34314, "state": "GA" }, { "_id": "30279", "city": "SOCIAL CIRCLE", "loc": [ -83.706149, 33.656386 ], "pop": 4598, "state": "GA" }, { "_id": "30281", "city": "STOCKBRIDGE", "loc": [ -84.21648999999999, 33.563343 ], "pop": 25401, "state": "GA" }, { "_id": "30285", "city": "THE ROCK", "loc": [ -84.24235899999999, 32.971734 ], "pop": 333, "state": "GA" }, { "_id": "30286", "city": "THOMASTON", "loc": [ -84.33240000000001, 32.901534 ], "pop": 22925, "state": "GA" }, { "_id": "30290", "city": "TYRONE", "loc": [ -84.591357, 33.471948 ], "pop": 3555, "state": "GA" }, { "_id": "30291", "city": "UNION CITY", "loc": [ -84.549853, 33.583155 ], "pop": 7411, "state": "GA" }, { "_id": "30292", "city": "WILLIAMSON", "loc": [ -84.379493, 33.159838 ], "pop": 2940, "state": "GA" }, { "_id": "30293", "city": "WOODBURY", "loc": [ -84.59863199999999, 32.981318 ], "pop": 3648, "state": "GA" }, { "_id": "30295", "city": "ZEBULON", "loc": [ -84.310827, 33.100235 ], "pop": 2470, "state": "GA" }, { "_id": "30296", "city": "RIVERDALE", "loc": [ -84.43644999999999, 33.566716 ], "pop": 18577, "state": "GA" }, { "_id": "30303", "city": "ATLANTA", "loc": [ -84.388846, 33.752504 ], "pop": 1845, "state": "GA" }, { "_id": "30305", "city": "ATLANTA", "loc": [ -84.38514499999999, 33.831963 ], "pop": 19122, "state": "GA" }, { "_id": "30306", "city": "ATLANTA", "loc": [ -84.351418, 33.786027 ], "pop": 20081, "state": "GA" }, { "_id": "30307", "city": "ATLANTA", "loc": [ -84.33595699999999, 33.769138 ], "pop": 16330, "state": "GA" }, { "_id": "30308", "city": "ATLANTA", "loc": [ -84.375744, 33.771839 ], "pop": 8549, "state": "GA" }, { "_id": "30309", "city": "ATLANTA", "loc": [ -84.388338, 33.798407 ], "pop": 14766, "state": "GA" }, { "_id": "30310", "city": "ATLANTA", "loc": [ -84.42317300000001, 33.727849 ], "pop": 34017, "state": "GA" }, { "_id": "30311", "city": "ATLANTA", "loc": [ -84.470219, 33.722957 ], "pop": 34880, "state": "GA" }, { "_id": "30312", "city": "ATLANTA", "loc": [ -84.378125, 33.746749 ], "pop": 17683, "state": "GA" }, { "_id": "30313", "city": "ATLANTA", "loc": [ -84.39352, 33.76825 ], "pop": 8038, "state": "GA" }, { "_id": "30314", "city": "ATLANTA", "loc": [ -84.425546, 33.756103 ], "pop": 26649, "state": "GA" }, { "_id": "30315", "city": "ATLANTA", "loc": [ -84.380771, 33.705062 ], "pop": 41061, "state": "GA" }, { "_id": "30316", "city": "ATLANTA", "loc": [ -84.333913, 33.721686 ], "pop": 34668, "state": "GA" }, { "_id": "30317", "city": "ATLANTA", "loc": [ -84.31685, 33.749788 ], "pop": 16395, "state": "GA" }, { "_id": "30318", "city": "ATLANTA", "loc": [ -84.445432, 33.786454 ], "pop": 53894, "state": "GA" }, { "_id": "30319", "city": "ATLANTA", "loc": [ -84.33509100000001, 33.868728 ], "pop": 32138, "state": "GA" }, { "_id": "30324", "city": "ATLANTA", "loc": [ -84.354867, 33.820609 ], "pop": 15044, "state": "GA" }, { "_id": "30326", "city": "ATLANTA", "loc": [ -84.358232, 33.848168 ], "pop": 125, "state": "GA" }, { "_id": "30327", "city": "ATLANTA", "loc": [ -84.419966, 33.862723 ], "pop": 18467, "state": "GA" }, { "_id": "30328", "city": "SANDY SPRINGS", "loc": [ -84.38114299999999, 33.936295 ], "pop": 24238, "state": "GA" }, { "_id": "30329", "city": "ATLANTA", "loc": [ -84.32140200000001, 33.823555 ], "pop": 17013, "state": "GA" }, { "_id": "30330", "city": "ATLANTA", "loc": [ -84.434735, 33.70645 ], "pop": 643, "state": "GA" }, { "_id": "30331", "city": "ATLANTA", "loc": [ -84.52046799999999, 33.72241 ], "pop": 38185, "state": "GA" }, { "_id": "30334", "city": "ATLANTA", "loc": [ -84.388188, 33.74715 ], "pop": 0, "state": "GA" }, { "_id": "30336", "city": "ATLANTA", "loc": [ -84.51002800000001, 33.78534 ], "pop": 1228, "state": "GA" }, { "_id": "30337", "city": "COLLEGE PARK", "loc": [ -84.460849, 33.644227 ], "pop": 18106, "state": "GA" }, { "_id": "30338", "city": "DUNWOODY", "loc": [ -84.316529, 33.944313 ], "pop": 23565, "state": "GA" }, { "_id": "30339", "city": "ATLANTA", "loc": [ -84.462879, 33.87125 ], "pop": 11158, "state": "GA" }, { "_id": "30340", "city": "DORAVILLE", "loc": [ -84.248265, 33.896377 ], "pop": 22862, "state": "GA" }, { "_id": "30341", "city": "CHAMBLEE", "loc": [ -84.286969, 33.886727 ], "pop": 26846, "state": "GA" }, { "_id": "30342", "city": "ATLANTA", "loc": [ -84.376091, 33.884245 ], "pop": 19057, "state": "GA" }, { "_id": "30344", "city": "EAST POINT", "loc": [ -84.457292, 33.676214 ], "pop": 33489, "state": "GA" }, { "_id": "30345", "city": "ATLANTA", "loc": [ -84.28696100000001, 33.851347 ], "pop": 19825, "state": "GA" }, { "_id": "30346", "city": "ATLANTA", "loc": [ -84.333354, 33.926717 ], "pop": 18, "state": "GA" }, { "_id": "30349", "city": "ATLANTA", "loc": [ -84.481258, 33.605331 ], "pop": 48116, "state": "GA" }, { "_id": "30350", "city": "ATLANTA", "loc": [ -84.34114599999999, 33.979471 ], "pop": 24573, "state": "GA" }, { "_id": "30354", "city": "HAPEVILLE", "loc": [ -84.38702499999999, 33.66546 ], "pop": 16349, "state": "GA" }, { "_id": "30360", "city": "ATLANTA", "loc": [ -84.27164500000001, 33.937772 ], "pop": 16023, "state": "GA" }, { "_id": "30401", "city": "OAK PARK", "loc": [ -82.338668, 32.581938 ], "pop": 12918, "state": "GA" }, { "_id": "30410", "city": "AILEY", "loc": [ -82.47619, 32.214262 ], "pop": 1004, "state": "GA" }, { "_id": "30411", "city": "ALAMO", "loc": [ -82.794445, 32.13298 ], "pop": 2584, "state": "GA" }, { "_id": "30413", "city": "BARTOW", "loc": [ -82.470788, 32.863186 ], "pop": 945, "state": "GA" }, { "_id": "30415", "city": "BROOKLET", "loc": [ -81.62800300000001, 32.294046 ], "pop": 4850, "state": "GA" }, { "_id": "30417", "city": "CLAXTON", "loc": [ -81.90803200000001, 32.165009 ], "pop": 8724, "state": "GA" }, { "_id": "30420", "city": "COBBTOWN", "loc": [ -82.133274, 32.264237 ], "pop": 1482, "state": "GA" }, { "_id": "30421", "city": "COLLINS", "loc": [ -82.10948, 32.185228 ], "pop": 1298, "state": "GA" }, { "_id": "30425", "city": "GARFIELD", "loc": [ -82.085599, 32.600776 ], "pop": 593, "state": "GA" }, { "_id": "30426", "city": "GIRARD", "loc": [ -81.710581, 33.043689 ], "pop": 1074, "state": "GA" }, { "_id": "30427", "city": "GLENNVILLE", "loc": [ -81.948313, 31.946708 ], "pop": 7702, "state": "GA" }, { "_id": "30428", "city": "GLENWOOD", "loc": [ -82.675881, 32.157243 ], "pop": 2319, "state": "GA" }, { "_id": "30434", "city": "LOUISVILLE", "loc": [ -82.383616, 33.016342 ], "pop": 7089, "state": "GA" }, { "_id": "30436", "city": "LYONS", "loc": [ -82.307783, 32.171148 ], "pop": 8675, "state": "GA" }, { "_id": "30438", "city": "MANASSAS", "loc": [ -82.052925, 32.096551 ], "pop": 955, "state": "GA" }, { "_id": "30439", "city": "METTER", "loc": [ -82.060722, 32.401034 ], "pop": 7744, "state": "GA" }, { "_id": "30441", "city": "MIDVILLE", "loc": [ -82.20418100000001, 32.863794 ], "pop": 1533, "state": "GA" }, { "_id": "30442", "city": "MILLEN", "loc": [ -81.96180699999999, 32.787739 ], "pop": 7700, "state": "GA" }, { "_id": "30445", "city": "MOUNT VERNON", "loc": [ -82.58672, 32.18398 ], "pop": 3097, "state": "GA" }, { "_id": "30446", "city": "NEWINGTON", "loc": [ -81.532686, 32.588385 ], "pop": 2296, "state": "GA" }, { "_id": "30450", "city": "PORTAL", "loc": [ -81.912257, 32.55504 ], "pop": 3160, "state": "GA" }, { "_id": "30452", "city": "REGISTER", "loc": [ -81.872828, 32.338235 ], "pop": 1655, "state": "GA" }, { "_id": "30453", "city": "REIDSVILLE", "loc": [ -82.147809, 32.054759 ], "pop": 6286, "state": "GA" }, { "_id": "30454", "city": "ROCKLEDGE", "loc": [ -82.747939, 32.391507 ], "pop": 160, "state": "GA" }, { "_id": "30455", "city": "ROCKY FORD", "loc": [ -81.741749, 32.656863 ], "pop": 1554, "state": "GA" }, { "_id": "30456", "city": "SARDIS", "loc": [ -81.773039, 32.980946 ], "pop": 1901, "state": "GA" }, { "_id": "30457", "city": "SOPERTON", "loc": [ -82.587098, 32.386861 ], "pop": 5996, "state": "GA" }, { "_id": "30458", "city": "STATESBORO", "loc": [ -81.773956, 32.440841 ], "pop": 33469, "state": "GA" }, { "_id": "30467", "city": "HILTONIA", "loc": [ -81.633394, 32.77627 ], "pop": 9991, "state": "GA" }, { "_id": "30470", "city": "TARRYTOWN", "loc": [ -82.51693299999999, 32.290623 ], "pop": 1181, "state": "GA" }, { "_id": "30471", "city": "TWIN CITY", "loc": [ -82.197856, 32.612926 ], "pop": 5531, "state": "GA" }, { "_id": "30473", "city": "UVALDA", "loc": [ -82.50887899999999, 32.048271 ], "pop": 1881, "state": "GA" }, { "_id": "30474", "city": "VIDALIA", "loc": [ -82.406724, 32.193408 ], "pop": 15396, "state": "GA" }, { "_id": "30477", "city": "WADLEY", "loc": [ -82.40245899999999, 32.874742 ], "pop": 3376, "state": "GA" }, { "_id": "30501", "city": "GAINESVILLE", "loc": [ -83.825596, 34.307269 ], "pop": 22334, "state": "GA" }, { "_id": "30504", "city": "GAINESVILLE", "loc": [ -83.879311, 34.272281 ], "pop": 10061, "state": "GA" }, { "_id": "30506", "city": "GAINESVILLE", "loc": [ -83.888211, 34.356227 ], "pop": 22232, "state": "GA" }, { "_id": "30507", "city": "GAINESVILLE", "loc": [ -83.771625, 34.25915 ], "pop": 13327, "state": "GA" }, { "_id": "30510", "city": "ALTO", "loc": [ -83.601996, 34.459079 ], "pop": 4701, "state": "GA" }, { "_id": "30511", "city": "BALDWIN", "loc": [ -83.529781, 34.456411 ], "pop": 3969, "state": "GA" }, { "_id": "30512", "city": "BLAIRSVILLE", "loc": [ -83.99202699999999, 34.876253 ], "pop": 11360, "state": "GA" }, { "_id": "30513", "city": "BLUE RIDGE", "loc": [ -84.328087, 34.855523 ], "pop": 4844, "state": "GA" }, { "_id": "30516", "city": "BOWERSVILLE", "loc": [ -83.04836400000001, 34.399592 ], "pop": 2082, "state": "GA" }, { "_id": "30517", "city": "BRASELTON", "loc": [ -83.78116199999999, 34.138941 ], "pop": 3142, "state": "GA" }, { "_id": "30518", "city": "BUFORD", "loc": [ -83.996459, 34.112373 ], "pop": 24810, "state": "GA" }, { "_id": "30520", "city": "CANON", "loc": [ -83.126693, 34.347766 ], "pop": 1393, "state": "GA" }, { "_id": "30521", "city": "CARNESVILLE", "loc": [ -83.27920899999999, 34.394723 ], "pop": 4135, "state": "GA" }, { "_id": "30522", "city": "CHERRYLOG", "loc": [ -84.443136, 34.773711 ], "pop": 2150, "state": "GA" }, { "_id": "30523", "city": "CLARKESVILLE", "loc": [ -83.524304, 34.644993 ], "pop": 8931, "state": "GA" }, { "_id": "30525", "city": "CLAYTON", "loc": [ -83.40655, 34.882569 ], "pop": 6700, "state": "GA" }, { "_id": "30527", "city": "CLERMONT", "loc": [ -83.78531099999999, 34.476091 ], "pop": 2336, "state": "GA" }, { "_id": "30528", "city": "CLEVELAND", "loc": [ -83.749985, 34.583949 ], "pop": 11036, "state": "GA" }, { "_id": "30529", "city": "COMMERCE", "loc": [ -83.44801099999999, 34.213413 ], "pop": 8792, "state": "GA" }, { "_id": "30531", "city": "CORNELIA", "loc": [ -83.54527, 34.520882 ], "pop": 7597, "state": "GA" }, { "_id": "30533", "city": "DAHLONEGA", "loc": [ -83.979838, 34.529949 ], "pop": 15003, "state": "GA" }, { "_id": "30534", "city": "JUNO", "loc": [ -84.10370500000001, 34.394331 ], "pop": 10196, "state": "GA" }, { "_id": "30535", "city": "DEMOREST", "loc": [ -83.569625, 34.575564 ], "pop": 3521, "state": "GA" }, { "_id": "30537", "city": "SKY VALLEY", "loc": [ -83.38011299999999, 34.979659 ], "pop": 328, "state": "GA" }, { "_id": "30538", "city": "EASTANOLLEE", "loc": [ -83.258685, 34.50366 ], "pop": 1478, "state": "GA" }, { "_id": "30539", "city": "EAST ELLIJAY", "loc": [ -84.473062, 34.682636 ], "pop": 314, "state": "GA" }, { "_id": "30540", "city": "ELLIJAY", "loc": [ -84.48122600000001, 34.677514 ], "pop": 9672, "state": "GA" }, { "_id": "30541", "city": "EPWORTH", "loc": [ -84.441593, 34.944249 ], "pop": 1523, "state": "GA" }, { "_id": "30542", "city": "FLOWERY BRANCH", "loc": [ -83.902407, 34.181893 ], "pop": 9361, "state": "GA" }, { "_id": "30543", "city": "GILLSVILLE", "loc": [ -83.675681, 34.300148 ], "pop": 1585, "state": "GA" }, { "_id": "30545", "city": "HELEN", "loc": [ -83.739936, 34.686601 ], "pop": 469, "state": "GA" }, { "_id": "30546", "city": "HIAWASSEE", "loc": [ -83.7478, 34.937667 ], "pop": 5067, "state": "GA" }, { "_id": "30547", "city": "HOMER", "loc": [ -83.497432, 34.356312 ], "pop": 2949, "state": "GA" }, { "_id": "30548", "city": "HOSCHTON", "loc": [ -83.780253, 34.086578 ], "pop": 3444, "state": "GA" }, { "_id": "30549", "city": "JEFFERSON", "loc": [ -83.570813, 34.106197 ], "pop": 8795, "state": "GA" }, { "_id": "30552", "city": "LAKEMONT", "loc": [ -83.403763, 34.761697 ], "pop": 338, "state": "GA" }, { "_id": "30553", "city": "LAVONIA", "loc": [ -83.11299200000001, 34.452758 ], "pop": 5797, "state": "GA" }, { "_id": "30554", "city": "LULA", "loc": [ -83.69445899999999, 34.398513 ], "pop": 3365, "state": "GA" }, { "_id": "30555", "city": "MC CAYSVILLE", "loc": [ -84.36829400000001, 34.952212 ], "pop": 4720, "state": "GA" }, { "_id": "30557", "city": "MARTIN", "loc": [ -83.168553, 34.515482 ], "pop": 1601, "state": "GA" }, { "_id": "30558", "city": "MAYSVILLE", "loc": [ -83.584019, 34.273627 ], "pop": 4456, "state": "GA" }, { "_id": "30559", "city": "MINERAL BLUFF", "loc": [ -84.25406599999999, 34.934112 ], "pop": 2180, "state": "GA" }, { "_id": "30560", "city": "MORGANTON", "loc": [ -84.211479, 34.871382 ], "pop": 2558, "state": "GA" }, { "_id": "30563", "city": "MOUNT AIRY", "loc": [ -83.471272, 34.567825 ], "pop": 2813, "state": "GA" }, { "_id": "30564", "city": "MURRAYVILLE", "loc": [ -83.894919, 34.434167 ], "pop": 2126, "state": "GA" }, { "_id": "30565", "city": "NICHOLSON", "loc": [ -83.421031, 34.097016 ], "pop": 3352, "state": "GA" }, { "_id": "30566", "city": "OAKWOOD", "loc": [ -83.894013, 34.237196 ], "pop": 6584, "state": "GA" }, { "_id": "30567", "city": "PENDERGRASS", "loc": [ -83.66335599999999, 34.179634 ], "pop": 1956, "state": "GA" }, { "_id": "30568", "city": "RABUN GAP", "loc": [ -83.39012200000001, 34.957552 ], "pop": 1828, "state": "GA" }, { "_id": "30571", "city": "SAUTEE NACOOCHEE", "loc": [ -83.693116, 34.716245 ], "pop": 1504, "state": "GA" }, { "_id": "30572", "city": "SUCHES", "loc": [ -84.049582, 34.72529 ], "pop": 800, "state": "GA" }, { "_id": "30575", "city": "TALMO", "loc": [ -83.71872, 34.19506 ], "pop": 1153, "state": "GA" }, { "_id": "30576", "city": "TIGER", "loc": [ -83.433317, 34.81741 ], "pop": 2454, "state": "GA" }, { "_id": "30577", "city": "TOCCOA", "loc": [ -83.31144, 34.566474 ], "pop": 20324, "state": "GA" }, { "_id": "30582", "city": "YOUNG HARRIS", "loc": [ -83.86882, 34.958791 ], "pop": 1687, "state": "GA" }, { "_id": "30601", "city": "ATHENS", "loc": [ -83.363174, 33.976097 ], "pop": 15661, "state": "GA" }, { "_id": "30605", "city": "ATHENS", "loc": [ -83.352508, 33.932097 ], "pop": 33299, "state": "GA" }, { "_id": "30606", "city": "ATHENS", "loc": [ -83.418019, 33.946085 ], "pop": 29839, "state": "GA" }, { "_id": "30607", "city": "ATHENS", "loc": [ -83.427761, 34.006978 ], "pop": 7056, "state": "GA" }, { "_id": "30619", "city": "ARNOLDSVILLE", "loc": [ -83.234137, 33.880338 ], "pop": 648, "state": "GA" }, { "_id": "30620", "city": "BETHLEHEM", "loc": [ -83.728227, 33.926116 ], "pop": 2181, "state": "GA" }, { "_id": "30621", "city": "BISHOP", "loc": [ -83.477655, 33.808091 ], "pop": 3620, "state": "GA" }, { "_id": "30622", "city": "BOGART", "loc": [ -83.50546, 33.934038 ], "pop": 7245, "state": "GA" }, { "_id": "30624", "city": "BOWMAN", "loc": [ -83.028437, 34.19193 ], "pop": 2315, "state": "GA" }, { "_id": "30625", "city": "BUCKHEAD", "loc": [ -83.343484, 33.536842 ], "pop": 1222, "state": "GA" }, { "_id": "30627", "city": "CARLTON", "loc": [ -83.003827, 33.985217 ], "pop": 2046, "state": "GA" }, { "_id": "30628", "city": "COLBERT", "loc": [ -83.21906, 34.038246 ], "pop": 5943, "state": "GA" }, { "_id": "30629", "city": "COMER", "loc": [ -83.121978, 34.088776 ], "pop": 3134, "state": "GA" }, { "_id": "30630", "city": "CRAWFORD", "loc": [ -83.189319, 33.909533 ], "pop": 2883, "state": "GA" }, { "_id": "30631", "city": "CRAWFORDVILLE", "loc": [ -82.88723400000001, 33.570801 ], "pop": 1915, "state": "GA" }, { "_id": "30633", "city": "DANIELSVILLE", "loc": [ -83.275841, 34.170799 ], "pop": 7119, "state": "GA" }, { "_id": "30634", "city": "DEWY ROSE", "loc": [ -82.940894, 34.172052 ], "pop": 1138, "state": "GA" }, { "_id": "30635", "city": "ELBERTON", "loc": [ -82.844765, 34.108202 ], "pop": 15503, "state": "GA" }, { "_id": "30641", "city": "GOOD HOPE", "loc": [ -83.59495200000001, 33.761346 ], "pop": 1031, "state": "GA" }, { "_id": "30642", "city": "GREENSBORO", "loc": [ -83.170192, 33.563682 ], "pop": 6206, "state": "GA" }, { "_id": "30643", "city": "HARTWELL", "loc": [ -82.929576, 34.357124 ], "pop": 14886, "state": "GA" }, { "_id": "30646", "city": "HULL", "loc": [ -83.311029, 34.04781 ], "pop": 5142, "state": "GA" }, { "_id": "30648", "city": "LEXINGTON", "loc": [ -83.085809, 33.879913 ], "pop": 1712, "state": "GA" }, { "_id": "30650", "city": "MADISON", "loc": [ -83.461781, 33.594681 ], "pop": 8855, "state": "GA" }, { "_id": "30655", "city": "MONROE", "loc": [ -83.707221, 33.808141 ], "pop": 18405, "state": "GA" }, { "_id": "30660", "city": "PHILOMATH", "loc": [ -82.909975, 33.783593 ], "pop": 1137, "state": "GA" }, { "_id": "30662", "city": "ROYSTON", "loc": [ -83.140614, 34.277793 ], "pop": 8836, "state": "GA" }, { "_id": "30663", "city": "RUTLEDGE", "loc": [ -83.60230199999999, 33.616316 ], "pop": 2161, "state": "GA" }, { "_id": "30666", "city": "STATHAM", "loc": [ -83.58929999999999, 33.960233 ], "pop": 3758, "state": "GA" }, { "_id": "30667", "city": "STEPHENS", "loc": [ -83.11590200000001, 33.771471 ], "pop": 1069, "state": "GA" }, { "_id": "30668", "city": "DANBURG", "loc": [ -82.69555800000001, 33.883294 ], "pop": 2293, "state": "GA" }, { "_id": "30669", "city": "UNION POINT", "loc": [ -83.087913, 33.634544 ], "pop": 3561, "state": "GA" }, { "_id": "30673", "city": "WASHINGTON", "loc": [ -82.742912, 33.726541 ], "pop": 7699, "state": "GA" }, { "_id": "30677", "city": "WATKINSVILLE", "loc": [ -83.40804300000001, 33.854247 ], "pop": 7723, "state": "GA" }, { "_id": "30678", "city": "WHITE PLAINS", "loc": [ -83.090845, 33.484338 ], "pop": 1596, "state": "GA" }, { "_id": "30680", "city": "WINDER", "loc": [ -83.711473, 33.998544 ], "pop": 16981, "state": "GA" }, { "_id": "30683", "city": "WINTERVILLE", "loc": [ -83.290645, 33.954253 ], "pop": 3056, "state": "GA" }, { "_id": "30701", "city": "CALHOUN", "loc": [ -84.934545, 34.496456 ], "pop": 22017, "state": "GA" }, { "_id": "30705", "city": "CHATSWORTH", "loc": [ -84.794293, 34.758929 ], "pop": 22271, "state": "GA" }, { "_id": "30707", "city": "CHICKAMAUGA", "loc": [ -85.322136, 34.857963 ], "pop": 13545, "state": "GA" }, { "_id": "30708", "city": "CISCO", "loc": [ -84.717382, 34.847405 ], "pop": 978, "state": "GA" }, { "_id": "30710", "city": "COHUTTA", "loc": [ -84.945801, 34.932635 ], "pop": 5052, "state": "GA" }, { "_id": "30711", "city": "CRANDALL", "loc": [ -84.764533, 34.941225 ], "pop": 2901, "state": "GA" }, { "_id": "30720", "city": "DALTON", "loc": [ -84.987477, 34.76352 ], "pop": 20680, "state": "GA" }, { "_id": "30721", "city": "DALTON", "loc": [ -84.933871, 34.77922 ], "pop": 36051, "state": "GA" }, { "_id": "30725", "city": "FLINTSTONE", "loc": [ -85.35244299999999, 34.925162 ], "pop": 2775, "state": "GA" }, { "_id": "30728", "city": "LA FAYETTE", "loc": [ -85.260212, 34.692008 ], "pop": 16287, "state": "GA" }, { "_id": "30730", "city": "LYERLY", "loc": [ -85.403826, 34.402958 ], "pop": 2585, "state": "GA" }, { "_id": "30731", "city": "CLOUDLAND", "loc": [ -85.459723, 34.570909 ], "pop": 3222, "state": "GA" }, { "_id": "30733", "city": "PLAINVILLE", "loc": [ -85.031204, 34.41447 ], "pop": 1589, "state": "GA" }, { "_id": "30734", "city": "RANGER", "loc": [ -84.727018, 34.540361 ], "pop": 2015, "state": "GA" }, { "_id": "30735", "city": "HILL CITY", "loc": [ -84.916251, 34.591996 ], "pop": 2926, "state": "GA" }, { "_id": "30736", "city": "RINGGOLD", "loc": [ -85.15490800000001, 34.92052 ], "pop": 25360, "state": "GA" }, { "_id": "30738", "city": "RISING FAWN", "loc": [ -85.47107800000001, 34.853491 ], "pop": 4036, "state": "GA" }, { "_id": "30739", "city": "ROCK SPRING", "loc": [ -85.24148099999999, 34.806534 ], "pop": 4181, "state": "GA" }, { "_id": "30740", "city": "ROCKY FACE", "loc": [ -85.05614300000001, 34.774456 ], "pop": 6029, "state": "GA" }, { "_id": "30741", "city": "ROSSVILLE", "loc": [ -85.296785, 34.953481 ], "pop": 18436, "state": "GA" }, { "_id": "30742", "city": "FORT OGLETHORPE", "loc": [ -85.242812, 34.964082 ], "pop": 14807, "state": "GA" }, { "_id": "30746", "city": "SUGAR VALLEY", "loc": [ -85.026048, 34.551929 ], "pop": 1340, "state": "GA" }, { "_id": "30747", "city": "SUMMERVILLE", "loc": [ -85.336224, 34.485899 ], "pop": 10748, "state": "GA" }, { "_id": "30750", "city": "LOOKOUT MOUNTAIN", "loc": [ -85.379384, 34.933512 ], "pop": 2818, "state": "GA" }, { "_id": "30752", "city": "TRENTON", "loc": [ -85.517118, 34.901681 ], "pop": 7930, "state": "GA" }, { "_id": "30753", "city": "TRION", "loc": [ -85.311156, 34.54679 ], "pop": 5963, "state": "GA" }, { "_id": "30755", "city": "TUNNEL HILL", "loc": [ -85.046815, 34.854129 ], "pop": 6947, "state": "GA" }, { "_id": "30757", "city": "WILDWOOD", "loc": [ -85.43045600000001, 34.977911 ], "pop": 586, "state": "GA" }, { "_id": "30802", "city": "APPLING", "loc": [ -82.285631, 33.627088 ], "pop": 2255, "state": "GA" }, { "_id": "30803", "city": "AVERA", "loc": [ -82.514965, 33.140997 ], "pop": 836, "state": "GA" }, { "_id": "30805", "city": "BLYTHE", "loc": [ -82.20304400000001, 33.294088 ], "pop": 297, "state": "GA" }, { "_id": "30808", "city": "DEARING", "loc": [ -82.395512, 33.40702 ], "pop": 4632, "state": "GA" }, { "_id": "30809", "city": "EVANS", "loc": [ -82.139775, 33.541194 ], "pop": 12788, "state": "GA" }, { "_id": "30810", "city": "GIBSON", "loc": [ -82.57659099999999, 33.247097 ], "pop": 1649, "state": "GA" }, { "_id": "30813", "city": "GROVETOWN", "loc": [ -82.240937, 33.476622 ], "pop": 13283, "state": "GA" }, { "_id": "30814", "city": "HARLEM", "loc": [ -82.309659, 33.417007 ], "pop": 4318, "state": "GA" }, { "_id": "30815", "city": "HEPHZIBAH", "loc": [ -82.088689, 33.343328 ], "pop": 27838, "state": "GA" }, { "_id": "30816", "city": "KEYSVILLE", "loc": [ -82.183368, 33.17191 ], "pop": 135, "state": "GA" }, { "_id": "30817", "city": "LINCOLNTON", "loc": [ -82.44348100000001, 33.777335 ], "pop": 7028, "state": "GA" }, { "_id": "30818", "city": "MATTHEWS", "loc": [ -82.28674700000001, 33.217582 ], "pop": 607, "state": "GA" }, { "_id": "30820", "city": "MITCHELL", "loc": [ -82.68165399999999, 33.20515 ], "pop": 708, "state": "GA" }, { "_id": "30821", "city": "NORWOOD", "loc": [ -82.735575, 33.478921 ], "pop": 882, "state": "GA" }, { "_id": "30822", "city": "PERKINS", "loc": [ -81.869573, 32.905747 ], "pop": 549, "state": "GA" }, { "_id": "30823", "city": "STAPLETON", "loc": [ -82.459704, 33.189423 ], "pop": 884, "state": "GA" }, { "_id": "30824", "city": "THOMSON", "loc": [ -82.494204, 33.477363 ], "pop": 15487, "state": "GA" }, { "_id": "30828", "city": "WARRENTON", "loc": [ -82.63567999999999, 33.40914 ], "pop": 4091, "state": "GA" }, { "_id": "30830", "city": "WAYNESBORO", "loc": [ -81.990797, 33.101254 ], "pop": 12213, "state": "GA" }, { "_id": "30833", "city": "WRENS", "loc": [ -82.380962, 33.210397 ], "pop": 4782, "state": "GA" }, { "_id": "30901", "city": "AUGUSTA", "loc": [ -81.972959, 33.460084 ], "pop": 24496, "state": "GA" }, { "_id": "30904", "city": "AUGUSTA", "loc": [ -82.01307799999999, 33.47374 ], "pop": 30408, "state": "GA" }, { "_id": "30905", "city": "FORT GORDON", "loc": [ -82.139179, 33.419032 ], "pop": 9260, "state": "GA" }, { "_id": "30906", "city": "PEACH ORCHARD", "loc": [ -82.038358, 33.402024 ], "pop": 58646, "state": "GA" }, { "_id": "30907", "city": "MARTINEZ", "loc": [ -82.09950499999999, 33.511692 ], "pop": 42573, "state": "GA" }, { "_id": "30909", "city": "FOREST HILLS", "loc": [ -82.060439, 33.480932 ], "pop": 32202, "state": "GA" }, { "_id": "31001", "city": "ABBEVILLE", "loc": [ -83.306845, 31.96484 ], "pop": 1991, "state": "GA" }, { "_id": "31002", "city": "ADRIAN", "loc": [ -82.569508, 32.563505 ], "pop": 2880, "state": "GA" }, { "_id": "31003", "city": "ALLENTOWN", "loc": [ -83.189796, 32.653829 ], "pop": 1099, "state": "GA" }, { "_id": "31005", "city": "BONAIRE", "loc": [ -83.604736, 32.546037 ], "pop": 5095, "state": "GA" }, { "_id": "31006", "city": "BUTLER", "loc": [ -84.234308, 32.572597 ], "pop": 4731, "state": "GA" }, { "_id": "31007", "city": "BYROMVILLE", "loc": [ -83.899128, 32.185192 ], "pop": 1672, "state": "GA" }, { "_id": "31008", "city": "POWERSVILLE", "loc": [ -83.762244, 32.647384 ], "pop": 8205, "state": "GA" }, { "_id": "31009", "city": "CADWELL", "loc": [ -83.02676700000001, 32.317395 ], "pop": 1501, "state": "GA" }, { "_id": "31011", "city": "CHAUNCEY", "loc": [ -83.050804, 32.083532 ], "pop": 1954, "state": "GA" }, { "_id": "31012", "city": "CHESTER", "loc": [ -83.174029, 32.398152 ], "pop": 1517, "state": "GA" }, { "_id": "31014", "city": "COCHRAN", "loc": [ -83.322886, 32.398066 ], "pop": 11373, "state": "GA" }, { "_id": "31015", "city": "CORDELE", "loc": [ -83.783507, 31.956625 ], "pop": 18662, "state": "GA" }, { "_id": "31016", "city": "CULLODEN", "loc": [ -84.04562799999999, 32.830078 ], "pop": 2501, "state": "GA" }, { "_id": "31017", "city": "DANVILLE", "loc": [ -83.303298, 32.593017 ], "pop": 2221, "state": "GA" }, { "_id": "31018", "city": "DAVISBORO", "loc": [ -82.622738, 32.944296 ], "pop": 2032, "state": "GA" }, { "_id": "31019", "city": "DEXTER", "loc": [ -83.05277100000001, 32.435639 ], "pop": 1705, "state": "GA" }, { "_id": "31020", "city": "DRY BRANCH", "loc": [ -83.495105, 32.70499 ], "pop": 3702, "state": "GA" }, { "_id": "31021", "city": "EAST DUBLIN", "loc": [ -82.90367999999999, 32.547794 ], "pop": 32030, "state": "GA" }, { "_id": "31022", "city": "DUDLEY", "loc": [ -83.089918, 32.525879 ], "pop": 966, "state": "GA" }, { "_id": "31023", "city": "EASTMAN", "loc": [ -83.185959, 32.208425 ], "pop": 11744, "state": "GA" }, { "_id": "31024", "city": "EATONTON", "loc": [ -83.36277, 33.312723 ], "pop": 13086, "state": "GA" }, { "_id": "31025", "city": "ELKO", "loc": [ -83.730388, 32.333648 ], "pop": 934, "state": "GA" }, { "_id": "31028", "city": "CENTERVILLE", "loc": [ -83.676773, 32.634375 ], "pop": 2764, "state": "GA" }, { "_id": "31029", "city": "FORSYTH", "loc": [ -83.93620900000001, 33.050764 ], "pop": 8959, "state": "GA" }, { "_id": "31030", "city": "FORT VALLEY", "loc": [ -83.888727, 32.54956 ], "pop": 14027, "state": "GA" }, { "_id": "31031", "city": "STEVENS POTTERY", "loc": [ -83.32041599999999, 32.909212 ], "pop": 5415, "state": "GA" }, { "_id": "31032", "city": "GRAY", "loc": [ -83.539951, 33.017177 ], "pop": 8781, "state": "GA" }, { "_id": "31033", "city": "HADDOCK", "loc": [ -83.431219, 33.051888 ], "pop": 1193, "state": "GA" }, { "_id": "31035", "city": "HARRISON", "loc": [ -82.71593, 32.842007 ], "pop": 1737, "state": "GA" }, { "_id": "31036", "city": "HAWKINSVILLE", "loc": [ -83.49476300000001, 32.277834 ], "pop": 9154, "state": "GA" }, { "_id": "31037", "city": "HELENA", "loc": [ -82.91782000000001, 32.078093 ], "pop": 1526, "state": "GA" }, { "_id": "31038", "city": "ROUND OAK", "loc": [ -83.68709200000001, 33.179994 ], "pop": 811, "state": "GA" }, { "_id": "31041", "city": "IDEAL", "loc": [ -84.148149, 32.393022 ], "pop": 1924, "state": "GA" }, { "_id": "31042", "city": "IRWINTON", "loc": [ -83.173963, 32.808849 ], "pop": 447, "state": "GA" }, { "_id": "31044", "city": "JEFFERSONVILLE", "loc": [ -83.385896, 32.741096 ], "pop": 3953, "state": "GA" }, { "_id": "31045", "city": "JEWELL", "loc": [ -82.732803, 33.328754 ], "pop": 1105, "state": "GA" }, { "_id": "31046", "city": "JULIETTE", "loc": [ -83.82352899999999, 33.119412 ], "pop": 687, "state": "GA" }, { "_id": "31047", "city": "KATHLEEN", "loc": [ -83.61284000000001, 32.467218 ], "pop": 563, "state": "GA" }, { "_id": "31049", "city": "KITE", "loc": [ -82.527361, 32.707833 ], "pop": 1196, "state": "GA" }, { "_id": "31050", "city": "KNOXVILLE", "loc": [ -83.943011, 32.64724 ], "pop": 2134, "state": "GA" }, { "_id": "31052", "city": "LIZELLA", "loc": [ -83.82500899999999, 32.777316 ], "pop": 6992, "state": "GA" }, { "_id": "31054", "city": "MC INTYRE", "loc": [ -83.203953, 32.84679 ], "pop": 3295, "state": "GA" }, { "_id": "31055", "city": "MC RAE", "loc": [ -82.887665, 32.043529 ], "pop": 4906, "state": "GA" }, { "_id": "31057", "city": "MARSHALLVILLE", "loc": [ -83.943478, 32.452003 ], "pop": 2008, "state": "GA" }, { "_id": "31058", "city": "MAUK", "loc": [ -84.399906, 32.509016 ], "pop": 319, "state": "GA" }, { "_id": "31060", "city": "MILAN", "loc": [ -83.05884500000001, 31.961797 ], "pop": 1627, "state": "GA" }, { "_id": "31061", "city": "MILLEDGEVILLE", "loc": [ -83.237943, 33.079958 ], "pop": 39173, "state": "GA" }, { "_id": "31063", "city": "MONTEZUMA", "loc": [ -84.004139, 32.302615 ], "pop": 6160, "state": "GA" }, { "_id": "31064", "city": "MONTICELLO", "loc": [ -83.714049, 33.311797 ], "pop": 5328, "state": "GA" }, { "_id": "31065", "city": "MONTROSE", "loc": [ -83.16011899999999, 32.561867 ], "pop": 587, "state": "GA" }, { "_id": "31066", "city": "MUSELLA", "loc": [ -84.045591, 32.820228 ], "pop": 121, "state": "GA" }, { "_id": "31068", "city": "OGLETHORPE", "loc": [ -84.08299100000001, 32.284186 ], "pop": 2951, "state": "GA" }, { "_id": "31069", "city": "PERRY", "loc": [ -83.728258, 32.46051 ], "pop": 13945, "state": "GA" }, { "_id": "31070", "city": "PINEHURST", "loc": [ -83.72085300000001, 32.196692 ], "pop": 917, "state": "GA" }, { "_id": "31071", "city": "PINEVIEW", "loc": [ -83.515835, 32.090728 ], "pop": 1154, "state": "GA" }, { "_id": "31072", "city": "PITTS", "loc": [ -83.55788, 31.942533 ], "pop": 1278, "state": "GA" }, { "_id": "31075", "city": "RENTZ", "loc": [ -82.91398700000001, 32.363834 ], "pop": 3037, "state": "GA" }, { "_id": "31076", "city": "REYNOLDS", "loc": [ -84.101134, 32.55411 ], "pop": 2455, "state": "GA" }, { "_id": "31077", "city": "RHINE", "loc": [ -83.19831000000001, 32.011303 ], "pop": 1449, "state": "GA" }, { "_id": "31078", "city": "ROBERTA", "loc": [ -84.045114, 32.722152 ], "pop": 2803, "state": "GA" }, { "_id": "31079", "city": "ROCHELLE", "loc": [ -83.44497800000001, 31.949119 ], "pop": 2585, "state": "GA" }, { "_id": "31081", "city": "RUPERT", "loc": [ -84.273753, 32.432524 ], "pop": 208, "state": "GA" }, { "_id": "31082", "city": "DEEPSTEP", "loc": [ -82.816934, 32.986972 ], "pop": 10459, "state": "GA" }, { "_id": "31085", "city": "SHADY DALE", "loc": [ -83.704031, 33.401353 ], "pop": 1606, "state": "GA" }, { "_id": "31087", "city": "DEVEREUX", "loc": [ -82.98594799999999, 33.265516 ], "pop": 8908, "state": "GA" }, { "_id": "31088", "city": "WARNER ROBINS", "loc": [ -83.641578, 32.593365 ], "pop": 34526, "state": "GA" }, { "_id": "31089", "city": "TENNILLE", "loc": [ -82.840024, 32.9063 ], "pop": 3696, "state": "GA" }, { "_id": "31090", "city": "TOOMSBORO", "loc": [ -83.08442700000001, 32.821895 ], "pop": 1129, "state": "GA" }, { "_id": "31091", "city": "UNADILLA", "loc": [ -83.74467, 32.255766 ], "pop": 2623, "state": "GA" }, { "_id": "31092", "city": "VIENNA", "loc": [ -83.792198, 32.091291 ], "pop": 4689, "state": "GA" }, { "_id": "31093", "city": "WARNER ROBINS", "loc": [ -83.639466, 32.636839 ], "pop": 27107, "state": "GA" }, { "_id": "31094", "city": "WARTHEN", "loc": [ -82.803899, 33.125455 ], "pop": 1188, "state": "GA" }, { "_id": "31096", "city": "WRIGHTSVILLE", "loc": [ -82.726206, 32.721866 ], "pop": 5755, "state": "GA" }, { "_id": "31097", "city": "YATESVILLE", "loc": [ -84.15925300000001, 32.915592 ], "pop": 1188, "state": "GA" }, { "_id": "31098", "city": "ROBINS A F B", "loc": [ -83.58775, 32.60958 ], "pop": 3228, "state": "GA" }, { "_id": "31201", "city": "HUBER", "loc": [ -83.598686, 32.84386 ], "pop": 31882, "state": "GA" }, { "_id": "31204", "city": "MACON", "loc": [ -83.67663400000001, 32.842393 ], "pop": 38186, "state": "GA" }, { "_id": "31206", "city": "WILSON AIRPORT", "loc": [ -83.682303, 32.780758 ], "pop": 42528, "state": "GA" }, { "_id": "31210", "city": "MACON", "loc": [ -83.745537, 32.892565 ], "pop": 31255, "state": "GA" }, { "_id": "31211", "city": "MACON", "loc": [ -83.602062, 32.886905 ], "pop": 16668, "state": "GA" }, { "_id": "31301", "city": "ALLENHURST", "loc": [ -81.618577, 31.774059 ], "pop": 3075, "state": "GA" }, { "_id": "31302", "city": "BLOOMINGDALE", "loc": [ -81.308465, 32.117654 ], "pop": 3297, "state": "GA" }, { "_id": "31303", "city": "CLYO", "loc": [ -81.30857, 32.512646 ], "pop": 400, "state": "GA" }, { "_id": "31304", "city": "CRESCENT", "loc": [ -81.389219, 31.49675 ], "pop": 2362, "state": "GA" }, { "_id": "31305", "city": "DARIEN", "loc": [ -81.431175, 31.382574 ], "pop": 3067, "state": "GA" }, { "_id": "31308", "city": "ELLABELL", "loc": [ -81.498302, 32.127304 ], "pop": 1309, "state": "GA" }, { "_id": "31309", "city": "FLEMING", "loc": [ -81.423165, 31.864477 ], "pop": 548, "state": "GA" }, { "_id": "31312", "city": "GUYTON", "loc": [ -81.389593, 32.31399 ], "pop": 4025, "state": "GA" }, { "_id": "31313", "city": "HINESVILLE", "loc": [ -81.607214, 31.851296 ], "pop": 42962, "state": "GA" }, { "_id": "31314", "city": "FORT STEWART", "loc": [ -81.440489, 31.979085 ], "pop": 0, "state": "GA" }, { "_id": "31316", "city": "LUDOWICI", "loc": [ -81.74531500000001, 31.770477 ], "pop": 6139, "state": "GA" }, { "_id": "31319", "city": "MERIDIAN", "loc": [ -81.42391499999999, 31.411068 ], "pop": 672, "state": "GA" }, { "_id": "31320", "city": "MIDWAY", "loc": [ -81.390897, 31.801803 ], "pop": 4486, "state": "GA" }, { "_id": "31321", "city": "PEMBROKE", "loc": [ -81.553341, 32.157088 ], "pop": 6571, "state": "GA" }, { "_id": "31322", "city": "POOLER", "loc": [ -81.251958, 32.114931 ], "pop": 4036, "state": "GA" }, { "_id": "31323", "city": "RICEBORO", "loc": [ -81.467134, 31.735696 ], "pop": 1737, "state": "GA" }, { "_id": "31324", "city": "RICHMOND HILL", "loc": [ -81.294026, 31.896152 ], "pop": 7455, "state": "GA" }, { "_id": "31326", "city": "RINCON", "loc": [ -81.28777700000001, 32.235632 ], "pop": 14502, "state": "GA" }, { "_id": "31327", "city": "SAPELO ISLAND", "loc": [ -81.267933, 31.421948 ], "pop": 120, "state": "GA" }, { "_id": "31328", "city": "TYBEE ISLAND", "loc": [ -80.850938, 32.006797 ], "pop": 3106, "state": "GA" }, { "_id": "31329", "city": "STILLWELL", "loc": [ -81.326435, 32.4121 ], "pop": 6761, "state": "GA" }, { "_id": "31331", "city": "TOWNSEND", "loc": [ -81.418204, 31.567339 ], "pop": 2413, "state": "GA" }, { "_id": "31401", "city": "SAVANNAH", "loc": [ -81.102394, 32.067631 ], "pop": 37544, "state": "GA" }, { "_id": "31404", "city": "STATE COLLEGE", "loc": [ -81.068704, 32.044178 ], "pop": 33927, "state": "GA" }, { "_id": "31405", "city": "SAVANNAH", "loc": [ -81.12419199999999, 32.039119 ], "pop": 28739, "state": "GA" }, { "_id": "31406", "city": "SAVANNAH", "loc": [ -81.097893, 31.988993 ], "pop": 34024, "state": "GA" }, { "_id": "31407", "city": "PORT WENTWORTH", "loc": [ -81.162891, 32.148075 ], "pop": 2883, "state": "GA" }, { "_id": "31408", "city": "GARDEN CITY", "loc": [ -81.168181, 32.109245 ], "pop": 12548, "state": "GA" }, { "_id": "31409", "city": "SAVANNAH", "loc": [ -81.158371, 32.002104 ], "pop": 3509, "state": "GA" }, { "_id": "31410", "city": "SAVANNAH", "loc": [ -80.983859, 32.016188 ], "pop": 15808, "state": "GA" }, { "_id": "31411", "city": "SAVANNAH", "loc": [ -81.03807399999999, 31.926801 ], "pop": 4707, "state": "GA" }, { "_id": "31419", "city": "M M", "loc": [ -81.177387, 31.985149 ], "pop": 32901, "state": "GA" }, { "_id": "31501", "city": "OKEFENOKEE", "loc": [ -82.364512, 31.219686 ], "pop": 33068, "state": "GA" }, { "_id": "31510", "city": "ALMA", "loc": [ -82.4633, 31.546525 ], "pop": 9566, "state": "GA" }, { "_id": "31512", "city": "AMBROSE", "loc": [ -82.997637, 31.536712 ], "pop": 2853, "state": "GA" }, { "_id": "31513", "city": "BAXLEY", "loc": [ -82.348643, 31.783663 ], "pop": 14099, "state": "GA" }, { "_id": "31516", "city": "BLACKSHEAR", "loc": [ -82.261708, 31.293063 ], "pop": 9612, "state": "GA" }, { "_id": "31518", "city": "BRISTOL", "loc": [ -82.249594, 31.40278 ], "pop": 996, "state": "GA" }, { "_id": "31519", "city": "BROXTON", "loc": [ -82.904954, 31.648426 ], "pop": 2915, "state": "GA" }, { "_id": "31520", "city": "GLYNCO", "loc": [ -81.493045, 31.169652 ], "pop": 21343, "state": "GA" }, { "_id": "31522", "city": "SAINT SIMONS ISL", "loc": [ -81.38242099999999, 31.16916 ], "pop": 12924, "state": "GA" }, { "_id": "31525", "city": "BRUNSWICK", "loc": [ -81.511365, 31.230411 ], "pop": 27079, "state": "GA" }, { "_id": "31527", "city": "JEKYLL ISLAND", "loc": [ -81.41280999999999, 31.074049 ], "pop": 1150, "state": "GA" }, { "_id": "31532", "city": "DENTON", "loc": [ -82.720146, 31.745842 ], "pop": 1457, "state": "GA" }, { "_id": "31533", "city": "DOUGLAS", "loc": [ -82.846468, 31.497287 ], "pop": 19607, "state": "GA" }, { "_id": "31537", "city": "FOLKSTON", "loc": [ -82.011617, 30.850838 ], "pop": 6486, "state": "GA" }, { "_id": "31539", "city": "HAZLEHURST", "loc": [ -82.590947, 31.860569 ], "pop": 10577, "state": "GA" }, { "_id": "31542", "city": "HOBOKEN", "loc": [ -82.183847, 31.183777 ], "pop": 3481, "state": "GA" }, { "_id": "31543", "city": "HORTENSE", "loc": [ -81.95956099999999, 31.319949 ], "pop": 968, "state": "GA" }, { "_id": "31544", "city": "JACKSONVILLE", "loc": [ -82.975003, 31.848079 ], "pop": 905, "state": "GA" }, { "_id": "31545", "city": "JESUP", "loc": [ -81.88706000000001, 31.604326 ], "pop": 17180, "state": "GA" }, { "_id": "31548", "city": "KINGSLAND", "loc": [ -81.707483, 30.797681 ], "pop": 8781, "state": "GA" }, { "_id": "31549", "city": "LUMBER CITY", "loc": [ -82.707312, 31.925124 ], "pop": 2036, "state": "GA" }, { "_id": "31550", "city": "MANOR", "loc": [ -82.574173, 31.108829 ], "pop": 794, "state": "GA" }, { "_id": "31551", "city": "MERSHON", "loc": [ -82.216995, 31.478279 ], "pop": 365, "state": "GA" }, { "_id": "31552", "city": "MILLWOOD", "loc": [ -82.644148, 31.250566 ], "pop": 500, "state": "GA" }, { "_id": "31553", "city": "NAHUNTA", "loc": [ -81.972212, 31.182652 ], "pop": 3158, "state": "GA" }, { "_id": "31554", "city": "NICHOLLS", "loc": [ -82.603207, 31.449812 ], "pop": 3615, "state": "GA" }, { "_id": "31555", "city": "ODUM", "loc": [ -81.99430099999999, 31.699916 ], "pop": 2851, "state": "GA" }, { "_id": "31557", "city": "PATTERSON", "loc": [ -82.127444, 31.390338 ], "pop": 2355, "state": "GA" }, { "_id": "31558", "city": "SAINT MARYS", "loc": [ -81.56521100000001, 30.773467 ], "pop": 15655, "state": "GA" }, { "_id": "31560", "city": "SCREVEN", "loc": [ -82.039742, 31.516846 ], "pop": 2325, "state": "GA" }, { "_id": "31563", "city": "SURRENCY", "loc": [ -82.198218, 31.648931 ], "pop": 1643, "state": "GA" }, { "_id": "31565", "city": "WAVERLY", "loc": [ -81.56967, 31.042672 ], "pop": 331, "state": "GA" }, { "_id": "31566", "city": "WAYNESVILLE", "loc": [ -81.803928, 31.244792 ], "pop": 3248, "state": "GA" }, { "_id": "31567", "city": "WEST GREEN", "loc": [ -82.756417, 31.592271 ], "pop": 1940, "state": "GA" }, { "_id": "31568", "city": "WHITE OAK", "loc": [ -81.80823700000001, 31.034037 ], "pop": 892, "state": "GA" }, { "_id": "31569", "city": "WOODBINE", "loc": [ -81.678313, 30.943692 ], "pop": 4508, "state": "GA" }, { "_id": "31601", "city": "CLYATTVILLE", "loc": [ -83.27716599999999, 30.810578 ], "pop": 32232, "state": "GA" }, { "_id": "31602", "city": "BEMISS", "loc": [ -83.27329899999999, 30.890268 ], "pop": 32292, "state": "GA" }, { "_id": "31620", "city": "ADEL", "loc": [ -83.421346, 31.125143 ], "pop": 9661, "state": "GA" }, { "_id": "31622", "city": "ALAPAHA", "loc": [ -83.21321, 31.394027 ], "pop": 1675, "state": "GA" }, { "_id": "31624", "city": "AXSON", "loc": [ -82.731945, 31.303455 ], "pop": 912, "state": "GA" }, { "_id": "31625", "city": "BARNEY", "loc": [ -83.521934, 31.007424 ], "pop": 895, "state": "GA" }, { "_id": "31626", "city": "BOSTON", "loc": [ -83.797085, 30.785547 ], "pop": 2808, "state": "GA" }, { "_id": "31629", "city": "DIXIE", "loc": [ -83.67918, 30.772213 ], "pop": 1462, "state": "GA" }, { "_id": "31630", "city": "DU PONT", "loc": [ -82.855518, 30.999996 ], "pop": 502, "state": "GA" }, { "_id": "31631", "city": "FARGO", "loc": [ -82.580056, 30.716587 ], "pop": 560, "state": "GA" }, { "_id": "31632", "city": "HAHIRA", "loc": [ -83.357366, 30.941593 ], "pop": 6921, "state": "GA" }, { "_id": "31634", "city": "COGDELL", "loc": [ -82.743103, 31.044991 ], "pop": 5098, "state": "GA" }, { "_id": "31635", "city": "LAKELAND", "loc": [ -83.088859, 31.038107 ], "pop": 4289, "state": "GA" }, { "_id": "31636", "city": "LAKE PARK", "loc": [ -83.175293, 30.690615 ], "pop": 4491, "state": "GA" }, { "_id": "31637", "city": "LENOX", "loc": [ -83.44813499999999, 31.266405 ], "pop": 1993, "state": "GA" }, { "_id": "31638", "city": "MORVEN", "loc": [ -83.44979600000001, 30.893733 ], "pop": 3416, "state": "GA" }, { "_id": "31639", "city": "NASHVILLE", "loc": [ -83.23194599999999, 31.207379 ], "pop": 8396, "state": "GA" }, { "_id": "31641", "city": "NAYLOR", "loc": [ -83.12236799999999, 30.89846 ], "pop": 1110, "state": "GA" }, { "_id": "31642", "city": "PEARSON", "loc": [ -82.85909599999999, 31.310583 ], "pop": 3590, "state": "GA" }, { "_id": "31643", "city": "QUITMAN", "loc": [ -83.556748, 30.779699 ], "pop": 8028, "state": "GA" }, { "_id": "31645", "city": "RAY CITY", "loc": [ -83.21428299999999, 31.08247 ], "pop": 1859, "state": "GA" }, { "_id": "31646", "city": "SAINT GEORGE", "loc": [ -82.083367, 30.559161 ], "pop": 2010, "state": "GA" }, { "_id": "31647", "city": "SPARKS", "loc": [ -83.447586, 31.178984 ], "pop": 1772, "state": "GA" }, { "_id": "31648", "city": "STATENVILLE", "loc": [ -82.97986299999999, 30.725503 ], "pop": 1269, "state": "GA" }, { "_id": "31649", "city": "STOCKTON", "loc": [ -83.013944, 31.022865 ], "pop": 1242, "state": "GA" }, { "_id": "31650", "city": "WILLACOOCHEE", "loc": [ -83.04493100000001, 31.345481 ], "pop": 1704, "state": "GA" }, { "_id": "31701", "city": "ALBANY", "loc": [ -84.161923, 31.567783 ], "pop": 25698, "state": "GA" }, { "_id": "31704", "city": "MARINE CORPS LOG", "loc": [ -84.05081199999999, 31.550099 ], "pop": 1306, "state": "GA" }, { "_id": "31705", "city": "BRIDGEBORO", "loc": [ -84.09008900000001, 31.550851 ], "pop": 35997, "state": "GA" }, { "_id": "31707", "city": "ALBANY", "loc": [ -84.211834, 31.578908 ], "pop": 36439, "state": "GA" }, { "_id": "31709", "city": "GEORGIA SOUTHWES", "loc": [ -84.224729, 32.07077 ], "pop": 23590, "state": "GA" }, { "_id": "31711", "city": "ANDERSONVILLE", "loc": [ -84.10101, 32.129907 ], "pop": 984, "state": "GA" }, { "_id": "31712", "city": "ARABI", "loc": [ -83.72856, 31.862923 ], "pop": 1349, "state": "GA" }, { "_id": "31713", "city": "ARLINGTON", "loc": [ -84.72572, 31.445597 ], "pop": 1402, "state": "GA" }, { "_id": "31714", "city": "ASHBURN", "loc": [ -83.660775, 31.705877 ], "pop": 6047, "state": "GA" }, { "_id": "31715", "city": "ATTAPULGUS", "loc": [ -84.486008, 30.750639 ], "pop": 3131, "state": "GA" }, { "_id": "31716", "city": "BACONTON", "loc": [ -84.11345, 31.387804 ], "pop": 2566, "state": "GA" }, { "_id": "31717", "city": "BAINBRIDGE", "loc": [ -84.573975, 30.897865 ], "pop": 17739, "state": "GA" }, { "_id": "31723", "city": "BLAKELY", "loc": [ -84.93528499999999, 31.371854 ], "pop": 8405, "state": "GA" }, { "_id": "31724", "city": "BLUFFTON", "loc": [ -84.87717499999999, 31.556189 ], "pop": 799, "state": "GA" }, { "_id": "31725", "city": "BRINSON", "loc": [ -84.667112, 30.960957 ], "pop": 2877, "state": "GA" }, { "_id": "31726", "city": "BRONWOOD", "loc": [ -84.35938899999999, 31.821591 ], "pop": 1075, "state": "GA" }, { "_id": "31728", "city": "CAIRO", "loc": [ -84.196246, 30.892462 ], "pop": 15393, "state": "GA" }, { "_id": "31729", "city": "CALVARY", "loc": [ -84.32267, 30.747036 ], "pop": 1442, "state": "GA" }, { "_id": "31730", "city": "CAMILLA", "loc": [ -84.22968299999999, 31.219915 ], "pop": 9207, "state": "GA" }, { "_id": "31733", "city": "CHULA", "loc": [ -83.550864, 31.543855 ], "pop": 2425, "state": "GA" }, { "_id": "31734", "city": "CLIMAX", "loc": [ -84.443217, 30.85731 ], "pop": 1764, "state": "GA" }, { "_id": "31735", "city": "COBB", "loc": [ -83.95808700000001, 31.961708 ], "pop": 881, "state": "GA" }, { "_id": "31736", "city": "COLEMAN", "loc": [ -84.874471, 31.656831 ], "pop": 359, "state": "GA" }, { "_id": "31737", "city": "COLQUITT", "loc": [ -84.730896, 31.161871 ], "pop": 6277, "state": "GA" }, { "_id": "31738", "city": "COOLIDGE", "loc": [ -83.87524500000001, 30.985908 ], "pop": 1970, "state": "GA" }, { "_id": "31740", "city": "CUTHBERT", "loc": [ -84.78887400000001, 31.769073 ], "pop": 5708, "state": "GA" }, { "_id": "31741", "city": "DAMASCUS", "loc": [ -84.72004699999999, 31.341528 ], "pop": 1534, "state": "GA" }, { "_id": "31742", "city": "GRAVES", "loc": [ -84.43078199999999, 31.759846 ], "pop": 8731, "state": "GA" }, { "_id": "31743", "city": "DE SOTO", "loc": [ -84.027101, 31.950186 ], "pop": 112, "state": "GA" }, { "_id": "31744", "city": "DOERUN", "loc": [ -83.925316, 31.313647 ], "pop": 1738, "state": "GA" }, { "_id": "31745", "city": "DONALSONVILLE", "loc": [ -84.887024, 30.981801 ], "pop": 7468, "state": "GA" }, { "_id": "31746", "city": "EDISON", "loc": [ -84.745626, 31.564979 ], "pop": 1711, "state": "GA" }, { "_id": "31749", "city": "ENIGMA", "loc": [ -83.35515700000001, 31.373599 ], "pop": 2223, "state": "GA" }, { "_id": "31750", "city": "FITZGERALD", "loc": [ -83.249534, 31.724769 ], "pop": 16245, "state": "GA" }, { "_id": "31751", "city": "FORT GAINES", "loc": [ -85.03937500000001, 31.646353 ], "pop": 2565, "state": "GA" }, { "_id": "31754", "city": "GEORGETOWN", "loc": [ -85.07113699999999, 31.884763 ], "pop": 1415, "state": "GA" }, { "_id": "31756", "city": "HARTSFIELD", "loc": [ -83.970364, 31.217316 ], "pop": 285, "state": "GA" }, { "_id": "31759", "city": "IRON CITY", "loc": [ -84.796632, 30.994728 ], "pop": 1542, "state": "GA" }, { "_id": "31760", "city": "IRWINVILLE", "loc": [ -83.401708, 31.654238 ], "pop": 1887, "state": "GA" }, { "_id": "31761", "city": "JAKIN", "loc": [ -84.994845, 31.175064 ], "pop": 1918, "state": "GA" }, { "_id": "31762", "city": "LEARY", "loc": [ -84.509486, 31.505924 ], "pop": 1017, "state": "GA" }, { "_id": "31763", "city": "LEESBURG", "loc": [ -84.159263, 31.681161 ], "pop": 14641, "state": "GA" }, { "_id": "31764", "city": "LESLIE", "loc": [ -84.07834, 31.953952 ], "pop": 1273, "state": "GA" }, { "_id": "31765", "city": "MEIGS", "loc": [ -84.082375, 31.062536 ], "pop": 1705, "state": "GA" }, { "_id": "31766", "city": "MORGAN", "loc": [ -84.61779799999999, 31.556557 ], "pop": 883, "state": "GA" }, { "_id": "31767", "city": "SPRINGVALE", "loc": [ -85.05725099999999, 31.823432 ], "pop": 850, "state": "GA" }, { "_id": "31768", "city": "MOULTRIE", "loc": [ -83.764089, 31.179244 ], "pop": 34351, "state": "GA" }, { "_id": "31770", "city": "NEWTON", "loc": [ -84.441107, 31.313426 ], "pop": 3615, "state": "GA" }, { "_id": "31771", "city": "NORMAN PARK", "loc": [ -83.94044, 31.069128 ], "pop": 301, "state": "GA" }, { "_id": "31772", "city": "OAKFIELD", "loc": [ -83.97059, 31.779768 ], "pop": 149, "state": "GA" }, { "_id": "31773", "city": "OCHLOCKNEE", "loc": [ -84.0326, 30.959407 ], "pop": 2665, "state": "GA" }, { "_id": "31774", "city": "OCILLA", "loc": [ -83.256542, 31.592944 ], "pop": 5784, "state": "GA" }, { "_id": "31775", "city": "OMEGA", "loc": [ -83.593936, 31.360432 ], "pop": 2154, "state": "GA" }, { "_id": "31777", "city": "PARROTT", "loc": [ -84.501152, 31.872016 ], "pop": 886, "state": "GA" }, { "_id": "31778", "city": "PAVO", "loc": [ -83.74085599999999, 30.940142 ], "pop": 3573, "state": "GA" }, { "_id": "31779", "city": "PELHAM", "loc": [ -84.156367, 31.127233 ], "pop": 7123, "state": "GA" }, { "_id": "31780", "city": "PLAINS", "loc": [ -84.358638, 32.033908 ], "pop": 3377, "state": "GA" }, { "_id": "31781", "city": "POULAN", "loc": [ -83.761554, 31.467206 ], "pop": 3119, "state": "GA" }, { "_id": "31783", "city": "REBECCA", "loc": [ -83.523478, 31.797921 ], "pop": 630, "state": "GA" }, { "_id": "31784", "city": "SALE CITY", "loc": [ -84.04219500000001, 31.260004 ], "pop": 1379, "state": "GA" }, { "_id": "31786", "city": "SHELLMAN", "loc": [ -84.61661599999999, 31.743407 ], "pop": 1900, "state": "GA" }, { "_id": "31787", "city": "SMITHVILLE", "loc": [ -84.22706599999999, 31.884692 ], "pop": 1570, "state": "GA" }, { "_id": "31789", "city": "SUMNER", "loc": [ -83.724463, 31.53925 ], "pop": 1125, "state": "GA" }, { "_id": "31790", "city": "SYCAMORE", "loc": [ -83.606363, 31.655329 ], "pop": 2026, "state": "GA" }, { "_id": "31791", "city": "SYLVESTER", "loc": [ -83.860731, 31.539268 ], "pop": 9573, "state": "GA" }, { "_id": "31792", "city": "THOMASVILLE", "loc": [ -83.969616, 30.838543 ], "pop": 28319, "state": "GA" }, { "_id": "31794", "city": "ABAC", "loc": [ -83.498867, 31.451722 ], "pop": 27906, "state": "GA" }, { "_id": "31795", "city": "TY TY", "loc": [ -83.621989, 31.45595 ], "pop": 2513, "state": "GA" }, { "_id": "31796", "city": "WARWICK", "loc": [ -83.920092, 31.734495 ], "pop": 2650, "state": "GA" }, { "_id": "31797", "city": "WHIGHAM", "loc": [ -84.315771, 30.90701 ], "pop": 2987, "state": "GA" }, { "_id": "31798", "city": "WRAY", "loc": [ -83.107484, 31.595229 ], "pop": 978, "state": "GA" }, { "_id": "31801", "city": "JUNIPER", "loc": [ -84.612951, 32.565562 ], "pop": 1407, "state": "GA" }, { "_id": "31803", "city": "TAZEWELL", "loc": [ -84.52734700000001, 32.354198 ], "pop": 5590, "state": "GA" }, { "_id": "31804", "city": "CATAULA", "loc": [ -84.92069100000001, 32.624246 ], "pop": 1108, "state": "GA" }, { "_id": "31805", "city": "CUSSETA", "loc": [ -84.764537, 32.299026 ], "pop": 2290, "state": "GA" }, { "_id": "31806", "city": "ELLAVILLE", "loc": [ -84.30386799999999, 32.23901 ], "pop": 3599, "state": "GA" }, { "_id": "31807", "city": "ELLERSLIE", "loc": [ -84.877197, 32.661718 ], "pop": 2153, "state": "GA" }, { "_id": "31808", "city": "FORTSON", "loc": [ -85.001654, 32.628841 ], "pop": 1780, "state": "GA" }, { "_id": "31811", "city": "HAMILTON", "loc": [ -84.884753, 32.741795 ], "pop": 1587, "state": "GA" }, { "_id": "31812", "city": "JUNCTION CITY", "loc": [ -84.45741, 32.608046 ], "pop": 472, "state": "GA" }, { "_id": "31815", "city": "LUMPKIN", "loc": [ -84.802227, 32.043465 ], "pop": 2144, "state": "GA" }, { "_id": "31816", "city": "MANCHESTER", "loc": [ -84.63116599999999, 32.8721 ], "pop": 7721, "state": "GA" }, { "_id": "31820", "city": "MIDLAND", "loc": [ -84.855851, 32.561587 ], "pop": 4725, "state": "GA" }, { "_id": "31821", "city": "OMAHA", "loc": [ -84.900792, 32.165234 ], "pop": 884, "state": "GA" }, { "_id": "31822", "city": "PINE MOUNTAIN", "loc": [ -84.89595300000001, 32.873488 ], "pop": 3548, "state": "GA" }, { "_id": "31823", "city": "PINE MOUNTAIN VA", "loc": [ -84.823874, 32.791849 ], "pop": 887, "state": "GA" }, { "_id": "31824", "city": "PRESTON", "loc": [ -84.548918, 32.074031 ], "pop": 1690, "state": "GA" }, { "_id": "31825", "city": "RICHLAND", "loc": [ -84.666724, 32.084578 ], "pop": 2626, "state": "GA" }, { "_id": "31826", "city": "SHILOH", "loc": [ -84.74117099999999, 32.806678 ], "pop": 1478, "state": "GA" }, { "_id": "31827", "city": "TALBOTTON", "loc": [ -84.546206, 32.679702 ], "pop": 2324, "state": "GA" }, { "_id": "31829", "city": "UPATOI", "loc": [ -84.74481900000001, 32.560057 ], "pop": 725, "state": "GA" }, { "_id": "31830", "city": "WARM SPRINGS", "loc": [ -84.82172799999999, 32.895558 ], "pop": 819, "state": "GA" }, { "_id": "31831", "city": "WAVERLY HALL", "loc": [ -84.742463, 32.679326 ], "pop": 2323, "state": "GA" }, { "_id": "31832", "city": "WESTON", "loc": [ -84.575579, 31.963665 ], "pop": 573, "state": "GA" }, { "_id": "31833", "city": "WEST POINT", "loc": [ -85.119714, 32.833683 ], "pop": 8499, "state": "GA" }, { "_id": "31836", "city": "WOODLAND", "loc": [ -84.595187, 32.806066 ], "pop": 2377, "state": "GA" }, { "_id": "31901", "city": "COLUMBUS", "loc": [ -84.979456, 32.473035 ], "pop": 9694, "state": "GA" }, { "_id": "31903", "city": "COLUMBUS", "loc": [ -84.948127, 32.424513 ], "pop": 25362, "state": "GA" }, { "_id": "31904", "city": "COLUMBUS", "loc": [ -84.978475, 32.516091 ], "pop": 29254, "state": "GA" }, { "_id": "31905", "city": "CUSTER TERRACE", "loc": [ -84.94526399999999, 32.369728 ], "pop": 22869, "state": "GA" }, { "_id": "31906", "city": "COLUMBUS", "loc": [ -84.94842199999999, 32.463819 ], "pop": 26061, "state": "GA" }, { "_id": "31907", "city": "COLUMBUS", "loc": [ -84.89798999999999, 32.477909 ], "pop": 54915, "state": "GA" }, { "_id": "31909", "city": "COLUMBUS", "loc": [ -84.927404, 32.536913 ], "pop": 20880, "state": "GA" }, { "_id": "32008", "city": "BRANFORD", "loc": [ -82.899288, 29.939472 ], "pop": 2439, "state": "FL" }, { "_id": "32009", "city": "BRYCEVILLE", "loc": [ -81.972397, 30.419274 ], "pop": 1875, "state": "FL" }, { "_id": "32011", "city": "CALLAHAN", "loc": [ -81.814465, 30.551958 ], "pop": 9111, "state": "FL" }, { "_id": "32013", "city": "DAY", "loc": [ -83.28505199999999, 30.149666 ], "pop": 1567, "state": "FL" }, { "_id": "32033", "city": "ELKTON", "loc": [ -81.46199, 29.788243 ], "pop": 1557, "state": "FL" }, { "_id": "32034", "city": "AMELIA ISLAND", "loc": [ -81.468829, 30.635388 ], "pop": 19016, "state": "FL" }, { "_id": "32038", "city": "FORT WHITE", "loc": [ -82.687938, 29.92073 ], "pop": 3439, "state": "FL" }, { "_id": "32040", "city": "GLEN SAINT MARY", "loc": [ -82.20405599999999, 30.286058 ], "pop": 6467, "state": "FL" }, { "_id": "32043", "city": "GREEN COVE SPRIN", "loc": [ -81.72618199999999, 30.00425 ], "pop": 16033, "state": "FL" }, { "_id": "32044", "city": "HAMPTON", "loc": [ -82.148347, 29.857511 ], "pop": 1274, "state": "FL" }, { "_id": "32046", "city": "HILLIARD", "loc": [ -81.93453, 30.688367 ], "pop": 6486, "state": "FL" }, { "_id": "32052", "city": "JASPER", "loc": [ -82.932186, 30.502914 ], "pop": 6588, "state": "FL" }, { "_id": "32053", "city": "JENNINGS", "loc": [ -83.13497099999999, 30.548243 ], "pop": 2977, "state": "FL" }, { "_id": "32054", "city": "LAKE BUTLER", "loc": [ -82.382796, 30.003485 ], "pop": 8658, "state": "FL" }, { "_id": "32055", "city": "LAKE CITY", "loc": [ -82.659888, 30.165239 ], "pop": 38018, "state": "FL" }, { "_id": "32058", "city": "LAWTEY", "loc": [ -82.10554399999999, 30.047164 ], "pop": 4108, "state": "FL" }, { "_id": "32059", "city": "LEE", "loc": [ -83.284392, 30.397863 ], "pop": 1260, "state": "FL" }, { "_id": "32060", "city": "BOYS RANCH", "loc": [ -83.02499400000001, 30.286622 ], "pop": 19075, "state": "FL" }, { "_id": "32061", "city": "LULU", "loc": [ -82.538481, 30.07544 ], "pop": 295, "state": "FL" }, { "_id": "32062", "city": "MC ALPIN", "loc": [ -82.966182, 30.150899 ], "pop": 2062, "state": "FL" }, { "_id": "32063", "city": "MACCLENNY", "loc": [ -82.132475, 30.273671 ], "pop": 9749, "state": "FL" }, { "_id": "32065", "city": "ORANGE PARK", "loc": [ -81.774199, 30.138233 ], "pop": 19248, "state": "FL" }, { "_id": "32066", "city": "MAYO", "loc": [ -83.146208, 30.039979 ], "pop": 3475, "state": "FL" }, { "_id": "32068", "city": "MIDDLEBURG", "loc": [ -81.864476, 30.083984 ], "pop": 23245, "state": "FL" }, { "_id": "32071", "city": "O BRIEN", "loc": [ -82.93004999999999, 30.038114 ], "pop": 1305, "state": "FL" }, { "_id": "32073", "city": "ORANGE PARK", "loc": [ -81.72906999999999, 30.16369 ], "pop": 37281, "state": "FL" }, { "_id": "32082", "city": "PONTE VEDRA BEAC", "loc": [ -81.386383, 30.215326 ], "pop": 14727, "state": "FL" }, { "_id": "32083", "city": "RAIFORD", "loc": [ -82.20012, 30.070379 ], "pop": 1594, "state": "FL" }, { "_id": "32084", "city": "SAINT AUGUSTINE", "loc": [ -81.298367, 29.880457 ], "pop": 24906, "state": "FL" }, { "_id": "32086", "city": "SAINT AUGUSTINE", "loc": [ -81.323734, 29.828514 ], "pop": 16939, "state": "FL" }, { "_id": "32087", "city": "SANDERSON", "loc": [ -82.33774099999999, 30.302536 ], "pop": 2270, "state": "FL" }, { "_id": "32091", "city": "STARKE", "loc": [ -82.11851799999999, 29.958299 ], "pop": 15058, "state": "FL" }, { "_id": "32092", "city": "SAINT AUGUSTINE", "loc": [ -81.52637900000001, 29.947511 ], "pop": 4702, "state": "FL" }, { "_id": "32094", "city": "WELLBORN", "loc": [ -82.850532, 30.179624 ], "pop": 1621, "state": "FL" }, { "_id": "32095", "city": "SAINT AUGUSTINE", "loc": [ -81.34762600000001, 29.905726 ], "pop": 12132, "state": "FL" }, { "_id": "32096", "city": "WHITE SPRINGS", "loc": [ -82.776453, 30.338749 ], "pop": 1671, "state": "FL" }, { "_id": "32097", "city": "YULEE", "loc": [ -81.590603, 30.622225 ], "pop": 7453, "state": "FL" }, { "_id": "32102", "city": "ASTOR", "loc": [ -81.539929, 29.165031 ], "pop": 2092, "state": "FL" }, { "_id": "32110", "city": "BUNNELL", "loc": [ -81.324431, 29.45616 ], "pop": 4925, "state": "FL" }, { "_id": "32112", "city": "CRESCENT CITY", "loc": [ -81.557909, 29.445438 ], "pop": 7481, "state": "FL" }, { "_id": "32113", "city": "CITRA", "loc": [ -82.106222, 29.39182 ], "pop": 3340, "state": "FL" }, { "_id": "32114", "city": "DAYTONA BEACH", "loc": [ -81.037071, 29.201168 ], "pop": 34235, "state": "FL" }, { "_id": "32117", "city": "HOLLY HILL", "loc": [ -81.054698, 29.236006 ], "pop": 22599, "state": "FL" }, { "_id": "32118", "city": "DAYTONA BEACH", "loc": [ -81.009469, 29.221874 ], "pop": 17009, "state": "FL" }, { "_id": "32119", "city": "DUNLAWTON", "loc": [ -81.022142, 29.152526 ], "pop": 36500, "state": "FL" }, { "_id": "32124", "city": "PORT ORANGE", "loc": [ -81.106746, 29.122456 ], "pop": 7360, "state": "FL" }, { "_id": "32127", "city": "PORT ORANGE", "loc": [ -80.98835099999999, 29.1124 ], "pop": 25925, "state": "FL" }, { "_id": "32130", "city": "DE LEON SPRINGS", "loc": [ -81.34876199999999, 29.116592 ], "pop": 2267, "state": "FL" }, { "_id": "32131", "city": "EAST PALATKA", "loc": [ -81.587879, 29.660861 ], "pop": 5851, "state": "FL" }, { "_id": "32132", "city": "EDGEWATER", "loc": [ -80.91034399999999, 28.981801 ], "pop": 6690, "state": "FL" }, { "_id": "32134", "city": "SALT SPRINGS", "loc": [ -81.88775699999999, 29.279554 ], "pop": 14324, "state": "FL" }, { "_id": "32136", "city": "FLAGLER BEACH", "loc": [ -81.13028799999999, 29.474978 ], "pop": 4608, "state": "FL" }, { "_id": "32137", "city": "PALM COAST", "loc": [ -81.21899000000001, 29.556515 ], "pop": 18194, "state": "FL" }, { "_id": "32139", "city": "GEORGETOWN", "loc": [ -81.629783, 29.403315 ], "pop": 1839, "state": "FL" }, { "_id": "32140", "city": "FLORAHOME", "loc": [ -81.862224, 29.758105 ], "pop": 1475, "state": "FL" }, { "_id": "32141", "city": "EDGEWATER", "loc": [ -80.896869, 28.945481 ], "pop": 11379, "state": "FL" }, { "_id": "32145", "city": "HASTINGS", "loc": [ -81.490908, 29.705147 ], "pop": 2189, "state": "FL" }, { "_id": "32148", "city": "INTERLACHEN", "loc": [ -81.889432, 29.627001 ], "pop": 15416, "state": "FL" }, { "_id": "32159", "city": "LADY LAKE", "loc": [ -81.92559799999999, 28.929939 ], "pop": 11493, "state": "FL" }, { "_id": "32168", "city": "NEW SMYRNA BEACH", "loc": [ -80.95843600000001, 29.024672 ], "pop": 17624, "state": "FL" }, { "_id": "32169", "city": "NEW SMYRNA BEACH", "loc": [ -80.888463, 29.017196 ], "pop": 9169, "state": "FL" }, { "_id": "32174", "city": "ORMOND BEACH", "loc": [ -81.088216, 29.283305 ], "pop": 34477, "state": "FL" }, { "_id": "32176", "city": "ORMOND BEACH", "loc": [ -81.058432, 29.322192 ], "pop": 15383, "state": "FL" }, { "_id": "32177", "city": "PALATKA", "loc": [ -81.659452, 29.657748 ], "pop": 24263, "state": "FL" }, { "_id": "32179", "city": "OCKLAWAHA", "loc": [ -81.88569, 29.064308 ], "pop": 4385, "state": "FL" }, { "_id": "32180", "city": "PIERSON", "loc": [ -81.43532999999999, 29.222596 ], "pop": 7341, "state": "FL" }, { "_id": "32181", "city": "POMONA PARK", "loc": [ -81.63073900000001, 29.502106 ], "pop": 1006, "state": "FL" }, { "_id": "32187", "city": "SAN MATEO", "loc": [ -81.5921, 29.588827 ], "pop": 1864, "state": "FL" }, { "_id": "32189", "city": "SATSUMA", "loc": [ -81.640596, 29.559354 ], "pop": 3490, "state": "FL" }, { "_id": "32190", "city": "SEVILLE", "loc": [ -81.527894, 29.320084 ], "pop": 436, "state": "FL" }, { "_id": "32195", "city": "WEIRSDALE", "loc": [ -81.893168, 28.978182 ], "pop": 3034, "state": "FL" }, { "_id": "32202", "city": "JACKSONVILLE", "loc": [ -81.651672, 30.329882 ], "pop": 4724, "state": "FL" }, { "_id": "32204", "city": "JACKSONVILLE", "loc": [ -81.685445, 30.318899 ], "pop": 8839, "state": "FL" }, { "_id": "32205", "city": "JACKSONVILLE", "loc": [ -81.72203399999999, 30.317236 ], "pop": 46463, "state": "FL" }, { "_id": "32206", "city": "JACKSONVILLE", "loc": [ -81.648769, 30.351073 ], "pop": 23301, "state": "FL" }, { "_id": "32207", "city": "JACKSONVILLE", "loc": [ -81.63205000000001, 30.290766 ], "pop": 35661, "state": "FL" }, { "_id": "32208", "city": "JACKSONVILLE", "loc": [ -81.688939, 30.393664 ], "pop": 35615, "state": "FL" }, { "_id": "32209", "city": "JACKSONVILLE", "loc": [ -81.691974, 30.35841 ], "pop": 42856, "state": "FL" }, { "_id": "32210", "city": "JACKSONVILLE", "loc": [ -81.74731199999999, 30.268743 ], "pop": 54548, "state": "FL" }, { "_id": "32211", "city": "JACKSONVILLE", "loc": [ -81.58824799999999, 30.348034 ], "pop": 54199, "state": "FL" }, { "_id": "32212", "city": "JACKSONVILLE N A", "loc": [ -81.68848, 30.220905 ], "pop": 2517, "state": "FL" }, { "_id": "32215", "city": "CECIL FIELD NAS", "loc": [ -81.66314199999999, 30.23295 ], "pop": 0, "state": "FL" }, { "_id": "32216", "city": "JACKSONVILLE", "loc": [ -81.547387, 30.293907 ], "pop": 58867, "state": "FL" }, { "_id": "32217", "city": "JACKSONVILLE", "loc": [ -81.616956, 30.240678 ], "pop": 19356, "state": "FL" }, { "_id": "32218", "city": "JACKSONVILLE", "loc": [ -81.662631, 30.45067 ], "pop": 30493, "state": "FL" }, { "_id": "32219", "city": "JACKSONVILLE", "loc": [ -81.763451, 30.403365 ], "pop": 9570, "state": "FL" }, { "_id": "32220", "city": "JACKSONVILLE", "loc": [ -81.817572, 30.329003 ], "pop": 9389, "state": "FL" }, { "_id": "32221", "city": "JACKSONVILLE", "loc": [ -81.82023100000001, 30.283707 ], "pop": 18244, "state": "FL" }, { "_id": "32222", "city": "JACKSONVILLE", "loc": [ -81.813081, 30.229176 ], "pop": 4093, "state": "FL" }, { "_id": "32223", "city": "JACKSONVILLE", "loc": [ -81.62996099999999, 30.154817 ], "pop": 19120, "state": "FL" }, { "_id": "32224", "city": "JACKSONVILLE", "loc": [ -81.440427, 30.303076 ], "pop": 2535, "state": "FL" }, { "_id": "32225", "city": "JACKSONVILLE", "loc": [ -81.506092, 30.350968 ], "pop": 26551, "state": "FL" }, { "_id": "32226", "city": "JACKSONVILLE", "loc": [ -81.544808, 30.473485 ], "pop": 6880, "state": "FL" }, { "_id": "32227", "city": "JACKSONVILLE BEA", "loc": [ -81.405424, 30.388275 ], "pop": 9055, "state": "FL" }, { "_id": "32233", "city": "ATLANTIC BEACH", "loc": [ -81.41586599999999, 30.348258 ], "pop": 23412, "state": "FL" }, { "_id": "32234", "city": "BALDWIN", "loc": [ -81.978345, 30.229562 ], "pop": 5830, "state": "FL" }, { "_id": "32244", "city": "JACKSONVILLE", "loc": [ -81.75557999999999, 30.223137 ], "pop": 37603, "state": "FL" }, { "_id": "32250", "city": "JACKSONVILLE BEA", "loc": [ -81.406243, 30.28319 ], "pop": 22392, "state": "FL" }, { "_id": "32256", "city": "JACKSONVILLE", "loc": [ -81.55713900000001, 30.221356 ], "pop": 17293, "state": "FL" }, { "_id": "32257", "city": "JACKSONVILLE", "loc": [ -81.605042, 30.192703 ], "pop": 30022, "state": "FL" }, { "_id": "32258", "city": "JACKSONVILLE", "loc": [ -81.573864, 30.145944 ], "pop": 7261, "state": "FL" }, { "_id": "32259", "city": "JACKSONVILLE", "loc": [ -81.621701, 30.095578 ], "pop": 6677, "state": "FL" }, { "_id": "32266", "city": "NEPTUNE BEACH", "loc": [ -81.405123, 30.31548 ], "pop": 6816, "state": "FL" }, { "_id": "32301", "city": "TALLAHASSEE", "loc": [ -84.259337, 30.428563 ], "pop": 21329, "state": "FL" }, { "_id": "32303", "city": "TALLAHASSEE", "loc": [ -84.318946, 30.487433 ], "pop": 36053, "state": "FL" }, { "_id": "32304", "city": "TALLAHASSEE", "loc": [ -84.32113200000001, 30.447752 ], "pop": 33437, "state": "FL" }, { "_id": "32306", "city": "TALLAHASSEE", "loc": [ -84.29559399999999, 30.442152 ], "pop": 1690, "state": "FL" }, { "_id": "32308", "city": "TALLAHASSEE", "loc": [ -84.206903, 30.507725 ], "pop": 34857, "state": "FL" }, { "_id": "32310", "city": "TALLAHASSEE", "loc": [ -84.32980000000001, 30.399125 ], "pop": 30379, "state": "FL" }, { "_id": "32311", "city": "TALLAHASSEE", "loc": [ -84.186995, 30.415625 ], "pop": 17005, "state": "FL" }, { "_id": "32312", "city": "TALLAHASSEE", "loc": [ -84.262708, 30.518474 ], "pop": 17743, "state": "FL" }, { "_id": "32320", "city": "APALACHICOLA", "loc": [ -85.006264, 29.725465 ], "pop": 3859, "state": "FL" }, { "_id": "32321", "city": "BRISTOL", "loc": [ -84.946558, 30.422279 ], "pop": 4078, "state": "FL" }, { "_id": "32322", "city": "CARRABELLE", "loc": [ -84.635845, 29.869205 ], "pop": 2138, "state": "FL" }, { "_id": "32324", "city": "CHATTAHOOCHEE", "loc": [ -84.82804400000001, 30.683394 ], "pop": 6325, "state": "FL" }, { "_id": "32327", "city": "CRAWFORDVILLE", "loc": [ -84.32047900000001, 30.210831 ], "pop": 10004, "state": "FL" }, { "_id": "32328", "city": "SAINT GEORGE ISL", "loc": [ -84.87009999999999, 29.733906 ], "pop": 2541, "state": "FL" }, { "_id": "32331", "city": "GREENVILLE", "loc": [ -83.647397, 30.451199 ], "pop": 4107, "state": "FL" }, { "_id": "32333", "city": "HAVANA", "loc": [ -84.41434, 30.609242 ], "pop": 9767, "state": "FL" }, { "_id": "32334", "city": "HOSFORD", "loc": [ -84.80543299999999, 30.363875 ], "pop": 1491, "state": "FL" }, { "_id": "32336", "city": "LAMONT", "loc": [ -83.900266, 30.365341 ], "pop": 1409, "state": "FL" }, { "_id": "32340", "city": "MADISON", "loc": [ -83.406678, 30.480209 ], "pop": 11339, "state": "FL" }, { "_id": "32344", "city": "MONTICELLO", "loc": [ -83.892454, 30.519681 ], "pop": 9578, "state": "FL" }, { "_id": "32346", "city": "PANACEA", "loc": [ -84.391212, 30.015322 ], "pop": 1292, "state": "FL" }, { "_id": "32347", "city": "PERRY", "loc": [ -83.585021, 30.097489 ], "pop": 15401, "state": "FL" }, { "_id": "32350", "city": "PINETTA", "loc": [ -83.340463, 30.599703 ], "pop": 642, "state": "FL" }, { "_id": "32351", "city": "QUINCY", "loc": [ -84.60945, 30.586675 ], "pop": 25013, "state": "FL" }, { "_id": "32356", "city": "SALEM", "loc": [ -83.385828, 29.823815 ], "pop": 264, "state": "FL" }, { "_id": "32358", "city": "SOPCHOPPY", "loc": [ -84.454877, 30.071353 ], "pop": 3335, "state": "FL" }, { "_id": "32359", "city": "STEINHATCHEE", "loc": [ -83.372332, 29.673871 ], "pop": 1415, "state": "FL" }, { "_id": "32401", "city": "PANAMA CITY", "loc": [ -85.64940300000001, 30.160624 ], "pop": 24968, "state": "FL" }, { "_id": "32403", "city": "PANAMA CITY", "loc": [ -85.57622499999999, 30.058252 ], "pop": 5333, "state": "FL" }, { "_id": "32404", "city": "PANAMA CITY", "loc": [ -85.57626399999999, 30.165291 ], "pop": 30101, "state": "FL" }, { "_id": "32405", "city": "PANAMA CITY", "loc": [ -85.672686, 30.194949 ], "pop": 25701, "state": "FL" }, { "_id": "32407", "city": "PANAMA CITY BEAC", "loc": [ -85.791984, 30.194623 ], "pop": 3115, "state": "FL" }, { "_id": "32408", "city": "PANAMA CITY BEAC", "loc": [ -85.763628, 30.160859 ], "pop": 9702, "state": "FL" }, { "_id": "32409", "city": "SOUTHPORT", "loc": [ -85.644536, 30.310679 ], "pop": 5001, "state": "FL" }, { "_id": "32413", "city": "PANAMA CITY BEAC", "loc": [ -85.904946, 30.245835 ], "pop": 5646, "state": "FL" }, { "_id": "32420", "city": "ALFORD", "loc": [ -85.34838000000001, 30.714106 ], "pop": 576, "state": "FL" }, { "_id": "32421", "city": "ALTHA", "loc": [ -85.17043, 30.531882 ], "pop": 3280, "state": "FL" }, { "_id": "32423", "city": "BASCOM", "loc": [ -85.09721999999999, 30.951365 ], "pop": 1011, "state": "FL" }, { "_id": "32424", "city": "BLOUNTSTOWN", "loc": [ -85.062022, 30.4394 ], "pop": 6984, "state": "FL" }, { "_id": "32425", "city": "BONIFAY", "loc": [ -85.68996199999999, 30.846369 ], "pop": 9342, "state": "FL" }, { "_id": "32426", "city": "CAMPBELLTON", "loc": [ -85.37659600000001, 30.95629 ], "pop": 741, "state": "FL" }, { "_id": "32427", "city": "CARYVILLE", "loc": [ -85.79978699999999, 30.796878 ], "pop": 2517, "state": "FL" }, { "_id": "32428", "city": "CHIPLEY", "loc": [ -85.54864600000001, 30.710658 ], "pop": 11248, "state": "FL" }, { "_id": "32430", "city": "CLARKSVILLE", "loc": [ -85.189806, 30.356834 ], "pop": 129, "state": "FL" }, { "_id": "32431", "city": "COTTONDALE", "loc": [ -85.38467199999999, 30.800359 ], "pop": 3333, "state": "FL" }, { "_id": "32433", "city": "DE FUNIAK SPRING", "loc": [ -86.138006, 30.751783 ], "pop": 15496, "state": "FL" }, { "_id": "32437", "city": "EBRO", "loc": [ -85.88806599999999, 30.435181 ], "pop": 361, "state": "FL" }, { "_id": "32438", "city": "FOUNTAIN", "loc": [ -85.429272, 30.475327 ], "pop": 1869, "state": "FL" }, { "_id": "32439", "city": "FREEPORT", "loc": [ -86.168441, 30.489596 ], "pop": 744, "state": "FL" }, { "_id": "32440", "city": "GRACEVILLE", "loc": [ -85.513622, 30.942601 ], "pop": 5353, "state": "FL" }, { "_id": "32442", "city": "GRAND RIDGE", "loc": [ -85.020954, 30.714831 ], "pop": 1708, "state": "FL" }, { "_id": "32443", "city": "GREENWOOD", "loc": [ -85.15549, 30.852506 ], "pop": 4058, "state": "FL" }, { "_id": "32444", "city": "LYNN HAVEN", "loc": [ -85.646658, 30.236165 ], "pop": 12205, "state": "FL" }, { "_id": "32445", "city": "MALONE", "loc": [ -85.16387400000001, 30.960245 ], "pop": 1046, "state": "FL" }, { "_id": "32446", "city": "MARIANNA", "loc": [ -85.229367, 30.758587 ], "pop": 17908, "state": "FL" }, { "_id": "32449", "city": "KINARD", "loc": [ -85.206467, 30.263241 ], "pop": 297, "state": "FL" }, { "_id": "32455", "city": "PONCE DE LEON", "loc": [ -85.954633, 30.704146 ], "pop": 2200, "state": "FL" }, { "_id": "32456", "city": "PORT SAINT JOE", "loc": [ -85.298787, 29.83539 ], "pop": 7490, "state": "FL" }, { "_id": "32459", "city": "SANTA ROSA BEACH", "loc": [ -86.24580899999999, 30.365883 ], "pop": 5039, "state": "FL" }, { "_id": "32460", "city": "SNEADS", "loc": [ -84.933655, 30.727619 ], "pop": 6334, "state": "FL" }, { "_id": "32462", "city": "VERNON", "loc": [ -85.755286, 30.62668 ], "pop": 4111, "state": "FL" }, { "_id": "32464", "city": "WESTVILLE", "loc": [ -85.91297299999999, 30.874689 ], "pop": 3081, "state": "FL" }, { "_id": "32465", "city": "WEWAHITCHKA", "loc": [ -85.20483, 30.093255 ], "pop": 4014, "state": "FL" }, { "_id": "32466", "city": "YOUNGSTOWN", "loc": [ -85.516881, 30.326913 ], "pop": 3634, "state": "FL" }, { "_id": "32501", "city": "PENSACOLA", "loc": [ -87.224763, 30.422282 ], "pop": 16485, "state": "FL" }, { "_id": "32503", "city": "PENSACOLA", "loc": [ -87.210432, 30.456406 ], "pop": 34491, "state": "FL" }, { "_id": "32504", "city": "PENSACOLA", "loc": [ -87.187242, 30.487299 ], "pop": 23077, "state": "FL" }, { "_id": "32505", "city": "PENSACOLA", "loc": [ -87.258937, 30.448069 ], "pop": 29026, "state": "FL" }, { "_id": "32506", "city": "PENSACOLA", "loc": [ -87.309185, 30.412912 ], "pop": 29834, "state": "FL" }, { "_id": "32507", "city": "PENSACOLA", "loc": [ -87.312558, 30.373707 ], "pop": 23525, "state": "FL" }, { "_id": "32508", "city": "PENSACOLA", "loc": [ -87.274945, 30.351063 ], "pop": 3688, "state": "FL" }, { "_id": "32514", "city": "PENSACOLA", "loc": [ -87.216723, 30.524148 ], "pop": 30185, "state": "FL" }, { "_id": "32526", "city": "PENSACOLA", "loc": [ -87.317925, 30.475593 ], "pop": 28674, "state": "FL" }, { "_id": "32531", "city": "BAKER", "loc": [ -86.677015, 30.831569 ], "pop": 3389, "state": "FL" }, { "_id": "32533", "city": "CANTONMENT", "loc": [ -87.325052, 30.614253 ], "pop": 19829, "state": "FL" }, { "_id": "32534", "city": "PENSACOLA", "loc": [ -87.279324, 30.530065 ], "pop": 12046, "state": "FL" }, { "_id": "32535", "city": "CENTURY", "loc": [ -87.32158200000001, 30.968742 ], "pop": 5422, "state": "FL" }, { "_id": "32536", "city": "CRESTVIEW", "loc": [ -86.553678, 30.77061 ], "pop": 21799, "state": "FL" }, { "_id": "32541", "city": "SANDESTIN", "loc": [ -86.484903, 30.397198 ], "pop": 8080, "state": "FL" }, { "_id": "32542", "city": "EGLIN A F B", "loc": [ -86.61595800000001, 30.479409 ], "pop": 13431, "state": "FL" }, { "_id": "32547", "city": "FORT WALTON BEAC", "loc": [ -86.627487, 30.447297 ], "pop": 27344, "state": "FL" }, { "_id": "32548", "city": "FORT WALTON BEAC", "loc": [ -86.62147899999999, 30.415262 ], "pop": 21791, "state": "FL" }, { "_id": "32561", "city": "GULF BREEZE", "loc": [ -87.043875, 30.3847 ], "pop": 27875, "state": "FL" }, { "_id": "32564", "city": "HOLT", "loc": [ -86.704638, 30.72522 ], "pop": 1821, "state": "FL" }, { "_id": "32565", "city": "JAY", "loc": [ -87.13323699999999, 30.898488 ], "pop": 5952, "state": "FL" }, { "_id": "32566", "city": "NAVARRE", "loc": [ -86.937102, 30.590261 ], "pop": 5537, "state": "FL" }, { "_id": "32567", "city": "LAUREL HILL", "loc": [ -86.400323, 30.95236 ], "pop": 2967, "state": "FL" }, { "_id": "32568", "city": "WALNUT HILL", "loc": [ -87.449628, 30.870043 ], "pop": 3604, "state": "FL" }, { "_id": "32569", "city": "MARY ESTHER", "loc": [ -86.71271900000001, 30.412186 ], "pop": 9382, "state": "FL" }, { "_id": "32570", "city": "MILTON", "loc": [ -87.04727800000001, 30.660413 ], "pop": 20038, "state": "FL" }, { "_id": "32571", "city": "PACE", "loc": [ -87.15033, 30.616173 ], "pop": 15661, "state": "FL" }, { "_id": "32578", "city": "NICEVILLE", "loc": [ -86.41446000000001, 30.495771 ], "pop": 25146, "state": "FL" }, { "_id": "32579", "city": "SHALIMAR", "loc": [ -86.571724, 30.445565 ], "pop": 9327, "state": "FL" }, { "_id": "32580", "city": "VALPARAISO", "loc": [ -86.50091399999999, 30.509197 ], "pop": 4964, "state": "FL" }, { "_id": "32583", "city": "MILTON", "loc": [ -87.066273, 30.576058 ], "pop": 9457, "state": "FL" }, { "_id": "32601", "city": "GAINESVILLE", "loc": [ -82.310046, 29.645029 ], "pop": 31328, "state": "FL" }, { "_id": "32603", "city": "GAINESVILLE", "loc": [ -82.34928600000001, 29.651484 ], "pop": 5271, "state": "FL" }, { "_id": "32605", "city": "GAINESVILLE", "loc": [ -82.36794, 29.678458 ], "pop": 21349, "state": "FL" }, { "_id": "32606", "city": "GAINESVILLE", "loc": [ -82.40232399999999, 29.695393 ], "pop": 18408, "state": "FL" }, { "_id": "32607", "city": "GAINESVILLE", "loc": [ -82.40325199999999, 29.645618 ], "pop": 21103, "state": "FL" }, { "_id": "32608", "city": "GAINESVILLE", "loc": [ -82.387282, 29.613204 ], "pop": 22945, "state": "FL" }, { "_id": "32609", "city": "GAINESVILLE", "loc": [ -82.308032, 29.70053 ], "pop": 17668, "state": "FL" }, { "_id": "32611", "city": "GAINESVILLE", "loc": [ -82.35092, 29.644148 ], "pop": 8023, "state": "FL" }, { "_id": "32615", "city": "SANTA FE", "loc": [ -82.480531, 29.796996 ], "pop": 9414, "state": "FL" }, { "_id": "32617", "city": "ANTHONY", "loc": [ -82.12615700000001, 29.304785 ], "pop": 6296, "state": "FL" }, { "_id": "32618", "city": "ARCHER", "loc": [ -82.51084, 29.559738 ], "pop": 6188, "state": "FL" }, { "_id": "32619", "city": "BELL", "loc": [ -82.871106, 29.78373 ], "pop": 2446, "state": "FL" }, { "_id": "32621", "city": "BRONSON", "loc": [ -82.635644, 29.460952 ], "pop": 2111, "state": "FL" }, { "_id": "32622", "city": "BROOKER", "loc": [ -82.29563400000001, 29.919028 ], "pop": 1194, "state": "FL" }, { "_id": "32625", "city": "CEDAR KEY", "loc": [ -83.01679300000001, 29.171006 ], "pop": 1173, "state": "FL" }, { "_id": "32626", "city": "CHIEFLAND", "loc": [ -82.88089600000001, 29.483243 ], "pop": 7498, "state": "FL" }, { "_id": "32631", "city": "EARLETON", "loc": [ -82.11376199999999, 29.722159 ], "pop": 1014, "state": "FL" }, { "_id": "32640", "city": "HAWTHORNE", "loc": [ -82.105625, 29.573998 ], "pop": 4151, "state": "FL" }, { "_id": "32643", "city": "HIGH SPRINGS", "loc": [ -82.615628, 29.841022 ], "pop": 7557, "state": "FL" }, { "_id": "32648", "city": "HORSESHOE BEACH", "loc": [ -83.26158700000001, 29.48689 ], "pop": 652, "state": "FL" }, { "_id": "32656", "city": "KEYSTONE HEIGHTS", "loc": [ -81.989885, 29.797579 ], "pop": 8011, "state": "FL" }, { "_id": "32666", "city": "MELROSE", "loc": [ -82.027863, 29.732456 ], "pop": 5507, "state": "FL" }, { "_id": "32667", "city": "MICANOPY", "loc": [ -82.279698, 29.526029 ], "pop": 2409, "state": "FL" }, { "_id": "32668", "city": "MORRISTON", "loc": [ -82.491668, 29.28126 ], "pop": 2054, "state": "FL" }, { "_id": "32669", "city": "NEWBERRY", "loc": [ -82.585188, 29.660906 ], "pop": 5491, "state": "FL" }, { "_id": "32680", "city": "OLD TOWN", "loc": [ -83.057393, 29.624558 ], "pop": 9494, "state": "FL" }, { "_id": "32686", "city": "REDDICK", "loc": [ -82.243995, 29.375352 ], "pop": 10006, "state": "FL" }, { "_id": "32693", "city": "TRENTON", "loc": [ -82.80934499999999, 29.626375 ], "pop": 6925, "state": "FL" }, { "_id": "32694", "city": "WALDO", "loc": [ -82.160791, 29.787096 ], "pop": 1676, "state": "FL" }, { "_id": "32696", "city": "WILLISTON", "loc": [ -82.485601, 29.397737 ], "pop": 7664, "state": "FL" }, { "_id": "32701", "city": "ALTAMONTE SPRING", "loc": [ -81.371908, 28.662728 ], "pop": 21392, "state": "FL" }, { "_id": "32702", "city": "ALTOONA", "loc": [ -81.632322, 29.021935 ], "pop": 1743, "state": "FL" }, { "_id": "32703", "city": "HUNT CLUB", "loc": [ -81.48514900000001, 28.661865 ], "pop": 34100, "state": "FL" }, { "_id": "32707", "city": "CASSELBERRY", "loc": [ -81.31221499999999, 28.661671 ], "pop": 30933, "state": "FL" }, { "_id": "32708", "city": "WINTER SPRINGS", "loc": [ -81.281367, 28.683097 ], "pop": 27311, "state": "FL" }, { "_id": "32709", "city": "CHRISTMAS", "loc": [ -81.01157000000001, 28.546244 ], "pop": 2331, "state": "FL" }, { "_id": "32712", "city": "APOPKA", "loc": [ -81.513615, 28.711976 ], "pop": 20208, "state": "FL" }, { "_id": "32713", "city": "DEBARY", "loc": [ -81.306506, 28.884573 ], "pop": 9491, "state": "FL" }, { "_id": "32714", "city": "FOREST CITY", "loc": [ -81.40853300000001, 28.664983 ], "pop": 29133, "state": "FL" }, { "_id": "32720", "city": "DELAND", "loc": [ -81.334853, 29.02659 ], "pop": 23152, "state": "FL" }, { "_id": "32724", "city": "DELAND", "loc": [ -81.28634099999999, 29.04225 ], "pop": 21715, "state": "FL" }, { "_id": "32725", "city": "DELTONA", "loc": [ -81.24730700000001, 28.898897 ], "pop": 27678, "state": "FL" }, { "_id": "32726", "city": "EUSTIS", "loc": [ -81.64512999999999, 28.857686 ], "pop": 19585, "state": "FL" }, { "_id": "32730", "city": "FERN PARK", "loc": [ -81.341837, 28.651161 ], "pop": 4815, "state": "FL" }, { "_id": "32732", "city": "GENEVA", "loc": [ -81.11136999999999, 28.750299 ], "pop": 3827, "state": "FL" }, { "_id": "32735", "city": "GRAND ISLAND", "loc": [ -81.739093, 28.886552 ], "pop": 1416, "state": "FL" }, { "_id": "32738", "city": "DELTONA", "loc": [ -81.192171, 28.909311 ], "pop": 22426, "state": "FL" }, { "_id": "32744", "city": "LAKE HELEN", "loc": [ -81.233367, 28.980567 ], "pop": 3229, "state": "FL" }, { "_id": "32746", "city": "HEATHROW", "loc": [ -81.338075, 28.752352 ], "pop": 9959, "state": "FL" }, { "_id": "32750", "city": "LONGWOOD", "loc": [ -81.355238, 28.711994 ], "pop": 27633, "state": "FL" }, { "_id": "32751", "city": "EATONVILLE", "loc": [ -81.354598, 28.631284 ], "pop": 19834, "state": "FL" }, { "_id": "32754", "city": "MIMS", "loc": [ -80.86627799999999, 28.697383 ], "pop": 8943, "state": "FL" }, { "_id": "32757", "city": "MOUNT DORA", "loc": [ -81.64559300000001, 28.792787 ], "pop": 15757, "state": "FL" }, { "_id": "32759", "city": "OAK HILL", "loc": [ -80.855063, 28.869985 ], "pop": 2261, "state": "FL" }, { "_id": "32763", "city": "ORANGE CITY", "loc": [ -81.29952400000001, 28.945291 ], "pop": 12946, "state": "FL" }, { "_id": "32764", "city": "OSTEEN", "loc": [ -81.15622399999999, 28.842617 ], "pop": 2215, "state": "FL" }, { "_id": "32765", "city": "OVIEDO", "loc": [ -81.206593, 28.651256 ], "pop": 19519, "state": "FL" }, { "_id": "32766", "city": "CHULUOTA", "loc": [ -81.11823699999999, 28.640634 ], "pop": 3280, "state": "FL" }, { "_id": "32767", "city": "PAISLEY", "loc": [ -81.50300900000001, 28.999323 ], "pop": 1963, "state": "FL" }, { "_id": "32771", "city": "SANFORD", "loc": [ -81.285044, 28.801307 ], "pop": 27016, "state": "FL" }, { "_id": "32773", "city": "SANFORD", "loc": [ -81.282042, 28.764385 ], "pop": 19707, "state": "FL" }, { "_id": "32776", "city": "SORRENTO", "loc": [ -81.53231700000001, 28.803519 ], "pop": 5382, "state": "FL" }, { "_id": "32778", "city": "TAVARES", "loc": [ -81.73405, 28.801027 ], "pop": 12131, "state": "FL" }, { "_id": "32779", "city": "SPRINGS PLAZA", "loc": [ -81.42276699999999, 28.703978 ], "pop": 27075, "state": "FL" }, { "_id": "32780", "city": "TITUSVILLE", "loc": [ -80.819141, 28.569712 ], "pop": 28649, "state": "FL" }, { "_id": "32784", "city": "DONA VISTA", "loc": [ -81.67165300000001, 28.931443 ], "pop": 7866, "state": "FL" }, { "_id": "32789", "city": "WINTER PARK", "loc": [ -81.353436, 28.597824 ], "pop": 24236, "state": "FL" }, { "_id": "32792", "city": "ALOMA", "loc": [ -81.30211199999999, 28.60779 ], "pop": 44973, "state": "FL" }, { "_id": "32796", "city": "TITUSVILLE", "loc": [ -80.842915, 28.627078 ], "pop": 19916, "state": "FL" }, { "_id": "32798", "city": "ZELLWOOD", "loc": [ -81.57617399999999, 28.71944 ], "pop": 1930, "state": "FL" }, { "_id": "32801", "city": "ORLANDO", "loc": [ -81.372668, 28.539882 ], "pop": 9275, "state": "FL" }, { "_id": "32803", "city": "ORLANDO", "loc": [ -81.35346199999999, 28.555897 ], "pop": 19992, "state": "FL" }, { "_id": "32804", "city": "FAIRVILLA", "loc": [ -81.391955, 28.576547 ], "pop": 18087, "state": "FL" }, { "_id": "32805", "city": "ORLANDO", "loc": [ -81.404516, 28.5302 ], "pop": 29117, "state": "FL" }, { "_id": "32806", "city": "ORLANDO", "loc": [ -81.35696799999999, 28.513958 ], "pop": 25996, "state": "FL" }, { "_id": "32807", "city": "AZALEA PARK", "loc": [ -81.305274, 28.544924 ], "pop": 28087, "state": "FL" }, { "_id": "32808", "city": "PINE HILLS", "loc": [ -81.44758, 28.580463 ], "pop": 42278, "state": "FL" }, { "_id": "32809", "city": "PINE CASTLE", "loc": [ -81.38175099999999, 28.461916 ], "pop": 17602, "state": "FL" }, { "_id": "32810", "city": "LOCKHART", "loc": [ -81.42585200000001, 28.622183 ], "pop": 23781, "state": "FL" }, { "_id": "32811", "city": "ORLO VISTA", "loc": [ -81.442014, 28.516082 ], "pop": 21545, "state": "FL" }, { "_id": "32812", "city": "ORLANDO", "loc": [ -81.328816, 28.49981 ], "pop": 26888, "state": "FL" }, { "_id": "32813", "city": "NAVAL TRAINING C", "loc": [ -81.32896599999999, 28.570467 ], "pop": 9216, "state": "FL" }, { "_id": "32815", "city": "KENNEDY SPACE CE", "loc": [ -80.58248, 28.498821 ], "pop": 1, "state": "FL" }, { "_id": "32817", "city": "UNION PARK", "loc": [ -81.25353699999999, 28.590251 ], "pop": 20723, "state": "FL" }, { "_id": "32818", "city": "ORLANDO", "loc": [ -81.484618, 28.580147 ], "pop": 26887, "state": "FL" }, { "_id": "32819", "city": "SAND LAKE", "loc": [ -81.452484, 28.467258 ], "pop": 4434, "state": "FL" }, { "_id": "32820", "city": "UNION PARK", "loc": [ -81.11062800000001, 28.578256 ], "pop": 2587, "state": "FL" }, { "_id": "32821", "city": "ORLANDO", "loc": [ -81.46660199999999, 28.395724 ], "pop": 9982, "state": "FL" }, { "_id": "32822", "city": "VENTURA", "loc": [ -81.293874, 28.504765 ], "pop": 33986, "state": "FL" }, { "_id": "32824", "city": "ORLANDO", "loc": [ -81.36218700000001, 28.393157 ], "pop": 8225, "state": "FL" }, { "_id": "32825", "city": "ORLANDO", "loc": [ -81.257081, 28.546865 ], "pop": 26373, "state": "FL" }, { "_id": "32826", "city": "ORLANDO", "loc": [ -81.19070499999999, 28.582601 ], "pop": 12369, "state": "FL" }, { "_id": "32827", "city": "ORLANDO", "loc": [ -81.342979, 28.43168 ], "pop": 3831, "state": "FL" }, { "_id": "32828", "city": "ORLANDO", "loc": [ -81.179489, 28.552297 ], "pop": 3249, "state": "FL" }, { "_id": "32829", "city": "ORLANDO", "loc": [ -81.260778, 28.484877 ], "pop": 3848, "state": "FL" }, { "_id": "32830", "city": "LAKE BUENA VISTA", "loc": [ -81.519034, 28.369378 ], "pop": 6, "state": "FL" }, { "_id": "32831", "city": "ORLANDO", "loc": [ -81.191768, 28.488229 ], "pop": 1123, "state": "FL" }, { "_id": "32832", "city": "ORLANDO", "loc": [ -81.188807, 28.377428 ], "pop": 1863, "state": "FL" }, { "_id": "32833", "city": "UNION PARK", "loc": [ -81.098129, 28.531797 ], "pop": 3748, "state": "FL" }, { "_id": "32835", "city": "ORLANDO", "loc": [ -81.478663, 28.528885 ], "pop": 20343, "state": "FL" }, { "_id": "32836", "city": "ORLANDO", "loc": [ -81.49563999999999, 28.460842 ], "pop": 21329, "state": "FL" }, { "_id": "32837", "city": "ORLANDO", "loc": [ -81.41788200000001, 28.394861 ], "pop": 13075, "state": "FL" }, { "_id": "32839", "city": "ORLANDO", "loc": [ -81.408162, 28.487102 ], "pop": 33946, "state": "FL" }, { "_id": "32901", "city": "MELBOURNE", "loc": [ -80.620015, 28.069132 ], "pop": 21138, "state": "FL" }, { "_id": "32903", "city": "INDIALANTIC", "loc": [ -80.57871799999999, 28.109059 ], "pop": 11020, "state": "FL" }, { "_id": "32904", "city": "MELBOURNE VILLAG", "loc": [ -80.668577, 28.073177 ], "pop": 15441, "state": "FL" }, { "_id": "32905", "city": "PALM BAY", "loc": [ -80.599087, 28.014605 ], "pop": 26367, "state": "FL" }, { "_id": "32907", "city": "PALM BAY", "loc": [ -80.673889, 28.016849 ], "pop": 25674, "state": "FL" }, { "_id": "32908", "city": "PALM BAY", "loc": [ -80.689426, 27.981636 ], "pop": 3272, "state": "FL" }, { "_id": "32909", "city": "PALM BAY", "loc": [ -80.647327, 27.96936 ], "pop": 12028, "state": "FL" }, { "_id": "32920", "city": "CAPE CANAVERAL", "loc": [ -80.60426699999999, 28.39034 ], "pop": 7655, "state": "FL" }, { "_id": "32922", "city": "COCOA", "loc": [ -80.746455, 28.367183 ], "pop": 17316, "state": "FL" }, { "_id": "32925", "city": "PATRICK A F B", "loc": [ -80.60712599999999, 28.259896 ], "pop": 597, "state": "FL" }, { "_id": "32926", "city": "COCOA", "loc": [ -80.786969, 28.390987 ], "pop": 17930, "state": "FL" }, { "_id": "32927", "city": "PORT SAINT JOHN", "loc": [ -80.79111399999999, 28.46844 ], "pop": 17351, "state": "FL" }, { "_id": "32931", "city": "COCOA BEACH", "loc": [ -80.612066, 28.332451 ], "pop": 14989, "state": "FL" }, { "_id": "32934", "city": "EAU GALLIE", "loc": [ -80.691683, 28.136822 ], "pop": 9539, "state": "FL" }, { "_id": "32935", "city": "MELBOURNE", "loc": [ -80.65235300000001, 28.138385 ], "pop": 34153, "state": "FL" }, { "_id": "32937", "city": "INDIAN HARBOR BE", "loc": [ -80.598671, 28.178571 ], "pop": 28921, "state": "FL" }, { "_id": "32940", "city": "MELBOURNE", "loc": [ -80.68495900000001, 28.206136 ], "pop": 5360, "state": "FL" }, { "_id": "32948", "city": "FELLSMERE", "loc": [ -80.601947, 27.764273 ], "pop": 2936, "state": "FL" }, { "_id": "32951", "city": "MELBOURNE BEACH", "loc": [ -80.53893600000001, 28.021923 ], "pop": 8060, "state": "FL" }, { "_id": "32952", "city": "MERRITT ISLAND", "loc": [ -80.67818, 28.328607 ], "pop": 12919, "state": "FL" }, { "_id": "32953", "city": "MERRITT ISLAND", "loc": [ -80.695865, 28.391234 ], "pop": 23338, "state": "FL" }, { "_id": "32955", "city": "ROCKLEDGE", "loc": [ -80.73193000000001, 28.313441 ], "pop": 20576, "state": "FL" }, { "_id": "32958", "city": "SEBASTIAN", "loc": [ -80.478432, 27.790082 ], "pop": 14084, "state": "FL" }, { "_id": "32960", "city": "VERO BEACH", "loc": [ -80.403075, 27.632985 ], "pop": 19207, "state": "FL" }, { "_id": "32962", "city": "VERO BEACH", "loc": [ -80.392251, 27.588486 ], "pop": 17462, "state": "FL" }, { "_id": "32963", "city": "INDIAN RIVER SHO", "loc": [ -80.360916, 27.653623 ], "pop": 10980, "state": "FL" }, { "_id": "32966", "city": "VERO BEACH", "loc": [ -80.47939, 27.637214 ], "pop": 10687, "state": "FL" }, { "_id": "32967", "city": "VERO BEACH", "loc": [ -80.44161699999999, 27.697223 ], "pop": 9607, "state": "FL" }, { "_id": "32968", "city": "VERO BEACH", "loc": [ -80.43822299999999, 27.59993 ], "pop": 5238, "state": "FL" }, { "_id": "32976", "city": "BAREFOOT BAY", "loc": [ -80.516051, 27.878146 ], "pop": 7870, "state": "FL" }, { "_id": "33004", "city": "DANIA", "loc": [ -80.144728, 26.047557 ], "pop": 12552, "state": "FL" }, { "_id": "33009", "city": "HALLANDALE", "loc": [ -80.140737, 25.985019 ], "pop": 33743, "state": "FL" }, { "_id": "33010", "city": "HIALEAH", "loc": [ -80.280801, 25.832536 ], "pop": 40437, "state": "FL" }, { "_id": "33012", "city": "HIALEAH", "loc": [ -80.30589999999999, 25.865395 ], "pop": 73194, "state": "FL" }, { "_id": "33013", "city": "HIALEAH", "loc": [ -80.272533, 25.859351 ], "pop": 30108, "state": "FL" }, { "_id": "33014", "city": "HIALEAH", "loc": [ -80.30625499999999, 25.896349 ], "pop": 35873, "state": "FL" }, { "_id": "33015", "city": "HIALEAH", "loc": [ -80.316545, 25.938841 ], "pop": 31171, "state": "FL" }, { "_id": "33016", "city": "HIALEAH", "loc": [ -80.33681, 25.880262 ], "pop": 32053, "state": "FL" }, { "_id": "33019", "city": "HOLLYWOOD", "loc": [ -80.121931, 26.007011 ], "pop": 12115, "state": "FL" }, { "_id": "33020", "city": "HOLLYWOOD", "loc": [ -80.15166000000001, 26.016091 ], "pop": 35468, "state": "FL" }, { "_id": "33021", "city": "HOLLYWOOD", "loc": [ -80.18908500000001, 26.021836 ], "pop": 39987, "state": "FL" }, { "_id": "33023", "city": "MIRAMAR", "loc": [ -80.21603500000001, 25.987516 ], "pop": 54274, "state": "FL" }, { "_id": "33024", "city": "PEMBROKE PINES", "loc": [ -80.240183, 26.024273 ], "pop": 54411, "state": "FL" }, { "_id": "33025", "city": "HOLLYWOOD", "loc": [ -80.271236, 25.992061 ], "pop": 24778, "state": "FL" }, { "_id": "33026", "city": "HOLLYWOOD", "loc": [ -80.29744100000001, 26.022927 ], "pop": 21473, "state": "FL" }, { "_id": "33027", "city": "HOLLYWOOD", "loc": [ -80.32483999999999, 25.997449 ], "pop": 6955, "state": "FL" }, { "_id": "33028", "city": "HOLLYWOOD", "loc": [ -80.330797, 26.024804 ], "pop": 186, "state": "FL" }, { "_id": "33029", "city": "PEMBROKE PINES", "loc": [ -80.42840700000001, 26.01375 ], "pop": 2882, "state": "FL" }, { "_id": "33030", "city": "HOMESTEAD", "loc": [ -80.483853, 25.476639 ], "pop": 26721, "state": "FL" }, { "_id": "33031", "city": "HOMESTEAD", "loc": [ -80.507463, 25.532314 ], "pop": 5880, "state": "FL" }, { "_id": "33032", "city": "PRINCETON", "loc": [ -80.40918000000001, 25.521191 ], "pop": 18070, "state": "FL" }, { "_id": "33033", "city": "HOMESTEAD", "loc": [ -80.438014, 25.490576 ], "pop": 25439, "state": "FL" }, { "_id": "33034", "city": "FLORIDA CITY", "loc": [ -80.548438, 25.396332 ], "pop": 12115, "state": "FL" }, { "_id": "33035", "city": "HOMESTEAD", "loc": [ -80.45715300000001, 25.457338 ], "pop": 1727, "state": "FL" }, { "_id": "33036", "city": "ISLAMORADA", "loc": [ -80.629953, 24.923331 ], "pop": 3810, "state": "FL" }, { "_id": "33037", "city": "OCEAN REEF", "loc": [ -80.40608400000001, 25.140214 ], "pop": 12076, "state": "FL" }, { "_id": "33039", "city": "HOMESTEAD AIR FO", "loc": [ -80.390513, 25.499088 ], "pop": 6538, "state": "FL" }, { "_id": "33040", "city": "NAVAL AIR STATIO", "loc": [ -81.762179, 24.565313 ], "pop": 32986, "state": "FL" }, { "_id": "33042", "city": "SUMMERLAND KEY", "loc": [ -81.49356400000001, 24.655322 ], "pop": 3952, "state": "FL" }, { "_id": "33043", "city": "BIG PINE KEY", "loc": [ -81.36202900000001, 24.679996 ], "pop": 5956, "state": "FL" }, { "_id": "33050", "city": "MARATHON", "loc": [ -81.03858099999999, 24.727919 ], "pop": 12792, "state": "FL" }, { "_id": "33054", "city": "OPA LOCKA", "loc": [ -80.247004, 25.909662 ], "pop": 30405, "state": "FL" }, { "_id": "33055", "city": "CAROL CITY", "loc": [ -80.27729100000001, 25.944076 ], "pop": 40586, "state": "FL" }, { "_id": "33056", "city": "CAROL CITY", "loc": [ -80.248059, 25.946906 ], "pop": 31968, "state": "FL" }, { "_id": "33060", "city": "POMPANO BEACH", "loc": [ -80.12345999999999, 26.231529 ], "pop": 32292, "state": "FL" }, { "_id": "33062", "city": "POMPANO BEACH", "loc": [ -80.094133, 26.234314 ], "pop": 20836, "state": "FL" }, { "_id": "33063", "city": "MARGATE", "loc": [ -80.211483, 26.249221 ], "pop": 37607, "state": "FL" }, { "_id": "33064", "city": "LIGHTHOUSE POINT", "loc": [ -80.11243899999999, 26.278698 ], "pop": 50084, "state": "FL" }, { "_id": "33065", "city": "CORAL SPRINGS", "loc": [ -80.255578, 26.271403 ], "pop": 43659, "state": "FL" }, { "_id": "33066", "city": "MARGATE", "loc": [ -80.17787800000001, 26.254237 ], "pop": 16494, "state": "FL" }, { "_id": "33067", "city": "NORTH CORAL SPRI", "loc": [ -80.22188, 26.305134 ], "pop": 7227, "state": "FL" }, { "_id": "33068", "city": "POMPANO BEACH", "loc": [ -80.22054, 26.216021 ], "pop": 41835, "state": "FL" }, { "_id": "33069", "city": "POMPANO BEACH", "loc": [ -80.16348600000001, 26.228817 ], "pop": 20158, "state": "FL" }, { "_id": "33070", "city": "TAVERNIER", "loc": [ -80.521816, 25.010788 ], "pop": 6196, "state": "FL" }, { "_id": "33071", "city": "POMPANO BEACH", "loc": [ -80.260085, 26.243515 ], "pop": 28251, "state": "FL" }, { "_id": "33073", "city": "POMPANO BEACH", "loc": [ -80.180966, 26.299693 ], "pop": 7091, "state": "FL" }, { "_id": "33076", "city": "POMPANO BEACH", "loc": [ -80.248086, 26.291902 ], "pop": 4728, "state": "FL" }, { "_id": "33122", "city": "MIAMI", "loc": [ -80.320733, 25.7911 ], "pop": 8, "state": "FL" }, { "_id": "33125", "city": "MIAMI", "loc": [ -80.234118, 25.782547 ], "pop": 47761, "state": "FL" }, { "_id": "33126", "city": "MIAMI", "loc": [ -80.291932, 25.776255 ], "pop": 39861, "state": "FL" }, { "_id": "33127", "city": "MIAMI", "loc": [ -80.20512100000001, 25.814344 ], "pop": 29900, "state": "FL" }, { "_id": "33128", "city": "MIAMI", "loc": [ -80.20885800000001, 25.775612 ], "pop": 6965, "state": "FL" }, { "_id": "33129", "city": "MIAMI", "loc": [ -80.201301, 25.755926 ], "pop": 10225, "state": "FL" }, { "_id": "33130", "city": "MIAMI", "loc": [ -80.205888, 25.767197 ], "pop": 21777, "state": "FL" }, { "_id": "33131", "city": "MIAMI", "loc": [ -80.18950599999999, 25.762852 ], "pop": 2614, "state": "FL" }, { "_id": "33132", "city": "MIAMI", "loc": [ -80.179996, 25.786712 ], "pop": 5198, "state": "FL" }, { "_id": "33133", "city": "CORAL GABLES", "loc": [ -80.243639, 25.732251 ], "pop": 28672, "state": "FL" }, { "_id": "33134", "city": "CORAL GABLES", "loc": [ -80.269576, 25.755582 ], "pop": 33492, "state": "FL" }, { "_id": "33135", "city": "MIAMI", "loc": [ -80.231746, 25.766391 ], "pop": 35425, "state": "FL" }, { "_id": "33136", "city": "MIAMI", "loc": [ -80.204232, 25.786385 ], "pop": 14040, "state": "FL" }, { "_id": "33137", "city": "MIAMI", "loc": [ -80.189663, 25.815648 ], "pop": 19862, "state": "FL" }, { "_id": "33138", "city": "MIAMI SHORES", "loc": [ -80.18526, 25.850208 ], "pop": 30108, "state": "FL" }, { "_id": "33139", "city": "CARL FISHER", "loc": [ -80.13637799999999, 25.785179 ], "pop": 48971, "state": "FL" }, { "_id": "33140", "city": "MIAMI", "loc": [ -80.127921, 25.819505 ], "pop": 13057, "state": "FL" }, { "_id": "33141", "city": "NORTH BAY VILLAG", "loc": [ -80.133578, 25.852384 ], "pop": 29489, "state": "FL" }, { "_id": "33142", "city": "MIAMI", "loc": [ -80.232023, 25.812966 ], "pop": 52262, "state": "FL" }, { "_id": "33143", "city": "SOUTH MIAMI", "loc": [ -80.301408, 25.700252 ], "pop": 28410, "state": "FL" }, { "_id": "33144", "city": "MIAMI", "loc": [ -80.309631, 25.762563 ], "pop": 22968, "state": "FL" }, { "_id": "33145", "city": "CORAL GABLES", "loc": [ -80.235134, 25.752648 ], "pop": 28170, "state": "FL" }, { "_id": "33146", "city": "CORAL GABLES", "loc": [ -80.274649, 25.720089 ], "pop": 13791, "state": "FL" }, { "_id": "33147", "city": "MIAMI", "loc": [ -80.236558, 25.850675 ], "pop": 49395, "state": "FL" }, { "_id": "33149", "city": "KEY BISCAYNE", "loc": [ -80.162475, 25.692104 ], "pop": 8854, "state": "FL" }, { "_id": "33150", "city": "MIAMI", "loc": [ -80.206968, 25.851214 ], "pop": 28408, "state": "FL" }, { "_id": "33154", "city": "BAL HARBOUR", "loc": [ -80.127055, 25.879094 ], "pop": 17312, "state": "FL" }, { "_id": "33155", "city": "MIAMI", "loc": [ -80.31032, 25.7392 ], "pop": 42864, "state": "FL" }, { "_id": "33156", "city": "KENDALL", "loc": [ -80.30853500000001, 25.66767 ], "pop": 27901, "state": "FL" }, { "_id": "33157", "city": "PERRINE", "loc": [ -80.352473, 25.604384 ], "pop": 57749, "state": "FL" }, { "_id": "33158", "city": "MIAMI", "loc": [ -80.318703, 25.636433 ], "pop": 6037, "state": "FL" }, { "_id": "33160", "city": "NORTH MIAMI BEAC", "loc": [ -80.135141, 25.936086 ], "pop": 26987, "state": "FL" }, { "_id": "33161", "city": "NORTH MIAMI", "loc": [ -80.182034, 25.893806 ], "pop": 44800, "state": "FL" }, { "_id": "33162", "city": "NORTH MIAMI BEAC", "loc": [ -80.177238, 25.92807 ], "pop": 37052, "state": "FL" }, { "_id": "33165", "city": "OLYMPIA HEIGHTS", "loc": [ -80.359084, 25.735353 ], "pop": 56064, "state": "FL" }, { "_id": "33166", "city": "MIAMI SPRINGS", "loc": [ -80.29902, 25.817473 ], "pop": 21066, "state": "FL" }, { "_id": "33167", "city": "MIAMI", "loc": [ -80.229168, 25.885605 ], "pop": 18840, "state": "FL" }, { "_id": "33168", "city": "MIAMI", "loc": [ -80.210106, 25.890232 ], "pop": 21629, "state": "FL" }, { "_id": "33169", "city": "MIAMI", "loc": [ -80.21436, 25.944083 ], "pop": 30294, "state": "FL" }, { "_id": "33170", "city": "QUAIL HEIGHTS", "loc": [ -80.3981, 25.558847 ], "pop": 6842, "state": "FL" }, { "_id": "33172", "city": "MIAMI", "loc": [ -80.357232, 25.773523 ], "pop": 29823, "state": "FL" }, { "_id": "33173", "city": "MIAMI", "loc": [ -80.361824, 25.699242 ], "pop": 33787, "state": "FL" }, { "_id": "33174", "city": "MIAMI", "loc": [ -80.36112799999999, 25.762779 ], "pop": 27442, "state": "FL" }, { "_id": "33175", "city": "OLYMPIA HEIGHTS", "loc": [ -80.408226, 25.733677 ], "pop": 41712, "state": "FL" }, { "_id": "33176", "city": "MIAMI", "loc": [ -80.362667, 25.657449 ], "pop": 47435, "state": "FL" }, { "_id": "33177", "city": "QUAIL HEIGHTS", "loc": [ -80.39377, 25.593255 ], "pop": 25043, "state": "FL" }, { "_id": "33178", "city": "MIAMI", "loc": [ -80.35492499999999, 25.814079 ], "pop": 3146, "state": "FL" }, { "_id": "33179", "city": "MIAMI", "loc": [ -80.181382, 25.957095 ], "pop": 31877, "state": "FL" }, { "_id": "33180", "city": "OJUS", "loc": [ -80.139447, 25.961902 ], "pop": 14167, "state": "FL" }, { "_id": "33181", "city": "NORTH MIAMI BEAC", "loc": [ -80.160329, 25.896548 ], "pop": 14089, "state": "FL" }, { "_id": "33182", "city": "MIAMI", "loc": [ -80.41664299999999, 25.787678 ], "pop": 4983, "state": "FL" }, { "_id": "33183", "city": "MIAMI", "loc": [ -80.412969, 25.699977 ], "pop": 32077, "state": "FL" }, { "_id": "33184", "city": "MIAMI", "loc": [ -80.402997, 25.757382 ], "pop": 19617, "state": "FL" }, { "_id": "33185", "city": "OLYMPIA HEIGHTS", "loc": [ -80.437366, 25.718082 ], "pop": 3606, "state": "FL" }, { "_id": "33186", "city": "MIAMI", "loc": [ -80.408501, 25.669437 ], "pop": 43611, "state": "FL" }, { "_id": "33187", "city": "QUAIL HEIGHTS", "loc": [ -80.47136999999999, 25.597112 ], "pop": 6882, "state": "FL" }, { "_id": "33189", "city": "QUAIL HEIGHTS", "loc": [ -80.35085100000001, 25.57431 ], "pop": 15680, "state": "FL" }, { "_id": "33190", "city": "QUAIL HEIGHTS", "loc": [ -80.35381, 25.560935 ], "pop": 2807, "state": "FL" }, { "_id": "33193", "city": "MIAMI", "loc": [ -80.44008700000001, 25.696365 ], "pop": 17432, "state": "FL" }, { "_id": "33196", "city": "MIAMI", "loc": [ -80.441031, 25.661502 ], "pop": 14612, "state": "FL" }, { "_id": "33301", "city": "FORT LAUDERDALE", "loc": [ -80.128778, 26.121561 ], "pop": 12040, "state": "FL" }, { "_id": "33304", "city": "OAKLAND PARK", "loc": [ -80.125283, 26.137908 ], "pop": 18976, "state": "FL" }, { "_id": "33305", "city": "OAKLAND PARK", "loc": [ -80.127768, 26.153115 ], "pop": 11018, "state": "FL" }, { "_id": "33306", "city": "OAKLAND PARK", "loc": [ -80.112572, 26.165091 ], "pop": 3424, "state": "FL" }, { "_id": "33308", "city": "OAKLAND PARK", "loc": [ -80.107674, 26.187883 ], "pop": 28624, "state": "FL" }, { "_id": "33309", "city": "FORT LAUDERDALE", "loc": [ -80.17462399999999, 26.181698 ], "pop": 28226, "state": "FL" }, { "_id": "33311", "city": "FORT LAUDERDALE", "loc": [ -80.172786, 26.142104 ], "pop": 65378, "state": "FL" }, { "_id": "33312", "city": "FORT LAUDERDALE", "loc": [ -80.181038, 26.096819 ], "pop": 44230, "state": "FL" }, { "_id": "33313", "city": "CITY OF SUNRISE", "loc": [ -80.223142, 26.151145 ], "pop": 46804, "state": "FL" }, { "_id": "33314", "city": "DAVIE", "loc": [ -80.22503399999999, 26.068199 ], "pop": 19621, "state": "FL" }, { "_id": "33315", "city": "FORT LAUDERDALE", "loc": [ -80.15407999999999, 26.098885 ], "pop": 12849, "state": "FL" }, { "_id": "33316", "city": "FORT LAUDERDALE", "loc": [ -80.125951, 26.104193 ], "pop": 11206, "state": "FL" }, { "_id": "33317", "city": "PLANTATION", "loc": [ -80.224272, 26.113536 ], "pop": 31518, "state": "FL" }, { "_id": "33319", "city": "TAMARAC", "loc": [ -80.225413, 26.181153 ], "pop": 36178, "state": "FL" }, { "_id": "33321", "city": "TAMARAC", "loc": [ -80.26435600000001, 26.212072 ], "pop": 29504, "state": "FL" }, { "_id": "33322", "city": "SUNRISE", "loc": [ -80.27195399999999, 26.151923 ], "pop": 37348, "state": "FL" }, { "_id": "33323", "city": "SUNRISE", "loc": [ -80.30758299999999, 26.164641 ], "pop": 10658, "state": "FL" }, { "_id": "33324", "city": "PLANTATION", "loc": [ -80.271019, 26.113639 ], "pop": 29427, "state": "FL" }, { "_id": "33325", "city": "DAVIE", "loc": [ -80.321952, 26.10862 ], "pop": 19539, "state": "FL" }, { "_id": "33326", "city": "DAVIE", "loc": [ -80.369941, 26.114338 ], "pop": 8393, "state": "FL" }, { "_id": "33327", "city": "FORT LAUDERDALE", "loc": [ -80.40645000000001, 26.097291 ], "pop": 4605, "state": "FL" }, { "_id": "33328", "city": "DAVIE", "loc": [ -80.27202200000001, 26.060708 ], "pop": 17233, "state": "FL" }, { "_id": "33330", "city": "DAVIE", "loc": [ -80.312907, 26.055479 ], "pop": 9371, "state": "FL" }, { "_id": "33331", "city": "DAVIE", "loc": [ -80.36453299999999, 26.044366 ], "pop": 6928, "state": "FL" }, { "_id": "33332", "city": "DAVIE", "loc": [ -80.41298999999999, 26.054436 ], "pop": 1511, "state": "FL" }, { "_id": "33334", "city": "OAKLAND PARK", "loc": [ -80.13551099999999, 26.181514 ], "pop": 29072, "state": "FL" }, { "_id": "33351", "city": "TAMARAC", "loc": [ -80.273376, 26.177148 ], "pop": 26228, "state": "FL" }, { "_id": "33388", "city": "FORT LAUDERDALE", "loc": [ -80.250587, 26.117586 ], "pop": 435, "state": "FL" }, { "_id": "33401", "city": "WEST PALM BEACH", "loc": [ -80.06587399999999, 26.713956 ], "pop": 19833, "state": "FL" }, { "_id": "33403", "city": "LAKE PARK", "loc": [ -80.073078, 26.803187 ], "pop": 8743, "state": "FL" }, { "_id": "33404", "city": "RIVIERA BEACH", "loc": [ -80.06852000000001, 26.781343 ], "pop": 27997, "state": "FL" }, { "_id": "33405", "city": "WEST PALM BEACH", "loc": [ -80.058234, 26.669968 ], "pop": 18164, "state": "FL" }, { "_id": "33406", "city": "GLEN RIDGE", "loc": [ -80.09302599999999, 26.655582 ], "pop": 23595, "state": "FL" }, { "_id": "33407", "city": "WEST PALM BEACH", "loc": [ -80.072492, 26.749154 ], "pop": 25017, "state": "FL" }, { "_id": "33408", "city": "NORTH PALM BEACH", "loc": [ -80.060334, 26.828854 ], "pop": 17968, "state": "FL" }, { "_id": "33409", "city": "HAVERHILL", "loc": [ -80.09634699999999, 26.713218 ], "pop": 16142, "state": "FL" }, { "_id": "33410", "city": "PALM BEACH GARDE", "loc": [ -80.087304, 26.844373 ], "pop": 23249, "state": "FL" }, { "_id": "33411", "city": "ROYAL PALM BEACH", "loc": [ -80.209898, 26.700539 ], "pop": 21027, "state": "FL" }, { "_id": "33412", "city": "WEST PALM BEACH", "loc": [ -80.248203, 26.805526 ], "pop": 312, "state": "FL" }, { "_id": "33413", "city": "WEST PALM BEACH", "loc": [ -80.140474, 26.67616 ], "pop": 4864, "state": "FL" }, { "_id": "33414", "city": "WEST PALM BEACH", "loc": [ -80.25299, 26.662707 ], "pop": 22046, "state": "FL" }, { "_id": "33415", "city": "HAVERHILL", "loc": [ -80.127966, 26.655722 ], "pop": 35663, "state": "FL" }, { "_id": "33417", "city": "HAVERHILL", "loc": [ -80.124764, 26.713006 ], "pop": 25892, "state": "FL" }, { "_id": "33418", "city": "PALM BEACH GARDE", "loc": [ -80.132533, 26.838977 ], "pop": 15974, "state": "FL" }, { "_id": "33426", "city": "BOYNTON BEACH", "loc": [ -80.083427, 26.51747 ], "pop": 9390, "state": "FL" }, { "_id": "33428", "city": "BOCA RATON", "loc": [ -80.210942, 26.344605 ], "pop": 24103, "state": "FL" }, { "_id": "33430", "city": "BELLE GLADE", "loc": [ -80.672392, 26.684289 ], "pop": 22652, "state": "FL" }, { "_id": "33431", "city": "BOCA RATON", "loc": [ -80.097488, 26.379929 ], "pop": 13075, "state": "FL" }, { "_id": "33432", "city": "BOCA RATON", "loc": [ -80.08442100000001, 26.34619 ], "pop": 17141, "state": "FL" }, { "_id": "33433", "city": "BOCA RATON", "loc": [ -80.15639899999999, 26.346409 ], "pop": 35495, "state": "FL" }, { "_id": "33434", "city": "BOCA RATON", "loc": [ -80.174858, 26.383909 ], "pop": 19075, "state": "FL" }, { "_id": "33435", "city": "BRINY BREEZES", "loc": [ -80.06424, 26.529161 ], "pop": 28536, "state": "FL" }, { "_id": "33436", "city": "VILLAGE OF GOLF", "loc": [ -80.10642300000001, 26.526862 ], "pop": 19263, "state": "FL" }, { "_id": "33437", "city": "BOYNTON BEACH", "loc": [ -80.141812, 26.531187 ], "pop": 14809, "state": "FL" }, { "_id": "33438", "city": "CANAL POINT", "loc": [ -80.629931, 26.859279 ], "pop": 1494, "state": "FL" }, { "_id": "33440", "city": "CLEWISTON", "loc": [ -80.94924899999999, 26.717171 ], "pop": 14427, "state": "FL" }, { "_id": "33441", "city": "DEERFIELD BEACH", "loc": [ -80.09917299999999, 26.309556 ], "pop": 24529, "state": "FL" }, { "_id": "33442", "city": "DEERFIELD BEACH", "loc": [ -80.14124200000001, 26.312365 ], "pop": 21532, "state": "FL" }, { "_id": "33444", "city": "DELRAY BEACH", "loc": [ -80.07932099999999, 26.456445 ], "pop": 18450, "state": "FL" }, { "_id": "33445", "city": "DELRAY BEACH", "loc": [ -80.105397, 26.456359 ], "pop": 20740, "state": "FL" }, { "_id": "33446", "city": "DELRAY BEACH", "loc": [ -80.158016, 26.451717 ], "pop": 13016, "state": "FL" }, { "_id": "33455", "city": "HOBE SOUND", "loc": [ -80.150851, 27.081306 ], "pop": 15209, "state": "FL" }, { "_id": "33458", "city": "JUPITER", "loc": [ -80.120091, 26.933938 ], "pop": 23869, "state": "FL" }, { "_id": "33460", "city": "LAKE WORTH", "loc": [ -80.05599599999999, 26.618207 ], "pop": 28653, "state": "FL" }, { "_id": "33461", "city": "LAKE WORTH", "loc": [ -80.094573, 26.62316 ], "pop": 30905, "state": "FL" }, { "_id": "33462", "city": "LANTANA", "loc": [ -80.077264, 26.576766 ], "pop": 30704, "state": "FL" }, { "_id": "33463", "city": "GREENACRES", "loc": [ -80.130503, 26.609609 ], "pop": 28841, "state": "FL" }, { "_id": "33467", "city": "LAKE WORTH", "loc": [ -80.168299, 26.610366 ], "pop": 21547, "state": "FL" }, { "_id": "33469", "city": "TEQUESTA", "loc": [ -80.100161, 26.966066 ], "pop": 11781, "state": "FL" }, { "_id": "33470", "city": "LOXAHATCHEE", "loc": [ -80.27600700000001, 26.738295 ], "pop": 14094, "state": "FL" }, { "_id": "33471", "city": "MOORE HAVEN", "loc": [ -81.21877600000001, 26.832749 ], "pop": 4724, "state": "FL" }, { "_id": "33476", "city": "PAHOKEE", "loc": [ -80.662897, 26.814199 ], "pop": 8354, "state": "FL" }, { "_id": "33477", "city": "JUPITER", "loc": [ -80.077034, 26.921701 ], "pop": 7748, "state": "FL" }, { "_id": "33478", "city": "JUPITER", "loc": [ -80.214388, 26.921242 ], "pop": 10534, "state": "FL" }, { "_id": "33480", "city": "PALM BEACH", "loc": [ -80.038825, 26.72065 ], "pop": 6588, "state": "FL" }, { "_id": "33483", "city": "DELRAY BEACH", "loc": [ -80.065637, 26.45457 ], "pop": 10326, "state": "FL" }, { "_id": "33484", "city": "DELRAY BEACH", "loc": [ -80.13459, 26.454272 ], "pop": 19141, "state": "FL" }, { "_id": "33486", "city": "BOCA RATON", "loc": [ -80.110418, 26.348099 ], "pop": 19601, "state": "FL" }, { "_id": "33487", "city": "HIGHLAND BEACH", "loc": [ -80.089072, 26.409142 ], "pop": 14606, "state": "FL" }, { "_id": "33493", "city": "SOUTH BAY", "loc": [ -80.73121399999999, 26.670126 ], "pop": 3723, "state": "FL" }, { "_id": "33496", "city": "BOCA RATON", "loc": [ -80.181287, 26.402975 ], "pop": 7116, "state": "FL" }, { "_id": "33498", "city": "BOCA RATON", "loc": [ -80.216087, 26.390693 ], "pop": 5871, "state": "FL" }, { "_id": "33510", "city": "BRANDON", "loc": [ -82.296554, 27.955112 ], "pop": 20184, "state": "FL" }, { "_id": "33511", "city": "BRANDON", "loc": [ -82.288116, 27.905649 ], "pop": 29861, "state": "FL" }, { "_id": "33513", "city": "BUSHNELL", "loc": [ -82.155297, 28.661062 ], "pop": 8728, "state": "FL" }, { "_id": "33514", "city": "CENTER HILL", "loc": [ -81.996289, 28.663484 ], "pop": 1202, "state": "FL" }, { "_id": "33525", "city": "RIDGE MANOR", "loc": [ -82.207936, 28.386912 ], "pop": 29328, "state": "FL" }, { "_id": "33527", "city": "DOVER", "loc": [ -82.21384500000001, 27.991975 ], "pop": 13171, "state": "FL" }, { "_id": "33534", "city": "GIBSONTON", "loc": [ -82.369831, 27.841059 ], "pop": 7010, "state": "FL" }, { "_id": "33538", "city": "LAKE PANASOFFKEE", "loc": [ -82.136279, 28.795261 ], "pop": 3617, "state": "FL" }, { "_id": "33540", "city": "ZEPHYRHILLS", "loc": [ -82.168347, 28.24096 ], "pop": 15608, "state": "FL" }, { "_id": "33541", "city": "ZEPHYRHILLS", "loc": [ -82.20565999999999, 28.231063 ], "pop": 17575, "state": "FL" }, { "_id": "33543", "city": "WESLEY CHAPEL", "loc": [ -82.288956, 28.210365 ], "pop": 4073, "state": "FL" }, { "_id": "33544", "city": "ZEPHYRHILLS", "loc": [ -82.34932999999999, 28.263664 ], "pop": 5989, "state": "FL" }, { "_id": "33547", "city": "LITHIA", "loc": [ -82.135679, 27.829349 ], "pop": 6780, "state": "FL" }, { "_id": "33549", "city": "LUTZ", "loc": [ -82.461045, 28.136688 ], "pop": 30905, "state": "FL" }, { "_id": "33556", "city": "ODESSA", "loc": [ -82.590506, 28.142072 ], "pop": 7046, "state": "FL" }, { "_id": "33565", "city": "PLANT CITY", "loc": [ -82.157554, 28.069855 ], "pop": 13299, "state": "FL" }, { "_id": "33566", "city": "PLANT CITY", "loc": [ -82.113816, 28.009448 ], "pop": 19533, "state": "FL" }, { "_id": "33567", "city": "PLANT CITY", "loc": [ -82.14626800000001, 27.976167 ], "pop": 18937, "state": "FL" }, { "_id": "33569", "city": "RIVERVIEW", "loc": [ -82.312473, 27.844952 ], "pop": 21930, "state": "FL" }, { "_id": "33570", "city": "RUSKIN", "loc": [ -82.435501, 27.701501 ], "pop": 14654, "state": "FL" }, { "_id": "33572", "city": "APOLLO BEACH", "loc": [ -82.41019900000001, 27.771553 ], "pop": 6074, "state": "FL" }, { "_id": "33573", "city": "SUN CITY CENTER", "loc": [ -82.353832, 27.714711 ], "pop": 9070, "state": "FL" }, { "_id": "33576", "city": "SAN ANTONIO", "loc": [ -82.288237, 28.337139 ], "pop": 1396, "state": "FL" }, { "_id": "33584", "city": "SEFFNER", "loc": [ -82.28629599999999, 27.992199 ], "pop": 20956, "state": "FL" }, { "_id": "33592", "city": "THONOTOSASSA", "loc": [ -82.308212, 28.061747 ], "pop": 9009, "state": "FL" }, { "_id": "33594", "city": "VALRICO", "loc": [ -82.246557, 27.912435 ], "pop": 27594, "state": "FL" }, { "_id": "33597", "city": "RIDGE MANOR ESTA", "loc": [ -82.092975, 28.577492 ], "pop": 5880, "state": "FL" }, { "_id": "33598", "city": "WIMAUMA", "loc": [ -82.315136, 27.701497 ], "pop": 7538, "state": "FL" }, { "_id": "33602", "city": "TAMPA", "loc": [ -82.45972, 27.961381 ], "pop": 8473, "state": "FL" }, { "_id": "33603", "city": "TAMPA", "loc": [ -82.462997, 27.984534 ], "pop": 19614, "state": "FL" }, { "_id": "33604", "city": "TAMPA", "loc": [ -82.457848, 28.017312 ], "pop": 34243, "state": "FL" }, { "_id": "33605", "city": "TAMPA", "loc": [ -82.433368, 27.967078 ], "pop": 19813, "state": "FL" }, { "_id": "33606", "city": "TAMPA", "loc": [ -82.467035, 27.933828 ], "pop": 14191, "state": "FL" }, { "_id": "33607", "city": "TAMPA", "loc": [ -82.489535, 27.962538 ], "pop": 22386, "state": "FL" }, { "_id": "33608", "city": "TAMPA", "loc": [ -82.507097, 27.865916 ], "pop": 3578, "state": "FL" }, { "_id": "33609", "city": "TAMPA", "loc": [ -82.50572, 27.942456 ], "pop": 15797, "state": "FL" }, { "_id": "33610", "city": "TAMPA", "loc": [ -82.404584, 27.995125 ], "pop": 34244, "state": "FL" }, { "_id": "33611", "city": "TAMPA", "loc": [ -82.506714, 27.891422 ], "pop": 30070, "state": "FL" }, { "_id": "33612", "city": "TAMPA", "loc": [ -82.450018, 28.050187 ], "pop": 36784, "state": "FL" }, { "_id": "33613", "city": "TAMPA", "loc": [ -82.445519, 28.077184 ], "pop": 24849, "state": "FL" }, { "_id": "33614", "city": "TAMPA", "loc": [ -82.503393, 28.00914 ], "pop": 39021, "state": "FL" }, { "_id": "33615", "city": "TAMPA", "loc": [ -82.580495, 28.008057 ], "pop": 36532, "state": "FL" }, { "_id": "33616", "city": "TAMPA", "loc": [ -82.52029, 27.87418 ], "pop": 11318, "state": "FL" }, { "_id": "33617", "city": "TAMPA", "loc": [ -82.394876, 28.038358 ], "pop": 38114, "state": "FL" }, { "_id": "33618", "city": "CARROLLWOOD", "loc": [ -82.493291, 28.075875 ], "pop": 20229, "state": "FL" }, { "_id": "33619", "city": "TAMPA", "loc": [ -82.375558, 27.93824 ], "pop": 27185, "state": "FL" }, { "_id": "33620", "city": "TAMPA", "loc": [ -82.409188, 28.069465 ], "pop": 3757, "state": "FL" }, { "_id": "33624", "city": "CARROLLWOOD", "loc": [ -82.524944, 28.077194 ], "pop": 39616, "state": "FL" }, { "_id": "33625", "city": "TAMPA", "loc": [ -82.558987, 28.072551 ], "pop": 14778, "state": "FL" }, { "_id": "33626", "city": "TAMPA", "loc": [ -82.616378, 28.050932 ], "pop": 2213, "state": "FL" }, { "_id": "33629", "city": "TAMPA", "loc": [ -82.507897, 27.92102 ], "pop": 21545, "state": "FL" }, { "_id": "33634", "city": "TAMPA", "loc": [ -82.556006, 28.006783 ], "pop": 18712, "state": "FL" }, { "_id": "33635", "city": "TAMPA", "loc": [ -82.604822, 28.03013 ], "pop": 6241, "state": "FL" }, { "_id": "33637", "city": "TAMPA", "loc": [ -82.365876, 28.03377 ], "pop": 9673, "state": "FL" }, { "_id": "33647", "city": "TAMPA", "loc": [ -82.367751, 28.114698 ], "pop": 5866, "state": "FL" }, { "_id": "33701", "city": "SAINT PETERSBURG", "loc": [ -82.638609, 27.772318 ], "pop": 15737, "state": "FL" }, { "_id": "33702", "city": "SAINT PETERSBURG", "loc": [ -82.644795, 27.842712 ], "pop": 28888, "state": "FL" }, { "_id": "33703", "city": "SAINT PETERSBURG", "loc": [ -82.62639299999999, 27.816957 ], "pop": 23348, "state": "FL" }, { "_id": "33704", "city": "SAINT PETERSBURG", "loc": [ -82.637289, 27.795435 ], "pop": 17112, "state": "FL" }, { "_id": "33705", "city": "SAINT PETERSBURG", "loc": [ -82.64349, 27.739113 ], "pop": 28261, "state": "FL" }, { "_id": "33706", "city": "SAINT PETERSBURG", "loc": [ -82.75164599999999, 27.745606 ], "pop": 18974, "state": "FL" }, { "_id": "33707", "city": "SAINT PETERSBURG", "loc": [ -82.72079100000001, 27.75487 ], "pop": 23630, "state": "FL" }, { "_id": "33708", "city": "MADEIRA BEACH", "loc": [ -82.80077900000001, 27.816529 ], "pop": 18018, "state": "FL" }, { "_id": "33709", "city": "KENNETH CITY", "loc": [ -82.729845, 27.817427 ], "pop": 26024, "state": "FL" }, { "_id": "33710", "city": "SAINT PETERSBURG", "loc": [ -82.72428499999999, 27.789798 ], "pop": 32402, "state": "FL" }, { "_id": "33711", "city": "SAINT PETERSBURG", "loc": [ -82.689708, 27.74649 ], "pop": 18084, "state": "FL" }, { "_id": "33712", "city": "SAINT PETERSBURG", "loc": [ -82.666298, 27.735336 ], "pop": 27715, "state": "FL" }, { "_id": "33713", "city": "SAINT PETERSBURG", "loc": [ -82.67793899999999, 27.789015 ], "pop": 29160, "state": "FL" }, { "_id": "33714", "city": "SAINT PETERSBURG", "loc": [ -82.677612, 27.817621 ], "pop": 18227, "state": "FL" }, { "_id": "33715", "city": "TIERRA VERDE", "loc": [ -82.71564600000001, 27.694792 ], "pop": 3877, "state": "FL" }, { "_id": "33716", "city": "SAINT PETERSBURG", "loc": [ -82.640039, 27.873764 ], "pop": 9328, "state": "FL" }, { "_id": "33801", "city": "LAKELAND", "loc": [ -81.939153, 28.038134 ], "pop": 45005, "state": "FL" }, { "_id": "33803", "city": "LAKELAND", "loc": [ -81.95228299999999, 28.014045 ], "pop": 23761, "state": "FL" }, { "_id": "33805", "city": "LAKELAND", "loc": [ -81.96091, 28.072006 ], "pop": 19676, "state": "FL" }, { "_id": "33809", "city": "LAKELAND", "loc": [ -81.984219, 28.123356 ], "pop": 39958, "state": "FL" }, { "_id": "33811", "city": "SOUTHSIDE", "loc": [ -82.00723600000001, 27.966284 ], "pop": 11456, "state": "FL" }, { "_id": "33813", "city": "SOUTHSIDE", "loc": [ -81.933187, 27.969534 ], "pop": 28497, "state": "FL" }, { "_id": "33821", "city": "ARCADIA", "loc": [ -81.86575499999999, 27.18996 ], "pop": 23865, "state": "FL" }, { "_id": "33823", "city": "AUBURNDALE", "loc": [ -81.812234, 28.072443 ], "pop": 24489, "state": "FL" }, { "_id": "33825", "city": "AVON PARK", "loc": [ -81.501486, 27.600085 ], "pop": 16945, "state": "FL" }, { "_id": "33827", "city": "BABSON PARK", "loc": [ -81.534221, 27.831698 ], "pop": 1901, "state": "FL" }, { "_id": "33830", "city": "BARTOW", "loc": [ -81.812684, 27.895664 ], "pop": 25968, "state": "FL" }, { "_id": "33834", "city": "DUETTE", "loc": [ -81.84505799999999, 27.627738 ], "pop": 3700, "state": "FL" }, { "_id": "33837", "city": "DAVENPORT", "loc": [ -81.607912, 28.196265 ], "pop": 8268, "state": "FL" }, { "_id": "33838", "city": "DUNDEE", "loc": [ -81.621207, 28.019412 ], "pop": 2335, "state": "FL" }, { "_id": "33839", "city": "EAGLE LAKE", "loc": [ -81.75635699999999, 27.978661 ], "pop": 1456, "state": "FL" }, { "_id": "33841", "city": "FORT MEADE", "loc": [ -81.782346, 27.746356 ], "pop": 8169, "state": "FL" }, { "_id": "33843", "city": "FROSTPROOF", "loc": [ -81.51477800000001, 27.721058 ], "pop": 8747, "state": "FL" }, { "_id": "33844", "city": "GRENELEFE", "loc": [ -81.614712, 28.095073 ], "pop": 23835, "state": "FL" }, { "_id": "33849", "city": "KATHLEEN", "loc": [ -82.043499, 28.205224 ], "pop": 1096, "state": "FL" }, { "_id": "33850", "city": "LAKE ALFRED", "loc": [ -81.727138, 28.089483 ], "pop": 3916, "state": "FL" }, { "_id": "33852", "city": "LAKE PLACID", "loc": [ -81.364918, 27.294474 ], "pop": 13767, "state": "FL" }, { "_id": "33853", "city": "LAKE WALES", "loc": [ -81.548805, 27.903734 ], "pop": 32570, "state": "FL" }, { "_id": "33857", "city": "LORIDA", "loc": [ -81.196533, 27.414952 ], "pop": 1186, "state": "FL" }, { "_id": "33860", "city": "MULBERRY", "loc": [ -82.00148900000001, 27.90202 ], "pop": 13338, "state": "FL" }, { "_id": "33865", "city": "ONA", "loc": [ -81.92805, 27.412657 ], "pop": 885, "state": "FL" }, { "_id": "33868", "city": "POLK CITY", "loc": [ -81.80828200000001, 28.19867 ], "pop": 7604, "state": "FL" }, { "_id": "33870", "city": "SEBRING", "loc": [ -81.435712, 27.492391 ], "pop": 19922, "state": "FL" }, { "_id": "33872", "city": "SEBRING", "loc": [ -81.48724199999999, 27.470289 ], "pop": 15390, "state": "FL" }, { "_id": "33873", "city": "WAUCHULA", "loc": [ -81.807388, 27.551742 ], "pop": 11513, "state": "FL" }, { "_id": "33880", "city": "ELOISE", "loc": [ -81.751507, 27.999296 ], "pop": 30803, "state": "FL" }, { "_id": "33881", "city": "WINTER HAVEN", "loc": [ -81.732485, 28.045219 ], "pop": 25957, "state": "FL" }, { "_id": "33884", "city": "CYPRESS GARDENS", "loc": [ -81.678905, 27.994901 ], "pop": 14771, "state": "FL" }, { "_id": "33890", "city": "ZOLFO SPRINGS", "loc": [ -81.742328, 27.480042 ], "pop": 3515, "state": "FL" }, { "_id": "33901", "city": "FORT MYERS", "loc": [ -81.8725, 26.620403 ], "pop": 22150, "state": "FL" }, { "_id": "33903", "city": "FORT MYERS", "loc": [ -81.909632, 26.678138 ], "pop": 20015, "state": "FL" }, { "_id": "33904", "city": "CAPE CORAL CENTR", "loc": [ -81.952243, 26.57746 ], "pop": 29483, "state": "FL" }, { "_id": "33905", "city": "TICE", "loc": [ -81.785341, 26.676472 ], "pop": 25029, "state": "FL" }, { "_id": "33907", "city": "FORT MYERS", "loc": [ -81.873558, 26.568057 ], "pop": 19015, "state": "FL" }, { "_id": "33908", "city": "FORT MYERS", "loc": [ -81.927589, 26.502518 ], "pop": 17050, "state": "FL" }, { "_id": "33909", "city": "CAPE CORAL CENTR", "loc": [ -81.95890900000001, 26.680276 ], "pop": 8622, "state": "FL" }, { "_id": "33912", "city": "FORT MYERS", "loc": [ -81.82455400000001, 26.49722 ], "pop": 20141, "state": "FL" }, { "_id": "33913", "city": "FORT MYERS", "loc": [ -81.706469, 26.522808 ], "pop": 473, "state": "FL" }, { "_id": "33914", "city": "CAPE CORAL CENTR", "loc": [ -81.990915, 26.56971 ], "pop": 15782, "state": "FL" }, { "_id": "33916", "city": "FORT MYERS", "loc": [ -81.842946, 26.646595 ], "pop": 17673, "state": "FL" }, { "_id": "33917", "city": "FORT MYERS", "loc": [ -81.859447, 26.707947 ], "pop": 24751, "state": "FL" }, { "_id": "33919", "city": "COLLEGE PARKWAY", "loc": [ -81.900587, 26.554159 ], "pop": 22641, "state": "FL" }, { "_id": "33920", "city": "ALVA", "loc": [ -81.63505499999999, 26.714657 ], "pop": 3044, "state": "FL" }, { "_id": "33922", "city": "BOKEELIA", "loc": [ -82.140064, 26.662726 ], "pop": 2979, "state": "FL" }, { "_id": "33923", "city": "BONITA SPRINGS", "loc": [ -81.789963, 26.348035 ], "pop": 19697, "state": "FL" }, { "_id": "33924", "city": "CAPTIVA", "loc": [ -82.261017, 26.750541 ], "pop": 831, "state": "FL" }, { "_id": "33927", "city": "EL JOBEAN", "loc": [ -82.19956999999999, 26.97608 ], "pop": 91, "state": "FL" }, { "_id": "33928", "city": "ESTERO", "loc": [ -81.810244, 26.435052 ], "pop": 1846, "state": "FL" }, { "_id": "33931", "city": "FORT MYERS BEACH", "loc": [ -81.924543, 26.451952 ], "pop": 10612, "state": "FL" }, { "_id": "33934", "city": "IMMOKALEE", "loc": [ -81.445365, 26.409794 ], "pop": 18066, "state": "FL" }, { "_id": "33935", "city": "LABELLE", "loc": [ -81.434027, 26.732093 ], "pop": 11346, "state": "FL" }, { "_id": "33936", "city": "LEHIGH ACRES", "loc": [ -81.61046, 26.615302 ], "pop": 10851, "state": "FL" }, { "_id": "33937", "city": "MARCO ISLAND", "loc": [ -81.720394, 25.939568 ], "pop": 9495, "state": "FL" }, { "_id": "33940", "city": "NAPLES", "loc": [ -81.802196, 26.171391 ], "pop": 20934, "state": "FL" }, { "_id": "33942", "city": "NAPLES", "loc": [ -81.766125, 26.201578 ], "pop": 23719, "state": "FL" }, { "_id": "33943", "city": "OCHOPEE", "loc": [ -81.311228, 25.87998 ], "pop": 1257, "state": "FL" }, { "_id": "33946", "city": "PLACIDA", "loc": [ -82.261638, 26.819301 ], "pop": 126, "state": "FL" }, { "_id": "33947", "city": "PLACIDA", "loc": [ -82.293778, 26.90039 ], "pop": 7811, "state": "FL" }, { "_id": "33948", "city": "PORT CHARLOTTE", "loc": [ -82.14117299999999, 26.98268 ], "pop": 12212, "state": "FL" }, { "_id": "33950", "city": "PUNTA GORDA", "loc": [ -82.053166, 26.915163 ], "pop": 15495, "state": "FL" }, { "_id": "33952", "city": "PORT CHARLOTTE", "loc": [ -82.096372, 26.990475 ], "pop": 27923, "state": "FL" }, { "_id": "33953", "city": "PORT CHARLOTTE", "loc": [ -82.211743, 27.004008 ], "pop": 1982, "state": "FL" }, { "_id": "33954", "city": "PORT CHARLOTTE", "loc": [ -82.110782, 27.022815 ], "pop": 3993, "state": "FL" }, { "_id": "33955", "city": "PUNTA GORDA", "loc": [ -81.954712, 26.823981 ], "pop": 5206, "state": "FL" }, { "_id": "33956", "city": "SAINT JAMES CITY", "loc": [ -82.09159099999999, 26.529012 ], "pop": 3653, "state": "FL" }, { "_id": "33957", "city": "SANIBEL", "loc": [ -82.086825, 26.4514 ], "pop": 5999, "state": "FL" }, { "_id": "33960", "city": "VENUS", "loc": [ -81.35941200000001, 27.13463 ], "pop": 925, "state": "FL" }, { "_id": "33961", "city": "NAPLES", "loc": [ -81.658635, 26.027721 ], "pop": 7121, "state": "FL" }, { "_id": "33962", "city": "NAPLES", "loc": [ -81.749661, 26.113096 ], "pop": 28714, "state": "FL" }, { "_id": "33963", "city": "NAPLES", "loc": [ -81.808092, 26.263499 ], "pop": 14863, "state": "FL" }, { "_id": "33964", "city": "NAPLES", "loc": [ -81.64043599999999, 26.211253 ], "pop": 5869, "state": "FL" }, { "_id": "33971", "city": "LEHIGH ACRES", "loc": [ -81.66582200000001, 26.602252 ], "pop": 11401, "state": "FL" }, { "_id": "33980", "city": "PORT CHARLOTTE", "loc": [ -82.058886, 26.983969 ], "pop": 7753, "state": "FL" }, { "_id": "33981", "city": "PORT CHARLOTTE", "loc": [ -82.23877400000001, 26.937925 ], "pop": 5758, "state": "FL" }, { "_id": "33982", "city": "PUNTA GORDA", "loc": [ -81.95448399999999, 26.966751 ], "pop": 6235, "state": "FL" }, { "_id": "33983", "city": "PUNTA GORDA", "loc": [ -82.016268, 27.007398 ], "pop": 7319, "state": "FL" }, { "_id": "33990", "city": "CAPE CORAL CENTR", "loc": [ -81.945967, 26.630893 ], "pop": 16975, "state": "FL" }, { "_id": "33991", "city": "CAPE CORAL CENTR", "loc": [ -82.006703, 26.628881 ], "pop": 5352, "state": "FL" }, { "_id": "33999", "city": "NAPLES", "loc": [ -81.70927, 26.191612 ], "pop": 21226, "state": "FL" }, { "_id": "34202", "city": "BRADEN RIVER", "loc": [ -82.431487, 27.46521 ], "pop": 6618, "state": "FL" }, { "_id": "34203", "city": "BRADEN RIVER", "loc": [ -82.54040000000001, 27.444871 ], "pop": 22408, "state": "FL" }, { "_id": "34205", "city": "WESTGATE", "loc": [ -82.584733, 27.480896 ], "pop": 31114, "state": "FL" }, { "_id": "34207", "city": "COLLEGE PLAZA", "loc": [ -82.58062700000001, 27.439663 ], "pop": 27775, "state": "FL" }, { "_id": "34208", "city": "BRADEN RIVER", "loc": [ -82.53696100000001, 27.485881 ], "pop": 20668, "state": "FL" }, { "_id": "34209", "city": "PALMA SOLA", "loc": [ -82.62763099999999, 27.487909 ], "pop": 30012, "state": "FL" }, { "_id": "34210", "city": "BRADENTON", "loc": [ -82.635752, 27.454393 ], "pop": 11345, "state": "FL" }, { "_id": "34215", "city": "CORTEZ", "loc": [ -82.700642, 27.472686 ], "pop": 1657, "state": "FL" }, { "_id": "34217", "city": "BRADENTON BEACH", "loc": [ -82.72102700000001, 27.515149 ], "pop": 6554, "state": "FL" }, { "_id": "34219", "city": "PARRISH", "loc": [ -82.39600900000001, 27.557162 ], "pop": 3811, "state": "FL" }, { "_id": "34221", "city": "PALMETTO", "loc": [ -82.562957, 27.542946 ], "pop": 23994, "state": "FL" }, { "_id": "34222", "city": "ELLENTON", "loc": [ -82.50060000000001, 27.53818 ], "pop": 8252, "state": "FL" }, { "_id": "34223", "city": "ENGLEWOOD", "loc": [ -82.359886, 26.966743 ], "pop": 15705, "state": "FL" }, { "_id": "34224", "city": "GROVE CITY", "loc": [ -82.31173099999999, 26.92504 ], "pop": 5110, "state": "FL" }, { "_id": "34228", "city": "WHITNEY BEACH", "loc": [ -82.638403, 27.38669 ], "pop": 5937, "state": "FL" }, { "_id": "34229", "city": "OSPREY", "loc": [ -82.485339, 27.18384 ], "pop": 3612, "state": "FL" }, { "_id": "34231", "city": "SOUTH TRAIL", "loc": [ -82.51379300000001, 27.26757 ], "pop": 32813, "state": "FL" }, { "_id": "34232", "city": "FOREST LAKES", "loc": [ -82.47570899999999, 27.320056 ], "pop": 29847, "state": "FL" }, { "_id": "34233", "city": "SARASOTA", "loc": [ -82.47698, 27.286614 ], "pop": 11476, "state": "FL" }, { "_id": "34234", "city": "MEADOWS VILLAGE", "loc": [ -82.53518200000001, 27.365355 ], "pop": 20243, "state": "FL" }, { "_id": "34235", "city": "SARASOTA", "loc": [ -82.484759, 27.367162 ], "pop": 11275, "state": "FL" }, { "_id": "34236", "city": "SARASOTA", "loc": [ -82.548624, 27.331588 ], "pop": 10942, "state": "FL" }, { "_id": "34237", "city": "SARASOTA", "loc": [ -82.512778, 27.336915 ], "pop": 15902, "state": "FL" }, { "_id": "34238", "city": "SARASOTA SQUARE", "loc": [ -82.48289800000001, 27.243834 ], "pop": 5493, "state": "FL" }, { "_id": "34239", "city": "SARASOTA", "loc": [ -82.51954499999999, 27.311137 ], "pop": 15949, "state": "FL" }, { "_id": "34240", "city": "SARASOTA", "loc": [ -82.385594, 27.32765 ], "pop": 4943, "state": "FL" }, { "_id": "34241", "city": "SARASOTA", "loc": [ -82.41811199999999, 27.282179 ], "pop": 8902, "state": "FL" }, { "_id": "34242", "city": "CRESCENT BEACH", "loc": [ -82.546932, 27.266025 ], "pop": 10594, "state": "FL" }, { "_id": "34243", "city": "SARASOTA", "loc": [ -82.530299, 27.407235 ], "pop": 14096, "state": "FL" }, { "_id": "34251", "city": "MYAKKA CITY", "loc": [ -82.18489700000001, 27.364764 ], "pop": 1636, "state": "FL" }, { "_id": "34275", "city": "NOKOMIS", "loc": [ -82.451779, 27.138398 ], "pop": 13638, "state": "FL" }, { "_id": "34285", "city": "VENICE", "loc": [ -82.44983000000001, 27.093312 ], "pop": 9069, "state": "FL" }, { "_id": "34287", "city": "NORTH PORT", "loc": [ -82.24161599999999, 27.047839 ], "pop": 16491, "state": "FL" }, { "_id": "34292", "city": "MID VENICE", "loc": [ -82.41511199999999, 27.103245 ], "pop": 13901, "state": "FL" }, { "_id": "34293", "city": "SOUTH VENICE", "loc": [ -82.404096, 27.053022 ], "pop": 26720, "state": "FL" }, { "_id": "34601", "city": "BROOKSVILLE", "loc": [ -82.37367399999999, 28.565805 ], "pop": 20190, "state": "FL" }, { "_id": "34602", "city": "RIDGE MANOR WEST", "loc": [ -82.29054499999999, 28.511167 ], "pop": 4940, "state": "FL" }, { "_id": "34606", "city": "SPRING HILL", "loc": [ -82.598084, 28.46551 ], "pop": 18190, "state": "FL" }, { "_id": "34607", "city": "SPRING HILL", "loc": [ -82.626671, 28.506546 ], "pop": 5420, "state": "FL" }, { "_id": "34608", "city": "SPRING HILL", "loc": [ -82.556206, 28.479696 ], "pop": 16755, "state": "FL" }, { "_id": "34609", "city": "SPRING HILL", "loc": [ -82.49989600000001, 28.477611 ], "pop": 19824, "state": "FL" }, { "_id": "34610", "city": "SHADY HILLS", "loc": [ -82.530148, 28.405084 ], "pop": 9958, "state": "FL" }, { "_id": "34613", "city": "BROOKSVILLE", "loc": [ -82.521286, 28.546558 ], "pop": 9899, "state": "FL" }, { "_id": "34614", "city": "BROOKSVILLE", "loc": [ -82.523613, 28.662244 ], "pop": 3687, "state": "FL" }, { "_id": "34615", "city": "CLEARWATER", "loc": [ -82.780807, 27.986241 ], "pop": 30847, "state": "FL" }, { "_id": "34616", "city": "CLEARWATER", "loc": [ -82.786711, 27.945624 ], "pop": 28460, "state": "FL" }, { "_id": "34619", "city": "CLEARWATER", "loc": [ -82.717248, 27.976503 ], "pop": 15886, "state": "FL" }, { "_id": "34620", "city": "CLEARWATER", "loc": [ -82.715885, 27.913981 ], "pop": 15769, "state": "FL" }, { "_id": "34621", "city": "CLEARWATER", "loc": [ -82.72371800000001, 28.02961 ], "pop": 16102, "state": "FL" }, { "_id": "34622", "city": "AIRPORT", "loc": [ -82.67687599999999, 27.896713 ], "pop": 3190, "state": "FL" }, { "_id": "34623", "city": "CLEARWATER", "loc": [ -82.747405, 28.002734 ], "pop": 20280, "state": "FL" }, { "_id": "34624", "city": "CLEARWATER", "loc": [ -82.74348500000001, 27.93595 ], "pop": 27315, "state": "FL" }, { "_id": "34625", "city": "CLEARWATER", "loc": [ -82.745504, 27.973063 ], "pop": 10394, "state": "FL" }, { "_id": "34630", "city": "CLEARWATER", "loc": [ -82.822281, 27.984526 ], "pop": 6231, "state": "FL" }, { "_id": "34635", "city": "BELLEAIR BEACH", "loc": [ -82.840486, 27.917605 ], "pop": 7736, "state": "FL" }, { "_id": "34639", "city": "LAND O LAKES", "loc": [ -82.45471999999999, 28.225849 ], "pop": 11815, "state": "FL" }, { "_id": "34640", "city": "BELLEAIR BLUFFS", "loc": [ -82.80197800000001, 27.915835 ], "pop": 22793, "state": "FL" }, { "_id": "34641", "city": "LARGO", "loc": [ -82.75937, 27.907547 ], "pop": 24087, "state": "FL" }, { "_id": "34642", "city": "SEMINOLE", "loc": [ -82.796896, 27.844571 ], "pop": 24078, "state": "FL" }, { "_id": "34643", "city": "LARGO", "loc": [ -82.762806, 27.880334 ], "pop": 17707, "state": "FL" }, { "_id": "34644", "city": "LARGO", "loc": [ -82.82628699999999, 27.883597 ], "pop": 20162, "state": "FL" }, { "_id": "34646", "city": "LARGO", "loc": [ -82.826978, 27.852906 ], "pop": 11284, "state": "FL" }, { "_id": "34647", "city": "LARGO", "loc": [ -82.758701, 27.851549 ], "pop": 15130, "state": "FL" }, { "_id": "34648", "city": "LARGO", "loc": [ -82.795946, 27.884391 ], "pop": 13347, "state": "FL" }, { "_id": "34652", "city": "NEW PORT RICHEY", "loc": [ -82.732721, 28.232574 ], "pop": 22422, "state": "FL" }, { "_id": "34653", "city": "NEW PORT RICHEY", "loc": [ -82.6986, 28.244398 ], "pop": 26729, "state": "FL" }, { "_id": "34654", "city": "NEW PORT RICHEY", "loc": [ -82.626423, 28.302201 ], "pop": 13750, "state": "FL" }, { "_id": "34655", "city": "NEW PORT RICHEY", "loc": [ -82.680729, 28.212898 ], "pop": 13849, "state": "FL" }, { "_id": "34665", "city": "PINELLAS PARK", "loc": [ -82.71335000000001, 27.840313 ], "pop": 24459, "state": "FL" }, { "_id": "34666", "city": "PINELLAS PARK", "loc": [ -82.70935299999999, 27.860742 ], "pop": 19840, "state": "FL" }, { "_id": "34667", "city": "HUDSON", "loc": [ -82.675669, 28.364763 ], "pop": 26410, "state": "FL" }, { "_id": "34668", "city": "PORT RICHEY", "loc": [ -82.692714, 28.301148 ], "pop": 39471, "state": "FL" }, { "_id": "34669", "city": "HUDSON", "loc": [ -82.628793, 28.350634 ], "pop": 8577, "state": "FL" }, { "_id": "34677", "city": "OLDSMAR", "loc": [ -82.68477799999999, 28.046035 ], "pop": 12858, "state": "FL" }, { "_id": "34683", "city": "PALM HARBOR", "loc": [ -82.758488, 28.066248 ], "pop": 42350, "state": "FL" }, { "_id": "34684", "city": "LAKE TARPON", "loc": [ -82.726573, 28.073963 ], "pop": 21753, "state": "FL" }, { "_id": "34685", "city": "PALM HARBOR", "loc": [ -82.69635700000001, 28.096725 ], "pop": 2278, "state": "FL" }, { "_id": "34689", "city": "TARPON SPRINGS", "loc": [ -82.74302299999999, 28.138465 ], "pop": 26381, "state": "FL" }, { "_id": "34690", "city": "HOLIDAY", "loc": [ -82.727935, 28.191273 ], "pop": 11980, "state": "FL" }, { "_id": "34691", "city": "HOLIDAY", "loc": [ -82.755965, 28.191336 ], "pop": 16548, "state": "FL" }, { "_id": "34695", "city": "SAFETY HARBOR", "loc": [ -82.696658, 28.009608 ], "pop": 16853, "state": "FL" }, { "_id": "34698", "city": "DUNEDIN", "loc": [ -82.77943399999999, 28.028382 ], "pop": 15304, "state": "FL" }, { "_id": "34705", "city": "ASTATULA", "loc": [ -81.71947299999999, 28.708754 ], "pop": 1831, "state": "FL" }, { "_id": "34711", "city": "CLERMONT", "loc": [ -81.757407, 28.552541 ], "pop": 15109, "state": "FL" }, { "_id": "34731", "city": "FRUITLAND PARK", "loc": [ -81.899755, 28.863949 ], "pop": 8513, "state": "FL" }, { "_id": "34736", "city": "GROVELAND", "loc": [ -81.874526, 28.564445 ], "pop": 8692, "state": "FL" }, { "_id": "34737", "city": "HOWEY IN THE HIL", "loc": [ -81.78998300000001, 28.709818 ], "pop": 1370, "state": "FL" }, { "_id": "34739", "city": "KENANSVILLE", "loc": [ -81.050049, 27.876698 ], "pop": 736, "state": "FL" }, { "_id": "34741", "city": "KISSIMMEE", "loc": [ -81.42420799999999, 28.305056 ], "pop": 23576, "state": "FL" }, { "_id": "34743", "city": "BUENA VENTURA LA", "loc": [ -81.356044, 28.329656 ], "pop": 14287, "state": "FL" }, { "_id": "34744", "city": "KISSIMMEE", "loc": [ -81.368122, 28.307807 ], "pop": 21101, "state": "FL" }, { "_id": "34746", "city": "KISSIMMEE", "loc": [ -81.467478, 28.26796 ], "pop": 12922, "state": "FL" }, { "_id": "34748", "city": "LEESBURG", "loc": [ -81.885772, 28.807965 ], "pop": 21309, "state": "FL" }, { "_id": "34756", "city": "MONTVERDE", "loc": [ -81.679368, 28.597153 ], "pop": 2216, "state": "FL" }, { "_id": "34758", "city": "KISSIMMEE", "loc": [ -81.487014, 28.198436 ], "pop": 6306, "state": "FL" }, { "_id": "34759", "city": "POINCIANA", "loc": [ -81.458984, 28.124786 ], "pop": 2430, "state": "FL" }, { "_id": "34761", "city": "OCOEE", "loc": [ -81.532618, 28.583685 ], "pop": 14171, "state": "FL" }, { "_id": "34762", "city": "OKAHUMPKA", "loc": [ -81.883949, 28.737257 ], "pop": 1779, "state": "FL" }, { "_id": "34769", "city": "SAINT CLOUD", "loc": [ -81.287626, 28.247992 ], "pop": 15024, "state": "FL" }, { "_id": "34771", "city": "SAINT CLOUD", "loc": [ -81.200311, 28.27301 ], "pop": 5870, "state": "FL" }, { "_id": "34772", "city": "SAINT CLOUD", "loc": [ -81.264493, 28.190518 ], "pop": 6041, "state": "FL" }, { "_id": "34773", "city": "SAINT CLOUD", "loc": [ -81.01755199999999, 28.129295 ], "pop": 1000, "state": "FL" }, { "_id": "34785", "city": "WILDWOOD", "loc": [ -82.03473, 28.845353 ], "pop": 10604, "state": "FL" }, { "_id": "34786", "city": "WINDERMERE", "loc": [ -81.535411, 28.50061 ], "pop": 5725, "state": "FL" }, { "_id": "34787", "city": "WINTER GARDEN", "loc": [ -81.591127, 28.542321 ], "pop": 18939, "state": "FL" }, { "_id": "34788", "city": "HAINES CREEK", "loc": [ -81.781159, 28.85744 ], "pop": 12883, "state": "FL" }, { "_id": "34797", "city": "YALAHA", "loc": [ -81.826324, 28.744443 ], "pop": 1061, "state": "FL" }, { "_id": "34945", "city": "FORT PIERCE", "loc": [ -80.443963, 27.438233 ], "pop": 3711, "state": "FL" }, { "_id": "34946", "city": "FORT PIERCE", "loc": [ -80.35996, 27.50077 ], "pop": 10873, "state": "FL" }, { "_id": "34947", "city": "FORT PIERCE", "loc": [ -80.359185, 27.449281 ], "pop": 10882, "state": "FL" }, { "_id": "34949", "city": "FORT PIERCE", "loc": [ -80.26146799999999, 27.389594 ], "pop": 8853, "state": "FL" }, { "_id": "34950", "city": "FORT PIERCE", "loc": [ -80.3385, 27.448567 ], "pop": 19708, "state": "FL" }, { "_id": "34951", "city": "FORT PIERCE", "loc": [ -80.40519500000001, 27.539097 ], "pop": 6821, "state": "FL" }, { "_id": "34952", "city": "PORT SAINT LUCIE", "loc": [ -80.297971, 27.288895 ], "pop": 23437, "state": "FL" }, { "_id": "34953", "city": "PORT SAINT LUCIE", "loc": [ -80.379323, 27.262506 ], "pop": 11796, "state": "FL" }, { "_id": "34956", "city": "INDIANTOWN", "loc": [ -80.480277, 27.061461 ], "pop": 7823, "state": "FL" }, { "_id": "34957", "city": "JENSEN BEACH", "loc": [ -80.227656, 27.235568 ], "pop": 13656, "state": "FL" }, { "_id": "34972", "city": "BASINGER", "loc": [ -80.847853, 27.311532 ], "pop": 14955, "state": "FL" }, { "_id": "34974", "city": "OKEECHOBEE", "loc": [ -80.84103, 27.200224 ], "pop": 18122, "state": "FL" }, { "_id": "34981", "city": "FORT PIERCE", "loc": [ -80.362257, 27.404882 ], "pop": 3243, "state": "FL" }, { "_id": "34982", "city": "FORT PIERCE", "loc": [ -80.32463300000001, 27.390764 ], "pop": 20061, "state": "FL" }, { "_id": "34983", "city": "PORT SAINT LUCIE", "loc": [ -80.345029, 27.309444 ], "pop": 22031, "state": "FL" }, { "_id": "34984", "city": "PORT SAINT LUCIE", "loc": [ -80.338936, 27.265476 ], "pop": 7091, "state": "FL" }, { "_id": "34986", "city": "PORT SAINT LUCIE", "loc": [ -80.40304500000001, 27.32148 ], "pop": 610, "state": "FL" }, { "_id": "34987", "city": "PORT SAINT LUCIE", "loc": [ -80.477052, 27.260595 ], "pop": 67, "state": "FL" }, { "_id": "34988", "city": "PORT SAINT LUCIE", "loc": [ -80.51725999999999, 27.323233 ], "pop": 416, "state": "FL" }, { "_id": "34990", "city": "PALM CITY", "loc": [ -80.291646, 27.165646 ], "pop": 13225, "state": "FL" }, { "_id": "34994", "city": "STUART", "loc": [ -80.25378600000001, 27.196834 ], "pop": 14524, "state": "FL" }, { "_id": "34996", "city": "STUART", "loc": [ -80.21637800000001, 27.192857 ], "pop": 7410, "state": "FL" }, { "_id": "34997", "city": "STUART", "loc": [ -80.212937, 27.139817 ], "pop": 25374, "state": "FL" }, { "_id": "35004", "city": "ACMAR", "loc": [ -86.51557, 33.584132 ], "pop": 6055, "state": "AL" }, { "_id": "35005", "city": "ADAMSVILLE", "loc": [ -86.959727, 33.588437 ], "pop": 10616, "state": "AL" }, { "_id": "35006", "city": "ADGER", "loc": [ -87.167455, 33.434277 ], "pop": 3205, "state": "AL" }, { "_id": "35007", "city": "KEYSTONE", "loc": [ -86.812861, 33.236868 ], "pop": 14218, "state": "AL" }, { "_id": "35010", "city": "NEW SITE", "loc": [ -85.951086, 32.941445 ], "pop": 19942, "state": "AL" }, { "_id": "35014", "city": "ALPINE", "loc": [ -86.208934, 33.331165 ], "pop": 3062, "state": "AL" }, { "_id": "35016", "city": "ARAB", "loc": [ -86.489638, 34.328339 ], "pop": 13650, "state": "AL" }, { "_id": "35019", "city": "BAILEYTON", "loc": [ -86.62129899999999, 34.268298 ], "pop": 1781, "state": "AL" }, { "_id": "35020", "city": "BESSEMER", "loc": [ -86.947547, 33.409002 ], "pop": 40549, "state": "AL" }, { "_id": "35023", "city": "HUEYTOWN", "loc": [ -86.999607, 33.414625 ], "pop": 39677, "state": "AL" }, { "_id": "35031", "city": "BLOUNTSVILLE", "loc": [ -86.568628, 34.092937 ], "pop": 9058, "state": "AL" }, { "_id": "35033", "city": "BREMEN", "loc": [ -87.00428100000001, 33.973664 ], "pop": 3448, "state": "AL" }, { "_id": "35034", "city": "BRENT", "loc": [ -87.211387, 32.93567 ], "pop": 3791, "state": "AL" }, { "_id": "35035", "city": "BRIERFIELD", "loc": [ -86.951672, 33.042747 ], "pop": 1282, "state": "AL" }, { "_id": "35040", "city": "CALERA", "loc": [ -86.755987, 33.1098 ], "pop": 4675, "state": "AL" }, { "_id": "35042", "city": "CENTREVILLE", "loc": [ -87.11924, 32.950324 ], "pop": 4902, "state": "AL" }, { "_id": "35043", "city": "CHELSEA", "loc": [ -86.614132, 33.371582 ], "pop": 4781, "state": "AL" }, { "_id": "35044", "city": "COOSA PINES", "loc": [ -86.337622, 33.266928 ], "pop": 7985, "state": "AL" }, { "_id": "35045", "city": "CLANTON", "loc": [ -86.642472, 32.835532 ], "pop": 13990, "state": "AL" }, { "_id": "35049", "city": "CLEVELAND", "loc": [ -86.559355, 33.992106 ], "pop": 2369, "state": "AL" }, { "_id": "35051", "city": "COLUMBIANA", "loc": [ -86.616145, 33.176964 ], "pop": 4486, "state": "AL" }, { "_id": "35053", "city": "CRANE HILL", "loc": [ -87.048395, 34.082117 ], "pop": 2270, "state": "AL" }, { "_id": "35054", "city": "CROPWELL", "loc": [ -86.28002600000001, 33.506448 ], "pop": 4171, "state": "AL" }, { "_id": "35055", "city": "CULLMAN", "loc": [ -86.82977700000001, 34.176146 ], "pop": 31708, "state": "AL" }, { "_id": "35061", "city": "DOLOMITE", "loc": [ -86.956435, 33.465424 ], "pop": 1476, "state": "AL" }, { "_id": "35062", "city": "DORA", "loc": [ -87.040148, 33.734947 ], "pop": 11017, "state": "AL" }, { "_id": "35063", "city": "EMPIRE", "loc": [ -87.016139, 33.825589 ], "pop": 2429, "state": "AL" }, { "_id": "35064", "city": "FAIRFIELD", "loc": [ -86.918262, 33.473494 ], "pop": 12106, "state": "AL" }, { "_id": "35068", "city": "COALBURG", "loc": [ -86.813614, 33.611283 ], "pop": 5909, "state": "AL" }, { "_id": "35071", "city": "GARDENDALE", "loc": [ -86.822481, 33.71891 ], "pop": 17968, "state": "AL" }, { "_id": "35072", "city": "GOODWATER", "loc": [ -86.078149, 33.074642 ], "pop": 3813, "state": "AL" }, { "_id": "35073", "city": "ALDEN", "loc": [ -86.948221, 33.63356 ], "pop": 4429, "state": "AL" }, { "_id": "35077", "city": "HANCEVILLE", "loc": [ -86.78484400000001, 34.051569 ], "pop": 10186, "state": "AL" }, { "_id": "35078", "city": "HARPERSVILLE", "loc": [ -86.429441, 33.36746 ], "pop": 4905, "state": "AL" }, { "_id": "35079", "city": "HAYDEN", "loc": [ -86.81767000000001, 33.885806 ], "pop": 6533, "state": "AL" }, { "_id": "35080", "city": "HELENA", "loc": [ -86.81378599999999, 33.316978 ], "pop": 9938, "state": "AL" }, { "_id": "35083", "city": "HOLLY POND", "loc": [ -86.617441, 34.190085 ], "pop": 3838, "state": "AL" }, { "_id": "35085", "city": "JEMISON", "loc": [ -86.718052, 32.980539 ], "pop": 7202, "state": "AL" }, { "_id": "35087", "city": "JOPPA", "loc": [ -86.551939, 34.283739 ], "pop": 987, "state": "AL" }, { "_id": "35089", "city": "KELLYTON", "loc": [ -86.04839699999999, 32.979068 ], "pop": 1584, "state": "AL" }, { "_id": "35091", "city": "KIMBERLY", "loc": [ -86.80841700000001, 33.768355 ], "pop": 1045, "state": "AL" }, { "_id": "35094", "city": "LEEDS", "loc": [ -86.57482400000001, 33.528333 ], "pop": 10421, "state": "AL" }, { "_id": "35096", "city": "LINCOLN", "loc": [ -86.111152, 33.605913 ], "pop": 5033, "state": "AL" }, { "_id": "35098", "city": "LOGAN", "loc": [ -87.038115, 34.184079 ], "pop": 2379, "state": "AL" }, { "_id": "35111", "city": "MC CALLA", "loc": [ -87.102379, 33.284546 ], "pop": 8147, "state": "AL" }, { "_id": "35114", "city": "MAYLENE", "loc": [ -86.87274499999999, 33.231694 ], "pop": 3727, "state": "AL" }, { "_id": "35115", "city": "MONTEVALLO", "loc": [ -86.862228, 33.124765 ], "pop": 11638, "state": "AL" }, { "_id": "35116", "city": "MORRIS", "loc": [ -86.77255100000001, 33.739172 ], "pop": 3622, "state": "AL" }, { "_id": "35117", "city": "MOUNT OLIVE", "loc": [ -86.87170999999999, 33.67678 ], "pop": 3841, "state": "AL" }, { "_id": "35118", "city": "SYLVAN SPRINGS", "loc": [ -87.043998, 33.540696 ], "pop": 3948, "state": "AL" }, { "_id": "35120", "city": "ODENVILLE", "loc": [ -86.408952, 33.675611 ], "pop": 1123, "state": "AL" }, { "_id": "35121", "city": "ONEONTA", "loc": [ -86.474118, 33.925858 ], "pop": 8956, "state": "AL" }, { "_id": "35124", "city": "INDIAN SPRINGS", "loc": [ -86.80617599999999, 33.31046 ], "pop": 7412, "state": "AL" }, { "_id": "35125", "city": "PELL CITY", "loc": [ -86.34315100000001, 33.597889 ], "pop": 17981, "state": "AL" }, { "_id": "35126", "city": "DIXIANA", "loc": [ -86.656542, 33.708131 ], "pop": 17068, "state": "AL" }, { "_id": "35127", "city": "PLEASANT GROVE", "loc": [ -86.976586, 33.488336 ], "pop": 8458, "state": "AL" }, { "_id": "35130", "city": "QUINTON", "loc": [ -87.10066, 33.656065 ], "pop": 2198, "state": "AL" }, { "_id": "35131", "city": "RAGLAND", "loc": [ -86.1619, 33.736677 ], "pop": 2797, "state": "AL" }, { "_id": "35133", "city": "REMLAP", "loc": [ -86.641662, 33.846204 ], "pop": 6013, "state": "AL" }, { "_id": "35135", "city": "RIVERSIDE", "loc": [ -86.198341, 33.608832 ], "pop": 1004, "state": "AL" }, { "_id": "35136", "city": "ROCKFORD", "loc": [ -86.24000599999999, 32.877957 ], "pop": 1819, "state": "AL" }, { "_id": "35143", "city": "SHELBY", "loc": [ -86.553606, 33.078483 ], "pop": 1846, "state": "AL" }, { "_id": "35146", "city": "SPRINGVILLE", "loc": [ -86.439407, 33.738647 ], "pop": 8723, "state": "AL" }, { "_id": "35147", "city": "STERRETT", "loc": [ -86.491732, 33.446103 ], "pop": 617, "state": "AL" }, { "_id": "35148", "city": "SUMITON", "loc": [ -87.044545, 33.768005 ], "pop": 3066, "state": "AL" }, { "_id": "35150", "city": "SYLACAUGA", "loc": [ -86.27125700000001, 33.171675 ], "pop": 24424, "state": "AL" }, { "_id": "35160", "city": "TALLADEGA", "loc": [ -86.11335200000001, 33.435445 ], "pop": 29778, "state": "AL" }, { "_id": "35171", "city": "THORSBY", "loc": [ -86.746724, 32.923755 ], "pop": 4131, "state": "AL" }, { "_id": "35172", "city": "TRAFFORD", "loc": [ -86.743414, 33.819038 ], "pop": 909, "state": "AL" }, { "_id": "35173", "city": "TRUSSVILLE", "loc": [ -86.598068, 33.633932 ], "pop": 13367, "state": "AL" }, { "_id": "35175", "city": "UNION GROVE", "loc": [ -86.462793, 34.409345 ], "pop": 4921, "state": "AL" }, { "_id": "35176", "city": "VANDIVER", "loc": [ -86.501278, 33.480704 ], "pop": 1066, "state": "AL" }, { "_id": "35178", "city": "VINCENT", "loc": [ -86.39942499999999, 33.401049 ], "pop": 295, "state": "AL" }, { "_id": "35179", "city": "VINEMONT", "loc": [ -86.91251200000001, 34.262121 ], "pop": 8852, "state": "AL" }, { "_id": "35180", "city": "WARRIOR", "loc": [ -86.819849, 33.852862 ], "pop": 530, "state": "AL" }, { "_id": "35183", "city": "WEOGUFKA", "loc": [ -86.304203, 33.02381 ], "pop": 1249, "state": "AL" }, { "_id": "35184", "city": "WEST BLOCTON", "loc": [ -87.13694, 33.142431 ], "pop": 5276, "state": "AL" }, { "_id": "35186", "city": "WILSONVILLE", "loc": [ -86.529894, 33.229255 ], "pop": 5224, "state": "AL" }, { "_id": "35188", "city": "WOODSTOCK", "loc": [ -87.16346900000001, 33.169808 ], "pop": 691, "state": "AL" }, { "_id": "35203", "city": "BIRMINGHAM", "loc": [ -86.80662599999999, 33.520994 ], "pop": 4064, "state": "AL" }, { "_id": "35204", "city": "BIRMINGHAM", "loc": [ -86.837198, 33.51795 ], "pop": 18193, "state": "AL" }, { "_id": "35205", "city": "BIRMINGHAM", "loc": [ -86.805937, 33.495144 ], "pop": 23024, "state": "AL" }, { "_id": "35206", "city": "BIRMINGHAM", "loc": [ -86.719854, 33.567797 ], "pop": 22050, "state": "AL" }, { "_id": "35207", "city": "BIRMINGHAM", "loc": [ -86.815344, 33.559383 ], "pop": 13901, "state": "AL" }, { "_id": "35208", "city": "BIRMINGHAM", "loc": [ -86.879884, 33.497658 ], "pop": 19328, "state": "AL" }, { "_id": "35209", "city": "HOMEWOOD", "loc": [ -86.806738, 33.469624 ], "pop": 24973, "state": "AL" }, { "_id": "35210", "city": "IRONDALE", "loc": [ -86.685697, 33.532797 ], "pop": 15047, "state": "AL" }, { "_id": "35211", "city": "BIRMINGHAM", "loc": [ -86.85903999999999, 33.481565 ], "pop": 35836, "state": "AL" }, { "_id": "35212", "city": "BIRMINGHAM", "loc": [ -86.74952399999999, 33.540883 ], "pop": 17865, "state": "AL" }, { "_id": "35213", "city": "CRESTLINE HEIGHT", "loc": [ -86.742108, 33.508195 ], "pop": 13191, "state": "AL" }, { "_id": "35214", "city": "BIRMINGHAM", "loc": [ -86.886989, 33.555445 ], "pop": 23293, "state": "AL" }, { "_id": "35215", "city": "CENTER POINT", "loc": [ -86.693197, 33.635447 ], "pop": 43862, "state": "AL" }, { "_id": "35216", "city": "VESTAVIA HILLS", "loc": [ -86.790425, 33.41531 ], "pop": 29224, "state": "AL" }, { "_id": "35217", "city": "BIRMINGHAM", "loc": [ -86.764995, 33.5887 ], "pop": 17366, "state": "AL" }, { "_id": "35218", "city": "BIRMINGHAM", "loc": [ -86.892993, 33.505972 ], "pop": 12137, "state": "AL" }, { "_id": "35221", "city": "BIRMINGHAM", "loc": [ -86.89349300000001, 33.452316 ], "pop": 5850, "state": "AL" }, { "_id": "35222", "city": "BIRMINGHAM", "loc": [ -86.76657899999999, 33.521859 ], "pop": 10035, "state": "AL" }, { "_id": "35223", "city": "MOUNTAIN BROOK", "loc": [ -86.73658399999999, 33.488726 ], "pop": 11117, "state": "AL" }, { "_id": "35224", "city": "BIRMINGHAM", "loc": [ -86.93419299999999, 33.519126 ], "pop": 7894, "state": "AL" }, { "_id": "35226", "city": "BLUFF PARK", "loc": [ -86.83125699999999, 33.403675 ], "pop": 23992, "state": "AL" }, { "_id": "35228", "city": "MIDFIELD", "loc": [ -86.914703, 33.462446 ], "pop": 9294, "state": "AL" }, { "_id": "35233", "city": "BIRMINGHAM", "loc": [ -86.800257, 33.506161 ], "pop": 842, "state": "AL" }, { "_id": "35234", "city": "BIRMINGHAM", "loc": [ -86.80685, 33.53775 ], "pop": 10928, "state": "AL" }, { "_id": "35235", "city": "CENTER POINT", "loc": [ -86.661051, 33.618045 ], "pop": 15873, "state": "AL" }, { "_id": "35242", "city": "SHOAL CREEK", "loc": [ -86.705511, 33.401559 ], "pop": 16228, "state": "AL" }, { "_id": "35243", "city": "CAHABA HEIGHTS", "loc": [ -86.74367599999999, 33.446053 ], "pop": 13091, "state": "AL" }, { "_id": "35244", "city": "HOOVER", "loc": [ -86.776381, 33.371776 ], "pop": 9758, "state": "AL" }, { "_id": "35401", "city": "TUSCALOOSA", "loc": [ -87.56266599999999, 33.196891 ], "pop": 42124, "state": "AL" }, { "_id": "35404", "city": "HOLT", "loc": [ -87.488079, 33.210914 ], "pop": 21997, "state": "AL" }, { "_id": "35405", "city": "TUSCALOOSA", "loc": [ -87.51443500000001, 33.161704 ], "pop": 23663, "state": "AL" }, { "_id": "35406", "city": "TUSCALOOSA", "loc": [ -87.536035, 33.272174 ], "pop": 12578, "state": "AL" }, { "_id": "35441", "city": "STEWART", "loc": [ -87.708558, 32.872354 ], "pop": 1745, "state": "AL" }, { "_id": "35442", "city": "ALICEVILLE", "loc": [ -88.16668900000001, 33.122813 ], "pop": 5196, "state": "AL" }, { "_id": "35443", "city": "BOLIGEE", "loc": [ -88.026652, 32.774646 ], "pop": 1073, "state": "AL" }, { "_id": "35444", "city": "BROOKWOOD", "loc": [ -87.30902500000001, 33.277523 ], "pop": 2319, "state": "AL" }, { "_id": "35446", "city": "BUHL", "loc": [ -87.718886, 33.249448 ], "pop": 1662, "state": "AL" }, { "_id": "35447", "city": "CARROLLTON", "loc": [ -88.132122, 33.248506 ], "pop": 5007, "state": "AL" }, { "_id": "35452", "city": "COKER", "loc": [ -87.636528, 33.252612 ], "pop": 5747, "state": "AL" }, { "_id": "35453", "city": "COTTONDALE", "loc": [ -87.387051, 33.176667 ], "pop": 4727, "state": "AL" }, { "_id": "35456", "city": "DUNCANVILLE", "loc": [ -87.49497700000001, 33.082815 ], "pop": 5514, "state": "AL" }, { "_id": "35457", "city": "ECHOLA", "loc": [ -87.807202, 33.316559 ], "pop": 223, "state": "AL" }, { "_id": "35458", "city": "ELROD", "loc": [ -87.801429, 33.343678 ], "pop": 809, "state": "AL" }, { "_id": "35459", "city": "EMELLE", "loc": [ -88.305747, 32.754963 ], "pop": 491, "state": "AL" }, { "_id": "35460", "city": "EPES", "loc": [ -88.16144300000001, 32.763371 ], "pop": 1391, "state": "AL" }, { "_id": "35461", "city": "ETHELSVILLE", "loc": [ -88.221987, 33.386816 ], "pop": 719, "state": "AL" }, { "_id": "35462", "city": "EUTAW", "loc": [ -87.930297, 32.888871 ], "pop": 6586, "state": "AL" }, { "_id": "35463", "city": "FOSTERS", "loc": [ -87.735688, 33.135859 ], "pop": 2100, "state": "AL" }, { "_id": "35464", "city": "GAINESVILLE", "loc": [ -88.271558, 32.908364 ], "pop": 1051, "state": "AL" }, { "_id": "35466", "city": "GORDO", "loc": [ -87.900504, 33.346917 ], "pop": 4333, "state": "AL" }, { "_id": "35469", "city": "KNOXVILLE", "loc": [ -87.791855, 32.982423 ], "pop": 373, "state": "AL" }, { "_id": "35470", "city": "COATOPA", "loc": [ -88.173592, 32.588509 ], "pop": 6055, "state": "AL" }, { "_id": "35474", "city": "CYPRESS", "loc": [ -87.615134, 32.978853 ], "pop": 2659, "state": "AL" }, { "_id": "35476", "city": "NORTHPORT", "loc": [ -87.591441, 33.283425 ], "pop": 20114, "state": "AL" }, { "_id": "35480", "city": "RALPH", "loc": [ -87.744984, 33.062868 ], "pop": 927, "state": "AL" }, { "_id": "35481", "city": "REFORM", "loc": [ -88.02027699999999, 33.395945 ], "pop": 4062, "state": "AL" }, { "_id": "35490", "city": "VANCE", "loc": [ -87.257362, 33.17498 ], "pop": 1234, "state": "AL" }, { "_id": "35501", "city": "JASPER", "loc": [ -87.249144, 33.871672 ], "pop": 30600, "state": "AL" }, { "_id": "35540", "city": "ADDISON", "loc": [ -87.194766, 34.205571 ], "pop": 3263, "state": "AL" }, { "_id": "35541", "city": "ARLEY", "loc": [ -87.182761, 34.063234 ], "pop": 2645, "state": "AL" }, { "_id": "35542", "city": "BANKSTON", "loc": [ -87.68965, 33.70083 ], "pop": 651, "state": "AL" }, { "_id": "35543", "city": "BEAR CREEK", "loc": [ -87.686083, 34.213469 ], "pop": 3748, "state": "AL" }, { "_id": "35544", "city": "BEAVERTON", "loc": [ -88.01567, 33.942877 ], "pop": 1014, "state": "AL" }, { "_id": "35546", "city": "BERRY", "loc": [ -87.622563, 33.694485 ], "pop": 4887, "state": "AL" }, { "_id": "35548", "city": "BRILLIANT", "loc": [ -87.756315, 34.037702 ], "pop": 2515, "state": "AL" }, { "_id": "35549", "city": "CARBON HILL", "loc": [ -87.540328, 33.909252 ], "pop": 3597, "state": "AL" }, { "_id": "35550", "city": "CORDOVA", "loc": [ -87.18406, 33.768033 ], "pop": 5273, "state": "AL" }, { "_id": "35552", "city": "DETROIT", "loc": [ -88.16063, 34.010874 ], "pop": 938, "state": "AL" }, { "_id": "35553", "city": "DOUBLE SPRINGS", "loc": [ -87.397431, 34.138682 ], "pop": 4797, "state": "AL" }, { "_id": "35554", "city": "ELDRIDGE", "loc": [ -87.61939700000001, 33.931546 ], "pop": 421, "state": "AL" }, { "_id": "35555", "city": "FAYETTE", "loc": [ -87.834647, 33.697397 ], "pop": 10776, "state": "AL" }, { "_id": "35563", "city": "GUIN", "loc": [ -87.90237999999999, 33.967624 ], "pop": 3948, "state": "AL" }, { "_id": "35564", "city": "HACKLEBURG", "loc": [ -87.86076199999999, 34.267803 ], "pop": 2828, "state": "AL" }, { "_id": "35565", "city": "HALEYVILLE", "loc": [ -87.593811, 34.231423 ], "pop": 9141, "state": "AL" }, { "_id": "35570", "city": "HAMILTON", "loc": [ -88.008521, 34.153413 ], "pop": 11184, "state": "AL" }, { "_id": "35571", "city": "HODGES", "loc": [ -87.959023, 34.341664 ], "pop": 798, "state": "AL" }, { "_id": "35572", "city": "HOUSTON", "loc": [ -87.26183, 34.118042 ], "pop": 429, "state": "AL" }, { "_id": "35574", "city": "KENNEDY", "loc": [ -88.05172, 33.574964 ], "pop": 3618, "state": "AL" }, { "_id": "35575", "city": "LYNN", "loc": [ -87.53981400000001, 34.052984 ], "pop": 1778, "state": "AL" }, { "_id": "35576", "city": "MILLPORT", "loc": [ -88.200003, 33.54013 ], "pop": 2286, "state": "AL" }, { "_id": "35578", "city": "NAUVOO", "loc": [ -87.43244900000001, 33.929859 ], "pop": 5004, "state": "AL" }, { "_id": "35579", "city": "OAKMAN", "loc": [ -87.368574, 33.700174 ], "pop": 3700, "state": "AL" }, { "_id": "35580", "city": "PARRISH", "loc": [ -87.265773, 33.721307 ], "pop": 4775, "state": "AL" }, { "_id": "35581", "city": "PHIL CAMPBELL", "loc": [ -87.715431, 34.347018 ], "pop": 5345, "state": "AL" }, { "_id": "35582", "city": "RED BAY", "loc": [ -88.112914, 34.451259 ], "pop": 5159, "state": "AL" }, { "_id": "35585", "city": "SPRUCE PINE", "loc": [ -87.712149, 34.384796 ], "pop": 465, "state": "AL" }, { "_id": "35586", "city": "SULLIGENT", "loc": [ -88.150774, 33.8549 ], "pop": 4489, "state": "AL" }, { "_id": "35587", "city": "TOWNLEY", "loc": [ -87.437248, 33.84702 ], "pop": 1819, "state": "AL" }, { "_id": "35592", "city": "VERNON", "loc": [ -88.097919, 33.761285 ], "pop": 4752, "state": "AL" }, { "_id": "35593", "city": "VINA", "loc": [ -88.077422, 34.37116 ], "pop": 888, "state": "AL" }, { "_id": "35594", "city": "WINFIELD", "loc": [ -87.79716000000001, 33.930256 ], "pop": 6750, "state": "AL" }, { "_id": "35601", "city": "DECATUR", "loc": [ -86.98868, 34.589599 ], "pop": 36696, "state": "AL" }, { "_id": "35603", "city": "DECATUR", "loc": [ -87.000389, 34.548417 ], "pop": 17861, "state": "AL" }, { "_id": "35610", "city": "ANDERSON", "loc": [ -87.272327, 34.951777 ], "pop": 2039, "state": "AL" }, { "_id": "35611", "city": "ATHENS", "loc": [ -86.970733, 34.803604 ], "pop": 35441, "state": "AL" }, { "_id": "35616", "city": "CHEROKEE", "loc": [ -87.97244499999999, 34.744188 ], "pop": 4811, "state": "AL" }, { "_id": "35618", "city": "COURTLAND", "loc": [ -87.314255, 34.671866 ], "pop": 2733, "state": "AL" }, { "_id": "35619", "city": "DANVILLE", "loc": [ -87.05318699999999, 34.452189 ], "pop": 4614, "state": "AL" }, { "_id": "35620", "city": "ELKMONT", "loc": [ -86.91045200000001, 34.915241 ], "pop": 8013, "state": "AL" }, { "_id": "35621", "city": "EVA", "loc": [ -86.704427, 34.347778 ], "pop": 3977, "state": "AL" }, { "_id": "35622", "city": "FALKVILLE", "loc": [ -86.91308600000001, 34.347653 ], "pop": 5392, "state": "AL" }, { "_id": "35630", "city": "FLORENCE", "loc": [ -87.655985, 34.830547 ], "pop": 38725, "state": "AL" }, { "_id": "35633", "city": "FLORENCE", "loc": [ -87.739778, 34.882471 ], "pop": 16478, "state": "AL" }, { "_id": "35640", "city": "HARTSELLE", "loc": [ -86.924235, 34.448206 ], "pop": 17963, "state": "AL" }, { "_id": "35643", "city": "HILLSBORO", "loc": [ -87.180379, 34.64763 ], "pop": 1967, "state": "AL" }, { "_id": "35645", "city": "KILLEN", "loc": [ -87.508185, 34.901632 ], "pop": 11758, "state": "AL" }, { "_id": "35646", "city": "LEIGHTON", "loc": [ -87.522133, 34.710982 ], "pop": 3046, "state": "AL" }, { "_id": "35647", "city": "LESTER", "loc": [ -87.143396, 34.918364 ], "pop": 3108, "state": "AL" }, { "_id": "35648", "city": "LEXINGTON", "loc": [ -87.393519, 34.955924 ], "pop": 2241, "state": "AL" }, { "_id": "35650", "city": "MOULTON", "loc": [ -87.222385, 34.505836 ], "pop": 17288, "state": "AL" }, { "_id": "35651", "city": "MOUNT HOPE", "loc": [ -87.451453, 34.462969 ], "pop": 1821, "state": "AL" }, { "_id": "35652", "city": "ROGERSVILLE", "loc": [ -87.323671, 34.849544 ], "pop": 6521, "state": "AL" }, { "_id": "35653", "city": "RUSSELLVILLE", "loc": [ -87.72572599999999, 34.506568 ], "pop": 17767, "state": "AL" }, { "_id": "35660", "city": "SHEFFIELD", "loc": [ -87.697057, 34.757829 ], "pop": 10685, "state": "AL" }, { "_id": "35661", "city": "MUSCLE SHOALS", "loc": [ -87.630443, 34.756136 ], "pop": 11777, "state": "AL" }, { "_id": "35670", "city": "SOMERVILLE", "loc": [ -86.80093100000001, 34.499548 ], "pop": 5184, "state": "AL" }, { "_id": "35671", "city": "TANNER", "loc": [ -86.989152, 34.713037 ], "pop": 2578, "state": "AL" }, { "_id": "35672", "city": "TOWN CREEK", "loc": [ -87.42619500000001, 34.649138 ], "pop": 9049, "state": "AL" }, { "_id": "35673", "city": "TRINITY", "loc": [ -87.09126999999999, 34.591771 ], "pop": 1758, "state": "AL" }, { "_id": "35674", "city": "TUSCUMBIA", "loc": [ -87.68325900000001, 34.687432 ], "pop": 17880, "state": "AL" }, { "_id": "35677", "city": "WATERLOO", "loc": [ -87.962412, 34.93568 ], "pop": 1899, "state": "AL" }, { "_id": "35739", "city": "ARDMORE", "loc": [ -86.83461200000001, 34.980447 ], "pop": 1898, "state": "AL" }, { "_id": "35740", "city": "BRIDGEPORT", "loc": [ -85.727681, 34.944638 ], "pop": 3988, "state": "AL" }, { "_id": "35741", "city": "BROWNSBORO", "loc": [ -86.468703, 34.716733 ], "pop": 1793, "state": "AL" }, { "_id": "35744", "city": "DUTTON", "loc": [ -85.906729, 34.604558 ], "pop": 2948, "state": "AL" }, { "_id": "35745", "city": "ESTILLFORK", "loc": [ -86.171571, 34.913017 ], "pop": 718, "state": "AL" }, { "_id": "35746", "city": "FACKLER", "loc": [ -85.98464800000001, 34.82589 ], "pop": 396, "state": "AL" }, { "_id": "35747", "city": "GRANT", "loc": [ -86.259041, 34.495902 ], "pop": 8345, "state": "AL" }, { "_id": "35748", "city": "GURLEY", "loc": [ -86.39402800000001, 34.713964 ], "pop": 4642, "state": "AL" }, { "_id": "35749", "city": "HARVEST", "loc": [ -86.74992899999999, 34.82732 ], "pop": 5701, "state": "AL" }, { "_id": "35750", "city": "HAZEL GREEN", "loc": [ -86.593484, 34.949627 ], "pop": 7751, "state": "AL" }, { "_id": "35751", "city": "HOLLYTREE", "loc": [ -86.233627, 34.798979 ], "pop": 260, "state": "AL" }, { "_id": "35752", "city": "HOLLYWOOD", "loc": [ -85.95317300000001, 34.730428 ], "pop": 2038, "state": "AL" }, { "_id": "35754", "city": "LACEYS SPRING", "loc": [ -86.612869, 34.499647 ], "pop": 7040, "state": "AL" }, { "_id": "35755", "city": "LANGSTON", "loc": [ -86.10563, 34.497831 ], "pop": 1041, "state": "AL" }, { "_id": "35758", "city": "TRIANA", "loc": [ -86.750951, 34.713409 ], "pop": 24398, "state": "AL" }, { "_id": "35759", "city": "MERIDIANVILLE", "loc": [ -86.578879, 34.861779 ], "pop": 2597, "state": "AL" }, { "_id": "35760", "city": "NEW HOPE", "loc": [ -86.3961, 34.549445 ], "pop": 4075, "state": "AL" }, { "_id": "35761", "city": "NEW MARKET", "loc": [ -86.448742, 34.899991 ], "pop": 5825, "state": "AL" }, { "_id": "35763", "city": "BIG COVE", "loc": [ -86.466577, 34.612859 ], "pop": 3156, "state": "AL" }, { "_id": "35764", "city": "PAINT ROCK", "loc": [ -86.332562, 34.667122 ], "pop": 553, "state": "AL" }, { "_id": "35765", "city": "PISGAH", "loc": [ -85.803044, 34.688601 ], "pop": 3717, "state": "AL" }, { "_id": "35766", "city": "PRINCETON", "loc": [ -86.250068, 34.840217 ], "pop": 273, "state": "AL" }, { "_id": "35768", "city": "HYTOP", "loc": [ -86.05133600000001, 34.67227 ], "pop": 16934, "state": "AL" }, { "_id": "35771", "city": "SECTION", "loc": [ -85.99400199999999, 34.543275 ], "pop": 2590, "state": "AL" }, { "_id": "35772", "city": "STEVENSON", "loc": [ -85.850803, 34.876885 ], "pop": 5210, "state": "AL" }, { "_id": "35773", "city": "TONEY", "loc": [ -86.699951, 34.911644 ], "pop": 5953, "state": "AL" }, { "_id": "35774", "city": "TRENTON", "loc": [ -86.291264, 34.740065 ], "pop": 381, "state": "AL" }, { "_id": "35775", "city": "VALHERMOSO SPRIN", "loc": [ -86.678, 34.538145 ], "pop": 667, "state": "AL" }, { "_id": "35776", "city": "WOODVILLE", "loc": [ -86.22960999999999, 34.668927 ], "pop": 2222, "state": "AL" }, { "_id": "35801", "city": "HUNTSVILLE", "loc": [ -86.567318, 34.726866 ], "pop": 25513, "state": "AL" }, { "_id": "35802", "city": "HUNTSVILLE", "loc": [ -86.56034699999999, 34.667922 ], "pop": 21069, "state": "AL" }, { "_id": "35803", "city": "HUNTSVILLE", "loc": [ -86.55096, 34.620506 ], "pop": 23380, "state": "AL" }, { "_id": "35805", "city": "HUNTSVILLE", "loc": [ -86.61649300000001, 34.705943 ], "pop": 24637, "state": "AL" }, { "_id": "35806", "city": "HUNTSVILLE", "loc": [ -86.670411, 34.744765 ], "pop": 10121, "state": "AL" }, { "_id": "35808", "city": "HUNTSVILLE", "loc": [ -86.65382099999999, 34.684525 ], "pop": 4988, "state": "AL" }, { "_id": "35810", "city": "HUNTSVILLE", "loc": [ -86.60906300000001, 34.778378 ], "pop": 32896, "state": "AL" }, { "_id": "35811", "city": "HUNTSVILLE", "loc": [ -86.543786, 34.778949 ], "pop": 19008, "state": "AL" }, { "_id": "35816", "city": "HUNTSVILLE", "loc": [ -86.624948, 34.738864 ], "pop": 13736, "state": "AL" }, { "_id": "35824", "city": "HUNTSVILLE", "loc": [ -86.72948599999999, 34.658321 ], "pop": 770, "state": "AL" }, { "_id": "35901", "city": "SOUTHSIDE", "loc": [ -86.010279, 33.997248 ], "pop": 44165, "state": "AL" }, { "_id": "35903", "city": "HOKES BLUFF", "loc": [ -85.928724, 33.997057 ], "pop": 20057, "state": "AL" }, { "_id": "35904", "city": "GADSDEN", "loc": [ -86.04947900000001, 34.021694 ], "pop": 7002, "state": "AL" }, { "_id": "35905", "city": "GLENCOE", "loc": [ -85.92758600000001, 33.956787 ], "pop": 4256, "state": "AL" }, { "_id": "35950", "city": "ALBERTVILLE", "loc": [ -86.206447, 34.273859 ], "pop": 21033, "state": "AL" }, { "_id": "35952", "city": "SNEAD", "loc": [ -86.35087900000001, 34.042916 ], "pop": 9472, "state": "AL" }, { "_id": "35953", "city": "ASHVILLE", "loc": [ -86.255167, 33.837366 ], "pop": 5988, "state": "AL" }, { "_id": "35954", "city": "ATTALLA", "loc": [ -86.096717, 34.029597 ], "pop": 11904, "state": "AL" }, { "_id": "35957", "city": "BOAZ", "loc": [ -86.148003, 34.173686 ], "pop": 16955, "state": "AL" }, { "_id": "35958", "city": "BRYANT", "loc": [ -85.632445, 34.945026 ], "pop": 1700, "state": "AL" }, { "_id": "35959", "city": "CEDAR BLUFF", "loc": [ -85.60256699999999, 34.241662 ], "pop": 3574, "state": "AL" }, { "_id": "35960", "city": "CENTRE", "loc": [ -85.609229, 34.111592 ], "pop": 10294, "state": "AL" }, { "_id": "35961", "city": "COLLINSVILLE", "loc": [ -85.861969, 34.267957 ], "pop": 3245, "state": "AL" }, { "_id": "35962", "city": "CROSSVILLE", "loc": [ -86.030575, 34.258784 ], "pop": 4874, "state": "AL" }, { "_id": "35963", "city": "DAWSON", "loc": [ -85.92916099999999, 34.356838 ], "pop": 1531, "state": "AL" }, { "_id": "35966", "city": "FLAT ROCK", "loc": [ -85.708372, 34.807598 ], "pop": 2141, "state": "AL" }, { "_id": "35967", "city": "FORT PAYNE", "loc": [ -85.712394, 34.436792 ], "pop": 15893, "state": "AL" }, { "_id": "35971", "city": "FYFFE", "loc": [ -85.928849, 34.437284 ], "pop": 3453, "state": "AL" }, { "_id": "35972", "city": "GALLANT", "loc": [ -86.234606, 33.997586 ], "pop": 337, "state": "AL" }, { "_id": "35973", "city": "GAYLESVILLE", "loc": [ -85.558893, 34.357324 ], "pop": 2291, "state": "AL" }, { "_id": "35974", "city": "GERALDINE", "loc": [ -86.04039299999999, 34.343864 ], "pop": 3291, "state": "AL" }, { "_id": "35975", "city": "GROVEOAK", "loc": [ -86.04002300000001, 34.435874 ], "pop": 1098, "state": "AL" }, { "_id": "35976", "city": "GUNTERSVILLE", "loc": [ -86.305463, 34.32193 ], "pop": 11234, "state": "AL" }, { "_id": "35978", "city": "HENAGAR", "loc": [ -85.72738099999999, 34.618604 ], "pop": 2973, "state": "AL" }, { "_id": "35979", "city": "HIGDON", "loc": [ -85.622507, 34.873247 ], "pop": 1324, "state": "AL" }, { "_id": "35980", "city": "HORTON", "loc": [ -86.317318, 34.190033 ], "pop": 4195, "state": "AL" }, { "_id": "35981", "city": "IDER", "loc": [ -85.641577, 34.735059 ], "pop": 5161, "state": "AL" }, { "_id": "35983", "city": "LEESBURG", "loc": [ -85.77051, 34.191083 ], "pop": 3189, "state": "AL" }, { "_id": "35984", "city": "MENTONE", "loc": [ -85.57772799999999, 34.587236 ], "pop": 2099, "state": "AL" }, { "_id": "35986", "city": "RAINSVILLE", "loc": [ -85.844605, 34.498884 ], "pop": 7498, "state": "AL" }, { "_id": "35987", "city": "STEELE", "loc": [ -86.22892899999999, 33.941679 ], "pop": 1830, "state": "AL" }, { "_id": "35988", "city": "SYLVANIA", "loc": [ -85.79212800000001, 34.558962 ], "pop": 2318, "state": "AL" }, { "_id": "35989", "city": "VALLEY HEAD", "loc": [ -85.627208, 34.5697 ], "pop": 1211, "state": "AL" }, { "_id": "36003", "city": "AUTAUGAVILLE", "loc": [ -86.714938, 32.462462 ], "pop": 2641, "state": "AL" }, { "_id": "36004", "city": "EUFAULA", "loc": [ -85.23965699999999, 31.786701 ], "pop": 2669, "state": "AL" }, { "_id": "36005", "city": "BANKS", "loc": [ -85.79984399999999, 31.836792 ], "pop": 1857, "state": "AL" }, { "_id": "36006", "city": "BILLINGSLEY", "loc": [ -86.716301, 32.610578 ], "pop": 1869, "state": "AL" }, { "_id": "36009", "city": "BRANTLEY", "loc": [ -86.274343, 31.570963 ], "pop": 2623, "state": "AL" }, { "_id": "36010", "city": "BRUNDIDGE", "loc": [ -85.817668, 31.701324 ], "pop": 4320, "state": "AL" }, { "_id": "36013", "city": "CECIL", "loc": [ -86.011241, 32.300891 ], "pop": 407, "state": "AL" }, { "_id": "36016", "city": "CLAYTON", "loc": [ -85.45093199999999, 31.887413 ], "pop": 3106, "state": "AL" }, { "_id": "36017", "city": "CLIO", "loc": [ -85.590419, 31.68521 ], "pop": 3178, "state": "AL" }, { "_id": "36022", "city": "DEATSVILLE", "loc": [ -86.338211, 32.613405 ], "pop": 5913, "state": "AL" }, { "_id": "36024", "city": "ECLECTIC", "loc": [ -86.031614, 32.65419 ], "pop": 6105, "state": "AL" }, { "_id": "36025", "city": "ELMORE", "loc": [ -86.31613400000001, 32.545378 ], "pop": 3114, "state": "AL" }, { "_id": "36026", "city": "EQUALITY", "loc": [ -86.105064, 32.813908 ], "pop": 1121, "state": "AL" }, { "_id": "36027", "city": "EUFAULA", "loc": [ -85.165605, 31.905063 ], "pop": 14189, "state": "AL" }, { "_id": "36028", "city": "DOZIER", "loc": [ -86.366315, 31.506614 ], "pop": 741, "state": "AL" }, { "_id": "36029", "city": "FITZPATRICK", "loc": [ -85.888329, 32.151607 ], "pop": 736, "state": "AL" }, { "_id": "36030", "city": "FOREST HOME", "loc": [ -86.786377, 31.85318 ], "pop": 1528, "state": "AL" }, { "_id": "36031", "city": "FORT DAVIS", "loc": [ -85.700688, 32.28945 ], "pop": 891, "state": "AL" }, { "_id": "36032", "city": "FORT DEPOSIT", "loc": [ -86.576142, 31.995979 ], "pop": 2435, "state": "AL" }, { "_id": "36033", "city": "GEORGIANA", "loc": [ -86.733965, 31.628662 ], "pop": 3672, "state": "AL" }, { "_id": "36034", "city": "GLENWOOD", "loc": [ -86.17097200000001, 31.664143 ], "pop": 109, "state": "AL" }, { "_id": "36035", "city": "GOSHEN", "loc": [ -86.104851, 31.82497 ], "pop": 2056, "state": "AL" }, { "_id": "36036", "city": "GRADY", "loc": [ -86.12924599999999, 32.019397 ], "pop": 1811, "state": "AL" }, { "_id": "36037", "city": "GREENVILLE", "loc": [ -86.622919, 31.810036 ], "pop": 15476, "state": "AL" }, { "_id": "36038", "city": "GANTT", "loc": [ -86.419836, 31.416909 ], "pop": 3298, "state": "AL" }, { "_id": "36039", "city": "HARDAWAY", "loc": [ -85.883837, 32.312939 ], "pop": 354, "state": "AL" }, { "_id": "36040", "city": "HAYNEVILLE", "loc": [ -86.654994, 32.195707 ], "pop": 5010, "state": "AL" }, { "_id": "36041", "city": "HIGHLAND HOME", "loc": [ -86.297111, 31.928292 ], "pop": 3068, "state": "AL" }, { "_id": "36042", "city": "HONORAVILLE", "loc": [ -86.39806400000001, 31.878397 ], "pop": 838, "state": "AL" }, { "_id": "36043", "city": "HOPE HULL", "loc": [ -86.39318900000001, 32.224256 ], "pop": 2961, "state": "AL" }, { "_id": "36046", "city": "LAPINE", "loc": [ -86.27853399999999, 31.985423 ], "pop": 338, "state": "AL" }, { "_id": "36047", "city": "LETOHATCHEE", "loc": [ -86.488013, 32.086199 ], "pop": 2348, "state": "AL" }, { "_id": "36048", "city": "LOUISVILLE", "loc": [ -85.55806200000001, 31.794262 ], "pop": 2279, "state": "AL" }, { "_id": "36049", "city": "LUVERNE", "loc": [ -86.256601, 31.70739 ], "pop": 4274, "state": "AL" }, { "_id": "36051", "city": "MARBURY", "loc": [ -86.510138, 32.639373 ], "pop": 3573, "state": "AL" }, { "_id": "36052", "city": "MATHEWS", "loc": [ -86.041262, 32.128288 ], "pop": 836, "state": "AL" }, { "_id": "36053", "city": "MIDWAY", "loc": [ -85.53152300000001, 32.09552 ], "pop": 1873, "state": "AL" }, { "_id": "36054", "city": "MILLBROOK", "loc": [ -86.364125, 32.499485 ], "pop": 9049, "state": "AL" }, { "_id": "36061", "city": "PEROTE", "loc": [ -85.74773, 32.003459 ], "pop": 1792, "state": "AL" }, { "_id": "36064", "city": "PIKE ROAD", "loc": [ -86.09589, 32.335705 ], "pop": 3398, "state": "AL" }, { "_id": "36066", "city": "PRATTVILLE", "loc": [ -86.42997, 32.478695 ], "pop": 11059, "state": "AL" }, { "_id": "36067", "city": "PRATTVILLE", "loc": [ -86.48307200000001, 32.471501 ], "pop": 16536, "state": "AL" }, { "_id": "36069", "city": "RAMER", "loc": [ -86.246329, 32.067745 ], "pop": 1712, "state": "AL" }, { "_id": "36071", "city": "RUTLEDGE", "loc": [ -86.34846400000001, 31.755867 ], "pop": 1976, "state": "AL" }, { "_id": "36075", "city": "SHORTER", "loc": [ -85.91616, 32.383585 ], "pop": 1876, "state": "AL" }, { "_id": "36078", "city": "TALLASSEE", "loc": [ -85.89781000000001, 32.550997 ], "pop": 12046, "state": "AL" }, { "_id": "36080", "city": "TITUS", "loc": [ -86.239334, 32.690019 ], "pop": 2683, "state": "AL" }, { "_id": "36081", "city": "TROY", "loc": [ -85.965493, 31.794471 ], "pop": 19358, "state": "AL" }, { "_id": "36083", "city": "TUSKEGEE", "loc": [ -85.68606, 32.431623 ], "pop": 10687, "state": "AL" }, { "_id": "36088", "city": "TUSKEGEE INSTITU", "loc": [ -85.714848, 32.417699 ], "pop": 6915, "state": "AL" }, { "_id": "36089", "city": "UNION SPRINGS", "loc": [ -85.678746, 32.166252 ], "pop": 7555, "state": "AL" }, { "_id": "36091", "city": "VERBENA", "loc": [ -86.543753, 32.759565 ], "pop": 3702, "state": "AL" }, { "_id": "36092", "city": "WETUMPKA", "loc": [ -86.188039, 32.54509 ], "pop": 13725, "state": "AL" }, { "_id": "36104", "city": "MONTGOMERY", "loc": [ -86.30812899999999, 32.373037 ], "pop": 17086, "state": "AL" }, { "_id": "36105", "city": "MONTGOMERY", "loc": [ -86.31044900000001, 32.32573 ], "pop": 16486, "state": "AL" }, { "_id": "36106", "city": "MONTGOMERY", "loc": [ -86.267278, 32.354268 ], "pop": 15744, "state": "AL" }, { "_id": "36107", "city": "MONTGOMERY", "loc": [ -86.27988499999999, 32.380405 ], "pop": 10345, "state": "AL" }, { "_id": "36108", "city": "MONTGOMERY", "loc": [ -86.352904, 32.341682 ], "pop": 30780, "state": "AL" }, { "_id": "36109", "city": "MONTGOMERY", "loc": [ -86.243394, 32.383443 ], "pop": 25282, "state": "AL" }, { "_id": "36110", "city": "MONTGOMERY", "loc": [ -86.274997, 32.421686 ], "pop": 12551, "state": "AL" }, { "_id": "36111", "city": "MONTGOMERY", "loc": [ -86.27154299999999, 32.337363 ], "pop": 11600, "state": "AL" }, { "_id": "36113", "city": "MAXWELL A F B", "loc": [ -86.35584799999999, 32.388133 ], "pop": 2788, "state": "AL" }, { "_id": "36115", "city": "GUNTER AFS", "loc": [ -86.247327, 32.406814 ], "pop": 1348, "state": "AL" }, { "_id": "36116", "city": "MONTGOMERY", "loc": [ -86.24205600000001, 32.312943 ], "pop": 32314, "state": "AL" }, { "_id": "36117", "city": "MONTGOMERY", "loc": [ -86.18329900000001, 32.373568 ], "pop": 21623, "state": "AL" }, { "_id": "36201", "city": "ANNISTON", "loc": [ -85.83815199999999, 33.653896 ], "pop": 38370, "state": "AL" }, { "_id": "36203", "city": "OXFORD", "loc": [ -85.83347000000001, 33.596829 ], "pop": 12407, "state": "AL" }, { "_id": "36205", "city": "FORT MC CLELLAN", "loc": [ -85.801467, 33.710168 ], "pop": 4128, "state": "AL" }, { "_id": "36206", "city": "ANNISTON", "loc": [ -85.838904, 33.719124 ], "pop": 10915, "state": "AL" }, { "_id": "36250", "city": "ALEXANDRIA", "loc": [ -85.892447, 33.780785 ], "pop": 5776, "state": "AL" }, { "_id": "36251", "city": "ASHLAND", "loc": [ -85.828976, 33.247363 ], "pop": 4518, "state": "AL" }, { "_id": "36255", "city": "CRAGFORD", "loc": [ -85.710797, 33.217148 ], "pop": 796, "state": "AL" }, { "_id": "36256", "city": "DAVISTON", "loc": [ -85.75383100000001, 33.033471 ], "pop": 2334, "state": "AL" }, { "_id": "36258", "city": "DELTA", "loc": [ -85.67927899999999, 33.457303 ], "pop": 1405, "state": "AL" }, { "_id": "36260", "city": "EASTABOGA", "loc": [ -85.96075, 33.603132 ], "pop": 3999, "state": "AL" }, { "_id": "36262", "city": "FRUITHURST", "loc": [ -85.43814, 33.771732 ], "pop": 1473, "state": "AL" }, { "_id": "36263", "city": "GRAHAM", "loc": [ -85.334034, 33.462976 ], "pop": 374, "state": "AL" }, { "_id": "36264", "city": "HEFLIN", "loc": [ -85.588471, 33.611515 ], "pop": 6577, "state": "AL" }, { "_id": "36265", "city": "JACKSONVILLE", "loc": [ -85.77518000000001, 33.830966 ], "pop": 16438, "state": "AL" }, { "_id": "36266", "city": "LINEVILLE", "loc": [ -85.73460900000001, 33.328613 ], "pop": 4345, "state": "AL" }, { "_id": "36267", "city": "MILLERVILLE", "loc": [ -85.96900100000001, 33.158959 ], "pop": 863, "state": "AL" }, { "_id": "36268", "city": "MUNFORD", "loc": [ -85.936322, 33.540987 ], "pop": 4998, "state": "AL" }, { "_id": "36269", "city": "MUSCADINE", "loc": [ -85.378907, 33.752913 ], "pop": 265, "state": "AL" }, { "_id": "36270", "city": "NEWELL", "loc": [ -85.505925, 33.440172 ], "pop": 2407, "state": "AL" }, { "_id": "36271", "city": "OHATCHEE", "loc": [ -86.025357, 33.778779 ], "pop": 3369, "state": "AL" }, { "_id": "36272", "city": "PIEDMONT", "loc": [ -85.64599699999999, 33.838946 ], "pop": 12921, "state": "AL" }, { "_id": "36273", "city": "RANBURNE", "loc": [ -85.378604, 33.561627 ], "pop": 3696, "state": "AL" }, { "_id": "36274", "city": "ROCK MILLS", "loc": [ -85.357854, 33.156443 ], "pop": 9430, "state": "AL" }, { "_id": "36276", "city": "WADLEY", "loc": [ -85.551344, 33.149192 ], "pop": 1949, "state": "AL" }, { "_id": "36277", "city": "WEAVER", "loc": [ -85.810666, 33.756286 ], "pop": 7453, "state": "AL" }, { "_id": "36278", "city": "WEDOWEE", "loc": [ -85.473737, 33.301854 ], "pop": 3101, "state": "AL" }, { "_id": "36279", "city": "WELLINGTON", "loc": [ -85.915325, 33.863843 ], "pop": 2137, "state": "AL" }, { "_id": "36280", "city": "WOODLAND", "loc": [ -85.353768, 33.355453 ], "pop": 2291, "state": "AL" }, { "_id": "36301", "city": "TAYLOR", "loc": [ -85.418036, 31.202888 ], "pop": 32689, "state": "AL" }, { "_id": "36303", "city": "NAPIER FIELD", "loc": [ -85.412462, 31.255239 ], "pop": 32407, "state": "AL" }, { "_id": "36310", "city": "ABBEVILLE", "loc": [ -85.279044, 31.575479 ], "pop": 5416, "state": "AL" }, { "_id": "36311", "city": "ARITON", "loc": [ -85.707716, 31.582996 ], "pop": 1434, "state": "AL" }, { "_id": "36312", "city": "ASHFORD", "loc": [ -85.253488, 31.1888 ], "pop": 5115, "state": "AL" }, { "_id": "36314", "city": "BLACK", "loc": [ -85.745634, 31.01318 ], "pop": 183, "state": "AL" }, { "_id": "36316", "city": "CHANCELLOR", "loc": [ -85.91089700000001, 31.173379 ], "pop": 620, "state": "AL" }, { "_id": "36317", "city": "CLOPTON", "loc": [ -85.482308, 31.602843 ], "pop": 157, "state": "AL" }, { "_id": "36318", "city": "COFFEE SPRINGS", "loc": [ -85.918224, 31.138758 ], "pop": 750, "state": "AL" }, { "_id": "36319", "city": "COLUMBIA", "loc": [ -85.145488, 31.335235 ], "pop": 2934, "state": "AL" }, { "_id": "36320", "city": "COTTONWOOD", "loc": [ -85.375665, 31.098934 ], "pop": 8517, "state": "AL" }, { "_id": "36322", "city": "DALEVILLE", "loc": [ -85.730473, 31.281091 ], "pop": 8885, "state": "AL" }, { "_id": "36323", "city": "ELBA", "loc": [ -86.07772799999999, 31.41373 ], "pop": 6662, "state": "AL" }, { "_id": "36330", "city": "ENTERPRISE", "loc": [ -85.842111, 31.340789 ], "pop": 29102, "state": "AL" }, { "_id": "36340", "city": "GENEVA", "loc": [ -85.884748, 31.041445 ], "pop": 5471, "state": "AL" }, { "_id": "36343", "city": "GORDON", "loc": [ -85.123412, 31.10019 ], "pop": 2017, "state": "AL" }, { "_id": "36344", "city": "HARTFORD", "loc": [ -85.719204, 31.08598 ], "pop": 4819, "state": "AL" }, { "_id": "36345", "city": "HEADLAND", "loc": [ -85.332277, 31.353406 ], "pop": 4595, "state": "AL" }, { "_id": "36346", "city": "JACK", "loc": [ -86.043083, 31.552392 ], "pop": 1517, "state": "AL" }, { "_id": "36349", "city": "MALVERN", "loc": [ -85.522327, 31.157528 ], "pop": 1686, "state": "AL" }, { "_id": "36350", "city": "MIDLAND CITY", "loc": [ -85.51303299999999, 31.36716 ], "pop": 4854, "state": "AL" }, { "_id": "36351", "city": "NEW BROCKTON", "loc": [ -85.940386, 31.36898 ], "pop": 1809, "state": "AL" }, { "_id": "36352", "city": "NEWTON", "loc": [ -85.59922899999999, 31.331064 ], "pop": 1660, "state": "AL" }, { "_id": "36353", "city": "NEWVILLE", "loc": [ -85.32874099999999, 31.440295 ], "pop": 1525, "state": "AL" }, { "_id": "36360", "city": "OZARK", "loc": [ -85.643629, 31.439069 ], "pop": 19017, "state": "AL" }, { "_id": "36362", "city": "FORT RUCKER", "loc": [ -85.721374, 31.348011 ], "pop": 7607, "state": "AL" }, { "_id": "36370", "city": "PANSEY", "loc": [ -85.23854900000001, 31.131778 ], "pop": 595, "state": "AL" }, { "_id": "36373", "city": "SHORTERVILLE", "loc": [ -85.14584000000001, 31.625627 ], "pop": 2503, "state": "AL" }, { "_id": "36374", "city": "SKIPPERVILLE", "loc": [ -85.549578, 31.551588 ], "pop": 1048, "state": "AL" }, { "_id": "36375", "city": "SLOCOMB", "loc": [ -85.582954, 31.095558 ], "pop": 4504, "state": "AL" }, { "_id": "36376", "city": "WEBB", "loc": [ -85.254385, 31.265618 ], "pop": 1810, "state": "AL" }, { "_id": "36401", "city": "EVERGREEN", "loc": [ -86.925771, 31.458009 ], "pop": 8556, "state": "AL" }, { "_id": "36419", "city": "ALLEN", "loc": [ -87.66746000000001, 31.624266 ], "pop": 0, "state": "AL" }, { "_id": "36420", "city": "ANDALUSIA", "loc": [ -86.49046800000001, 31.297142 ], "pop": 16920, "state": "AL" }, { "_id": "36425", "city": "BEATRICE", "loc": [ -87.17191200000001, 31.727324 ], "pop": 1620, "state": "AL" }, { "_id": "36426", "city": "EAST BREWTON", "loc": [ -87.067325, 31.118926 ], "pop": 15479, "state": "AL" }, { "_id": "36432", "city": "CASTLEBERRY", "loc": [ -87.026754, 31.326113 ], "pop": 2881, "state": "AL" }, { "_id": "36435", "city": "COY", "loc": [ -87.39255799999999, 31.888851 ], "pop": 1109, "state": "AL" }, { "_id": "36436", "city": "DICKINSON", "loc": [ -87.65692900000001, 31.717167 ], "pop": 272, "state": "AL" }, { "_id": "36441", "city": "FLOMATON", "loc": [ -87.26636499999999, 31.040233 ], "pop": 3585, "state": "AL" }, { "_id": "36442", "city": "FLORALA", "loc": [ -86.338528, 31.017194 ], "pop": 3421, "state": "AL" }, { "_id": "36444", "city": "FRANKLIN", "loc": [ -87.441237, 31.723815 ], "pop": 154, "state": "AL" }, { "_id": "36445", "city": "FRISCO CITY", "loc": [ -87.381744, 31.423478 ], "pop": 6179, "state": "AL" }, { "_id": "36446", "city": "FULTON", "loc": [ -87.708065, 31.790947 ], "pop": 2163, "state": "AL" }, { "_id": "36451", "city": "GROVE HILL", "loc": [ -87.763571, 31.675502 ], "pop": 4089, "state": "AL" }, { "_id": "36453", "city": "KINSTON", "loc": [ -86.069532, 31.262118 ], "pop": 3523, "state": "AL" }, { "_id": "36454", "city": "LENOX", "loc": [ -87.19671, 31.327261 ], "pop": 515, "state": "AL" }, { "_id": "36456", "city": "MC KENZIE", "loc": [ -86.735615, 31.54495 ], "pop": 1222, "state": "AL" }, { "_id": "36460", "city": "MONROEVILLE", "loc": [ -87.340993, 31.51533 ], "pop": 10492, "state": "AL" }, { "_id": "36467", "city": "OPP", "loc": [ -86.257105, 31.279861 ], "pop": 9901, "state": "AL" }, { "_id": "36471", "city": "PETERMAN", "loc": [ -87.259984, 31.589953 ], "pop": 1826, "state": "AL" }, { "_id": "36473", "city": "RANGE", "loc": [ -87.319739, 31.30169 ], "pop": 208, "state": "AL" }, { "_id": "36474", "city": "RED LEVEL", "loc": [ -86.61208999999999, 31.439931 ], "pop": 2005, "state": "AL" }, { "_id": "36475", "city": "REPTON", "loc": [ -87.172039, 31.425569 ], "pop": 1750, "state": "AL" }, { "_id": "36477", "city": "SAMSON", "loc": [ -86.06741599999999, 31.104918 ], "pop": 4790, "state": "AL" }, { "_id": "36480", "city": "URIAH", "loc": [ -87.57051800000001, 31.313467 ], "pop": 1648, "state": "AL" }, { "_id": "36481", "city": "VREDENBURGH", "loc": [ -87.416184, 31.73443 ], "pop": 2040, "state": "AL" }, { "_id": "36482", "city": "WHATLEY", "loc": [ -87.656502, 31.639453 ], "pop": 790, "state": "AL" }, { "_id": "36483", "city": "WING", "loc": [ -86.56119, 31.148127 ], "pop": 1583, "state": "AL" }, { "_id": "36502", "city": "ATMORE", "loc": [ -87.487347, 31.057245 ], "pop": 15948, "state": "AL" }, { "_id": "36505", "city": "AXIS", "loc": [ -88.04273999999999, 31.006817 ], "pop": 140, "state": "AL" }, { "_id": "36507", "city": "BAY MINETTE", "loc": [ -87.76443999999999, 30.86354 ], "pop": 17816, "state": "AL" }, { "_id": "36509", "city": "BAYOU LA BATRE", "loc": [ -88.250697, 30.407983 ], "pop": 4901, "state": "AL" }, { "_id": "36510", "city": "BIGBEE", "loc": [ -88.165294, 31.589072 ], "pop": 264, "state": "AL" }, { "_id": "36511", "city": "BON SECOUR", "loc": [ -87.721355, 30.328883 ], "pop": 2001, "state": "AL" }, { "_id": "36515", "city": "CARLTON", "loc": [ -87.837793, 31.322449 ], "pop": 30, "state": "AL" }, { "_id": "36518", "city": "CHATOM", "loc": [ -88.269887, 31.487638 ], "pop": 3094, "state": "AL" }, { "_id": "36521", "city": "CHUNCHULA", "loc": [ -88.13112599999999, 30.991178 ], "pop": 1322, "state": "AL" }, { "_id": "36522", "city": "CITRONELLE", "loc": [ -88.254949, 31.042533 ], "pop": 7233, "state": "AL" }, { "_id": "36523", "city": "CODEN", "loc": [ -88.16827600000001, 30.418834 ], "pop": 3897, "state": "AL" }, { "_id": "36524", "city": "COFFEEVILLE", "loc": [ -88.07154199999999, 31.78428 ], "pop": 1374, "state": "AL" }, { "_id": "36525", "city": "CREOLA", "loc": [ -88.017414, 30.901267 ], "pop": 2569, "state": "AL" }, { "_id": "36526", "city": "DAPHNE", "loc": [ -87.889522, 30.61972 ], "pop": 14607, "state": "AL" }, { "_id": "36527", "city": "SPANISH FORT", "loc": [ -87.88668, 30.695852 ], "pop": 5486, "state": "AL" }, { "_id": "36528", "city": "DAUPHIN ISLAND", "loc": [ -88.109644, 30.252057 ], "pop": 824, "state": "AL" }, { "_id": "36529", "city": "DEER PARK", "loc": [ -88.32731, 31.184892 ], "pop": 723, "state": "AL" }, { "_id": "36530", "city": "ELBERTA", "loc": [ -87.58896, 30.394239 ], "pop": 2551, "state": "AL" }, { "_id": "36532", "city": "FAIRHOPE", "loc": [ -87.883546, 30.50116 ], "pop": 16331, "state": "AL" }, { "_id": "36535", "city": "FOLEY", "loc": [ -87.685737, 30.400664 ], "pop": 8520, "state": "AL" }, { "_id": "36538", "city": "FRANKVILLE", "loc": [ -88.133185, 31.64684 ], "pop": 472, "state": "AL" }, { "_id": "36539", "city": "FRUITDALE", "loc": [ -88.376597, 31.348843 ], "pop": 848, "state": "AL" }, { "_id": "36540", "city": "GAINESTOWN", "loc": [ -87.682176, 31.425822 ], "pop": 301, "state": "AL" }, { "_id": "36541", "city": "GRAND BAY", "loc": [ -88.32825, 30.498288 ], "pop": 10344, "state": "AL" }, { "_id": "36542", "city": "FORT MORGAN", "loc": [ -87.712795, 30.268954 ], "pop": 4930, "state": "AL" }, { "_id": "36544", "city": "IRVINGTON", "loc": [ -88.239563, 30.480241 ], "pop": 6181, "state": "AL" }, { "_id": "36545", "city": "JACKSON", "loc": [ -87.867192, 31.513098 ], "pop": 9679, "state": "AL" }, { "_id": "36548", "city": "LEROY", "loc": [ -87.968672, 31.491021 ], "pop": 1086, "state": "AL" }, { "_id": "36549", "city": "LILLIAN", "loc": [ -87.474452, 30.39724 ], "pop": 3833, "state": "AL" }, { "_id": "36550", "city": "LITTLE RIVER", "loc": [ -87.754796, 31.22459 ], "pop": 649, "state": "AL" }, { "_id": "36551", "city": "LOXLEY", "loc": [ -87.75624000000001, 30.617964 ], "pop": 2712, "state": "AL" }, { "_id": "36553", "city": "MC INTOSH", "loc": [ -88.051102, 31.236108 ], "pop": 4211, "state": "AL" }, { "_id": "36555", "city": "MAGNOLIA SPRINGS", "loc": [ -87.785781, 30.394497 ], "pop": 1088, "state": "AL" }, { "_id": "36558", "city": "MILLRY", "loc": [ -88.35587200000001, 31.626871 ], "pop": 2825, "state": "AL" }, { "_id": "36560", "city": "MOUNT VERNON", "loc": [ -88.035044, 31.097375 ], "pop": 5053, "state": "AL" }, { "_id": "36561", "city": "ORANGE BEACH", "loc": [ -87.555888, 30.290596 ], "pop": 2549, "state": "AL" }, { "_id": "36562", "city": "PERDIDO", "loc": [ -87.62837399999999, 30.98058 ], "pop": 986, "state": "AL" }, { "_id": "36567", "city": "ROBERTSDALE", "loc": [ -87.63726800000001, 30.561608 ], "pop": 3519, "state": "AL" }, { "_id": "36569", "city": "SAINT STEPHENS", "loc": [ -88.052094, 31.533028 ], "pop": 688, "state": "AL" }, { "_id": "36570", "city": "SALITPA", "loc": [ -87.95961800000001, 31.654667 ], "pop": 896, "state": "AL" }, { "_id": "36571", "city": "SARALAND", "loc": [ -88.09338700000001, 30.833197 ], "pop": 13151, "state": "AL" }, { "_id": "36572", "city": "SATSUMA", "loc": [ -88.05331200000001, 30.851628 ], "pop": 6197, "state": "AL" }, { "_id": "36574", "city": "SEMINOLE", "loc": [ -87.46593799999999, 30.504806 ], "pop": 606, "state": "AL" }, { "_id": "36575", "city": "SEMMES", "loc": [ -88.266705, 30.754408 ], "pop": 9329, "state": "AL" }, { "_id": "36576", "city": "SILVERHILL", "loc": [ -87.745676, 30.522237 ], "pop": 8001, "state": "AL" }, { "_id": "36579", "city": "STOCKTON", "loc": [ -87.86332299999999, 31.01293 ], "pop": 1214, "state": "AL" }, { "_id": "36580", "city": "SUMMERDALE", "loc": [ -87.699183, 30.475225 ], "pop": 881, "state": "AL" }, { "_id": "36582", "city": "THEODORE", "loc": [ -88.18074799999999, 30.544374 ], "pop": 20185, "state": "AL" }, { "_id": "36583", "city": "TIBBIE", "loc": [ -88.266828, 31.373742 ], "pop": 327, "state": "AL" }, { "_id": "36584", "city": "VINEGAR BEND", "loc": [ -88.386466, 31.25841 ], "pop": 475, "state": "AL" }, { "_id": "36585", "city": "WAGARVILLE", "loc": [ -88.070519, 31.410205 ], "pop": 1681, "state": "AL" }, { "_id": "36586", "city": "WALKER SPRINGS", "loc": [ -87.83535500000001, 31.626166 ], "pop": 1001, "state": "AL" }, { "_id": "36587", "city": "WILMER", "loc": [ -88.333196, 30.813745 ], "pop": 5905, "state": "AL" }, { "_id": "36602", "city": "MOBILE", "loc": [ -88.04530800000001, 30.688828 ], "pop": 1263, "state": "AL" }, { "_id": "36603", "city": "MOBILE", "loc": [ -88.05622, 30.692141 ], "pop": 12162, "state": "AL" }, { "_id": "36604", "city": "MOBILE", "loc": [ -88.067804, 30.681963 ], "pop": 11498, "state": "AL" }, { "_id": "36605", "city": "MOBILE", "loc": [ -88.08464600000001, 30.634117 ], "pop": 31621, "state": "AL" }, { "_id": "36606", "city": "MOBILE", "loc": [ -88.100909, 30.672899 ], "pop": 18247, "state": "AL" }, { "_id": "36607", "city": "MOBILE", "loc": [ -88.10290000000001, 30.697486 ], "pop": 8610, "state": "AL" }, { "_id": "36608", "city": "MOBILE", "loc": [ -88.18778399999999, 30.69636 ], "pop": 37600, "state": "AL" }, { "_id": "36609", "city": "MOBILE", "loc": [ -88.161806, 30.660527 ], "pop": 23687, "state": "AL" }, { "_id": "36610", "city": "PRICHARD", "loc": [ -88.083761, 30.737846 ], "pop": 24919, "state": "AL" }, { "_id": "36611", "city": "CHICKASAW", "loc": [ -88.08497300000001, 30.766821 ], "pop": 6660, "state": "AL" }, { "_id": "36612", "city": "MOBILE", "loc": [ -88.11311000000001, 30.751844 ], "pop": 6096, "state": "AL" }, { "_id": "36613", "city": "EIGHT MILE", "loc": [ -88.182311, 30.795074 ], "pop": 13517, "state": "AL" }, { "_id": "36615", "city": "BROOKLEY FIELD", "loc": [ -88.068871, 30.631199 ], "pop": 864, "state": "AL" }, { "_id": "36617", "city": "MOBILE", "loc": [ -88.091796, 30.714522 ], "pop": 17882, "state": "AL" }, { "_id": "36618", "city": "MOBILE", "loc": [ -88.175753, 30.732178 ], "pop": 14887, "state": "AL" }, { "_id": "36619", "city": "MOBILE", "loc": [ -88.19464499999999, 30.592803 ], "pop": 12728, "state": "AL" }, { "_id": "36693", "city": "MOBILE", "loc": [ -88.158843, 30.631076 ], "pop": 17704, "state": "AL" }, { "_id": "36695", "city": "MOBILE", "loc": [ -88.22924500000001, 30.647431 ], "pop": 21467, "state": "AL" }, { "_id": "36701", "city": "SELMA", "loc": [ -87.02452700000001, 32.419719 ], "pop": 26569, "state": "AL" }, { "_id": "36703", "city": "SELMA", "loc": [ -87.01354600000001, 32.415553 ], "pop": 12931, "state": "AL" }, { "_id": "36720", "city": "ALBERTA", "loc": [ -87.34250299999999, 32.144889 ], "pop": 1340, "state": "AL" }, { "_id": "36722", "city": "ARLINGTON", "loc": [ -87.559691, 32.066784 ], "pop": 1098, "state": "AL" }, { "_id": "36726", "city": "CAMDEN", "loc": [ -87.29504900000001, 32.004732 ], "pop": 4948, "state": "AL" }, { "_id": "36727", "city": "CAMPBELL", "loc": [ -88.006072, 31.963512 ], "pop": 392, "state": "AL" }, { "_id": "36728", "city": "CATHERINE", "loc": [ -87.48362299999999, 32.182 ], "pop": 366, "state": "AL" }, { "_id": "36732", "city": "DEMOPOLIS", "loc": [ -87.839669, 32.490792 ], "pop": 9992, "state": "AL" }, { "_id": "36736", "city": "DIXONS MILLS", "loc": [ -87.745356, 32.067209 ], "pop": 2635, "state": "AL" }, { "_id": "36738", "city": "FAUNSDALE", "loc": [ -87.61807899999999, 32.423259 ], "pop": 831, "state": "AL" }, { "_id": "36740", "city": "FORKLAND", "loc": [ -87.881676, 32.644661 ], "pop": 2121, "state": "AL" }, { "_id": "36742", "city": "GALLION", "loc": [ -87.698542, 32.529771 ], "pop": 599, "state": "AL" }, { "_id": "36744", "city": "GREENSBORO", "loc": [ -87.59049400000001, 32.716721 ], "pop": 7680, "state": "AL" }, { "_id": "36748", "city": "LINDEN", "loc": [ -87.79535799999999, 32.305343 ], "pop": 5438, "state": "AL" }, { "_id": "36749", "city": "JONES", "loc": [ -86.88926600000001, 32.608515 ], "pop": 428, "state": "AL" }, { "_id": "36750", "city": "MAPLESVILLE", "loc": [ -86.87170399999999, 32.804507 ], "pop": 1995, "state": "AL" }, { "_id": "36751", "city": "LOWER PEACH TREE", "loc": [ -87.568224, 31.850365 ], "pop": 323, "state": "AL" }, { "_id": "36752", "city": "BURKVILLE", "loc": [ -86.60986800000001, 32.300292 ], "pop": 1478, "state": "AL" }, { "_id": "36754", "city": "MAGNOLIA", "loc": [ -87.699815, 32.141931 ], "pop": 222, "state": "AL" }, { "_id": "36756", "city": "MARION", "loc": [ -87.33143699999999, 32.646301 ], "pop": 7284, "state": "AL" }, { "_id": "36758", "city": "PLANTERSVILLE", "loc": [ -86.947531, 32.617608 ], "pop": 946, "state": "AL" }, { "_id": "36759", "city": "MARION JUNCTION", "loc": [ -87.27018099999999, 32.426589 ], "pop": 796, "state": "AL" }, { "_id": "36761", "city": "BOYS RANCH", "loc": [ -86.92497, 32.095387 ], "pop": 1714, "state": "AL" }, { "_id": "36762", "city": "MORVIN", "loc": [ -87.972897, 31.967305 ], "pop": 24, "state": "AL" }, { "_id": "36765", "city": "NEWBERN", "loc": [ -87.56147199999999, 32.551465 ], "pop": 1131, "state": "AL" }, { "_id": "36767", "city": "ORRVILLE", "loc": [ -87.221368, 32.294859 ], "pop": 2680, "state": "AL" }, { "_id": "36768", "city": "PINE APPLE", "loc": [ -87.004667, 31.926522 ], "pop": 1658, "state": "AL" }, { "_id": "36769", "city": "PINE HILL", "loc": [ -87.57708599999999, 31.973546 ], "pop": 2623, "state": "AL" }, { "_id": "36771", "city": "PRAIRIE", "loc": [ -87.448723, 32.084762 ], "pop": 112, "state": "AL" }, { "_id": "36773", "city": "SAFFORD", "loc": [ -87.369345, 32.300242 ], "pop": 715, "state": "AL" }, { "_id": "36775", "city": "SARDIS", "loc": [ -86.99195899999999, 32.284358 ], "pop": 1683, "state": "AL" }, { "_id": "36776", "city": "SAWYERVILLE", "loc": [ -87.740201, 32.757796 ], "pop": 1684, "state": "AL" }, { "_id": "36779", "city": "SPROTT", "loc": [ -87.141599, 32.654376 ], "pop": 1191, "state": "AL" }, { "_id": "36782", "city": "SWEET WATER", "loc": [ -87.922755, 32.077272 ], "pop": 2444, "state": "AL" }, { "_id": "36783", "city": "THOMASTON", "loc": [ -87.597438, 32.253776 ], "pop": 1527, "state": "AL" }, { "_id": "36784", "city": "THOMASVILLE", "loc": [ -87.75984200000001, 31.906728 ], "pop": 6229, "state": "AL" }, { "_id": "36785", "city": "BENTON", "loc": [ -86.85986699999999, 32.281924 ], "pop": 1396, "state": "AL" }, { "_id": "36786", "city": "UNIONTOWN", "loc": [ -87.493398, 32.446966 ], "pop": 4173, "state": "AL" }, { "_id": "36790", "city": "STANTON", "loc": [ -86.886848, 32.709631 ], "pop": 916, "state": "AL" }, { "_id": "36792", "city": "RANDOLPH", "loc": [ -86.90701, 32.888834 ], "pop": 434, "state": "AL" }, { "_id": "36793", "city": "LAWLEY", "loc": [ -86.95670800000001, 32.864558 ], "pop": 337, "state": "AL" }, { "_id": "36801", "city": "OPELIKA", "loc": [ -85.35862899999999, 32.627771 ], "pop": 32808, "state": "AL" }, { "_id": "36830", "city": "AUBURN", "loc": [ -85.489001, 32.602043 ], "pop": 38908, "state": "AL" }, { "_id": "36850", "city": "CAMP HILL", "loc": [ -85.64738, 32.782749 ], "pop": 2422, "state": "AL" }, { "_id": "36852", "city": "CUSSETA", "loc": [ -85.215791, 32.803194 ], "pop": 4597, "state": "AL" }, { "_id": "36853", "city": "DADEVILLE", "loc": [ -85.77039499999999, 32.82239 ], "pop": 7620, "state": "AL" }, { "_id": "36854", "city": "VALLEY", "loc": [ -85.17491099999999, 32.811349 ], "pop": 9504, "state": "AL" }, { "_id": "36855", "city": "FIVE POINTS", "loc": [ -85.324264, 33.042408 ], "pop": 2400, "state": "AL" }, { "_id": "36858", "city": "HATCHECHUBBEE", "loc": [ -85.302882, 32.284531 ], "pop": 772, "state": "AL" }, { "_id": "36860", "city": "HURTSBORO", "loc": [ -85.395903, 32.245429 ], "pop": 1727, "state": "AL" }, { "_id": "36861", "city": "JACKSONS GAP", "loc": [ -85.848662, 32.879698 ], "pop": 2236, "state": "AL" }, { "_id": "36862", "city": "LAFAYETTE", "loc": [ -85.44256300000001, 32.925237 ], "pop": 7045, "state": "AL" }, { "_id": "36863", "city": "LANETT", "loc": [ -85.21608000000001, 32.861609 ], "pop": 12083, "state": "AL" }, { "_id": "36866", "city": "NOTASULGA", "loc": [ -85.68707000000001, 32.543727 ], "pop": 3361, "state": "AL" }, { "_id": "36867", "city": "PHENIX CITY", "loc": [ -85.095082, 32.407816 ], "pop": 13632, "state": "AL" }, { "_id": "36869", "city": "PHENIX CITY", "loc": [ -85.018118, 32.470647 ], "pop": 28320, "state": "AL" }, { "_id": "36871", "city": "PITTSVIEW", "loc": [ -85.131248, 32.173346 ], "pop": 1525, "state": "AL" }, { "_id": "36874", "city": "SALEM", "loc": [ -85.183966, 32.621157 ], "pop": 2773, "state": "AL" }, { "_id": "36875", "city": "SEALE", "loc": [ -85.167733, 32.305339 ], "pop": 1949, "state": "AL" }, { "_id": "36877", "city": "SMITHS", "loc": [ -85.100027, 32.520072 ], "pop": 10605, "state": "AL" }, { "_id": "36879", "city": "WAVERLY", "loc": [ -85.51437199999999, 32.763167 ], "pop": 1689, "state": "AL" }, { "_id": "36904", "city": "BUTLER", "loc": [ -88.206391, 32.082906 ], "pop": 4957, "state": "AL" }, { "_id": "36907", "city": "CUBA", "loc": [ -88.36108299999999, 32.410973 ], "pop": 1184, "state": "AL" }, { "_id": "36908", "city": "GILBERTOWN", "loc": [ -88.326514, 31.866602 ], "pop": 1606, "state": "AL" }, { "_id": "36910", "city": "JACHIN", "loc": [ -88.233356, 32.244174 ], "pop": 480, "state": "AL" }, { "_id": "36912", "city": "LISMAN", "loc": [ -88.323419, 32.217722 ], "pop": 2313, "state": "AL" }, { "_id": "36915", "city": "NEEDHAM", "loc": [ -88.345798, 32.012165 ], "pop": 618, "state": "AL" }, { "_id": "36916", "city": "PENNINGTON", "loc": [ -88.09310000000001, 32.226245 ], "pop": 1459, "state": "AL" }, { "_id": "36919", "city": "SILAS", "loc": [ -88.30914900000001, 31.766754 ], "pop": 2600, "state": "AL" }, { "_id": "36921", "city": "TOXEY", "loc": [ -88.31793999999999, 31.93153 ], "pop": 1980, "state": "AL" }, { "_id": "36922", "city": "WARD", "loc": [ -88.29711399999999, 32.334063 ], "pop": 274, "state": "AL" }, { "_id": "36925", "city": "YORK", "loc": [ -88.268304, 32.472765 ], "pop": 5728, "state": "AL" }, { "_id": "37010", "city": "ADAMS", "loc": [ -87.122626, 36.558174 ], "pop": 2660, "state": "TN" }, { "_id": "37012", "city": "ALEXANDRIA", "loc": [ -86.037171, 36.071147 ], "pop": 993, "state": "TN" }, { "_id": "37013", "city": "ANTIOCH", "loc": [ -86.65915099999999, 36.059517 ], "pop": 36988, "state": "TN" }, { "_id": "37014", "city": "ARRINGTON", "loc": [ -86.564515, 35.904876 ], "pop": 12171, "state": "TN" }, { "_id": "37015", "city": "ASHLAND CITY", "loc": [ -87.044719, 36.273132 ], "pop": 10940, "state": "TN" }, { "_id": "37016", "city": "AUBURNTOWN", "loc": [ -86.10753200000001, 35.974392 ], "pop": 933, "state": "TN" }, { "_id": "37018", "city": "BEECHGROVE", "loc": [ -86.204644, 35.644733 ], "pop": 650, "state": "TN" }, { "_id": "37019", "city": "BELFAST", "loc": [ -86.70948199999999, 35.406905 ], "pop": 425, "state": "TN" }, { "_id": "37020", "city": "BELL BUCKLE", "loc": [ -86.394908, 35.638105 ], "pop": 2899, "state": "TN" }, { "_id": "37022", "city": "BETHPAGE", "loc": [ -86.314572, 36.518575 ], "pop": 4132, "state": "TN" }, { "_id": "37023", "city": "BIG ROCK", "loc": [ -87.737838, 36.571606 ], "pop": 258, "state": "TN" }, { "_id": "37025", "city": "BON AQUA", "loc": [ -87.299564, 35.947073 ], "pop": 3984, "state": "TN" }, { "_id": "37026", "city": "BRADYVILLE", "loc": [ -86.09119, 35.705278 ], "pop": 1570, "state": "TN" }, { "_id": "37027", "city": "BRENTWOOD", "loc": [ -86.790947, 36.006272 ], "pop": 24280, "state": "TN" }, { "_id": "37028", "city": "BUMPUS MILLS", "loc": [ -87.861434, 36.622618 ], "pop": 411, "state": "TN" }, { "_id": "37029", "city": "BURNS", "loc": [ -87.306061, 36.047066 ], "pop": 4449, "state": "TN" }, { "_id": "37030", "city": "DEFEATED", "loc": [ -85.96969, 36.255617 ], "pop": 5318, "state": "TN" }, { "_id": "37031", "city": "CASTALIAN SPRING", "loc": [ -86.315545, 36.382108 ], "pop": 1544, "state": "TN" }, { "_id": "37032", "city": "CEDAR HILL", "loc": [ -87.027523, 36.506163 ], "pop": 2527, "state": "TN" }, { "_id": "37033", "city": "CENTERVILLE", "loc": [ -87.477473, 35.779685 ], "pop": 5955, "state": "TN" }, { "_id": "37034", "city": "CHAPEL HILL", "loc": [ -86.683584, 35.63542 ], "pop": 2912, "state": "TN" }, { "_id": "37035", "city": "CHAPMANSBORO", "loc": [ -87.111288, 36.378078 ], "pop": 3248, "state": "TN" }, { "_id": "37036", "city": "CHARLOTTE", "loc": [ -87.281554, 36.232612 ], "pop": 4205, "state": "TN" }, { "_id": "37037", "city": "CHRISTIANA", "loc": [ -86.407932, 35.740877 ], "pop": 3173, "state": "TN" }, { "_id": "37040", "city": "CLARKSVILLE", "loc": [ -87.348997, 36.522014 ], "pop": 24920, "state": "TN" }, { "_id": "37042", "city": "CLARKSVILLE", "loc": [ -87.418621, 36.585315 ], "pop": 43296, "state": "TN" }, { "_id": "37043", "city": "CLARKSVILLE", "loc": [ -87.27565300000001, 36.5107 ], "pop": 23166, "state": "TN" }, { "_id": "37046", "city": "COLLEGE GROVE", "loc": [ -86.749516, 35.783166 ], "pop": 4321, "state": "TN" }, { "_id": "37047", "city": "CORNERSVILLE", "loc": [ -86.82862, 35.34088 ], "pop": 1631, "state": "TN" }, { "_id": "37048", "city": "COTTONTOWN", "loc": [ -86.60333799999999, 36.491231 ], "pop": 4724, "state": "TN" }, { "_id": "37049", "city": "CROSS PLAINS", "loc": [ -86.67608799999999, 36.553068 ], "pop": 2269, "state": "TN" }, { "_id": "37050", "city": "CUMBERLAND CITY", "loc": [ -87.63494, 36.366924 ], "pop": 1208, "state": "TN" }, { "_id": "37051", "city": "CUMBERLAND FURNA", "loc": [ -87.40658500000001, 36.316146 ], "pop": 2288, "state": "TN" }, { "_id": "37052", "city": "CUNNINGHAM", "loc": [ -87.42454600000001, 36.378926 ], "pop": 2163, "state": "TN" }, { "_id": "37055", "city": "DICKSON", "loc": [ -87.39953199999999, 36.076014 ], "pop": 17724, "state": "TN" }, { "_id": "37057", "city": "DIXON SPRINGS", "loc": [ -86.05334999999999, 36.445538 ], "pop": 1269, "state": "TN" }, { "_id": "37058", "city": "DOVER", "loc": [ -87.83833300000001, 36.507521 ], "pop": 5972, "state": "TN" }, { "_id": "37059", "city": "DOWELLTOWN", "loc": [ -85.90553300000001, 35.972485 ], "pop": 1416, "state": "TN" }, { "_id": "37060", "city": "EAGLEVILLE", "loc": [ -86.63265199999999, 35.749243 ], "pop": 1562, "state": "TN" }, { "_id": "37061", "city": "ERIN", "loc": [ -87.67896399999999, 36.306684 ], "pop": 4804, "state": "TN" }, { "_id": "37062", "city": "FAIRVIEW", "loc": [ -87.132065, 35.975528 ], "pop": 7203, "state": "TN" }, { "_id": "37064", "city": "FRANKLIN", "loc": [ -86.878833, 35.932782 ], "pop": 40509, "state": "TN" }, { "_id": "37066", "city": "GALLATIN", "loc": [ -86.45116, 36.383438 ], "pop": 27321, "state": "TN" }, { "_id": "37072", "city": "GOODLETTSVILLE", "loc": [ -86.721215, 36.341677 ], "pop": 20825, "state": "TN" }, { "_id": "37073", "city": "GREENBRIER", "loc": [ -86.79135599999999, 36.422914 ], "pop": 8597, "state": "TN" }, { "_id": "37074", "city": "HARTSVILLE", "loc": [ -86.17040799999999, 36.394728 ], "pop": 5511, "state": "TN" }, { "_id": "37075", "city": "HENDERSONVILLE", "loc": [ -86.607157, 36.305425 ], "pop": 38730, "state": "TN" }, { "_id": "37076", "city": "HERMITAGE", "loc": [ -86.600162, 36.184814 ], "pop": 23765, "state": "TN" }, { "_id": "37078", "city": "HURRICANE MILLS", "loc": [ -87.767129, 35.974859 ], "pop": 2200, "state": "TN" }, { "_id": "37079", "city": "INDIAN MOUND", "loc": [ -87.680368, 36.494593 ], "pop": 1615, "state": "TN" }, { "_id": "37080", "city": "JOELTON", "loc": [ -86.91630600000001, 36.328974 ], "pop": 6749, "state": "TN" }, { "_id": "37082", "city": "KINGSTON SPRINGS", "loc": [ -87.115646, 36.095324 ], "pop": 4037, "state": "TN" }, { "_id": "37083", "city": "LAFAYETTE", "loc": [ -86.02421699999999, 36.538955 ], "pop": 8686, "state": "TN" }, { "_id": "37085", "city": "LASCASSAS", "loc": [ -86.31119200000001, 35.949535 ], "pop": 2463, "state": "TN" }, { "_id": "37086", "city": "LA VERGNE", "loc": [ -86.559969, 36.012714 ], "pop": 6115, "state": "TN" }, { "_id": "37087", "city": "LEBANON", "loc": [ -86.302367, 36.209792 ], "pop": 33656, "state": "TN" }, { "_id": "37091", "city": "LEWISBURG", "loc": [ -86.781204, 35.459615 ], "pop": 16217, "state": "TN" }, { "_id": "37095", "city": "GASSAWAY", "loc": [ -85.98544800000001, 35.974593 ], "pop": 2236, "state": "TN" }, { "_id": "37096", "city": "FLATWOODS", "loc": [ -87.865582, 35.599784 ], "pop": 4172, "state": "TN" }, { "_id": "37097", "city": "LOBELVILLE", "loc": [ -87.82510600000001, 35.746659 ], "pop": 2357, "state": "TN" }, { "_id": "37098", "city": "WRIGLEY", "loc": [ -87.317199, 35.892216 ], "pop": 3257, "state": "TN" }, { "_id": "37101", "city": "MC EWEN", "loc": [ -87.64221000000001, 36.118477 ], "pop": 3963, "state": "TN" }, { "_id": "37110", "city": "PLAZA", "loc": [ -85.79160899999999, 35.697358 ], "pop": 25113, "state": "TN" }, { "_id": "37115", "city": "MADISON", "loc": [ -86.70455699999999, 36.260386 ], "pop": 31511, "state": "TN" }, { "_id": "37118", "city": "MILTON", "loc": [ -86.182377, 35.922085 ], "pop": 894, "state": "TN" }, { "_id": "37122", "city": "MOUNT JULIET", "loc": [ -86.50234399999999, 36.189684 ], "pop": 24498, "state": "TN" }, { "_id": "37129", "city": "MURFREESBORO", "loc": [ -86.41809000000001, 35.871019 ], "pop": 26477, "state": "TN" }, { "_id": "37130", "city": "MURFREESBORO", "loc": [ -86.36467500000001, 35.847792 ], "pop": 35559, "state": "TN" }, { "_id": "37134", "city": "NEW JOHNSONVILLE", "loc": [ -87.95469300000001, 36.008775 ], "pop": 2812, "state": "TN" }, { "_id": "37135", "city": "NOLENSVILLE", "loc": [ -86.682868, 35.930723 ], "pop": 3813, "state": "TN" }, { "_id": "37137", "city": "NUNNELLY", "loc": [ -87.50666099999999, 35.87627 ], "pop": 2176, "state": "TN" }, { "_id": "37138", "city": "OLD HICKORY", "loc": [ -86.611704, 36.241564 ], "pop": 17329, "state": "TN" }, { "_id": "37140", "city": "ONLY", "loc": [ -87.665451, 35.867888 ], "pop": 199, "state": "TN" }, { "_id": "37141", "city": "ORLINDA", "loc": [ -86.69900199999999, 36.611045 ], "pop": 614, "state": "TN" }, { "_id": "37142", "city": "PALMYRA", "loc": [ -87.491359, 36.417568 ], "pop": 1118, "state": "TN" }, { "_id": "37143", "city": "PEGRAM", "loc": [ -87.03161299999999, 36.11291 ], "pop": 2742, "state": "TN" }, { "_id": "37144", "city": "PETERSBURG", "loc": [ -86.644728, 35.292416 ], "pop": 3214, "state": "TN" }, { "_id": "37145", "city": "PLEASANT SHADE", "loc": [ -85.908057, 36.348924 ], "pop": 1901, "state": "TN" }, { "_id": "37146", "city": "PLEASANT VIEW", "loc": [ -87.03948, 36.378281 ], "pop": 2424, "state": "TN" }, { "_id": "37147", "city": "PLEASANTVILLE", "loc": [ -87.65366400000001, 35.668373 ], "pop": 534, "state": "TN" }, { "_id": "37148", "city": "PORTLAND", "loc": [ -86.505923, 36.567306 ], "pop": 12790, "state": "TN" }, { "_id": "37149", "city": "READYVILLE", "loc": [ -86.241483, 35.798878 ], "pop": 4572, "state": "TN" }, { "_id": "37150", "city": "RED BOILING SPRI", "loc": [ -85.846333, 36.531283 ], "pop": 4862, "state": "TN" }, { "_id": "37151", "city": "RIDDLETON", "loc": [ -86.03348200000001, 36.350581 ], "pop": 572, "state": "TN" }, { "_id": "37153", "city": "ROCKVALE", "loc": [ -86.535196, 35.74503 ], "pop": 1776, "state": "TN" }, { "_id": "37160", "city": "ROYAL", "loc": [ -86.463425, 35.488313 ], "pop": 22781, "state": "TN" }, { "_id": "37166", "city": "SMITHVILLE", "loc": [ -85.804562, 35.929907 ], "pop": 10587, "state": "TN" }, { "_id": "37167", "city": "SMYRNA", "loc": [ -86.504818, 35.965611 ], "pop": 23049, "state": "TN" }, { "_id": "37171", "city": "SOUTHSIDE", "loc": [ -87.30608700000001, 36.362588 ], "pop": 951, "state": "TN" }, { "_id": "37172", "city": "SPRINGFIELD", "loc": [ -86.876901, 36.50182 ], "pop": 21214, "state": "TN" }, { "_id": "37174", "city": "SPRING HILL", "loc": [ -86.90480700000001, 35.717294 ], "pop": 2891, "state": "TN" }, { "_id": "37175", "city": "STEWART", "loc": [ -87.872495, 36.324055 ], "pop": 897, "state": "TN" }, { "_id": "37178", "city": "TENNESSEE RIDGE", "loc": [ -87.780761, 36.329712 ], "pop": 1558, "state": "TN" }, { "_id": "37179", "city": "THOMPSONS STATIO", "loc": [ -87.004875, 35.831006 ], "pop": 3945, "state": "TN" }, { "_id": "37180", "city": "UNIONVILLE", "loc": [ -86.563852, 35.622416 ], "pop": 1772, "state": "TN" }, { "_id": "37181", "city": "VANLEER", "loc": [ -87.45653, 36.223738 ], "pop": 1531, "state": "TN" }, { "_id": "37183", "city": "WARTRACE", "loc": [ -86.327736, 35.512299 ], "pop": 2119, "state": "TN" }, { "_id": "37184", "city": "WATERTOWN", "loc": [ -86.143411, 36.095268 ], "pop": 3640, "state": "TN" }, { "_id": "37185", "city": "WAVERLY", "loc": [ -87.799108, 36.099664 ], "pop": 6820, "state": "TN" }, { "_id": "37186", "city": "WESTMORELAND", "loc": [ -86.23529600000001, 36.575554 ], "pop": 6695, "state": "TN" }, { "_id": "37187", "city": "WHITE BLUFF", "loc": [ -87.21901, 36.12531 ], "pop": 5230, "state": "TN" }, { "_id": "37188", "city": "WHITE HOUSE", "loc": [ -86.670524, 36.460048 ], "pop": 6240, "state": "TN" }, { "_id": "37189", "city": "WHITES CREEK", "loc": [ -86.82922000000001, 36.274377 ], "pop": 4189, "state": "TN" }, { "_id": "37190", "city": "WOODBURY", "loc": [ -86.050044, 35.814254 ], "pop": 6141, "state": "TN" }, { "_id": "37191", "city": "WOODLAWN", "loc": [ -87.539331, 36.514695 ], "pop": 2568, "state": "TN" }, { "_id": "37201", "city": "NASHVILLE", "loc": [ -86.778441, 36.167028 ], "pop": 1579, "state": "TN" }, { "_id": "37203", "city": "NASHVILLE", "loc": [ -86.79392199999999, 36.146802 ], "pop": 13524, "state": "TN" }, { "_id": "37204", "city": "MELROSE", "loc": [ -86.781808, 36.114628 ], "pop": 12448, "state": "TN" }, { "_id": "37205", "city": "NASHVILLE", "loc": [ -86.868954, 36.111432 ], "pop": 23323, "state": "TN" }, { "_id": "37206", "city": "NASHVILLE", "loc": [ -86.741106, 36.179813 ], "pop": 28446, "state": "TN" }, { "_id": "37207", "city": "NASHVILLE", "loc": [ -86.77400799999999, 36.2195 ], "pop": 35260, "state": "TN" }, { "_id": "37208", "city": "NASHVILLE", "loc": [ -86.807563, 36.176196 ], "pop": 15535, "state": "TN" }, { "_id": "37209", "city": "NASHVILLE", "loc": [ -86.860212, 36.154592 ], "pop": 33560, "state": "TN" }, { "_id": "37210", "city": "NASHVILLE", "loc": [ -86.74104199999999, 36.137904 ], "pop": 17173, "state": "TN" }, { "_id": "37211", "city": "NASHVILLE", "loc": [ -86.72403799999999, 36.072486 ], "pop": 51478, "state": "TN" }, { "_id": "37212", "city": "NASHVILLE", "loc": [ -86.800555, 36.133681 ], "pop": 16492, "state": "TN" }, { "_id": "37213", "city": "NASHVILLE", "loc": [ -86.76055599999999, 36.165512 ], "pop": 356, "state": "TN" }, { "_id": "37214", "city": "NASHVILLE", "loc": [ -86.660854, 36.163339 ], "pop": 24935, "state": "TN" }, { "_id": "37215", "city": "NASHVILLE", "loc": [ -86.821917, 36.098584 ], "pop": 20452, "state": "TN" }, { "_id": "37216", "city": "NASHVILLE", "loc": [ -86.72568699999999, 36.212491 ], "pop": 20045, "state": "TN" }, { "_id": "37217", "city": "NASHVILLE", "loc": [ -86.666585, 36.10585 ], "pop": 26242, "state": "TN" }, { "_id": "37218", "city": "NASHVILLE", "loc": [ -86.845583, 36.207062 ], "pop": 14312, "state": "TN" }, { "_id": "37219", "city": "NASHVILLE", "loc": [ -86.783676, 36.167768 ], "pop": 268, "state": "TN" }, { "_id": "37220", "city": "NASHVILLE", "loc": [ -86.769654, 36.064139 ], "pop": 6230, "state": "TN" }, { "_id": "37221", "city": "BELLEVUE", "loc": [ -86.943674, 36.071512 ], "pop": 21880, "state": "TN" }, { "_id": "37228", "city": "NASHVILLE", "loc": [ -86.80526399999999, 36.190145 ], "pop": 612, "state": "TN" }, { "_id": "37301", "city": "ALTAMONT", "loc": [ -85.763508, 35.425776 ], "pop": 988, "state": "TN" }, { "_id": "37302", "city": "APISON", "loc": [ -85.01640399999999, 35.014926 ], "pop": 1614, "state": "TN" }, { "_id": "37303", "city": "ATHENS", "loc": [ -84.60426099999999, 35.457389 ], "pop": 21571, "state": "TN" }, { "_id": "37305", "city": "BEERSHEBA SPRING", "loc": [ -85.68212800000001, 35.470371 ], "pop": 1067, "state": "TN" }, { "_id": "37306", "city": "BELVIDERE", "loc": [ -86.172827, 35.141499 ], "pop": 4670, "state": "TN" }, { "_id": "37307", "city": "BENTON", "loc": [ -84.654433, 35.172953 ], "pop": 3164, "state": "TN" }, { "_id": "37308", "city": "BIRCHWOOD", "loc": [ -84.96183499999999, 35.351968 ], "pop": 2732, "state": "TN" }, { "_id": "37309", "city": "CALHOUN", "loc": [ -84.738105, 35.374614 ], "pop": 3597, "state": "TN" }, { "_id": "37310", "city": "CHARLESTON", "loc": [ -84.766639, 35.255644 ], "pop": 1921, "state": "TN" }, { "_id": "37311", "city": "CLEVELAND", "loc": [ -84.875006, 35.131257 ], "pop": 40633, "state": "TN" }, { "_id": "37312", "city": "CLEVELAND", "loc": [ -84.84755699999999, 35.202309 ], "pop": 28081, "state": "TN" }, { "_id": "37313", "city": "COALMONT", "loc": [ -85.655097, 35.386197 ], "pop": 786, "state": "TN" }, { "_id": "37317", "city": "POSTELLE", "loc": [ -84.38396400000001, 35.024987 ], "pop": 3155, "state": "TN" }, { "_id": "37318", "city": "COWAN", "loc": [ -86.019007, 35.170121 ], "pop": 2713, "state": "TN" }, { "_id": "37321", "city": "DAYTON", "loc": [ -85.01345499999999, 35.500186 ], "pop": 15965, "state": "TN" }, { "_id": "37322", "city": "DECATUR", "loc": [ -84.80805100000001, 35.507166 ], "pop": 3718, "state": "TN" }, { "_id": "37324", "city": "DECHERD", "loc": [ -86.058859, 35.232598 ], "pop": 6576, "state": "TN" }, { "_id": "37325", "city": "DELANO", "loc": [ -84.602366, 35.261234 ], "pop": 1830, "state": "TN" }, { "_id": "37327", "city": "DUNLAP", "loc": [ -85.39251299999999, 35.384175 ], "pop": 6883, "state": "TN" }, { "_id": "37328", "city": "ELORA", "loc": [ -86.34811000000001, 35.029496 ], "pop": 1257, "state": "TN" }, { "_id": "37329", "city": "ENGLEWOOD", "loc": [ -84.483265, 35.427245 ], "pop": 3419, "state": "TN" }, { "_id": "37330", "city": "ESTILL SPRINGS", "loc": [ -86.139561, 35.270508 ], "pop": 5778, "state": "TN" }, { "_id": "37331", "city": "ETOWAH", "loc": [ -84.528305, 35.331443 ], "pop": 8246, "state": "TN" }, { "_id": "37332", "city": "EVENSVILLE", "loc": [ -85.022773, 35.615346 ], "pop": 99, "state": "TN" }, { "_id": "37333", "city": "FARNER", "loc": [ -84.320904, 35.144894 ], "pop": 672, "state": "TN" }, { "_id": "37334", "city": "FAYETTEVILLE", "loc": [ -86.56644799999999, 35.152678 ], "pop": 11009, "state": "TN" }, { "_id": "37335", "city": "FLINTVILLE", "loc": [ -86.497974, 35.042782 ], "pop": 6020, "state": "TN" }, { "_id": "37336", "city": "GEORGETOWN", "loc": [ -84.912684, 35.293241 ], "pop": 3768, "state": "TN" }, { "_id": "37337", "city": "GRANDVIEW", "loc": [ -84.861464, 35.760843 ], "pop": 626, "state": "TN" }, { "_id": "37338", "city": "GRAYSVILLE", "loc": [ -85.17904, 35.44842 ], "pop": 1067, "state": "TN" }, { "_id": "37339", "city": "GRUETLI LAAGER", "loc": [ -85.66977300000001, 35.363464 ], "pop": 1929, "state": "TN" }, { "_id": "37340", "city": "GUILD", "loc": [ -85.511568, 35.017834 ], "pop": 1183, "state": "TN" }, { "_id": "37341", "city": "HARRISON", "loc": [ -85.094532, 35.167898 ], "pop": 10247, "state": "TN" }, { "_id": "37342", "city": "HILLSBORO", "loc": [ -85.97242199999999, 35.369933 ], "pop": 2075, "state": "TN" }, { "_id": "37343", "city": "HIXSON", "loc": [ -85.218215, 35.159112 ], "pop": 35100, "state": "TN" }, { "_id": "37345", "city": "HUNTLAND", "loc": [ -86.269435, 35.051198 ], "pop": 2016, "state": "TN" }, { "_id": "37347", "city": "KIMBALL", "loc": [ -85.61473700000001, 35.066603 ], "pop": 7076, "state": "TN" }, { "_id": "37348", "city": "KELSO", "loc": [ -86.468343, 35.102356 ], "pop": 759, "state": "TN" }, { "_id": "37350", "city": "LOOKOUT MOUNTAIN", "loc": [ -85.35056400000001, 34.994825 ], "pop": 1899, "state": "TN" }, { "_id": "37352", "city": "LYNCHBURG", "loc": [ -86.37201899999999, 35.270642 ], "pop": 2888, "state": "TN" }, { "_id": "37353", "city": "MC DONALD", "loc": [ -84.989198, 35.086902 ], "pop": 819, "state": "TN" }, { "_id": "37354", "city": "HIWASSEE COLLEGE", "loc": [ -84.351899, 35.500917 ], "pop": 10509, "state": "TN" }, { "_id": "37355", "city": "MANCHESTER", "loc": [ -86.081568, 35.495846 ], "pop": 19173, "state": "TN" }, { "_id": "37356", "city": "MONTEAGLE", "loc": [ -85.822795, 35.240172 ], "pop": 2206, "state": "TN" }, { "_id": "37357", "city": "MORRISON", "loc": [ -85.889895, 35.60002 ], "pop": 5654, "state": "TN" }, { "_id": "37359", "city": "MULBERRY", "loc": [ -86.421685, 35.19413 ], "pop": 495, "state": "TN" }, { "_id": "37360", "city": "NORMANDY", "loc": [ -86.255712, 35.429628 ], "pop": 1308, "state": "TN" }, { "_id": "37361", "city": "OCOEE", "loc": [ -84.713565, 35.102473 ], "pop": 1206, "state": "TN" }, { "_id": "37362", "city": "OLDFORT", "loc": [ -84.72187700000001, 35.03654 ], "pop": 1522, "state": "TN" }, { "_id": "37363", "city": "OOLTEWAH", "loc": [ -85.063495, 35.078104 ], "pop": 17419, "state": "TN" }, { "_id": "37365", "city": "PALMER", "loc": [ -85.564272, 35.374062 ], "pop": 1685, "state": "TN" }, { "_id": "37366", "city": "PELHAM", "loc": [ -85.84408000000001, 35.314045 ], "pop": 671, "state": "TN" }, { "_id": "37367", "city": "PIKEVILLE", "loc": [ -85.20765299999999, 35.640769 ], "pop": 7869, "state": "TN" }, { "_id": "37369", "city": "RELIANCE", "loc": [ -84.54103000000001, 35.180664 ], "pop": 1777, "state": "TN" }, { "_id": "37370", "city": "RICEVILLE", "loc": [ -84.646247, 35.344615 ], "pop": 2785, "state": "TN" }, { "_id": "37373", "city": "SALE CREEK", "loc": [ -85.102323, 35.385806 ], "pop": 2464, "state": "TN" }, { "_id": "37374", "city": "SEQUATCHIE", "loc": [ -85.637084, 35.163396 ], "pop": 1463, "state": "TN" }, { "_id": "37375", "city": "SEWANEE", "loc": [ -85.91258999999999, 35.201101 ], "pop": 2785, "state": "TN" }, { "_id": "37376", "city": "SHERWOOD", "loc": [ -85.923841, 35.099164 ], "pop": 885, "state": "TN" }, { "_id": "37377", "city": "SIGNAL MOUNTAIN", "loc": [ -85.336243, 35.149424 ], "pop": 14032, "state": "TN" }, { "_id": "37379", "city": "SODDY DAISY", "loc": [ -85.163009, 35.252686 ], "pop": 19646, "state": "TN" }, { "_id": "37380", "city": "SOUTH PITTSBURG", "loc": [ -85.722498, 35.028046 ], "pop": 6151, "state": "TN" }, { "_id": "37381", "city": "SPRING CITY", "loc": [ -84.84196799999999, 35.682072 ], "pop": 7787, "state": "TN" }, { "_id": "37385", "city": "TELLICO PLAINS", "loc": [ -84.306785, 35.356237 ], "pop": 6459, "state": "TN" }, { "_id": "37387", "city": "TRACY CITY", "loc": [ -85.736187, 35.272081 ], "pop": 3980, "state": "TN" }, { "_id": "37388", "city": "DICKEL", "loc": [ -86.22069, 35.35841 ], "pop": 22193, "state": "TN" }, { "_id": "37391", "city": "TURTLETOWN", "loc": [ -84.354381, 35.108089 ], "pop": 910, "state": "TN" }, { "_id": "37396", "city": "WHITESIDE", "loc": [ -85.398499, 35.066289 ], "pop": 192, "state": "TN" }, { "_id": "37397", "city": "WHITWELL", "loc": [ -85.50111200000001, 35.197228 ], "pop": 9051, "state": "TN" }, { "_id": "37398", "city": "WINCHESTER", "loc": [ -86.113038, 35.186398 ], "pop": 5753, "state": "TN" }, { "_id": "37402", "city": "CHATTANOOGA", "loc": [ -85.316126, 35.046288 ], "pop": 3455, "state": "TN" }, { "_id": "37403", "city": "CHATTANOOGA", "loc": [ -85.296516, 35.045045 ], "pop": 3700, "state": "TN" }, { "_id": "37404", "city": "CHATTANOOGA", "loc": [ -85.272229, 35.030634 ], "pop": 15345, "state": "TN" }, { "_id": "37405", "city": "CHATTANOOGA", "loc": [ -85.308224, 35.076801 ], "pop": 12005, "state": "TN" }, { "_id": "37406", "city": "CHATTANOOGA", "loc": [ -85.247839, 35.061446 ], "pop": 15684, "state": "TN" }, { "_id": "37407", "city": "CHATTANOOGA", "loc": [ -85.284913, 35.002361 ], "pop": 8138, "state": "TN" }, { "_id": "37408", "city": "CHATTANOOGA", "loc": [ -85.306809, 35.029236 ], "pop": 2131, "state": "TN" }, { "_id": "37409", "city": "CHATTANOOGA", "loc": [ -85.33101600000001, 34.99809 ], "pop": 2848, "state": "TN" }, { "_id": "37410", "city": "CHATTANOOGA", "loc": [ -85.313762, 35.001787 ], "pop": 6068, "state": "TN" }, { "_id": "37411", "city": "CHATTANOOGA", "loc": [ -85.23558300000001, 35.02706 ], "pop": 18421, "state": "TN" }, { "_id": "37412", "city": "EAST RIDGE", "loc": [ -85.23795699999999, 34.996726 ], "pop": 20711, "state": "TN" }, { "_id": "37415", "city": "RED BANK", "loc": [ -85.28633000000001, 35.117668 ], "pop": 21549, "state": "TN" }, { "_id": "37416", "city": "CHATTANOOGA", "loc": [ -85.175656, 35.094246 ], "pop": 14197, "state": "TN" }, { "_id": "37419", "city": "CHATTANOOGA", "loc": [ -85.36869799999999, 35.033092 ], "pop": 5253, "state": "TN" }, { "_id": "37421", "city": "CHATTANOOGA", "loc": [ -85.14594, 35.024986 ], "pop": 32802, "state": "TN" }, { "_id": "37601", "city": "JOHNSON CITY", "loc": [ -82.34077499999999, 36.333872 ], "pop": 27978, "state": "TN" }, { "_id": "37604", "city": "JOHNSON CITY", "loc": [ -82.38104199999999, 36.310744 ], "pop": 31353, "state": "TN" }, { "_id": "37615", "city": "GRAY", "loc": [ -82.44712800000001, 36.41006 ], "pop": 12119, "state": "TN" }, { "_id": "37616", "city": "AFTON", "loc": [ -82.746667, 36.204166 ], "pop": 3469, "state": "TN" }, { "_id": "37617", "city": "BLOUNTVILLE", "loc": [ -82.36555799999999, 36.53562 ], "pop": 14517, "state": "TN" }, { "_id": "37618", "city": "BLUFF CITY", "loc": [ -82.236181, 36.477391 ], "pop": 11146, "state": "TN" }, { "_id": "37620", "city": "BRISTOL", "loc": [ -82.181864, 36.568643 ], "pop": 36852, "state": "TN" }, { "_id": "37640", "city": "BUTLER", "loc": [ -81.985614, 36.328158 ], "pop": 3479, "state": "TN" }, { "_id": "37641", "city": "CHUCKEY", "loc": [ -82.66744799999999, 36.221142 ], "pop": 6362, "state": "TN" }, { "_id": "37642", "city": "CHURCH HILL", "loc": [ -82.725184, 36.539926 ], "pop": 9106, "state": "TN" }, { "_id": "37643", "city": "ELIZABETHTON", "loc": [ -82.201481, 36.344548 ], "pop": 32046, "state": "TN" }, { "_id": "37645", "city": "MOUNT CARMEL", "loc": [ -82.653217, 36.562913 ], "pop": 6249, "state": "TN" }, { "_id": "37650", "city": "ERWIN", "loc": [ -82.41631, 36.134193 ], "pop": 11635, "state": "TN" }, { "_id": "37656", "city": "FALL BRANCH", "loc": [ -82.62560499999999, 36.415839 ], "pop": 1964, "state": "TN" }, { "_id": "37657", "city": "FLAG POND", "loc": [ -82.56230100000001, 36.008507 ], "pop": 1066, "state": "TN" }, { "_id": "37658", "city": "HAMPTON", "loc": [ -82.189144, 36.257743 ], "pop": 4828, "state": "TN" }, { "_id": "37659", "city": "JONESBOROUGH", "loc": [ -82.490225, 36.295426 ], "pop": 18736, "state": "TN" }, { "_id": "37660", "city": "BLOOMINGDALE", "loc": [ -82.554034, 36.552766 ], "pop": 37726, "state": "TN" }, { "_id": "37663", "city": "COLONIAL HEIGHTS", "loc": [ -82.4948, 36.4693 ], "pop": 12097, "state": "TN" }, { "_id": "37664", "city": "KINGSPORT", "loc": [ -82.516835, 36.520834 ], "pop": 22289, "state": "TN" }, { "_id": "37665", "city": "LYNN GARDEN", "loc": [ -82.569906, 36.578305 ], "pop": 6024, "state": "TN" }, { "_id": "37680", "city": "LAUREL BLOOMERY", "loc": [ -81.725537, 36.574946 ], "pop": 670, "state": "TN" }, { "_id": "37681", "city": "WASHINGTON COLLE", "loc": [ -82.61709, 36.236968 ], "pop": 4354, "state": "TN" }, { "_id": "37683", "city": "MOUNTAIN CITY", "loc": [ -81.813999, 36.465724 ], "pop": 9205, "state": "TN" }, { "_id": "37686", "city": "PINEY FLATS", "loc": [ -82.333957, 36.446122 ], "pop": 5130, "state": "TN" }, { "_id": "37687", "city": "ROAN MOUNTAIN", "loc": [ -82.081041, 36.177333 ], "pop": 4234, "state": "TN" }, { "_id": "37688", "city": "SHADY VALLEY", "loc": [ -81.906797, 36.527218 ], "pop": 1053, "state": "TN" }, { "_id": "37690", "city": "TELFORD", "loc": [ -82.536935, 36.245053 ], "pop": 2662, "state": "TN" }, { "_id": "37691", "city": "TRADE", "loc": [ -81.757234, 36.368328 ], "pop": 763, "state": "TN" }, { "_id": "37692", "city": "UNICOI", "loc": [ -82.321957, 36.206585 ], "pop": 3838, "state": "TN" }, { "_id": "37694", "city": "WATAUGA", "loc": [ -82.26826199999999, 36.370157 ], "pop": 2033, "state": "TN" }, { "_id": "37701", "city": "ALCOA", "loc": [ -83.980895, 35.78522 ], "pop": 5891, "state": "TN" }, { "_id": "37705", "city": "ANDERSONVILLE", "loc": [ -84.054399, 36.191514 ], "pop": 5761, "state": "TN" }, { "_id": "37708", "city": "BEAN STATION", "loc": [ -83.31424800000001, 36.32493 ], "pop": 5255, "state": "TN" }, { "_id": "37709", "city": "BLAINE", "loc": [ -83.67827200000001, 36.15832 ], "pop": 2556, "state": "TN" }, { "_id": "37710", "city": "DEVONIA", "loc": [ -84.215968, 36.185426 ], "pop": 2225, "state": "TN" }, { "_id": "37711", "city": "BULLS GAP", "loc": [ -83.03149000000001, 36.325707 ], "pop": 5876, "state": "TN" }, { "_id": "37713", "city": "BYBEE", "loc": [ -83.163071, 36.073957 ], "pop": 2911, "state": "TN" }, { "_id": "37714", "city": "CARYVILLE", "loc": [ -84.18979400000001, 36.285422 ], "pop": 3811, "state": "TN" }, { "_id": "37715", "city": "CLAIRFIELD", "loc": [ -83.93969300000001, 36.565026 ], "pop": 1239, "state": "TN" }, { "_id": "37716", "city": "CLINTON", "loc": [ -84.189735, 36.08688 ], "pop": 21075, "state": "TN" }, { "_id": "37721", "city": "CORRYTON", "loc": [ -83.813, 36.120011 ], "pop": 7557, "state": "TN" }, { "_id": "37722", "city": "COSBY", "loc": [ -83.218743, 35.834693 ], "pop": 3800, "state": "TN" }, { "_id": "37723", "city": "CRAB ORCHARD", "loc": [ -84.858577, 35.889763 ], "pop": 2307, "state": "TN" }, { "_id": "37724", "city": "CUMBERLAND GAP", "loc": [ -83.681049, 36.550381 ], "pop": 3142, "state": "TN" }, { "_id": "37725", "city": "DANDRIDGE", "loc": [ -83.40443500000001, 36.001798 ], "pop": 8707, "state": "TN" }, { "_id": "37726", "city": "DEER LODGE", "loc": [ -84.819074, 36.217584 ], "pop": 538, "state": "TN" }, { "_id": "37727", "city": "DEL RIO", "loc": [ -83.01500799999999, 35.882967 ], "pop": 1616, "state": "TN" }, { "_id": "37729", "city": "DUFF", "loc": [ -84.01246999999999, 36.411035 ], "pop": 4265, "state": "TN" }, { "_id": "37731", "city": "EIDSON", "loc": [ -83.08271999999999, 36.499522 ], "pop": 901, "state": "TN" }, { "_id": "37737", "city": "FRIENDSVILLE", "loc": [ -84.10606900000001, 35.752302 ], "pop": 4186, "state": "TN" }, { "_id": "37738", "city": "GATLINBURG", "loc": [ -83.48740599999999, 35.728976 ], "pop": 4352, "state": "TN" }, { "_id": "37742", "city": "GREENBACK", "loc": [ -84.170959, 35.656738 ], "pop": 3272, "state": "TN" }, { "_id": "37743", "city": "BAILEYTON", "loc": [ -82.833136, 36.160807 ], "pop": 39225, "state": "TN" }, { "_id": "37748", "city": "HARRIMAN", "loc": [ -84.51552599999999, 35.934785 ], "pop": 18558, "state": "TN" }, { "_id": "37752", "city": "HARROGATE", "loc": [ -83.60726200000001, 36.576718 ], "pop": 4683, "state": "TN" }, { "_id": "37753", "city": "HARTFORD", "loc": [ -83.099642, 35.825597 ], "pop": 733, "state": "TN" }, { "_id": "37754", "city": "HEISKELL", "loc": [ -84.043826, 36.115027 ], "pop": 2945, "state": "TN" }, { "_id": "37755", "city": "HELENWOOD", "loc": [ -84.538088, 36.43294 ], "pop": 2583, "state": "TN" }, { "_id": "37756", "city": "HUNTSVILLE", "loc": [ -84.428832, 36.398329 ], "pop": 4760, "state": "TN" }, { "_id": "37757", "city": "JACKSBORO", "loc": [ -84.192835, 36.326615 ], "pop": 4967, "state": "TN" }, { "_id": "37760", "city": "JEFFERSON CITY", "loc": [ -83.480982, 36.11633 ], "pop": 9438, "state": "TN" }, { "_id": "37762", "city": "JELLICO", "loc": [ -84.118067, 36.554407 ], "pop": 6317, "state": "TN" }, { "_id": "37763", "city": "KINGSTON", "loc": [ -84.49705400000001, 35.852807 ], "pop": 11002, "state": "TN" }, { "_id": "37764", "city": "KODAK", "loc": [ -83.61711099999999, 35.972215 ], "pop": 4104, "state": "TN" }, { "_id": "37765", "city": "KYLES FORD", "loc": [ -83.050712, 36.572072 ], "pop": 931, "state": "TN" }, { "_id": "37766", "city": "MORLEY", "loc": [ -84.11156800000001, 36.368967 ], "pop": 14939, "state": "TN" }, { "_id": "37769", "city": "LAKE CITY", "loc": [ -84.13856699999999, 36.203223 ], "pop": 6099, "state": "TN" }, { "_id": "37770", "city": "LANCING", "loc": [ -84.71351900000001, 36.145644 ], "pop": 2345, "state": "TN" }, { "_id": "37771", "city": "LENOIR CITY", "loc": [ -84.26650100000001, 35.810391 ], "pop": 18523, "state": "TN" }, { "_id": "37774", "city": "LOUDON", "loc": [ -84.34362, 35.729211 ], "pop": 11116, "state": "TN" }, { "_id": "37777", "city": "LOUISVILLE", "loc": [ -84.008895, 35.837465 ], "pop": 9618, "state": "TN" }, { "_id": "37778", "city": "LOWLAND", "loc": [ -83.244592, 36.164016 ], "pop": 166, "state": "TN" }, { "_id": "37779", "city": "LUTTRELL", "loc": [ -83.75997599999999, 36.200136 ], "pop": 3554, "state": "TN" }, { "_id": "37801", "city": "MARYVILLE", "loc": [ -83.914541, 35.782449 ], "pop": 24011, "state": "TN" }, { "_id": "37804", "city": "MARYVILLE", "loc": [ -84.004491, 35.715659 ], "pop": 31758, "state": "TN" }, { "_id": "37806", "city": "MASCOT", "loc": [ -83.741101, 36.084421 ], "pop": 2781, "state": "TN" }, { "_id": "37807", "city": "MAYNARDVILLE", "loc": [ -83.840261, 36.234274 ], "pop": 8998, "state": "TN" }, { "_id": "37809", "city": "MIDWAY", "loc": [ -83.02814100000001, 36.150995 ], "pop": 824, "state": "TN" }, { "_id": "37810", "city": "MOHAWK", "loc": [ -83.09018500000001, 36.186919 ], "pop": 1765, "state": "TN" }, { "_id": "37811", "city": "MOORESBURG", "loc": [ -83.20949899999999, 36.362082 ], "pop": 2628, "state": "TN" }, { "_id": "37813", "city": "MORRISTOWN", "loc": [ -83.275519, 36.195672 ], "pop": 15333, "state": "TN" }, { "_id": "37814", "city": "MORRISTOWN", "loc": [ -83.31185000000001, 36.224782 ], "pop": 26285, "state": "TN" }, { "_id": "37818", "city": "MOSHEIM", "loc": [ -82.967399, 36.183883 ], "pop": 4337, "state": "TN" }, { "_id": "37819", "city": "NEWCOMB", "loc": [ -84.17984800000001, 36.542768 ], "pop": 52, "state": "TN" }, { "_id": "37820", "city": "NEW MARKET", "loc": [ -83.56725299999999, 36.081037 ], "pop": 5751, "state": "TN" }, { "_id": "37821", "city": "NEWPORT", "loc": [ -83.202749, 35.954431 ], "pop": 16780, "state": "TN" }, { "_id": "37825", "city": "NEW TAZEWELL", "loc": [ -83.64694900000001, 36.424475 ], "pop": 5602, "state": "TN" }, { "_id": "37826", "city": "NIOTA", "loc": [ -84.57214999999999, 35.581924 ], "pop": 2182, "state": "TN" }, { "_id": "37829", "city": "OAKDALE", "loc": [ -84.575295, 36.009962 ], "pop": 3901, "state": "TN" }, { "_id": "37830", "city": "OAK RIDGE", "loc": [ -84.262297, 36.01588 ], "pop": 27605, "state": "TN" }, { "_id": "37840", "city": "OLIVER SPRINGS", "loc": [ -84.34863199999999, 36.036616 ], "pop": 1324, "state": "TN" }, { "_id": "37841", "city": "ONEIDA", "loc": [ -84.529319, 36.505259 ], "pop": 7010, "state": "TN" }, { "_id": "37843", "city": "PARROTTSVILLE", "loc": [ -83.073627, 35.998297 ], "pop": 3301, "state": "TN" }, { "_id": "37845", "city": "PETROS", "loc": [ -84.439914, 36.055903 ], "pop": 4330, "state": "TN" }, { "_id": "37846", "city": "PHILADELPHIA", "loc": [ -84.450221, 35.664214 ], "pop": 1523, "state": "TN" }, { "_id": "37847", "city": "PIONEER", "loc": [ -84.290672, 36.469465 ], "pop": 476, "state": "TN" }, { "_id": "37848", "city": "POWDER SPRINGS", "loc": [ -83.672921, 36.254899 ], "pop": 381, "state": "TN" }, { "_id": "37849", "city": "POWELL", "loc": [ -84.039987, 36.043454 ], "pop": 14646, "state": "TN" }, { "_id": "37852", "city": "ROBBINS", "loc": [ -84.590417, 36.352693 ], "pop": 2639, "state": "TN" }, { "_id": "37853", "city": "ROCKFORD", "loc": [ -83.941202, 35.830519 ], "pop": 3347, "state": "TN" }, { "_id": "37854", "city": "ROCKWOOD", "loc": [ -84.68418800000001, 35.858677 ], "pop": 10384, "state": "TN" }, { "_id": "37857", "city": "ROGERSVILLE", "loc": [ -83.010786, 36.416196 ], "pop": 10374, "state": "TN" }, { "_id": "37860", "city": "RUSSELLVILLE", "loc": [ -83.19138, 36.256684 ], "pop": 2329, "state": "TN" }, { "_id": "37861", "city": "RUTLEDGE", "loc": [ -83.512468, 36.250078 ], "pop": 6019, "state": "TN" }, { "_id": "37862", "city": "SEVIERVILLE", "loc": [ -83.53862100000001, 35.845192 ], "pop": 30351, "state": "TN" }, { "_id": "37863", "city": "PIGEON FORGE", "loc": [ -83.563821, 35.792222 ], "pop": 3063, "state": "TN" }, { "_id": "37865", "city": "SEYMOUR", "loc": [ -83.749511, 35.869984 ], "pop": 8527, "state": "TN" }, { "_id": "37866", "city": "SHARPS CHAPEL", "loc": [ -83.81268, 36.368498 ], "pop": 1405, "state": "TN" }, { "_id": "37869", "city": "SNEEDVILLE", "loc": [ -83.252892, 36.527515 ], "pop": 5203, "state": "TN" }, { "_id": "37870", "city": "SPEEDWELL", "loc": [ -83.813495, 36.479723 ], "pop": 2895, "state": "TN" }, { "_id": "37871", "city": "STRAWBERRY PLAIN", "loc": [ -83.677724, 36.041462 ], "pop": 5600, "state": "TN" }, { "_id": "37872", "city": "SUNBRIGHT", "loc": [ -84.69842, 36.262234 ], "pop": 2210, "state": "TN" }, { "_id": "37873", "city": "SURGOINSVILLE", "loc": [ -82.830597, 36.474066 ], "pop": 7229, "state": "TN" }, { "_id": "37874", "city": "SWEETWATER", "loc": [ -84.430424, 35.595703 ], "pop": 11415, "state": "TN" }, { "_id": "37877", "city": "TALBOTT", "loc": [ -83.412864, 36.159958 ], "pop": 6279, "state": "TN" }, { "_id": "37878", "city": "TALLASSEE", "loc": [ -84.003338, 35.583663 ], "pop": 376, "state": "TN" }, { "_id": "37879", "city": "TAZEWELL", "loc": [ -83.55521899999999, 36.471012 ], "pop": 8567, "state": "TN" }, { "_id": "37880", "city": "TEN MILE", "loc": [ -84.654848, 35.686175 ], "pop": 4355, "state": "TN" }, { "_id": "37881", "city": "THORN HILL", "loc": [ -83.365973, 36.391687 ], "pop": 1676, "state": "TN" }, { "_id": "37882", "city": "TOWNSEND", "loc": [ -83.75715700000001, 35.678385 ], "pop": 1951, "state": "TN" }, { "_id": "37883", "city": "TREADWAY", "loc": [ -83.219138, 36.428202 ], "pop": 78, "state": "TN" }, { "_id": "37885", "city": "VONORE", "loc": [ -84.177829, 35.535364 ], "pop": 1541, "state": "TN" }, { "_id": "37886", "city": "WALLAND", "loc": [ -83.824307, 35.753311 ], "pop": 3972, "state": "TN" }, { "_id": "37887", "city": "WARTBURG", "loc": [ -84.56518800000001, 36.101609 ], "pop": 3976, "state": "TN" }, { "_id": "37888", "city": "WASHBURN", "loc": [ -83.59368499999999, 36.310649 ], "pop": 1737, "state": "TN" }, { "_id": "37890", "city": "BANEBERRY", "loc": [ -83.287921, 36.090299 ], "pop": 4639, "state": "TN" }, { "_id": "37891", "city": "WHITESBURG", "loc": [ -83.145844, 36.262125 ], "pop": 2265, "state": "TN" }, { "_id": "37892", "city": "WINFIELD", "loc": [ -84.434026, 36.559825 ], "pop": 1375, "state": "TN" }, { "_id": "37902", "city": "KNOXVILLE", "loc": [ -83.92091499999999, 35.962516 ], "pop": 1457, "state": "TN" }, { "_id": "37909", "city": "KNOXVILLE", "loc": [ -84.023501, 35.945978 ], "pop": 13265, "state": "TN" }, { "_id": "37912", "city": "KNOXVILLE", "loc": [ -83.977317, 36.005492 ], "pop": 16919, "state": "TN" }, { "_id": "37914", "city": "KNOXVILLE", "loc": [ -83.84962400000001, 35.991755 ], "pop": 19867, "state": "TN" }, { "_id": "37915", "city": "KNOXVILLE", "loc": [ -83.901005, 35.972074 ], "pop": 6546, "state": "TN" }, { "_id": "37916", "city": "KNOXVILLE", "loc": [ -83.933576, 35.955584 ], "pop": 11449, "state": "TN" }, { "_id": "37917", "city": "KNOXVILLE", "loc": [ -83.915216, 35.99803 ], "pop": 25362, "state": "TN" }, { "_id": "37918", "city": "KNOXVILLE", "loc": [ -83.922558, 36.050054 ], "pop": 32073, "state": "TN" }, { "_id": "37919", "city": "KNOXVILLE", "loc": [ -84.001468, 35.924385 ], "pop": 25653, "state": "TN" }, { "_id": "37920", "city": "KIMBERLIN HEIGHT", "loc": [ -83.87979300000001, 35.922976 ], "pop": 35762, "state": "TN" }, { "_id": "37921", "city": "KARNS", "loc": [ -83.982894, 35.976297 ], "pop": 26904, "state": "TN" }, { "_id": "37922", "city": "CONCORD", "loc": [ -84.127332, 35.877697 ], "pop": 31414, "state": "TN" }, { "_id": "37923", "city": "KNOXVILLE", "loc": [ -84.076116, 35.933127 ], "pop": 22830, "state": "TN" }, { "_id": "37924", "city": "KNOXVILLE", "loc": [ -83.80207, 36.032044 ], "pop": 8103, "state": "TN" }, { "_id": "37931", "city": "KNOXVILLE", "loc": [ -84.12007199999999, 35.992363 ], "pop": 17247, "state": "TN" }, { "_id": "37932", "city": "CONCORD FARRAGUT", "loc": [ -84.169591, 35.923619 ], "pop": 7975, "state": "TN" }, { "_id": "37938", "city": "KNOXVILLE", "loc": [ -83.94596799999999, 36.105473 ], "pop": 10705, "state": "TN" }, { "_id": "38001", "city": "ALAMO", "loc": [ -89.17646499999999, 35.801697 ], "pop": 6528, "state": "TN" }, { "_id": "38002", "city": "ARLINGTON", "loc": [ -89.729502, 35.275171 ], "pop": 6781, "state": "TN" }, { "_id": "38004", "city": "ATOKA", "loc": [ -89.8216, 35.421337 ], "pop": 4848, "state": "TN" }, { "_id": "38006", "city": "BELLS", "loc": [ -89.072857, 35.71976 ], "pop": 3092, "state": "TN" }, { "_id": "38008", "city": "BOLIVAR", "loc": [ -89.00072299999999, 35.246082 ], "pop": 10327, "state": "TN" }, { "_id": "38011", "city": "BRIGHTON", "loc": [ -89.752477, 35.470328 ], "pop": 9668, "state": "TN" }, { "_id": "38012", "city": "BROWNSVILLE", "loc": [ -89.26235200000001, 35.609957 ], "pop": 16497, "state": "TN" }, { "_id": "38015", "city": "BURLISON", "loc": [ -89.817729, 35.53995 ], "pop": 2314, "state": "TN" }, { "_id": "38017", "city": "COLLIERVILLE", "loc": [ -89.67672399999999, 35.055077 ], "pop": 16164, "state": "TN" }, { "_id": "38018", "city": "CORDOVA", "loc": [ -89.77893400000001, 35.156349 ], "pop": 21777, "state": "TN" }, { "_id": "38019", "city": "COVINGTON", "loc": [ -89.650144, 35.559838 ], "pop": 13631, "state": "TN" }, { "_id": "38023", "city": "DRUMMONDS", "loc": [ -89.923649, 35.445203 ], "pop": 4891, "state": "TN" }, { "_id": "38024", "city": "DYERSBURG", "loc": [ -89.383644, 36.044447 ], "pop": 27839, "state": "TN" }, { "_id": "38028", "city": "EADS", "loc": [ -89.67600400000001, 35.15512 ], "pop": 1715, "state": "TN" }, { "_id": "38030", "city": "FINLEY", "loc": [ -89.513403, 36.016938 ], "pop": 830, "state": "TN" }, { "_id": "38034", "city": "FRIENDSHIP", "loc": [ -89.20413600000001, 35.897642 ], "pop": 1626, "state": "TN" }, { "_id": "38037", "city": "GATES", "loc": [ -89.459182, 35.843942 ], "pop": 2508, "state": "TN" }, { "_id": "38039", "city": "GRAND JUNCTION", "loc": [ -89.153415, 35.065885 ], "pop": 1827, "state": "TN" }, { "_id": "38040", "city": "HALLS", "loc": [ -89.414671, 35.886232 ], "pop": 3755, "state": "TN" }, { "_id": "38041", "city": "FORT PILLOW", "loc": [ -89.637542, 35.682868 ], "pop": 4298, "state": "TN" }, { "_id": "38042", "city": "HICKORY VALLEY", "loc": [ -89.130905, 35.157959 ], "pop": 269, "state": "TN" }, { "_id": "38044", "city": "HORNSBY", "loc": [ -88.82631499999999, 35.219706 ], "pop": 946, "state": "TN" }, { "_id": "38049", "city": "MASON", "loc": [ -89.551805, 35.438012 ], "pop": 2275, "state": "TN" }, { "_id": "38052", "city": "MIDDLETON", "loc": [ -88.904625, 35.0818 ], "pop": 3147, "state": "TN" }, { "_id": "38053", "city": "MILLINGTON", "loc": [ -89.905422, 35.318463 ], "pop": 38216, "state": "TN" }, { "_id": "38057", "city": "MOSCOW", "loc": [ -89.35950800000001, 35.058796 ], "pop": 3436, "state": "TN" }, { "_id": "38059", "city": "NEWBERN", "loc": [ -89.251364, 36.100875 ], "pop": 5426, "state": "TN" }, { "_id": "38060", "city": "OAKLAND", "loc": [ -89.55176400000001, 35.222929 ], "pop": 5935, "state": "TN" }, { "_id": "38061", "city": "POCAHONTAS", "loc": [ -88.811559, 35.031476 ], "pop": 570, "state": "TN" }, { "_id": "38063", "city": "RIPLEY", "loc": [ -89.534975, 35.752651 ], "pop": 12930, "state": "TN" }, { "_id": "38066", "city": "ROSSVILLE", "loc": [ -89.567848, 35.076758 ], "pop": 3730, "state": "TN" }, { "_id": "38067", "city": "SAULSBURY", "loc": [ -89.076868, 35.049786 ], "pop": 914, "state": "TN" }, { "_id": "38068", "city": "SOMERVILLE", "loc": [ -89.391813, 35.277218 ], "pop": 11757, "state": "TN" }, { "_id": "38069", "city": "STANTON", "loc": [ -89.33262999999999, 35.448171 ], "pop": 2940, "state": "TN" }, { "_id": "38075", "city": "WHITEVILLE", "loc": [ -89.133692, 35.319104 ], "pop": 3044, "state": "TN" }, { "_id": "38076", "city": "WILLISTON", "loc": [ -89.390584, 35.166595 ], "pop": 701, "state": "TN" }, { "_id": "38079", "city": "TIPTONVILLE", "loc": [ -89.464922, 36.384583 ], "pop": 4762, "state": "TN" }, { "_id": "38080", "city": "RIDGELY", "loc": [ -89.485765, 36.263849 ], "pop": 1819, "state": "TN" }, { "_id": "38103", "city": "MEMPHIS", "loc": [ -90.047995, 35.144001 ], "pop": 4144, "state": "TN" }, { "_id": "38104", "city": "MEMPHIS", "loc": [ -90.004625, 35.133393 ], "pop": 29496, "state": "TN" }, { "_id": "38105", "city": "MEMPHIS", "loc": [ -90.03304199999999, 35.149748 ], "pop": 11143, "state": "TN" }, { "_id": "38106", "city": "MEMPHIS", "loc": [ -90.03299699999999, 35.102124 ], "pop": 40444, "state": "TN" }, { "_id": "38107", "city": "MEMPHIS", "loc": [ -90.020077, 35.183136 ], "pop": 43502, "state": "TN" }, { "_id": "38108", "city": "MEMPHIS", "loc": [ -89.968238, 35.178655 ], "pop": 31902, "state": "TN" }, { "_id": "38109", "city": "MEMPHIS", "loc": [ -90.073238, 35.042538 ], "pop": 60508, "state": "TN" }, { "_id": "38111", "city": "MEMPHIS", "loc": [ -89.945745, 35.107573 ], "pop": 43484, "state": "TN" }, { "_id": "38112", "city": "MEMPHIS", "loc": [ -89.97289499999999, 35.148277 ], "pop": 21266, "state": "TN" }, { "_id": "38113", "city": "MEMPHIS", "loc": [ -90.079426, 35.111201 ], "pop": 68, "state": "TN" }, { "_id": "38114", "city": "MEMPHIS", "loc": [ -89.98254, 35.098094 ], "pop": 38708, "state": "TN" }, { "_id": "38115", "city": "HICKORY HILL", "loc": [ -89.86082, 35.054405 ], "pop": 34144, "state": "TN" }, { "_id": "38116", "city": "MEMPHIS", "loc": [ -90.012314, 35.030298 ], "pop": 46906, "state": "TN" }, { "_id": "38117", "city": "MEMPHIS", "loc": [ -89.903367, 35.112357 ], "pop": 27149, "state": "TN" }, { "_id": "38118", "city": "MEMPHIS", "loc": [ -89.92653799999999, 35.051421 ], "pop": 45507, "state": "TN" }, { "_id": "38119", "city": "MEMPHIS", "loc": [ -89.85014200000001, 35.082101 ], "pop": 20234, "state": "TN" }, { "_id": "38120", "city": "MEMPHIS", "loc": [ -89.86511900000001, 35.120654 ], "pop": 12552, "state": "TN" }, { "_id": "38122", "city": "MEMPHIS", "loc": [ -89.926844, 35.157166 ], "pop": 23692, "state": "TN" }, { "_id": "38125", "city": "MEMPHIS", "loc": [ -89.81235700000001, 35.031249 ], "pop": 10280, "state": "TN" }, { "_id": "38126", "city": "MEMPHIS", "loc": [ -90.042444, 35.125518 ], "pop": 16391, "state": "TN" }, { "_id": "38127", "city": "MEMPHIS", "loc": [ -90.029623, 35.250982 ], "pop": 8047, "state": "TN" }, { "_id": "38128", "city": "MEMPHIS", "loc": [ -89.94131400000001, 35.221273 ], "pop": 54198, "state": "TN" }, { "_id": "38131", "city": "MEMPHIS", "loc": [ -90.003699, 35.0655 ], "pop": 312, "state": "TN" }, { "_id": "38132", "city": "MEMPHIS", "loc": [ -89.98862699999999, 35.071967 ], "pop": 2, "state": "TN" }, { "_id": "38133", "city": "MEMPHIS", "loc": [ -89.80356399999999, 35.205362 ], "pop": 13227, "state": "TN" }, { "_id": "38134", "city": "BARTLETT", "loc": [ -89.86409, 35.188639 ], "pop": 40805, "state": "TN" }, { "_id": "38135", "city": "MEMPHIS", "loc": [ -89.85087799999999, 35.232301 ], "pop": 13428, "state": "TN" }, { "_id": "38138", "city": "GERMANTOWN", "loc": [ -89.80526, 35.088344 ], "pop": 22061, "state": "TN" }, { "_id": "38139", "city": "GERMANTOWN", "loc": [ -89.770281, 35.087414 ], "pop": 11771, "state": "TN" }, { "_id": "38141", "city": "MEMPHIS", "loc": [ -89.84916, 35.023091 ], "pop": 16247, "state": "TN" }, { "_id": "38201", "city": "MC KENZIE", "loc": [ -88.51341600000001, 36.127195 ], "pop": 6780, "state": "TN" }, { "_id": "38220", "city": "ATWOOD", "loc": [ -88.624656, 35.966345 ], "pop": 2599, "state": "TN" }, { "_id": "38221", "city": "BIG SANDY", "loc": [ -88.062732, 36.228515 ], "pop": 2647, "state": "TN" }, { "_id": "38222", "city": "BUCHANAN", "loc": [ -88.151464, 36.414624 ], "pop": 3352, "state": "TN" }, { "_id": "38224", "city": "COTTAGE GROVE", "loc": [ -88.461421, 36.34789 ], "pop": 1645, "state": "TN" }, { "_id": "38225", "city": "DRESDEN", "loc": [ -88.696291, 36.295042 ], "pop": 5475, "state": "TN" }, { "_id": "38226", "city": "DUKEDOM", "loc": [ -88.692553, 36.479645 ], "pop": 933, "state": "TN" }, { "_id": "38229", "city": "GLEASON", "loc": [ -88.618441, 36.211737 ], "pop": 3307, "state": "TN" }, { "_id": "38230", "city": "GREENFIELD", "loc": [ -88.74532000000001, 36.148502 ], "pop": 4682, "state": "TN" }, { "_id": "38231", "city": "HENRY", "loc": [ -88.453609, 36.201343 ], "pop": 1520, "state": "TN" }, { "_id": "38232", "city": "HORNBEAK", "loc": [ -89.305617, 36.359594 ], "pop": 3042, "state": "TN" }, { "_id": "38233", "city": "KENTON", "loc": [ -89.022879, 36.190583 ], "pop": 1446, "state": "TN" }, { "_id": "38236", "city": "MANSFIELD", "loc": [ -88.285934, 36.184744 ], "pop": 1091, "state": "TN" }, { "_id": "38237", "city": "MARTIN", "loc": [ -88.855395, 36.342467 ], "pop": 13540, "state": "TN" }, { "_id": "38240", "city": "OBION", "loc": [ -89.28052, 36.265679 ], "pop": 3419, "state": "TN" }, { "_id": "38241", "city": "PALMERSVILLE", "loc": [ -88.614178, 36.394772 ], "pop": 1471, "state": "TN" }, { "_id": "38242", "city": "PARIS", "loc": [ -88.30932799999999, 36.300519 ], "pop": 16597, "state": "TN" }, { "_id": "38251", "city": "PURYEAR", "loc": [ -88.347193, 36.445632 ], "pop": 2292, "state": "TN" }, { "_id": "38253", "city": "RIVES", "loc": [ -89.037632, 36.263665 ], "pop": 2424, "state": "TN" }, { "_id": "38255", "city": "SHARON", "loc": [ -88.847661, 36.239454 ], "pop": 2564, "state": "TN" }, { "_id": "38256", "city": "SPRINGVILLE", "loc": [ -88.14594099999999, 36.265033 ], "pop": 1391, "state": "TN" }, { "_id": "38257", "city": "SOUTH FULTON", "loc": [ -88.880781, 36.481386 ], "pop": 4676, "state": "TN" }, { "_id": "38258", "city": "TREZEVANT", "loc": [ -88.61003599999999, 36.017213 ], "pop": 2052, "state": "TN" }, { "_id": "38259", "city": "TRIMBLE", "loc": [ -89.18626500000001, 36.201113 ], "pop": 792, "state": "TN" }, { "_id": "38260", "city": "TROY", "loc": [ -89.161058, 36.341644 ], "pop": 1588, "state": "TN" }, { "_id": "38261", "city": "UNION CITY", "loc": [ -89.06666199999999, 36.426311 ], "pop": 17007, "state": "TN" }, { "_id": "38301", "city": "JACKSON", "loc": [ -88.81401099999999, 35.610222 ], "pop": 39275, "state": "TN" }, { "_id": "38305", "city": "JACKSON", "loc": [ -88.82812699999999, 35.682875 ], "pop": 28992, "state": "TN" }, { "_id": "38310", "city": "ADAMSVILLE", "loc": [ -88.41336699999999, 35.25561 ], "pop": 3042, "state": "TN" }, { "_id": "38311", "city": "BATH SPRINGS", "loc": [ -88.12863, 35.452111 ], "pop": 920, "state": "TN" }, { "_id": "38313", "city": "BEECH BLUFF", "loc": [ -88.639634, 35.592156 ], "pop": 2682, "state": "TN" }, { "_id": "38315", "city": "BETHEL SPRINGS", "loc": [ -88.64397200000001, 35.228893 ], "pop": 2457, "state": "TN" }, { "_id": "38316", "city": "BRADFORD", "loc": [ -88.804593, 36.064474 ], "pop": 2884, "state": "TN" }, { "_id": "38317", "city": "BRUCETON", "loc": [ -88.25180400000001, 36.026792 ], "pop": 2035, "state": "TN" }, { "_id": "38318", "city": "BUENA VISTA", "loc": [ -88.292576, 35.943119 ], "pop": 165, "state": "TN" }, { "_id": "38320", "city": "CAMDEN", "loc": [ -88.111853, 36.055578 ], "pop": 8922, "state": "TN" }, { "_id": "38321", "city": "CEDAR GROVE", "loc": [ -88.55170200000001, 35.861261 ], "pop": 1150, "state": "TN" }, { "_id": "38326", "city": "COUNCE", "loc": [ -88.293567, 35.039415 ], "pop": 2015, "state": "TN" }, { "_id": "38327", "city": "CRUMP", "loc": [ -88.335641, 35.221641 ], "pop": 1507, "state": "TN" }, { "_id": "38328", "city": "DARDEN", "loc": [ -88.217688, 35.662962 ], "pop": 533, "state": "TN" }, { "_id": "38329", "city": "DECATURVILLE", "loc": [ -88.133413, 35.558455 ], "pop": 2806, "state": "TN" }, { "_id": "38330", "city": "DYER", "loc": [ -89.019226, 36.071578 ], "pop": 4695, "state": "TN" }, { "_id": "38332", "city": "ENVILLE", "loc": [ -88.420613, 35.439321 ], "pop": 1041, "state": "TN" }, { "_id": "38333", "city": "EVA", "loc": [ -88.028036, 36.078814 ], "pop": 1536, "state": "TN" }, { "_id": "38334", "city": "FINGER", "loc": [ -88.606709, 35.325208 ], "pop": 1840, "state": "TN" }, { "_id": "38337", "city": "GADSDEN", "loc": [ -88.992947, 35.779867 ], "pop": 2132, "state": "TN" }, { "_id": "38339", "city": "GUYS", "loc": [ -88.52076099999999, 35.014211 ], "pop": 689, "state": "TN" }, { "_id": "38340", "city": "HENDERSON", "loc": [ -88.639774, 35.426929 ], "pop": 10311, "state": "TN" }, { "_id": "38341", "city": "HOLLADAY", "loc": [ -88.091183, 35.895143 ], "pop": 1419, "state": "TN" }, { "_id": "38342", "city": "HOLLOW ROCK", "loc": [ -88.29013500000001, 36.056524 ], "pop": 2547, "state": "TN" }, { "_id": "38343", "city": "HUMBOLDT", "loc": [ -88.905652, 35.836993 ], "pop": 13410, "state": "TN" }, { "_id": "38344", "city": "HUNTINGDON", "loc": [ -88.42021099999999, 36.006228 ], "pop": 7034, "state": "TN" }, { "_id": "38345", "city": "HURON", "loc": [ -88.519549, 35.614377 ], "pop": 1665, "state": "TN" }, { "_id": "38347", "city": "JACKS CREEK", "loc": [ -88.501865, 35.478206 ], "pop": 288, "state": "TN" }, { "_id": "38348", "city": "LAVINIA", "loc": [ -88.632442, 35.85834 ], "pop": 1183, "state": "TN" }, { "_id": "38351", "city": "LEXINGTON", "loc": [ -88.392743, 35.651195 ], "pop": 13554, "state": "TN" }, { "_id": "38352", "city": "LURAY", "loc": [ -88.578422, 35.598846 ], "pop": 94, "state": "TN" }, { "_id": "38355", "city": "MEDINA", "loc": [ -88.762655, 35.808088 ], "pop": 1303, "state": "TN" }, { "_id": "38356", "city": "MEDON", "loc": [ -88.871656, 35.471804 ], "pop": 1486, "state": "TN" }, { "_id": "38357", "city": "MICHIE", "loc": [ -88.44046299999999, 35.060306 ], "pop": 2297, "state": "TN" }, { "_id": "38358", "city": "MILAN", "loc": [ -88.768844, 35.925089 ], "pop": 11377, "state": "TN" }, { "_id": "38359", "city": "MILLEDGEVILLE", "loc": [ -88.399125, 35.345175 ], "pop": 449, "state": "TN" }, { "_id": "38361", "city": "MORRIS CHAPEL", "loc": [ -88.317599, 35.302562 ], "pop": 1272, "state": "TN" }, { "_id": "38362", "city": "OAKFIELD", "loc": [ -88.802145, 35.754756 ], "pop": 2239, "state": "TN" }, { "_id": "38363", "city": "PARSONS", "loc": [ -88.11953200000001, 35.66635 ], "pop": 5906, "state": "TN" }, { "_id": "38366", "city": "PINSON", "loc": [ -88.730396, 35.478059 ], "pop": 2598, "state": "TN" }, { "_id": "38367", "city": "RAMER", "loc": [ -88.601733, 35.064181 ], "pop": 2804, "state": "TN" }, { "_id": "38368", "city": "REAGAN", "loc": [ -88.35077800000001, 35.50957 ], "pop": 804, "state": "TN" }, { "_id": "38369", "city": "RUTHERFORD", "loc": [ -88.984863, 36.130027 ], "pop": 2265, "state": "TN" }, { "_id": "38370", "city": "SALTILLO", "loc": [ -88.247225, 35.381467 ], "pop": 1007, "state": "TN" }, { "_id": "38371", "city": "SARDIS", "loc": [ -88.3058, 35.438598 ], "pop": 1068, "state": "TN" }, { "_id": "38372", "city": "SAVANNAH", "loc": [ -88.200541, 35.202272 ], "pop": 15773, "state": "TN" }, { "_id": "38374", "city": "SCOTTS HILL", "loc": [ -88.240476, 35.504992 ], "pop": 1657, "state": "TN" }, { "_id": "38375", "city": "SELMER", "loc": [ -88.595832, 35.169124 ], "pop": 7264, "state": "TN" }, { "_id": "38376", "city": "SHILOH", "loc": [ -88.350717, 35.119545 ], "pop": 438, "state": "TN" }, { "_id": "38379", "city": "STANTONVILLE", "loc": [ -88.436432, 35.180946 ], "pop": 1580, "state": "TN" }, { "_id": "38380", "city": "SUGAR TREE", "loc": [ -88.03224899999999, 35.791993 ], "pop": 179, "state": "TN" }, { "_id": "38381", "city": "TOONE", "loc": [ -88.935286, 35.357421 ], "pop": 2333, "state": "TN" }, { "_id": "38382", "city": "TRENTON", "loc": [ -88.950655, 35.971246 ], "pop": 9011, "state": "TN" }, { "_id": "38387", "city": "WESTPORT", "loc": [ -88.336364, 35.916918 ], "pop": 906, "state": "TN" }, { "_id": "38388", "city": "WILDERSVILLE", "loc": [ -88.438794, 35.769772 ], "pop": 2828, "state": "TN" }, { "_id": "38390", "city": "YUMA", "loc": [ -88.381878, 35.867964 ], "pop": 1063, "state": "TN" }, { "_id": "38391", "city": "DENMARK", "loc": [ -88.975892, 35.557059 ], "pop": 1760, "state": "TN" }, { "_id": "38392", "city": "MERCER", "loc": [ -89.03728, 35.481828 ], "pop": 609, "state": "TN" }, { "_id": "38401", "city": "COLUMBIA", "loc": [ -87.038032, 35.615577 ], "pop": 38459, "state": "TN" }, { "_id": "38425", "city": "CLIFTON", "loc": [ -87.94996999999999, 35.381948 ], "pop": 1775, "state": "TN" }, { "_id": "38449", "city": "ARDMORE", "loc": [ -86.879555, 35.057445 ], "pop": 3560, "state": "TN" }, { "_id": "38450", "city": "COLLINWOOD", "loc": [ -87.71848799999999, 35.163525 ], "pop": 2558, "state": "TN" }, { "_id": "38451", "city": "CULLEOKA", "loc": [ -87.00050299999999, 35.474914 ], "pop": 2476, "state": "TN" }, { "_id": "38452", "city": "CYPRESS INN", "loc": [ -87.78833, 35.057945 ], "pop": 764, "state": "TN" }, { "_id": "38453", "city": "ARDMORE", "loc": [ -86.91002400000001, 35.003654 ], "pop": 204, "state": "TN" }, { "_id": "38454", "city": "DUCK RIVER", "loc": [ -87.342336, 35.738599 ], "pop": 1027, "state": "TN" }, { "_id": "38456", "city": "ETHRIDGE", "loc": [ -87.303912, 35.332648 ], "pop": 3854, "state": "TN" }, { "_id": "38457", "city": "FIVE POINTS", "loc": [ -87.296128, 35.031046 ], "pop": 798, "state": "TN" }, { "_id": "38459", "city": "FRANKEWING", "loc": [ -86.781818, 35.177854 ], "pop": 1670, "state": "TN" }, { "_id": "38460", "city": "GOODSPRING", "loc": [ -87.127788, 35.116709 ], "pop": 889, "state": "TN" }, { "_id": "38461", "city": "HAMPSHIRE", "loc": [ -87.325135, 35.591482 ], "pop": 1059, "state": "TN" }, { "_id": "38462", "city": "KIMMINS", "loc": [ -87.55461, 35.540837 ], "pop": 8004, "state": "TN" }, { "_id": "38463", "city": "IRON CITY", "loc": [ -87.64732100000001, 35.056283 ], "pop": 2249, "state": "TN" }, { "_id": "38464", "city": "LAWRENCEBURG", "loc": [ -87.352582, 35.250668 ], "pop": 18681, "state": "TN" }, { "_id": "38468", "city": "LEOMA", "loc": [ -87.316773, 35.138177 ], "pop": 3568, "state": "TN" }, { "_id": "38469", "city": "LORETTO", "loc": [ -87.42697800000001, 35.072797 ], "pop": 3369, "state": "TN" }, { "_id": "38471", "city": "LUTTS", "loc": [ -87.892291, 35.113842 ], "pop": 1070, "state": "TN" }, { "_id": "38472", "city": "LYNNVILLE", "loc": [ -87.062877, 35.379235 ], "pop": 2712, "state": "TN" }, { "_id": "38473", "city": "MINOR HILL", "loc": [ -87.15219399999999, 35.050034 ], "pop": 1482, "state": "TN" }, { "_id": "38474", "city": "MOUNT PLEASANT", "loc": [ -87.203678, 35.530084 ], "pop": 7952, "state": "TN" }, { "_id": "38475", "city": "OLIVEHILL", "loc": [ -88.03903800000001, 35.266711 ], "pop": 443, "state": "TN" }, { "_id": "38476", "city": "PRIMM SPRINGS", "loc": [ -87.25304300000001, 35.810364 ], "pop": 346, "state": "TN" }, { "_id": "38477", "city": "PROSPECT", "loc": [ -87.01738400000001, 35.066626 ], "pop": 1843, "state": "TN" }, { "_id": "38478", "city": "PULASKI", "loc": [ -87.03926300000001, 35.209274 ], "pop": 15310, "state": "TN" }, { "_id": "38481", "city": "SAINT JOSEPH", "loc": [ -87.501807, 35.037556 ], "pop": 881, "state": "TN" }, { "_id": "38482", "city": "SANTA FE", "loc": [ -87.151543, 35.75877 ], "pop": 2001, "state": "TN" }, { "_id": "38483", "city": "SUMMERTOWN", "loc": [ -87.31983, 35.430673 ], "pop": 3302, "state": "TN" }, { "_id": "38485", "city": "WAYNESBORO", "loc": [ -87.739498, 35.322019 ], "pop": 6381, "state": "TN" }, { "_id": "38486", "city": "WESTPOINT", "loc": [ -87.538025, 35.139302 ], "pop": 717, "state": "TN" }, { "_id": "38487", "city": "WILLIAMSPORT", "loc": [ -87.225692, 35.64937 ], "pop": 1199, "state": "TN" }, { "_id": "38488", "city": "TAFT", "loc": [ -86.644672, 35.051731 ], "pop": 4681, "state": "TN" }, { "_id": "38501", "city": "ALGOOD", "loc": [ -85.49531, 36.174261 ], "pop": 41805, "state": "TN" }, { "_id": "38504", "city": "ALLARDT", "loc": [ -84.850784, 36.374889 ], "pop": 3284, "state": "TN" }, { "_id": "38541", "city": "ALLONS", "loc": [ -85.319744, 36.497002 ], "pop": 1641, "state": "TN" }, { "_id": "38542", "city": "ALLRED", "loc": [ -85.176084, 36.366838 ], "pop": 2, "state": "TN" }, { "_id": "38543", "city": "ALPINE", "loc": [ -85.152153, 36.380324 ], "pop": 441, "state": "TN" }, { "_id": "38544", "city": "BAXTER", "loc": [ -85.637766, 36.124917 ], "pop": 5871, "state": "TN" }, { "_id": "38545", "city": "BLOOMINGTON SPRI", "loc": [ -85.64785999999999, 36.219454 ], "pop": 1089, "state": "TN" }, { "_id": "38547", "city": "BRUSH CREEK", "loc": [ -86.02034399999999, 36.110673 ], "pop": 656, "state": "TN" }, { "_id": "38548", "city": "BUFFALO VALLEY", "loc": [ -85.75887899999999, 36.183311 ], "pop": 704, "state": "TN" }, { "_id": "38549", "city": "BYRDSTOWN", "loc": [ -85.145647, 36.570869 ], "pop": 2898, "state": "TN" }, { "_id": "38551", "city": "CELINA", "loc": [ -85.496551, 36.547491 ], "pop": 4102, "state": "TN" }, { "_id": "38552", "city": "CHESTNUT MOUND", "loc": [ -85.837402, 36.192877 ], "pop": 784, "state": "TN" }, { "_id": "38553", "city": "CLARKRANGE", "loc": [ -84.977737, 36.211188 ], "pop": 1843, "state": "TN" }, { "_id": "38554", "city": "CRAWFORD", "loc": [ -85.16876499999999, 36.23611 ], "pop": 1213, "state": "TN" }, { "_id": "38555", "city": "FAIRFIELD GLADE", "loc": [ -85.017171, 35.944041 ], "pop": 26993, "state": "TN" }, { "_id": "38556", "city": "JAMESTOWN", "loc": [ -84.935721, 36.424471 ], "pop": 7728, "state": "TN" }, { "_id": "38559", "city": "DOYLE", "loc": [ -85.498997, 35.872206 ], "pop": 1802, "state": "TN" }, { "_id": "38560", "city": "ELMWOOD", "loc": [ -85.880843, 36.235468 ], "pop": 937, "state": "TN" }, { "_id": "38562", "city": "GAINESBORO", "loc": [ -85.635509, 36.343767 ], "pop": 6883, "state": "TN" }, { "_id": "38563", "city": "GORDONSVILLE", "loc": [ -86.000818, 36.184317 ], "pop": 2630, "state": "TN" }, { "_id": "38564", "city": "GRANVILLE", "loc": [ -85.747533, 36.276847 ], "pop": 381, "state": "TN" }, { "_id": "38565", "city": "GRIMSLEY", "loc": [ -85.01549, 36.243353 ], "pop": 1092, "state": "TN" }, { "_id": "38567", "city": "HICKMAN", "loc": [ -85.902297, 36.119653 ], "pop": 836, "state": "TN" }, { "_id": "38568", "city": "HILHAM", "loc": [ -85.43691800000001, 36.391492 ], "pop": 1976, "state": "TN" }, { "_id": "38569", "city": "LANCASTER", "loc": [ -85.85509500000001, 36.09542 ], "pop": 261, "state": "TN" }, { "_id": "38570", "city": "LIVINGSTON", "loc": [ -85.32052299999999, 36.389012 ], "pop": 7274, "state": "TN" }, { "_id": "38573", "city": "MONROE", "loc": [ -85.216385, 36.464201 ], "pop": 1951, "state": "TN" }, { "_id": "38574", "city": "MONTEREY", "loc": [ -85.254198, 36.150862 ], "pop": 5030, "state": "TN" }, { "_id": "38575", "city": "MOSS", "loc": [ -85.677235, 36.596623 ], "pop": 980, "state": "TN" }, { "_id": "38577", "city": "PALL MALL", "loc": [ -85.03838500000001, 36.578066 ], "pop": 1537, "state": "TN" }, { "_id": "38578", "city": "PLEASANT HILL", "loc": [ -85.16694, 36.01121 ], "pop": 4954, "state": "TN" }, { "_id": "38579", "city": "QUEBECK", "loc": [ -85.538189, 35.825379 ], "pop": 1250, "state": "TN" }, { "_id": "38580", "city": "RICKMAN", "loc": [ -85.380572, 36.301933 ], "pop": 2109, "state": "TN" }, { "_id": "38581", "city": "BONE CAVE", "loc": [ -85.63515599999999, 35.743813 ], "pop": 3954, "state": "TN" }, { "_id": "38582", "city": "SILVER POINT", "loc": [ -85.733801, 36.100562 ], "pop": 954, "state": "TN" }, { "_id": "38583", "city": "RAVENSCROFT", "loc": [ -85.478582, 35.954664 ], "pop": 16814, "state": "TN" }, { "_id": "38585", "city": "SPENCER", "loc": [ -85.42866100000001, 35.727871 ], "pop": 3954, "state": "TN" }, { "_id": "38587", "city": "WALLING", "loc": [ -85.618509, 35.869543 ], "pop": 641, "state": "TN" }, { "_id": "38588", "city": "WHITLEYVILLE", "loc": [ -85.68987300000001, 36.515839 ], "pop": 1272, "state": "TN" }, { "_id": "38589", "city": "WILDER", "loc": [ -85.07471700000001, 36.230526 ], "pop": 178, "state": "TN" }, { "_id": "38601", "city": "ABBEVILLE", "loc": [ -89.56883500000001, 34.455553 ], "pop": 4649, "state": "MS" }, { "_id": "38603", "city": "CANNON", "loc": [ -89.205428, 34.79456 ], "pop": 3226, "state": "MS" }, { "_id": "38606", "city": "BATESVILLE", "loc": [ -89.91418, 34.331651 ], "pop": 9879, "state": "MS" }, { "_id": "38610", "city": "BLUE MOUNTAIN", "loc": [ -89.008775, 34.670986 ], "pop": 3857, "state": "MS" }, { "_id": "38611", "city": "BYHALIA", "loc": [ -89.676332, 34.885351 ], "pop": 11054, "state": "MS" }, { "_id": "38614", "city": "STOVALL", "loc": [ -90.577755, 34.204984 ], "pop": 26774, "state": "MS" }, { "_id": "38617", "city": "COAHOMA", "loc": [ -90.472748, 34.36247 ], "pop": 3055, "state": "MS" }, { "_id": "38618", "city": "COLDWATER", "loc": [ -89.98688199999999, 34.692362 ], "pop": 7247, "state": "MS" }, { "_id": "38619", "city": "COMO", "loc": [ -89.915508, 34.513728 ], "pop": 3568, "state": "MS" }, { "_id": "38620", "city": "COURTLAND", "loc": [ -89.93959099999999, 34.25958 ], "pop": 6765, "state": "MS" }, { "_id": "38621", "city": "ASKEW", "loc": [ -90.185524, 34.453966 ], "pop": 4693, "state": "MS" }, { "_id": "38625", "city": "DUMAS", "loc": [ -88.80722900000001, 34.64915 ], "pop": 2219, "state": "MS" }, { "_id": "38626", "city": "DUNDEE", "loc": [ -90.38907, 34.528181 ], "pop": 1443, "state": "MS" }, { "_id": "38627", "city": "ETTA", "loc": [ -89.176706, 34.435231 ], "pop": 1560, "state": "MS" }, { "_id": "38629", "city": "FALKNER", "loc": [ -88.952493, 34.841682 ], "pop": 1408, "state": "MS" }, { "_id": "38632", "city": "HERNANDO", "loc": [ -90.00948699999999, 34.809588 ], "pop": 10894, "state": "MS" }, { "_id": "38633", "city": "HICKORY FLAT", "loc": [ -89.186229, 34.624362 ], "pop": 1692, "state": "MS" }, { "_id": "38635", "city": "HOLLY SPRINGS", "loc": [ -89.48971400000001, 34.747061 ], "pop": 12519, "state": "MS" }, { "_id": "38637", "city": "HORN LAKE", "loc": [ -90.050719, 34.9519 ], "pop": 14436, "state": "MS" }, { "_id": "38641", "city": "LAKE CORMORANT", "loc": [ -90.16079499999999, 34.893733 ], "pop": 1587, "state": "MS" }, { "_id": "38642", "city": "LAMAR", "loc": [ -89.31632999999999, 34.927072 ], "pop": 2761, "state": "MS" }, { "_id": "38643", "city": "LAMBERT", "loc": [ -90.262991, 34.183719 ], "pop": 3378, "state": "MS" }, { "_id": "38645", "city": "LYON", "loc": [ -90.498147, 34.247369 ], "pop": 1132, "state": "MS" }, { "_id": "38646", "city": "MARKS", "loc": [ -90.28160200000001, 34.260735 ], "pop": 4715, "state": "MS" }, { "_id": "38647", "city": "MICHIGAN CITY", "loc": [ -89.136173, 34.931849 ], "pop": 1574, "state": "MS" }, { "_id": "38650", "city": "MYRTLE", "loc": [ -89.115701, 34.540209 ], "pop": 2613, "state": "MS" }, { "_id": "38651", "city": "NESBIT", "loc": [ -90.012199, 34.899189 ], "pop": 4098, "state": "MS" }, { "_id": "38652", "city": "NEW ALBANY", "loc": [ -89.003058, 34.485051 ], "pop": 14109, "state": "MS" }, { "_id": "38654", "city": "OLIVE BRANCH", "loc": [ -89.854427, 34.94414 ], "pop": 14069, "state": "MS" }, { "_id": "38655", "city": "LAFAYETTE", "loc": [ -89.49692, 34.354354 ], "pop": 22599, "state": "MS" }, { "_id": "38657", "city": "PLEASANT GROVE", "loc": [ -90.10249399999999, 34.469951 ], "pop": 80, "state": "MS" }, { "_id": "38658", "city": "POPE", "loc": [ -90.002735, 34.190559 ], "pop": 1860, "state": "MS" }, { "_id": "38659", "city": "POTTS CAMP", "loc": [ -89.315073, 34.604742 ], "pop": 1580, "state": "MS" }, { "_id": "38661", "city": "RED BANKS", "loc": [ -89.519839, 34.875039 ], "pop": 4860, "state": "MS" }, { "_id": "38663", "city": "RIPLEY", "loc": [ -88.923973, 34.750912 ], "pop": 8895, "state": "MS" }, { "_id": "38664", "city": "ROBINSONVILLE", "loc": [ -90.30517399999999, 34.809329 ], "pop": 547, "state": "MS" }, { "_id": "38665", "city": "SAVAGE", "loc": [ -90.138193, 34.611981 ], "pop": 1936, "state": "MS" }, { "_id": "38666", "city": "SARDIS", "loc": [ -89.922083, 34.427573 ], "pop": 5023, "state": "MS" }, { "_id": "38668", "city": "SENATOBIA", "loc": [ -89.885501, 34.632306 ], "pop": 12249, "state": "MS" }, { "_id": "38670", "city": "SLEDGE", "loc": [ -90.20904, 34.382347 ], "pop": 201, "state": "MS" }, { "_id": "38671", "city": "SOUTHAVEN", "loc": [ -89.999173, 34.977074 ], "pop": 19174, "state": "MS" }, { "_id": "38673", "city": "TAYLOR", "loc": [ -89.627278, 34.284878 ], "pop": 2374, "state": "MS" }, { "_id": "38674", "city": "TIPLERSVILLE", "loc": [ -88.915684, 34.90294 ], "pop": 909, "state": "MS" }, { "_id": "38676", "city": "TUNICA", "loc": [ -90.368515, 34.688355 ], "pop": 6174, "state": "MS" }, { "_id": "38677", "city": "UNIVERSITY", "loc": [ -89.582742, 34.364513 ], "pop": 1902, "state": "MS" }, { "_id": "38680", "city": "WALLS", "loc": [ -90.120789, 34.964051 ], "pop": 2181, "state": "MS" }, { "_id": "38683", "city": "WALNUT", "loc": [ -88.905337, 34.952732 ], "pop": 2553, "state": "MS" }, { "_id": "38685", "city": "WATERFORD", "loc": [ -89.468298, 34.640248 ], "pop": 892, "state": "MS" }, { "_id": "38701", "city": "GREENVILLE", "loc": [ -91.04679299999999, 33.378737 ], "pop": 35884, "state": "MS" }, { "_id": "38703", "city": "GREENVILLE", "loc": [ -91.022795, 33.408494 ], "pop": 18560, "state": "MS" }, { "_id": "38720", "city": "ALLIGATOR", "loc": [ -90.738214, 34.129425 ], "pop": 969, "state": "MS" }, { "_id": "38721", "city": "ANGUILLA", "loc": [ -90.809535, 33.01213 ], "pop": 2557, "state": "MS" }, { "_id": "38725", "city": "BENOIT", "loc": [ -91.033765, 33.644795 ], "pop": 1554, "state": "MS" }, { "_id": "38726", "city": "BEULAH", "loc": [ -90.979545, 33.787954 ], "pop": 467, "state": "MS" }, { "_id": "38730", "city": "BOYLE", "loc": [ -90.733503, 33.685369 ], "pop": 1934, "state": "MS" }, { "_id": "38732", "city": "CLEVELAND", "loc": [ -90.73087099999999, 33.743002 ], "pop": 20953, "state": "MS" }, { "_id": "38736", "city": "DODDSVILLE", "loc": [ -90.52637, 33.630045 ], "pop": 309, "state": "MS" }, { "_id": "38737", "city": "DREW", "loc": [ -90.540606, 33.867031 ], "pop": 7680, "state": "MS" }, { "_id": "38740", "city": "DUNCAN", "loc": [ -90.765191, 34.046966 ], "pop": 885, "state": "MS" }, { "_id": "38744", "city": "GLEN ALLAN", "loc": [ -91.009193, 33.025361 ], "pop": 734, "state": "MS" }, { "_id": "38746", "city": "GUNNISON", "loc": [ -90.931899, 33.943886 ], "pop": 1248, "state": "MS" }, { "_id": "38748", "city": "PERCY", "loc": [ -90.84857, 33.177917 ], "pop": 4499, "state": "MS" }, { "_id": "38751", "city": "BAIRD", "loc": [ -90.654144, 33.449075 ], "pop": 13001, "state": "MS" }, { "_id": "38753", "city": "INVERNESS", "loc": [ -90.605065, 33.348964 ], "pop": 2140, "state": "MS" }, { "_id": "38754", "city": "ISOLA", "loc": [ -90.604027, 33.247112 ], "pop": 1674, "state": "MS" }, { "_id": "38756", "city": "ELIZABETH", "loc": [ -90.89280100000001, 33.410025 ], "pop": 8047, "state": "MS" }, { "_id": "38759", "city": "MERIGOLD", "loc": [ -90.725571, 33.837252 ], "pop": 738, "state": "MS" }, { "_id": "38761", "city": "MOORHEAD", "loc": [ -90.51425, 33.478325 ], "pop": 4623, "state": "MS" }, { "_id": "38762", "city": "MOUND BAYOU", "loc": [ -90.73024700000001, 33.886023 ], "pop": 3485, "state": "MS" }, { "_id": "38769", "city": "ROSEDALE", "loc": [ -90.992289, 33.843166 ], "pop": 3726, "state": "MS" }, { "_id": "38771", "city": "RULEVILLE", "loc": [ -90.552657, 33.724052 ], "pop": 4153, "state": "MS" }, { "_id": "38773", "city": "SHAW", "loc": [ -90.81427499999999, 33.587388 ], "pop": 3596, "state": "MS" }, { "_id": "38774", "city": "SHELBY", "loc": [ -90.762461, 33.949058 ], "pop": 3037, "state": "MS" }, { "_id": "38778", "city": "SUNFLOWER", "loc": [ -90.638732, 33.584696 ], "pop": 961, "state": "MS" }, { "_id": "38780", "city": "WAYSIDE", "loc": [ -91.024801, 33.261023 ], "pop": 198, "state": "MS" }, { "_id": "38801", "city": "TUPELO", "loc": [ -88.72085300000001, 34.253834 ], "pop": 40381, "state": "MS" }, { "_id": "38821", "city": "AMORY", "loc": [ -88.470917, 33.9844 ], "pop": 11765, "state": "MS" }, { "_id": "38824", "city": "BALDWYN", "loc": [ -88.63748, 34.527959 ], "pop": 6965, "state": "MS" }, { "_id": "38826", "city": "BELDEN", "loc": [ -88.816011, 34.278663 ], "pop": 4441, "state": "MS" }, { "_id": "38827", "city": "BELMONT", "loc": [ -88.230912, 34.51025 ], "pop": 2511, "state": "MS" }, { "_id": "38828", "city": "BLUE SPRINGS", "loc": [ -88.859004, 34.427286 ], "pop": 2808, "state": "MS" }, { "_id": "38829", "city": "BOONEVILLE", "loc": [ -88.544299, 34.669431 ], "pop": 16363, "state": "MS" }, { "_id": "38833", "city": "BURNSVILLE", "loc": [ -88.306962, 34.857885 ], "pop": 3574, "state": "MS" }, { "_id": "38834", "city": "KOSSUTH", "loc": [ -88.54388400000001, 34.93236 ], "pop": 22984, "state": "MS" }, { "_id": "38838", "city": "DENNIS", "loc": [ -88.21167, 34.549735 ], "pop": 1315, "state": "MS" }, { "_id": "38841", "city": "ECRU", "loc": [ -88.955956, 34.337106 ], "pop": 3862, "state": "MS" }, { "_id": "38843", "city": "FULTON", "loc": [ -88.379262, 34.274543 ], "pop": 14877, "state": "MS" }, { "_id": "38844", "city": "GATTMAN", "loc": [ -88.258779, 33.87417 ], "pop": 408, "state": "MS" }, { "_id": "38846", "city": "GLEN", "loc": [ -88.43585899999999, 34.877981 ], "pop": 5578, "state": "MS" }, { "_id": "38847", "city": "GOLDEN", "loc": [ -88.18415899999999, 34.481214 ], "pop": 639, "state": "MS" }, { "_id": "38848", "city": "GREENWOOD SPRING", "loc": [ -88.312333, 33.99344 ], "pop": 1934, "state": "MS" }, { "_id": "38849", "city": "GUNTOWN", "loc": [ -88.701059, 34.429882 ], "pop": 4504, "state": "MS" }, { "_id": "38850", "city": "HOULKA", "loc": [ -89.05311399999999, 34.056145 ], "pop": 2571, "state": "MS" }, { "_id": "38851", "city": "HOUSTON", "loc": [ -88.967005, 33.902554 ], "pop": 8781, "state": "MS" }, { "_id": "38852", "city": "IUKA", "loc": [ -88.198289, 34.808891 ], "pop": 7497, "state": "MS" }, { "_id": "38855", "city": "MANTACHIE", "loc": [ -88.49603399999999, 34.358677 ], "pop": 4273, "state": "MS" }, { "_id": "38856", "city": "MARIETTA", "loc": [ -88.449764, 34.501089 ], "pop": 1054, "state": "MS" }, { "_id": "38857", "city": "MOOREVILLE", "loc": [ -88.59504, 34.280792 ], "pop": 3880, "state": "MS" }, { "_id": "38858", "city": "NETTLETON", "loc": [ -88.60520099999999, 34.082065 ], "pop": 6781, "state": "MS" }, { "_id": "38859", "city": "NEW SITE", "loc": [ -88.43502100000001, 34.561693 ], "pop": 1187, "state": "MS" }, { "_id": "38860", "city": "EGYPT", "loc": [ -88.759843, 33.989015 ], "pop": 5258, "state": "MS" }, { "_id": "38862", "city": "PLANTERSVILLE", "loc": [ -88.633456, 34.201073 ], "pop": 2913, "state": "MS" }, { "_id": "38863", "city": "PONTOTOC", "loc": [ -88.986829, 34.217004 ], "pop": 10723, "state": "MS" }, { "_id": "38864", "city": "SAREPTA", "loc": [ -89.163625, 34.178943 ], "pop": 2365, "state": "MS" }, { "_id": "38865", "city": "RIENZI", "loc": [ -88.579454, 34.796789 ], "pop": 3162, "state": "MS" }, { "_id": "38866", "city": "SALTILLO", "loc": [ -88.66736, 34.383128 ], "pop": 2324, "state": "MS" }, { "_id": "38868", "city": "SHANNON", "loc": [ -88.734206, 34.121035 ], "pop": 4454, "state": "MS" }, { "_id": "38870", "city": "SMITHVILLE", "loc": [ -88.390027, 34.064813 ], "pop": 1375, "state": "MS" }, { "_id": "38871", "city": "THAXTON", "loc": [ -89.15146799999999, 34.313563 ], "pop": 3171, "state": "MS" }, { "_id": "38873", "city": "TISHOMINGO", "loc": [ -88.21939500000001, 34.647753 ], "pop": 2143, "state": "MS" }, { "_id": "38876", "city": "TREMONT", "loc": [ -88.23921199999999, 34.233516 ], "pop": 871, "state": "MS" }, { "_id": "38878", "city": "VARDAMAN", "loc": [ -89.192117, 33.919042 ], "pop": 2866, "state": "MS" }, { "_id": "38901", "city": "GRENADA", "loc": [ -89.80873800000001, 33.775094 ], "pop": 12322, "state": "MS" }, { "_id": "38912", "city": "AVALON", "loc": [ -90.022077, 33.633683 ], "pop": 782, "state": "MS" }, { "_id": "38913", "city": "BANNER", "loc": [ -89.41538300000001, 34.094911 ], "pop": 819, "state": "MS" }, { "_id": "38914", "city": "BIG CREEK", "loc": [ -89.437833, 33.851359 ], "pop": 461, "state": "MS" }, { "_id": "38915", "city": "BRUCE", "loc": [ -89.348387, 34.006628 ], "pop": 4085, "state": "MS" }, { "_id": "38916", "city": "CALHOUN CITY", "loc": [ -89.317809, 33.840776 ], "pop": 5416, "state": "MS" }, { "_id": "38917", "city": "CARROLLTON", "loc": [ -89.950633, 33.520765 ], "pop": 2683, "state": "MS" }, { "_id": "38920", "city": "CASCILLA", "loc": [ -90.036163, 33.907905 ], "pop": 2101, "state": "MS" }, { "_id": "38921", "city": "CHARLESTON", "loc": [ -90.111559, 33.972621 ], "pop": 7077, "state": "MS" }, { "_id": "38922", "city": "COFFEEVILLE", "loc": [ -89.67817700000001, 33.921468 ], "pop": 6937, "state": "MS" }, { "_id": "38923", "city": "COILA", "loc": [ -89.991516, 33.373111 ], "pop": 1529, "state": "MS" }, { "_id": "38924", "city": "CRUGER", "loc": [ -90.231577, 33.310977 ], "pop": 897, "state": "MS" }, { "_id": "38925", "city": "DUCK HILL", "loc": [ -89.733425, 33.686475 ], "pop": 4223, "state": "MS" }, { "_id": "38927", "city": "ENID", "loc": [ -90.004392, 34.126345 ], "pop": 916, "state": "MS" }, { "_id": "38929", "city": "GORE SPRINGS", "loc": [ -89.57544900000001, 33.724529 ], "pop": 261, "state": "MS" }, { "_id": "38930", "city": "GREENWOOD", "loc": [ -90.172589, 33.515884 ], "pop": 27931, "state": "MS" }, { "_id": "38940", "city": "HOLCOMB", "loc": [ -89.90195799999999, 33.760385 ], "pop": 3690, "state": "MS" }, { "_id": "38941", "city": "ITTA BENA", "loc": [ -90.339421, 33.479838 ], "pop": 6178, "state": "MS" }, { "_id": "38943", "city": "MC CARLEY", "loc": [ -89.851281, 33.586383 ], "pop": 941, "state": "MS" }, { "_id": "38944", "city": "MINTER CITY", "loc": [ -90.31327, 33.751525 ], "pop": 1064, "state": "MS" }, { "_id": "38948", "city": "OAKLAND", "loc": [ -89.887748, 34.075552 ], "pop": 1276, "state": "MS" }, { "_id": "38949", "city": "WATER VALLEY", "loc": [ -89.421408, 34.176817 ], "pop": 302, "state": "MS" }, { "_id": "38950", "city": "PHILIPP", "loc": [ -90.209086, 33.757391 ], "pop": 520, "state": "MS" }, { "_id": "38951", "city": "PITTSBORO", "loc": [ -89.337622, 33.944326 ], "pop": 1053, "state": "MS" }, { "_id": "38952", "city": "SCHLATER", "loc": [ -90.361976, 33.624439 ], "pop": 915, "state": "MS" }, { "_id": "38953", "city": "SCOBEY", "loc": [ -89.891019, 33.92526 ], "pop": 228, "state": "MS" }, { "_id": "38954", "city": "SIDON", "loc": [ -90.177937, 33.40946 ], "pop": 2212, "state": "MS" }, { "_id": "38961", "city": "TILLATOBA", "loc": [ -89.89446100000001, 33.985229 ], "pop": 621, "state": "MS" }, { "_id": "38963", "city": "TUTWILER", "loc": [ -90.37534100000001, 33.98195 ], "pop": 4627, "state": "MS" }, { "_id": "38964", "city": "VANCE", "loc": [ -90.375246, 34.093639 ], "pop": 299, "state": "MS" }, { "_id": "38965", "city": "WATER VALLEY", "loc": [ -89.637986, 34.152466 ], "pop": 5850, "state": "MS" }, { "_id": "38967", "city": "WINONA", "loc": [ -89.727655, 33.485753 ], "pop": 7877, "state": "MS" }, { "_id": "39038", "city": "BELZONI", "loc": [ -90.492435, 33.18421 ], "pop": 7600, "state": "MS" }, { "_id": "39039", "city": "BENTON", "loc": [ -90.281516, 32.815772 ], "pop": 1114, "state": "MS" }, { "_id": "39040", "city": "BENTONIA", "loc": [ -90.372156, 32.700015 ], "pop": 4325, "state": "MS" }, { "_id": "39041", "city": "BOLTON", "loc": [ -90.447436, 32.377751 ], "pop": 3484, "state": "MS" }, { "_id": "39042", "city": "BRANDON", "loc": [ -89.964029, 32.303803 ], "pop": 41141, "state": "MS" }, { "_id": "39044", "city": "BRAXTON", "loc": [ -89.967225, 32.001581 ], "pop": 1704, "state": "MS" }, { "_id": "39045", "city": "CAMDEN", "loc": [ -89.892838, 32.794832 ], "pop": 1835, "state": "MS" }, { "_id": "39046", "city": "CANTON", "loc": [ -90.006079, 32.620543 ], "pop": 21725, "state": "MS" }, { "_id": "39049", "city": "CARLISLE", "loc": [ -90.779904, 32.101322 ], "pop": 334, "state": "MS" }, { "_id": "39051", "city": "EDINBURG", "loc": [ -89.535274, 32.788635 ], "pop": 11122, "state": "MS" }, { "_id": "39055", "city": "CHURCH HILL", "loc": [ -91.21490300000001, 31.67864 ], "pop": 1079, "state": "MS" }, { "_id": "39056", "city": "CLINTON", "loc": [ -90.32289299999999, 32.341079 ], "pop": 25262, "state": "MS" }, { "_id": "39057", "city": "CONEHATTA", "loc": [ -89.268956, 32.466974 ], "pop": 2117, "state": "MS" }, { "_id": "39059", "city": "CRYSTAL SPRINGS", "loc": [ -90.374439, 31.993329 ], "pop": 10787, "state": "MS" }, { "_id": "39063", "city": "DURANT", "loc": [ -89.86116, 33.082756 ], "pop": 3459, "state": "MS" }, { "_id": "39066", "city": "EDWARDS", "loc": [ -90.598392, 32.316008 ], "pop": 4144, "state": "MS" }, { "_id": "39067", "city": "ETHEL", "loc": [ -89.49470700000001, 33.152587 ], "pop": 2047, "state": "MS" }, { "_id": "39069", "city": "FAYETTE", "loc": [ -91.058226, 31.712058 ], "pop": 6319, "state": "MS" }, { "_id": "39071", "city": "FLORA", "loc": [ -90.32350599999999, 32.557832 ], "pop": 3973, "state": "MS" }, { "_id": "39073", "city": "FLORENCE", "loc": [ -90.121672, 32.153002 ], "pop": 14251, "state": "MS" }, { "_id": "39074", "city": "FOREST", "loc": [ -89.467201, 32.346999 ], "pop": 6588, "state": "MS" }, { "_id": "39078", "city": "GEORGETOWN", "loc": [ -90.21273600000001, 31.855198 ], "pop": 2065, "state": "MS" }, { "_id": "39079", "city": "GOODMAN", "loc": [ -89.982145, 32.972133 ], "pop": 3487, "state": "MS" }, { "_id": "39082", "city": "HARRISVILLE", "loc": [ -90.10535900000001, 31.967552 ], "pop": 2885, "state": "MS" }, { "_id": "39083", "city": "HAZLEHURST", "loc": [ -90.405078, 31.856188 ], "pop": 12269, "state": "MS" }, { "_id": "39086", "city": "HERMANVILLE", "loc": [ -90.844588, 31.956374 ], "pop": 1683, "state": "MS" }, { "_id": "39088", "city": "HOLLY BLUFF", "loc": [ -90.704486, 32.824216 ], "pop": 218, "state": "MS" }, { "_id": "39090", "city": "KOSCIUSKO", "loc": [ -89.572351, 33.0446 ], "pop": 11597, "state": "MS" }, { "_id": "39092", "city": "LAKE", "loc": [ -89.341354, 32.345909 ], "pop": 704, "state": "MS" }, { "_id": "39094", "city": "LENA", "loc": [ -89.549435, 32.644588 ], "pop": 3622, "state": "MS" }, { "_id": "39095", "city": "LEXINGTON", "loc": [ -90.055674, 33.125043 ], "pop": 7252, "state": "MS" }, { "_id": "39096", "city": "LORMAN", "loc": [ -91.095691, 31.838257 ], "pop": 668, "state": "MS" }, { "_id": "39097", "city": "LOUISE", "loc": [ -90.589321, 32.991945 ], "pop": 1670, "state": "MS" }, { "_id": "39108", "city": "MC COOL", "loc": [ -89.326806, 33.163206 ], "pop": 1438, "state": "MS" }, { "_id": "39109", "city": "MADDEN", "loc": [ -89.38170100000001, 32.708665 ], "pop": 1586, "state": "MS" }, { "_id": "39110", "city": "MADISON", "loc": [ -90.108744, 32.467065 ], "pop": 12100, "state": "MS" }, { "_id": "39111", "city": "MAGEE", "loc": [ -89.750325, 31.849513 ], "pop": 7590, "state": "MS" }, { "_id": "39113", "city": "MAYERSVILLE", "loc": [ -91.028628, 32.901276 ], "pop": 1657, "state": "MS" }, { "_id": "39114", "city": "MENDENHALL", "loc": [ -89.809494, 31.949425 ], "pop": 10110, "state": "MS" }, { "_id": "39116", "city": "MIZE", "loc": [ -89.574135, 31.847285 ], "pop": 2858, "state": "MS" }, { "_id": "39117", "city": "MORTON", "loc": [ -89.551222, 32.436105 ], "pop": 15400, "state": "MS" }, { "_id": "39119", "city": "MOUNT OLIVE", "loc": [ -89.672387, 31.734582 ], "pop": 3060, "state": "MS" }, { "_id": "39120", "city": "NATCHEZ", "loc": [ -91.364214, 31.54924 ], "pop": 34738, "state": "MS" }, { "_id": "39140", "city": "NEWHEBRON", "loc": [ -90.01526, 31.73004 ], "pop": 1184, "state": "MS" }, { "_id": "39144", "city": "PATTISON", "loc": [ -90.828306, 31.851025 ], "pop": 855, "state": "MS" }, { "_id": "39145", "city": "PELAHATCHIE", "loc": [ -89.79134999999999, 32.317994 ], "pop": 1661, "state": "MS" }, { "_id": "39146", "city": "PICKENS", "loc": [ -89.973707, 32.890519 ], "pop": 1574, "state": "MS" }, { "_id": "39149", "city": "PINOLA", "loc": [ -90.008775, 31.827732 ], "pop": 1664, "state": "MS" }, { "_id": "39150", "city": "PORT GIBSON", "loc": [ -91.02303000000001, 31.926604 ], "pop": 8498, "state": "MS" }, { "_id": "39152", "city": "PULASKI", "loc": [ -89.650521, 32.270845 ], "pop": 1447, "state": "MS" }, { "_id": "39153", "city": "RALEIGH", "loc": [ -89.50881800000001, 32.05084 ], "pop": 8944, "state": "MS" }, { "_id": "39154", "city": "LEARNED", "loc": [ -90.424088, 32.23922 ], "pop": 7530, "state": "MS" }, { "_id": "39156", "city": "REDWOOD", "loc": [ -90.785899, 32.486699 ], "pop": 912, "state": "MS" }, { "_id": "39157", "city": "RIDGELAND", "loc": [ -90.12069700000001, 32.412165 ], "pop": 13226, "state": "MS" }, { "_id": "39159", "city": "ROLLING FORK", "loc": [ -90.883274, 32.873317 ], "pop": 4509, "state": "MS" }, { "_id": "39160", "city": "SALLIS", "loc": [ -89.755182, 33.000981 ], "pop": 3093, "state": "MS" }, { "_id": "39162", "city": "SATARTIA", "loc": [ -90.596458, 32.612515 ], "pop": 496, "state": "MS" }, { "_id": "39166", "city": "SILVER CITY", "loc": [ -90.49279799999999, 33.05071 ], "pop": 1190, "state": "MS" }, { "_id": "39168", "city": "TAYLORSVILLE", "loc": [ -89.404875, 31.839388 ], "pop": 2996, "state": "MS" }, { "_id": "39169", "city": "TCHULA", "loc": [ -90.250012, 33.162388 ], "pop": 3976, "state": "MS" }, { "_id": "39170", "city": "TERRY", "loc": [ -90.32414300000001, 32.114683 ], "pop": 5538, "state": "MS" }, { "_id": "39175", "city": "UTICA", "loc": [ -90.604724, 32.122897 ], "pop": 4630, "state": "MS" }, { "_id": "39176", "city": "VAIDEN", "loc": [ -89.757023, 33.33433 ], "pop": 1987, "state": "MS" }, { "_id": "39177", "city": "VALLEY PARK", "loc": [ -90.854209, 32.632258 ], "pop": 252, "state": "MS" }, { "_id": "39179", "city": "PICKENS", "loc": [ -90.085477, 32.817424 ], "pop": 1417, "state": "MS" }, { "_id": "39180", "city": "VICKSBURG", "loc": [ -90.85065, 32.325824 ], "pop": 46968, "state": "MS" }, { "_id": "39189", "city": "WALNUT GROVE", "loc": [ -89.410538, 32.613418 ], "pop": 2098, "state": "MS" }, { "_id": "39191", "city": "WESSON", "loc": [ -90.413106, 31.690055 ], "pop": 4187, "state": "MS" }, { "_id": "39192", "city": "WEST", "loc": [ -89.769526, 33.1883 ], "pop": 2069, "state": "MS" }, { "_id": "39194", "city": "YAZOO CITY", "loc": [ -90.40314499999999, 32.85937 ], "pop": 17936, "state": "MS" }, { "_id": "39201", "city": "JACKSON", "loc": [ -90.186655, 32.293502 ], "pop": 771, "state": "MS" }, { "_id": "39202", "city": "JACKSON", "loc": [ -90.178194, 32.314883 ], "pop": 10979, "state": "MS" }, { "_id": "39203", "city": "JACKSON", "loc": [ -90.20206399999999, 32.308145 ], "pop": 15641, "state": "MS" }, { "_id": "39204", "city": "JACKSON", "loc": [ -90.23057900000001, 32.283162 ], "pop": 19655, "state": "MS" }, { "_id": "39206", "city": "JACKSON", "loc": [ -90.173787, 32.369956 ], "pop": 25312, "state": "MS" }, { "_id": "39208", "city": "PEARL", "loc": [ -90.10271400000001, 32.276837 ], "pop": 25545, "state": "MS" }, { "_id": "39209", "city": "JACKSON", "loc": [ -90.244626, 32.318422 ], "pop": 34407, "state": "MS" }, { "_id": "39211", "city": "JACKSON", "loc": [ -90.12929699999999, 32.373924 ], "pop": 25567, "state": "MS" }, { "_id": "39212", "city": "JACKSON", "loc": [ -90.261201, 32.24347 ], "pop": 35321, "state": "MS" }, { "_id": "39213", "city": "JACKSON", "loc": [ -90.217099, 32.355288 ], "pop": 33311, "state": "MS" }, { "_id": "39216", "city": "JACKSON", "loc": [ -90.17081399999999, 32.338574 ], "pop": 3824, "state": "MS" }, { "_id": "39218", "city": "RICHLAND", "loc": [ -90.15623100000001, 32.215224 ], "pop": 4563, "state": "MS" }, { "_id": "39269", "city": "JACKSON", "loc": [ -90.188503, 32.30085 ], "pop": 0, "state": "MS" }, { "_id": "39301", "city": "MERIDIAN", "loc": [ -88.655973, 32.357441 ], "pop": 28014, "state": "MS" }, { "_id": "39305", "city": "MERIDIAN", "loc": [ -88.67832199999999, 32.440129 ], "pop": 16175, "state": "MS" }, { "_id": "39307", "city": "MERIDIAN", "loc": [ -88.74359800000001, 32.373591 ], "pop": 20402, "state": "MS" }, { "_id": "39320", "city": "BAILEY", "loc": [ -88.69908599999999, 32.475417 ], "pop": 2495, "state": "MS" }, { "_id": "39322", "city": "BUCKATUNNA", "loc": [ -88.52573, 31.507976 ], "pop": 2477, "state": "MS" }, { "_id": "39323", "city": "CHUNKY", "loc": [ -88.946968, 32.247156 ], "pop": 79, "state": "MS" }, { "_id": "39325", "city": "COLLINSVILLE", "loc": [ -88.815532, 32.518278 ], "pop": 4385, "state": "MS" }, { "_id": "39326", "city": "DALEVILLE", "loc": [ -88.66094200000001, 32.551124 ], "pop": 549, "state": "MS" }, { "_id": "39327", "city": "DECATUR", "loc": [ -89.116832, 32.435798 ], "pop": 3595, "state": "MS" }, { "_id": "39328", "city": "DE KALB", "loc": [ -88.733158, 32.716235 ], "pop": 5219, "state": "MS" }, { "_id": "39330", "city": "ENTERPRISE", "loc": [ -88.84735000000001, 32.156266 ], "pop": 1444, "state": "MS" }, { "_id": "39332", "city": "HICKORY", "loc": [ -89.009254, 32.320012 ], "pop": 2504, "state": "MS" }, { "_id": "39335", "city": "LAUDERDALE", "loc": [ -88.495569, 32.502186 ], "pop": 2190, "state": "MS" }, { "_id": "39336", "city": "LAWRENCE", "loc": [ -89.27243199999999, 32.287614 ], "pop": 86, "state": "MS" }, { "_id": "39337", "city": "LITTLE ROCK", "loc": [ -89.181382, 32.540288 ], "pop": 896, "state": "MS" }, { "_id": "39338", "city": "LOUIN", "loc": [ -89.21993500000001, 32.099713 ], "pop": 1991, "state": "MS" }, { "_id": "39339", "city": "LOUISVILLE", "loc": [ -89.02865300000001, 33.105824 ], "pop": 16290, "state": "MS" }, { "_id": "39341", "city": "MACON", "loc": [ -88.578093, 33.102674 ], "pop": 6634, "state": "MS" }, { "_id": "39345", "city": "NEWTON", "loc": [ -89.18395099999999, 32.324448 ], "pop": 6779, "state": "MS" }, { "_id": "39346", "city": "NOXAPATER", "loc": [ -89.12207600000001, 32.97895 ], "pop": 2870, "state": "MS" }, { "_id": "39347", "city": "PACHUTA", "loc": [ -88.86529299999999, 32.008105 ], "pop": 916, "state": "MS" }, { "_id": "39348", "city": "PAULDING", "loc": [ -89.058441, 32.016744 ], "pop": 485, "state": "MS" }, { "_id": "39350", "city": "PHILADELPHIA", "loc": [ -89.115371, 32.757224 ], "pop": 24316, "state": "MS" }, { "_id": "39352", "city": "PORTERVILLE", "loc": [ -88.498425, 32.636833 ], "pop": 1202, "state": "MS" }, { "_id": "39354", "city": "PRESTON", "loc": [ -88.813013, 32.853659 ], "pop": 1937, "state": "MS" }, { "_id": "39355", "city": "QUITMAN", "loc": [ -88.678803, 32.066845 ], "pop": 8822, "state": "MS" }, { "_id": "39356", "city": "ROSE HILL", "loc": [ -89.001053, 32.148931 ], "pop": 1725, "state": "MS" }, { "_id": "39358", "city": "SCOOBA", "loc": [ -88.48827199999999, 32.840197 ], "pop": 2087, "state": "MS" }, { "_id": "39360", "city": "MATHERVILLE", "loc": [ -88.725866, 31.903082 ], "pop": 3442, "state": "MS" }, { "_id": "39361", "city": "SHUQUALAK", "loc": [ -88.559393, 32.976933 ], "pop": 1323, "state": "MS" }, { "_id": "39362", "city": "STATE LINE", "loc": [ -88.51711, 31.391619 ], "pop": 1382, "state": "MS" }, { "_id": "39363", "city": "STONEWALL", "loc": [ -88.774827, 32.156396 ], "pop": 2690, "state": "MS" }, { "_id": "39364", "city": "TOOMSUBA", "loc": [ -88.489225, 32.429583 ], "pop": 1346, "state": "MS" }, { "_id": "39365", "city": "UNION", "loc": [ -89.049522, 32.537329 ], "pop": 4684, "state": "MS" }, { "_id": "39366", "city": "VOSSBURG", "loc": [ -88.969598, 31.972301 ], "pop": 1357, "state": "MS" }, { "_id": "39367", "city": "WAYNESBORO", "loc": [ -88.67822099999999, 31.675447 ], "pop": 17046, "state": "MS" }, { "_id": "39401", "city": "HATTIESBURG", "loc": [ -89.306471, 31.314553 ], "pop": 41866, "state": "MS" }, { "_id": "39402", "city": "HATTIESBURG", "loc": [ -89.37751, 31.309753 ], "pop": 25479, "state": "MS" }, { "_id": "39421", "city": "BASSFIELD", "loc": [ -89.702735, 31.503695 ], "pop": 3605, "state": "MS" }, { "_id": "39422", "city": "BAY SPRINGS", "loc": [ -89.233768, 31.944939 ], "pop": 6778, "state": "MS" }, { "_id": "39423", "city": "BEAUMONT", "loc": [ -88.905492, 31.136763 ], "pop": 1883, "state": "MS" }, { "_id": "39425", "city": "BROOKLYN", "loc": [ -89.23372000000001, 30.998852 ], "pop": 2080, "state": "MS" }, { "_id": "39426", "city": "CARRIERE", "loc": [ -89.57792999999999, 30.617772 ], "pop": 12978, "state": "MS" }, { "_id": "39427", "city": "CARSON", "loc": [ -89.77582099999999, 31.558501 ], "pop": 1381, "state": "MS" }, { "_id": "39428", "city": "COLLINS", "loc": [ -89.543809, 31.670712 ], "pop": 9457, "state": "MS" }, { "_id": "39429", "city": "COLUMBIA", "loc": [ -89.799785, 31.255877 ], "pop": 19891, "state": "MS" }, { "_id": "39437", "city": "ELLISVILLE", "loc": [ -89.223073, 31.579663 ], "pop": 10632, "state": "MS" }, { "_id": "39439", "city": "HEIDELBERG", "loc": [ -88.998052, 31.882031 ], "pop": 3416, "state": "MS" }, { "_id": "39440", "city": "LAUREL", "loc": [ -89.13115500000001, 31.705444 ], "pop": 45040, "state": "MS" }, { "_id": "39451", "city": "LEAKESVILLE", "loc": [ -88.559546, 31.123825 ], "pop": 4858, "state": "MS" }, { "_id": "39452", "city": "AGRICOLA", "loc": [ -88.593391, 30.866722 ], "pop": 17844, "state": "MS" }, { "_id": "39455", "city": "LUMBERTON", "loc": [ -89.45425400000001, 31.053356 ], "pop": 6096, "state": "MS" }, { "_id": "39456", "city": "LEAF", "loc": [ -88.81947, 31.078449 ], "pop": 1061, "state": "MS" }, { "_id": "39459", "city": "MOSELLE", "loc": [ -89.320633, 31.483626 ], "pop": 2350, "state": "MS" }, { "_id": "39461", "city": "NEELY", "loc": [ -88.71983, 31.179325 ], "pop": 1059, "state": "MS" }, { "_id": "39462", "city": "NEW AUGUSTA", "loc": [ -89.028611, 31.130907 ], "pop": 2152, "state": "MS" }, { "_id": "39464", "city": "OVETT", "loc": [ -89.039613, 31.47377 ], "pop": 1113, "state": "MS" }, { "_id": "39465", "city": "PETAL", "loc": [ -89.222239, 31.347181 ], "pop": 15799, "state": "MS" }, { "_id": "39466", "city": "PICAYUNE", "loc": [ -89.69102100000001, 30.541796 ], "pop": 20116, "state": "MS" }, { "_id": "39470", "city": "POPLARVILLE", "loc": [ -89.564751, 30.852362 ], "pop": 7682, "state": "MS" }, { "_id": "39474", "city": "PRENTISS", "loc": [ -89.873497, 31.605655 ], "pop": 9065, "state": "MS" }, { "_id": "39475", "city": "PURVIS", "loc": [ -89.462301, 31.149562 ], "pop": 4493, "state": "MS" }, { "_id": "39476", "city": "RICHTON", "loc": [ -88.910079, 31.343364 ], "pop": 7378, "state": "MS" }, { "_id": "39478", "city": "SANDY HOOK", "loc": [ -89.818343, 31.047904 ], "pop": 448, "state": "MS" }, { "_id": "39479", "city": "SEMINARY", "loc": [ -89.481585, 31.528485 ], "pop": 4010, "state": "MS" }, { "_id": "39480", "city": "SOSO", "loc": [ -89.308223, 31.75941 ], "pop": 2890, "state": "MS" }, { "_id": "39481", "city": "STRINGER", "loc": [ -89.26214400000001, 31.844721 ], "pop": 1367, "state": "MS" }, { "_id": "39482", "city": "SUMRALL", "loc": [ -89.57772300000001, 31.359972 ], "pop": 4741, "state": "MS" }, { "_id": "39483", "city": "FOXWORTH", "loc": [ -89.93107500000001, 31.247325 ], "pop": 4317, "state": "MS" }, { "_id": "39501", "city": "GULFPORT", "loc": [ -89.097618, 30.382556 ], "pop": 25894, "state": "MS" }, { "_id": "39503", "city": "GULFPORT", "loc": [ -89.08855200000001, 30.460105 ], "pop": 26830, "state": "MS" }, { "_id": "39507", "city": "GULFPORT", "loc": [ -89.035347, 30.396248 ], "pop": 18144, "state": "MS" }, { "_id": "39520", "city": "DIAMONDHEAD", "loc": [ -89.397356, 30.324275 ], "pop": 20156, "state": "MS" }, { "_id": "39530", "city": "BILOXI", "loc": [ -88.897143, 30.403478 ], "pop": 22245, "state": "MS" }, { "_id": "39531", "city": "BILOXI", "loc": [ -88.960499, 30.40334 ], "pop": 18541, "state": "MS" }, { "_id": "39532", "city": "NORTH BAY", "loc": [ -88.918846, 30.452031 ], "pop": 25296, "state": "MS" }, { "_id": "39553", "city": "GAUTIER", "loc": [ -88.64117299999999, 30.398032 ], "pop": 13240, "state": "MS" }, { "_id": "39560", "city": "LONG BEACH", "loc": [ -89.16457699999999, 30.359756 ], "pop": 17826, "state": "MS" }, { "_id": "39561", "city": "MC HENRY", "loc": [ -89.153631, 30.697463 ], "pop": 375, "state": "MS" }, { "_id": "39563", "city": "KREOLE", "loc": [ -88.526015, 30.402773 ], "pop": 15657, "state": "MS" }, { "_id": "39564", "city": "OCEAN SPRINGS", "loc": [ -88.78009900000001, 30.440433 ], "pop": 34238, "state": "MS" }, { "_id": "39567", "city": "PASCAGOULA", "loc": [ -88.51647199999999, 30.530301 ], "pop": 16025, "state": "MS" }, { "_id": "39571", "city": "PASS CHRISTIAN", "loc": [ -89.28426899999999, 30.398918 ], "pop": 14427, "state": "MS" }, { "_id": "39573", "city": "PERKINSTON", "loc": [ -89.139985, 30.76686 ], "pop": 3743, "state": "MS" }, { "_id": "39574", "city": "SAUCIER", "loc": [ -89.147729, 30.596082 ], "pop": 6520, "state": "MS" }, { "_id": "39576", "city": "WAVELAND", "loc": [ -89.383679, 30.29138 ], "pop": 5967, "state": "MS" }, { "_id": "39577", "city": "WIGGINS", "loc": [ -89.132369, 30.86095 ], "pop": 6632, "state": "MS" }, { "_id": "39581", "city": "PASCAGOULA", "loc": [ -88.52885999999999, 30.366377 ], "pop": 27619, "state": "MS" }, { "_id": "39601", "city": "BROOKHAVEN", "loc": [ -90.451995, 31.58581 ], "pop": 20910, "state": "MS" }, { "_id": "39629", "city": "BOGUE CHITTO", "loc": [ -90.47318300000001, 31.456344 ], "pop": 7068, "state": "MS" }, { "_id": "39631", "city": "CENTREVILLE", "loc": [ -91.095985, 31.089329 ], "pop": 4055, "state": "MS" }, { "_id": "39633", "city": "CROSBY", "loc": [ -91.023712, 31.299406 ], "pop": 574, "state": "MS" }, { "_id": "39638", "city": "GLOSTER", "loc": [ -90.92404500000001, 31.19033 ], "pop": 6389, "state": "MS" }, { "_id": "39641", "city": "JAYESS", "loc": [ -90.186386, 31.403577 ], "pop": 1621, "state": "MS" }, { "_id": "39643", "city": "KOKOMO", "loc": [ -89.98241899999999, 31.177688 ], "pop": 888, "state": "MS" }, { "_id": "39645", "city": "LIBERTY", "loc": [ -90.71334899999999, 31.138427 ], "pop": 2950, "state": "MS" }, { "_id": "39647", "city": "MC CALL CREEK", "loc": [ -90.783581, 31.490772 ], "pop": 3017, "state": "MS" }, { "_id": "39648", "city": "MC COMB", "loc": [ -90.43244900000001, 31.221594 ], "pop": 23551, "state": "MS" }, { "_id": "39652", "city": "MAGNOLIA", "loc": [ -90.48311, 31.121745 ], "pop": 7831, "state": "MS" }, { "_id": "39653", "city": "MEADVILLE", "loc": [ -90.85783499999999, 31.428489 ], "pop": 1673, "state": "MS" }, { "_id": "39654", "city": "MONTICELLO", "loc": [ -90.12796, 31.523776 ], "pop": 4517, "state": "MS" }, { "_id": "39656", "city": "OAK VALE", "loc": [ -89.98273, 31.441953 ], "pop": 321, "state": "MS" }, { "_id": "39657", "city": "OSYKA", "loc": [ -90.478977, 31.021747 ], "pop": 1143, "state": "MS" }, { "_id": "39661", "city": "ROXIE", "loc": [ -91.06247500000001, 31.504043 ], "pop": 3526, "state": "MS" }, { "_id": "39662", "city": "RUTH", "loc": [ -90.28667299999999, 31.379495 ], "pop": 415, "state": "MS" }, { "_id": "39663", "city": "SILVER CREEK", "loc": [ -90.017332, 31.575535 ], "pop": 2862, "state": "MS" }, { "_id": "39664", "city": "SMITHDALE", "loc": [ -90.675236, 31.367203 ], "pop": 1247, "state": "MS" }, { "_id": "39665", "city": "SONTAG", "loc": [ -90.180125, 31.645313 ], "pop": 1953, "state": "MS" }, { "_id": "39666", "city": "SUMMIT", "loc": [ -90.46542700000001, 31.29752 ], "pop": 6696, "state": "MS" }, { "_id": "39667", "city": "TYLERTOWN", "loc": [ -90.116918, 31.146552 ], "pop": 14352, "state": "MS" }, { "_id": "39668", "city": "UNION CHURCH", "loc": [ -90.82592200000001, 31.710474 ], "pop": 587, "state": "MS" }, { "_id": "39669", "city": "WOODVILLE", "loc": [ -91.307596, 31.145913 ], "pop": 6400, "state": "MS" }, { "_id": "39701", "city": "COLUMBUS", "loc": [ -88.426194, 33.537699 ], "pop": 32609, "state": "MS" }, { "_id": "39702", "city": "COLUMBUS", "loc": [ -88.35538699999999, 33.481175 ], "pop": 21004, "state": "MS" }, { "_id": "39730", "city": "ABERDEEN", "loc": [ -88.538033, 33.828439 ], "pop": 15769, "state": "MS" }, { "_id": "39735", "city": "ACKERMAN", "loc": [ -89.20139, 33.351684 ], "pop": 5027, "state": "MS" }, { "_id": "39739", "city": "BROOKSVILLE", "loc": [ -88.501351, 33.213961 ], "pop": 4598, "state": "MS" }, { "_id": "39740", "city": "CALEDONIA", "loc": [ -88.314537, 33.686461 ], "pop": 2008, "state": "MS" }, { "_id": "39741", "city": "CEDARBLUFF", "loc": [ -88.826712, 33.61616 ], "pop": 1063, "state": "MS" }, { "_id": "39743", "city": "CRAWFORD", "loc": [ -88.56711900000001, 33.321922 ], "pop": 2310, "state": "MS" }, { "_id": "39744", "city": "TOMNOLEN", "loc": [ -89.304542, 33.568908 ], "pop": 5686, "state": "MS" }, { "_id": "39745", "city": "FRENCH CAMP", "loc": [ -89.39458500000001, 33.338319 ], "pop": 1426, "state": "MS" }, { "_id": "39746", "city": "HAMILTON", "loc": [ -88.44784, 33.801141 ], "pop": 726, "state": "MS" }, { "_id": "39747", "city": "KILMICHAEL", "loc": [ -89.569577, 33.416476 ], "pop": 2351, "state": "MS" }, { "_id": "39750", "city": "MABEN", "loc": [ -89.065887, 33.526179 ], "pop": 1286, "state": "MS" }, { "_id": "39751", "city": "MANTEE", "loc": [ -89.122906, 33.665493 ], "pop": 1813, "state": "MS" }, { "_id": "39752", "city": "MATHISTON", "loc": [ -89.12747899999999, 33.541493 ], "pop": 3213, "state": "MS" }, { "_id": "39755", "city": "PHEBA", "loc": [ -88.951842, 33.596056 ], "pop": 740, "state": "MS" }, { "_id": "39756", "city": "PRAIRIE", "loc": [ -88.63346300000001, 33.795113 ], "pop": 135, "state": "MS" }, { "_id": "39759", "city": "SESSUMS", "loc": [ -88.817637, 33.450125 ], "pop": 36268, "state": "MS" }, { "_id": "39766", "city": "STEENS", "loc": [ -88.327755, 33.56708 ], "pop": 1377, "state": "MS" }, { "_id": "39767", "city": "STEWART", "loc": [ -89.479, 33.510097 ], "pop": 892, "state": "MS" }, { "_id": "39769", "city": "STURGIS", "loc": [ -89.04727, 33.35702 ], "pop": 814, "state": "MS" }, { "_id": "39772", "city": "WEIR", "loc": [ -89.28041899999999, 33.264464 ], "pop": 1402, "state": "MS" }, { "_id": "39773", "city": "WEST POINT", "loc": [ -88.68226, 33.626496 ], "pop": 19317, "state": "MS" }, { "_id": "39776", "city": "WOODLAND", "loc": [ -89.02555700000001, 33.80661 ], "pop": 2276, "state": "MS" }, { "_id": "40003", "city": "BAGDAD", "loc": [ -85.06514199999999, 38.260811 ], "pop": 1272, "state": "KY" }, { "_id": "40004", "city": "BARDSTOWN", "loc": [ -85.461343, 37.80835 ], "pop": 16176, "state": "KY" }, { "_id": "40006", "city": "BEDFORD", "loc": [ -85.31333100000001, 38.586363 ], "pop": 3359, "state": "KY" }, { "_id": "40007", "city": "BETHLEHEM", "loc": [ -85.064874, 38.402433 ], "pop": 353, "state": "KY" }, { "_id": "40008", "city": "BLOOMFIELD", "loc": [ -85.286209, 37.907979 ], "pop": 2461, "state": "KY" }, { "_id": "40009", "city": "BRADFORDSVILLE", "loc": [ -85.14359899999999, 37.46622 ], "pop": 1136, "state": "KY" }, { "_id": "40010", "city": "BUCKNER", "loc": [ -85.47405999999999, 38.363008 ], "pop": 34, "state": "KY" }, { "_id": "40011", "city": "CAMPBELLSBURG", "loc": [ -85.16109400000001, 38.523083 ], "pop": 1960, "state": "KY" }, { "_id": "40012", "city": "CHAPLIN", "loc": [ -85.201472, 37.902541 ], "pop": 443, "state": "KY" }, { "_id": "40013", "city": "DEATSVILLE", "loc": [ -85.48415900000001, 37.896386 ], "pop": 4763, "state": "KY" }, { "_id": "40014", "city": "CRESTWOOD", "loc": [ -85.461038, 38.332637 ], "pop": 10779, "state": "KY" }, { "_id": "40019", "city": "EMINENCE", "loc": [ -85.17816000000001, 38.369606 ], "pop": 2493, "state": "KY" }, { "_id": "40022", "city": "FINCHVILLE", "loc": [ -85.347573, 38.156064 ], "pop": 1040, "state": "KY" }, { "_id": "40023", "city": "FISHERVILLE", "loc": [ -85.42822200000001, 38.165154 ], "pop": 937, "state": "KY" }, { "_id": "40026", "city": "GOSHEN", "loc": [ -85.57081599999999, 38.411294 ], "pop": 3626, "state": "KY" }, { "_id": "40028", "city": "HOWARDSTOWN", "loc": [ -85.55476899999999, 37.566393 ], "pop": 218, "state": "KY" }, { "_id": "40031", "city": "LA GRANGE", "loc": [ -85.392819, 38.402897 ], "pop": 13280, "state": "KY" }, { "_id": "40033", "city": "LEBANON", "loc": [ -85.266811, 37.565834 ], "pop": 10672, "state": "KY" }, { "_id": "40036", "city": "LOCKPORT", "loc": [ -84.958635, 38.421874 ], "pop": 742, "state": "KY" }, { "_id": "40037", "city": "LORETTO", "loc": [ -85.411297, 37.642112 ], "pop": 2586, "state": "KY" }, { "_id": "40040", "city": "MACKVILLE", "loc": [ -85.085201, 37.724703 ], "pop": 1753, "state": "KY" }, { "_id": "40045", "city": "MILTON", "loc": [ -85.36593000000001, 38.692489 ], "pop": 2535, "state": "KY" }, { "_id": "40046", "city": "MOUNT EDEN", "loc": [ -85.164114, 38.035238 ], "pop": 597, "state": "KY" }, { "_id": "40047", "city": "MOUNT WASHINGTON", "loc": [ -85.55863100000001, 38.045206 ], "pop": 8785, "state": "KY" }, { "_id": "40050", "city": "NEW CASTLE", "loc": [ -85.175567, 38.437368 ], "pop": 2017, "state": "KY" }, { "_id": "40051", "city": "TRAPPIST", "loc": [ -85.557694, 37.666327 ], "pop": 3698, "state": "KY" }, { "_id": "40055", "city": "PENDLETON", "loc": [ -85.317019, 38.480918 ], "pop": 975, "state": "KY" }, { "_id": "40056", "city": "PEWEE VALLEY", "loc": [ -85.483377, 38.303945 ], "pop": 2622, "state": "KY" }, { "_id": "40057", "city": "CROPPER", "loc": [ -85.087198, 38.358718 ], "pop": 2669, "state": "KY" }, { "_id": "40059", "city": "PROSPECT", "loc": [ -85.608287, 38.355987 ], "pop": 7454, "state": "KY" }, { "_id": "40060", "city": "RAYWICK", "loc": [ -85.43003, 37.537959 ], "pop": 981, "state": "KY" }, { "_id": "40061", "city": "SAINT CATHARINE", "loc": [ -85.27106000000001, 37.699126 ], "pop": 39, "state": "KY" }, { "_id": "40062", "city": "SAINT FRANCIS", "loc": [ -85.464208, 37.628644 ], "pop": 39, "state": "KY" }, { "_id": "40065", "city": "SHELBYVILLE", "loc": [ -85.224271, 38.216222 ], "pop": 14843, "state": "KY" }, { "_id": "40067", "city": "SIMPSONVILLE", "loc": [ -85.354797, 38.231186 ], "pop": 2443, "state": "KY" }, { "_id": "40068", "city": "SMITHFIELD", "loc": [ -85.265579, 38.393308 ], "pop": 1250, "state": "KY" }, { "_id": "40069", "city": "MAUD", "loc": [ -85.24047299999999, 37.701352 ], "pop": 6314, "state": "KY" }, { "_id": "40070", "city": "SULPHUR", "loc": [ -85.252021, 38.492062 ], "pop": 466, "state": "KY" }, { "_id": "40071", "city": "TAYLORSVILLE", "loc": [ -85.38286100000001, 38.047054 ], "pop": 7048, "state": "KY" }, { "_id": "40075", "city": "TURNERS STATION", "loc": [ -85.13251200000001, 38.550361 ], "pop": 611, "state": "KY" }, { "_id": "40076", "city": "WADDY", "loc": [ -85.12882999999999, 38.105445 ], "pop": 1510, "state": "KY" }, { "_id": "40077", "city": "WESTPORT", "loc": [ -85.45242, 38.492068 ], "pop": 500, "state": "KY" }, { "_id": "40078", "city": "WILLISBURG", "loc": [ -85.13618700000001, 37.837333 ], "pop": 2245, "state": "KY" }, { "_id": "40104", "city": "BATTLETOWN", "loc": [ -86.299104, 38.039295 ], "pop": 2532, "state": "KY" }, { "_id": "40106", "city": "BIG SPRING", "loc": [ -86.19179099999999, 37.798795 ], "pop": 315, "state": "KY" }, { "_id": "40107", "city": "BOSTON", "loc": [ -85.619927, 37.763991 ], "pop": 2589, "state": "KY" }, { "_id": "40108", "city": "BRANDENBURG", "loc": [ -86.10835899999999, 37.96624 ], "pop": 6480, "state": "KY" }, { "_id": "40109", "city": "BROOKS", "loc": [ -85.771344, 38.054576 ], "pop": 4447, "state": "KY" }, { "_id": "40111", "city": "CLOVERPORT", "loc": [ -86.595401, 37.822125 ], "pop": 2852, "state": "KY" }, { "_id": "40114", "city": "CONSTANTINE", "loc": [ -86.24009, 37.679412 ], "pop": 67, "state": "KY" }, { "_id": "40115", "city": "CUSTER", "loc": [ -86.271006, 37.742593 ], "pop": 47, "state": "KY" }, { "_id": "40117", "city": "EKRON", "loc": [ -86.154212, 37.91129 ], "pop": 2565, "state": "KY" }, { "_id": "40118", "city": "FAIRDALE", "loc": [ -85.754924, 38.108668 ], "pop": 8297, "state": "KY" }, { "_id": "40119", "city": "GLEN DEAN", "loc": [ -86.51074699999999, 37.569353 ], "pop": 770, "state": "KY" }, { "_id": "40121", "city": "FORT KNOX", "loc": [ -85.948909, 37.892798 ], "pop": 15407, "state": "KY" }, { "_id": "40140", "city": "GARFIELD", "loc": [ -86.316868, 37.814508 ], "pop": 613, "state": "KY" }, { "_id": "40142", "city": "GUSTON", "loc": [ -86.215515, 37.89511 ], "pop": 1525, "state": "KY" }, { "_id": "40143", "city": "MOOLEYVILLE", "loc": [ -86.416856, 37.772548 ], "pop": 3995, "state": "KY" }, { "_id": "40144", "city": "LOCUST HILL", "loc": [ -86.37779, 37.742925 ], "pop": 1648, "state": "KY" }, { "_id": "40145", "city": "HUDSON", "loc": [ -86.301238, 37.650613 ], "pop": 55, "state": "KY" }, { "_id": "40146", "city": "IRVINGTON", "loc": [ -86.29653399999999, 37.876239 ], "pop": 2335, "state": "KY" }, { "_id": "40150", "city": "LEBANON JUNCTION", "loc": [ -85.72464100000001, 37.851054 ], "pop": 5051, "state": "KY" }, { "_id": "40152", "city": "MC DANIELS", "loc": [ -86.397278, 37.595251 ], "pop": 44, "state": "KY" }, { "_id": "40157", "city": "PAYNEVILLE", "loc": [ -86.408164, 38.030128 ], "pop": 504, "state": "KY" }, { "_id": "40160", "city": "RADCLIFF", "loc": [ -85.94040800000001, 37.826652 ], "pop": 21490, "state": "KY" }, { "_id": "40161", "city": "RHODELIA", "loc": [ -86.304079, 37.968538 ], "pop": 1322, "state": "KY" }, { "_id": "40162", "city": "RINEYVILLE", "loc": [ -85.995395, 37.75249 ], "pop": 4542, "state": "KY" }, { "_id": "40164", "city": "SE REE", "loc": [ -86.399176, 37.676018 ], "pop": 299, "state": "KY" }, { "_id": "40165", "city": "SHEPHERDSVILLE", "loc": [ -85.688767, 38.004515 ], "pop": 18649, "state": "KY" }, { "_id": "40170", "city": "STEPHENSPORT", "loc": [ -86.523961, 37.904781 ], "pop": 134, "state": "KY" }, { "_id": "40171", "city": "UNION STAR", "loc": [ -86.461519, 37.961589 ], "pop": 606, "state": "KY" }, { "_id": "40175", "city": "VINE GROVE", "loc": [ -86.006888, 37.858937 ], "pop": 13294, "state": "KY" }, { "_id": "40176", "city": "WEBSTER", "loc": [ -86.403204, 37.923936 ], "pop": 258, "state": "KY" }, { "_id": "40177", "city": "WEST POINT", "loc": [ -85.95450200000001, 37.995408 ], "pop": 1235, "state": "KY" }, { "_id": "40178", "city": "WESTVIEW", "loc": [ -86.427286, 37.679196 ], "pop": 223, "state": "KY" }, { "_id": "40202", "city": "LOUISVILLE", "loc": [ -85.747646, 38.250734 ], "pop": 5221, "state": "KY" }, { "_id": "40203", "city": "LOUISVILLE", "loc": [ -85.762595, 38.245332 ], "pop": 19432, "state": "KY" }, { "_id": "40204", "city": "LOUISVILLE", "loc": [ -85.72493799999999, 38.236936 ], "pop": 16467, "state": "KY" }, { "_id": "40205", "city": "LOUISVILLE", "loc": [ -85.688542, 38.22217 ], "pop": 24979, "state": "KY" }, { "_id": "40206", "city": "SAINT MATTHEWS", "loc": [ -85.697581, 38.256495 ], "pop": 20604, "state": "KY" }, { "_id": "40207", "city": "SAINT MATTHEWS", "loc": [ -85.649689, 38.257908 ], "pop": 30193, "state": "KY" }, { "_id": "40208", "city": "LOUISVILLE", "loc": [ -85.76482300000001, 38.219988 ], "pop": 13523, "state": "KY" }, { "_id": "40209", "city": "LOUISVILLE", "loc": [ -85.751904, 38.190125 ], "pop": 2752, "state": "KY" }, { "_id": "40210", "city": "LOUISVILLE", "loc": [ -85.790548, 38.230585 ], "pop": 18623, "state": "KY" }, { "_id": "40211", "city": "LOUISVILLE", "loc": [ -85.81265, 38.241958 ], "pop": 26422, "state": "KY" }, { "_id": "40212", "city": "LOUISVILLE", "loc": [ -85.804479, 38.265116 ], "pop": 21605, "state": "KY" }, { "_id": "40213", "city": "LOUISVILLE", "loc": [ -85.71064200000001, 38.183929 ], "pop": 21288, "state": "KY" }, { "_id": "40214", "city": "LOUISVILLE", "loc": [ -85.77802699999999, 38.159318 ], "pop": 42198, "state": "KY" }, { "_id": "40215", "city": "LOUISVILLE", "loc": [ -85.784707, 38.191319 ], "pop": 24661, "state": "KY" }, { "_id": "40216", "city": "SHIVELY", "loc": [ -85.831771, 38.186138 ], "pop": 41719, "state": "KY" }, { "_id": "40217", "city": "LOUISVILLE", "loc": [ -85.740371, 38.21736 ], "pop": 13213, "state": "KY" }, { "_id": "40218", "city": "BUECHEL", "loc": [ -85.65483399999999, 38.191084 ], "pop": 31434, "state": "KY" }, { "_id": "40219", "city": "OKOLONA", "loc": [ -85.680548, 38.141291 ], "pop": 38009, "state": "KY" }, { "_id": "40220", "city": "LOUISVILLE", "loc": [ -85.624489, 38.21494 ], "pop": 29012, "state": "KY" }, { "_id": "40222", "city": "LYNDON", "loc": [ -85.611183, 38.263825 ], "pop": 19924, "state": "KY" }, { "_id": "40223", "city": "ANCHORAGE", "loc": [ -85.561151, 38.253688 ], "pop": 19766, "state": "KY" }, { "_id": "40228", "city": "BUECHEL", "loc": [ -85.630967, 38.1392 ], "pop": 9192, "state": "KY" }, { "_id": "40229", "city": "OKOLONA", "loc": [ -85.67188899999999, 38.090655 ], "pop": 26878, "state": "KY" }, { "_id": "40241", "city": "LYNDON", "loc": [ -85.582421, 38.301509 ], "pop": 14137, "state": "KY" }, { "_id": "40242", "city": "LYNDON", "loc": [ -85.59022400000001, 38.276858 ], "pop": 9742, "state": "KY" }, { "_id": "40243", "city": "MIDDLETOWN", "loc": [ -85.537381, 38.240115 ], "pop": 9317, "state": "KY" }, { "_id": "40245", "city": "LOUISVILLE", "loc": [ -85.484461, 38.268273 ], "pop": 8662, "state": "KY" }, { "_id": "40258", "city": "PLEASURE RIDGE P", "loc": [ -85.862505, 38.142369 ], "pop": 24515, "state": "KY" }, { "_id": "40272", "city": "VALLEY STATION", "loc": [ -85.858701, 38.097063 ], "pop": 32843, "state": "KY" }, { "_id": "40291", "city": "FERN CREEK", "loc": [ -85.59451300000001, 38.15205 ], "pop": 22429, "state": "KY" }, { "_id": "40299", "city": "JEFFERSONTOWN", "loc": [ -85.56894699999999, 38.188491 ], "pop": 23882, "state": "KY" }, { "_id": "40311", "city": "CARLISLE", "loc": [ -84.027902, 38.321233 ], "pop": 6825, "state": "KY" }, { "_id": "40312", "city": "WESTBEND", "loc": [ -83.934693, 37.860571 ], "pop": 5408, "state": "KY" }, { "_id": "40313", "city": "CLEARFIELD", "loc": [ -83.32728899999999, 38.143992 ], "pop": 1942, "state": "KY" }, { "_id": "40316", "city": "DENNISTON", "loc": [ -83.513136, 37.919068 ], "pop": 238, "state": "KY" }, { "_id": "40322", "city": "SCRANTON", "loc": [ -83.642405, 37.946031 ], "pop": 3175, "state": "KY" }, { "_id": "40324", "city": "GEORGETOWN", "loc": [ -84.556179, 38.211712 ], "pop": 18666, "state": "KY" }, { "_id": "40327", "city": "GRATZ", "loc": [ -84.942882, 38.478104 ], "pop": 216, "state": "KY" }, { "_id": "40328", "city": "GRAVEL SWITCH", "loc": [ -85.082403, 37.575802 ], "pop": 962, "state": "KY" }, { "_id": "40330", "city": "CORNISHVILLE", "loc": [ -84.84675, 37.769989 ], "pop": 17727, "state": "KY" }, { "_id": "40336", "city": "JINKS", "loc": [ -83.996172, 37.705051 ], "pop": 13349, "state": "KY" }, { "_id": "40337", "city": "JEFFERSONVILLE", "loc": [ -83.855778, 37.964004 ], "pop": 4303, "state": "KY" }, { "_id": "40339", "city": "KEENE", "loc": [ -84.65192399999999, 37.941057 ], "pop": 253, "state": "KY" }, { "_id": "40341", "city": "LAMERO", "loc": [ -84.162353, 37.319166 ], "pop": 25, "state": "KY" }, { "_id": "40342", "city": "LAWRENCEBURG", "loc": [ -84.92993800000001, 38.018853 ], "pop": 13485, "state": "KY" }, { "_id": "40345", "city": "MARIBA", "loc": [ -83.553692, 37.913527 ], "pop": 374, "state": "KY" }, { "_id": "40346", "city": "MEANS", "loc": [ -83.725343, 37.928382 ], "pop": 324, "state": "KY" }, { "_id": "40347", "city": "MIDWAY", "loc": [ -84.69284500000001, 38.148741 ], "pop": 2079, "state": "KY" }, { "_id": "40350", "city": "MOOREFIELD", "loc": [ -83.892889, 38.292627 ], "pop": 383, "state": "KY" }, { "_id": "40351", "city": "MOREHEAD", "loc": [ -83.443645, 38.199047 ], "pop": 18413, "state": "KY" }, { "_id": "40353", "city": "MOUNT STERLING", "loc": [ -83.938774, 38.054822 ], "pop": 15242, "state": "KY" }, { "_id": "40355", "city": "NEW LIBERTY", "loc": [ -84.90106400000001, 38.624556 ], "pop": 2262, "state": "KY" }, { "_id": "40356", "city": "NICHOLASVILLE", "loc": [ -84.56459, 37.880794 ], "pop": 22920, "state": "KY" }, { "_id": "40358", "city": "OLYMPIA", "loc": [ -83.758456, 38.061089 ], "pop": 640, "state": "KY" }, { "_id": "40359", "city": "OWENTON", "loc": [ -84.808632, 38.4986 ], "pop": 6326, "state": "KY" }, { "_id": "40360", "city": "OWINGSVILLE", "loc": [ -83.756439, 38.153196 ], "pop": 4583, "state": "KY" }, { "_id": "40361", "city": "PARIS", "loc": [ -84.24498699999999, 38.208293 ], "pop": 18722, "state": "KY" }, { "_id": "40365", "city": "POMEROYTON", "loc": [ -83.526315, 37.874352 ], "pop": 480, "state": "KY" }, { "_id": "40370", "city": "SADIEVILLE", "loc": [ -84.53842400000001, 38.390816 ], "pop": 2694, "state": "KY" }, { "_id": "40371", "city": "SALT LICK", "loc": [ -83.631619, 38.104031 ], "pop": 2687, "state": "KY" }, { "_id": "40372", "city": "BONDVILLE", "loc": [ -84.884546, 37.915078 ], "pop": 1684, "state": "KY" }, { "_id": "40374", "city": "SHARPSBURG", "loc": [ -83.893199, 38.214742 ], "pop": 1685, "state": "KY" }, { "_id": "40376", "city": "SLADE", "loc": [ -83.68485200000001, 37.788958 ], "pop": 318, "state": "KY" }, { "_id": "40379", "city": "STAMPING GROUND", "loc": [ -84.68182400000001, 38.288802 ], "pop": 3757, "state": "KY" }, { "_id": "40380", "city": "PATSEY", "loc": [ -83.829947, 37.842703 ], "pop": 5966, "state": "KY" }, { "_id": "40383", "city": "VERSAILLES", "loc": [ -84.728683, 38.041301 ], "pop": 18204, "state": "KY" }, { "_id": "40385", "city": "BYBEE", "loc": [ -84.11706100000001, 37.766833 ], "pop": 1433, "state": "KY" }, { "_id": "40387", "city": "KOREA", "loc": [ -83.47305, 37.965353 ], "pop": 501, "state": "KY" }, { "_id": "40390", "city": "HIGH BRIDGE", "loc": [ -84.66207900000001, 37.862141 ], "pop": 5600, "state": "KY" }, { "_id": "40391", "city": "WINCHESTER", "loc": [ -84.178894, 37.987161 ], "pop": 29149, "state": "KY" }, { "_id": "40402", "city": "MOORES CREEK", "loc": [ -83.959737, 37.306965 ], "pop": 1941, "state": "KY" }, { "_id": "40403", "city": "BEREA", "loc": [ -84.274919, 37.579942 ], "pop": 16561, "state": "KY" }, { "_id": "40409", "city": "BRODHEAD", "loc": [ -84.43358000000001, 37.381524 ], "pop": 2596, "state": "KY" }, { "_id": "40415", "city": "COBHILL", "loc": [ -83.840053, 37.743428 ], "pop": 284, "state": "KY" }, { "_id": "40417", "city": "CONWAY", "loc": [ -84.308072, 37.479933 ], "pop": 2806, "state": "KY" }, { "_id": "40419", "city": "CRAB ORCHARD", "loc": [ -84.49391199999999, 37.446523 ], "pop": 5197, "state": "KY" }, { "_id": "40422", "city": "DANVILLE", "loc": [ -84.77469600000001, 37.646524 ], "pop": 19483, "state": "KY" }, { "_id": "40426", "city": "DREYFUS", "loc": [ -84.154495, 37.650696 ], "pop": 562, "state": "KY" }, { "_id": "40437", "city": "HUSTONVILLE", "loc": [ -84.85277499999999, 37.459503 ], "pop": 2965, "state": "KY" }, { "_id": "40440", "city": "JUNCTION CITY", "loc": [ -84.80278199999999, 37.582157 ], "pop": 3582, "state": "KY" }, { "_id": "40442", "city": "KINGS MOUNTAIN", "loc": [ -84.714764, 37.381795 ], "pop": 2385, "state": "KY" }, { "_id": "40444", "city": "LANCASTER", "loc": [ -84.596912, 37.658391 ], "pop": 8664, "state": "KY" }, { "_id": "40445", "city": "LIVINGSTON", "loc": [ -84.231776, 37.307391 ], "pop": 1320, "state": "KY" }, { "_id": "40447", "city": "CLOVER BOTTOM", "loc": [ -84.00896, 37.431678 ], "pop": 8071, "state": "KY" }, { "_id": "40456", "city": "CLIMAX", "loc": [ -84.354882, 37.336609 ], "pop": 5636, "state": "KY" }, { "_id": "40460", "city": "ORLANDO", "loc": [ -84.25280100000001, 37.373405 ], "pop": 1429, "state": "KY" }, { "_id": "40461", "city": "PAINT LICK", "loc": [ -84.426869, 37.609231 ], "pop": 3361, "state": "KY" }, { "_id": "40464", "city": "PARKSVILLE", "loc": [ -84.92813200000001, 37.577768 ], "pop": 893, "state": "KY" }, { "_id": "40468", "city": "PERRYVILLE", "loc": [ -84.966508, 37.637494 ], "pop": 2019, "state": "KY" }, { "_id": "40471", "city": "PRYSE", "loc": [ -83.842586, 37.684068 ], "pop": 250, "state": "KY" }, { "_id": "40472", "city": "RAVENNA", "loc": [ -83.93865700000001, 37.686711 ], "pop": 798, "state": "KY" }, { "_id": "40475", "city": "RICHMOND", "loc": [ -84.295526, 37.754605 ], "pop": 37946, "state": "KY" }, { "_id": "40481", "city": "SANDGAP", "loc": [ -84.056676, 37.487097 ], "pop": 837, "state": "KY" }, { "_id": "40484", "city": "STANFORD", "loc": [ -84.691177, 37.524529 ], "pop": 9072, "state": "KY" }, { "_id": "40486", "city": "ELIAS", "loc": [ -83.87067399999999, 37.343023 ], "pop": 837, "state": "KY" }, { "_id": "40489", "city": "WAYNESBURG", "loc": [ -84.665486, 37.349932 ], "pop": 4024, "state": "KY" }, { "_id": "40502", "city": "LEXINGTON", "loc": [ -84.485423, 38.017394 ], "pop": 30886, "state": "KY" }, { "_id": "40503", "city": "LEXINGTON", "loc": [ -84.52821, 38.001002 ], "pop": 33537, "state": "KY" }, { "_id": "40504", "city": "LEXINGTON", "loc": [ -84.543325, 38.040628 ], "pop": 22397, "state": "KY" }, { "_id": "40505", "city": "LEXINGTON", "loc": [ -84.458338, 38.061201 ], "pop": 28344, "state": "KY" }, { "_id": "40507", "city": "LEXINGTON", "loc": [ -84.495289, 38.046385 ], "pop": 2291, "state": "KY" }, { "_id": "40508", "city": "LEXINGTON", "loc": [ -84.49643500000001, 38.04754 ], "pop": 25161, "state": "KY" }, { "_id": "40509", "city": "LEXINGTON", "loc": [ -84.427419, 38.010166 ], "pop": 9029, "state": "KY" }, { "_id": "40510", "city": "LEXINGTON", "loc": [ -84.59104600000001, 38.070211 ], "pop": 1467, "state": "KY" }, { "_id": "40511", "city": "LEXINGTON", "loc": [ -84.500671, 38.093233 ], "pop": 16309, "state": "KY" }, { "_id": "40513", "city": "LEXINGTON", "loc": [ -84.58152200000001, 38.01388 ], "pop": 3383, "state": "KY" }, { "_id": "40514", "city": "LEXINGTON", "loc": [ -84.576667, 37.983291 ], "pop": 6252, "state": "KY" }, { "_id": "40515", "city": "LEXINGTON", "loc": [ -84.47075100000001, 37.965102 ], "pop": 20125, "state": "KY" }, { "_id": "40516", "city": "LEXINGTON", "loc": [ -84.35480200000001, 38.054355 ], "pop": 1294, "state": "KY" }, { "_id": "40517", "city": "LEXINGTON", "loc": [ -84.481588, 37.984864 ], "pop": 26787, "state": "KY" }, { "_id": "40601", "city": "HATTON", "loc": [ -84.88061, 38.192831 ], "pop": 46563, "state": "KY" }, { "_id": "40701", "city": "CORBIN", "loc": [ -84.10208, 36.934429 ], "pop": 17476, "state": "KY" }, { "_id": "40724", "city": "BUSH", "loc": [ -83.976117, 37.070874 ], "pop": 5759, "state": "KY" }, { "_id": "40729", "city": "SYMBOL", "loc": [ -84.14567599999999, 37.190779 ], "pop": 8589, "state": "KY" }, { "_id": "40734", "city": "GRAY", "loc": [ -83.982799, 36.946743 ], "pop": 2418, "state": "KY" }, { "_id": "40737", "city": "KEAVY", "loc": [ -84.14360600000001, 37.015604 ], "pop": 1323, "state": "KY" }, { "_id": "40740", "city": "LILY", "loc": [ -84.08071, 37.002295 ], "pop": 7471, "state": "KY" }, { "_id": "40741", "city": "SASSER", "loc": [ -84.097498, 37.101605 ], "pop": 20329, "state": "KY" }, { "_id": "40754", "city": "NEVISDALE", "loc": [ -84.111113, 36.663711 ], "pop": 157, "state": "KY" }, { "_id": "40759", "city": "ROCKHOLDS", "loc": [ -84.10404800000001, 36.824216 ], "pop": 1433, "state": "KY" }, { "_id": "40763", "city": "SILER", "loc": [ -83.964192, 36.720352 ], "pop": 151, "state": "KY" }, { "_id": "40769", "city": "PLEASANT VIEW", "loc": [ -84.143592, 36.735535 ], "pop": 20235, "state": "KY" }, { "_id": "40771", "city": "WOODBINE", "loc": [ -84.08274299999999, 36.918793 ], "pop": 10, "state": "KY" }, { "_id": "40801", "city": "AGES BROOKSIDE", "loc": [ -83.235294, 36.840734 ], "pop": 164, "state": "KY" }, { "_id": "40806", "city": "BAXTER", "loc": [ -83.314082, 36.874913 ], "pop": 2151, "state": "KY" }, { "_id": "40807", "city": "BENHAM", "loc": [ -82.90939899999999, 36.957377 ], "pop": 98, "state": "KY" }, { "_id": "40808", "city": "BIG LAUREL", "loc": [ -83.156468, 37.002795 ], "pop": 0, "state": "KY" }, { "_id": "40810", "city": "LEWIS CREEK", "loc": [ -83.35390099999999, 36.912348 ], "pop": 567, "state": "KY" }, { "_id": "40813", "city": "CALVIN", "loc": [ -83.737144, 36.707818 ], "pop": 2047, "state": "KY" }, { "_id": "40815", "city": "CRUMMIES", "loc": [ -83.265719, 36.74619 ], "pop": 154, "state": "KY" }, { "_id": "40818", "city": "COALGOOD", "loc": [ -83.238782, 36.793394 ], "pop": 1218, "state": "KY" }, { "_id": "40819", "city": "COLDIRON", "loc": [ -83.40959100000001, 36.877718 ], "pop": 392, "state": "KY" }, { "_id": "40820", "city": "CRANKS", "loc": [ -83.203948, 36.760228 ], "pop": 529, "state": "KY" }, { "_id": "40823", "city": "CUMBERLAND", "loc": [ -82.977052, 36.971085 ], "pop": 6601, "state": "KY" }, { "_id": "40824", "city": "DAYHOIT", "loc": [ -83.394329, 36.864603 ], "pop": 44, "state": "KY" }, { "_id": "40825", "city": "DIZNEY", "loc": [ -83.117659, 36.817697 ], "pop": 42, "state": "KY" }, { "_id": "40826", "city": "EOLIA", "loc": [ -82.77061999999999, 37.061767 ], "pop": 676, "state": "KY" }, { "_id": "40828", "city": "LOUELLEN", "loc": [ -83.181648, 36.855294 ], "pop": 4578, "state": "KY" }, { "_id": "40829", "city": "GRAYS KNOB", "loc": [ -83.323998, 36.811105 ], "pop": 3057, "state": "KY" }, { "_id": "40830", "city": "GULSTON", "loc": [ -83.326227, 36.765622 ], "pop": 456, "state": "KY" }, { "_id": "40831", "city": "CHEVROLET", "loc": [ -83.31957300000001, 36.84999 ], "pop": 6636, "state": "KY" }, { "_id": "40843", "city": "HOLMES MILL", "loc": [ -82.994304, 36.875652 ], "pop": 624, "state": "KY" }, { "_id": "40845", "city": "HULEN", "loc": [ -83.555132, 36.771449 ], "pop": 2719, "state": "KY" }, { "_id": "40846", "city": "KEITH", "loc": [ -83.361367, 36.871241 ], "pop": 185, "state": "KY" }, { "_id": "40847", "city": "KENVIR", "loc": [ -83.16055, 36.777596 ], "pop": 346, "state": "KY" }, { "_id": "40849", "city": "LEJUNIOR", "loc": [ -83.19048600000001, 36.921199 ], "pop": 1536, "state": "KY" }, { "_id": "40855", "city": "LYNCH", "loc": [ -82.915629, 36.997856 ], "pop": 125, "state": "KY" }, { "_id": "40858", "city": "MOZELLE", "loc": [ -83.413499, 37.003666 ], "pop": 2762, "state": "KY" }, { "_id": "40861", "city": "OVEN FORK", "loc": [ -82.818484, 37.053929 ], "pop": 356, "state": "KY" }, { "_id": "40862", "city": "PARTRIDGE", "loc": [ -82.877168, 37.012932 ], "pop": 861, "state": "KY" }, { "_id": "40863", "city": "PATHFORK", "loc": [ -83.462925, 36.752071 ], "pop": 545, "state": "KY" }, { "_id": "40865", "city": "PUTNEY", "loc": [ -83.26079300000001, 36.925907 ], "pop": 348, "state": "KY" }, { "_id": "40867", "city": "SMITH", "loc": [ -83.32090599999999, 36.71869 ], "pop": 312, "state": "KY" }, { "_id": "40868", "city": "STINNETT", "loc": [ -83.390742, 37.08835 ], "pop": 324, "state": "KY" }, { "_id": "40870", "city": "TOTZ", "loc": [ -83.201891, 36.970968 ], "pop": 301, "state": "KY" }, { "_id": "40873", "city": "WALLINS CREEK", "loc": [ -83.41896800000001, 36.816532 ], "pop": 3386, "state": "KY" }, { "_id": "40902", "city": "ARJAY", "loc": [ -83.641537, 36.828342 ], "pop": 1676, "state": "KY" }, { "_id": "40903", "city": "ARTEMUS", "loc": [ -83.832886, 36.838837 ], "pop": 520, "state": "KY" }, { "_id": "40906", "city": "BAILEY SWITCH", "loc": [ -83.899316, 36.864807 ], "pop": 8506, "state": "KY" }, { "_id": "40913", "city": "BEVERLY", "loc": [ -83.556031, 36.944179 ], "pop": 63, "state": "KY" }, { "_id": "40914", "city": "BIG CREEK", "loc": [ -83.633095, 37.14168 ], "pop": 3877, "state": "KY" }, { "_id": "40915", "city": "BIMBLE", "loc": [ -83.82817900000001, 36.886751 ], "pop": 836, "state": "KY" }, { "_id": "40921", "city": "BRYANTS STORE", "loc": [ -83.930729, 36.783087 ], "pop": 907, "state": "KY" }, { "_id": "40923", "city": "CANNON", "loc": [ -83.84249800000001, 36.94888 ], "pop": 2396, "state": "KY" }, { "_id": "40927", "city": "CLOSPLINT", "loc": [ -83.099766, 36.89227 ], "pop": 1472, "state": "KY" }, { "_id": "40930", "city": "DEWITT", "loc": [ -83.73156, 36.8738 ], "pop": 379, "state": "KY" }, { "_id": "40935", "city": "SALT GUM", "loc": [ -83.77139699999999, 36.834531 ], "pop": 1706, "state": "KY" }, { "_id": "40940", "city": "FONDE", "loc": [ -83.895022, 36.64455 ], "pop": 1326, "state": "KY" }, { "_id": "40943", "city": "GIRDLER", "loc": [ -83.85388, 36.969096 ], "pop": 229, "state": "KY" }, { "_id": "40946", "city": "GREEN ROAD", "loc": [ -83.895768, 36.998937 ], "pop": 360, "state": "KY" }, { "_id": "40949", "city": "HEIDRICK", "loc": [ -83.86650899999999, 36.892696 ], "pop": 1362, "state": "KY" }, { "_id": "40953", "city": "HINKLE", "loc": [ -83.780441, 36.875323 ], "pop": 269, "state": "KY" }, { "_id": "40958", "city": "KETTLE ISLAND", "loc": [ -83.58918300000001, 36.809344 ], "pop": 710, "state": "KY" }, { "_id": "40962", "city": "BRIGHT SHADE", "loc": [ -83.768291, 37.142321 ], "pop": 13727, "state": "KY" }, { "_id": "40964", "city": "MARY ALICE", "loc": [ -83.424408, 36.706797 ], "pop": 115, "state": "KY" }, { "_id": "40965", "city": "MIDDLESBORO", "loc": [ -83.723079, 36.617188 ], "pop": 14900, "state": "KY" }, { "_id": "40970", "city": "MILLS", "loc": [ -83.605305, 36.940659 ], "pop": 471, "state": "KY" }, { "_id": "40972", "city": "ONEIDA", "loc": [ -83.655467, 37.2677 ], "pop": 2371, "state": "KY" }, { "_id": "40977", "city": "CALLAWAY", "loc": [ -83.698502, 36.751302 ], "pop": 7658, "state": "KY" }, { "_id": "40979", "city": "ROARK", "loc": [ -83.506201, 37.024432 ], "pop": 463, "state": "KY" }, { "_id": "40982", "city": "SCALF", "loc": [ -83.72655399999999, 36.91748 ], "pop": 600, "state": "KY" }, { "_id": "40983", "city": "SEXTONS CREEK", "loc": [ -83.798378, 37.27334 ], "pop": 1776, "state": "KY" }, { "_id": "40988", "city": "STONEY FORK", "loc": [ -83.538504, 36.889184 ], "pop": 387, "state": "KY" }, { "_id": "40995", "city": "TROSPER", "loc": [ -83.831442, 36.782564 ], "pop": 1245, "state": "KY" }, { "_id": "40997", "city": "WALKER", "loc": [ -83.66160000000001, 36.891138 ], "pop": 120, "state": "KY" }, { "_id": "40999", "city": "WOOLLUM", "loc": [ -83.847202, 37.009657 ], "pop": 219, "state": "KY" }, { "_id": "41001", "city": "ALEXANDRIA", "loc": [ -84.394329, 38.940605 ], "pop": 11858, "state": "KY" }, { "_id": "41002", "city": "AUGUSTA", "loc": [ -83.995352, 38.762991 ], "pop": 1902, "state": "KY" }, { "_id": "41003", "city": "BERRY", "loc": [ -84.361118, 38.515974 ], "pop": 2083, "state": "KY" }, { "_id": "41004", "city": "BROOKSVILLE", "loc": [ -84.078649, 38.664387 ], "pop": 4309, "state": "KY" }, { "_id": "41005", "city": "RABBIT HASH", "loc": [ -84.74142000000001, 39.032411 ], "pop": 8322, "state": "KY" }, { "_id": "41006", "city": "BUTLER", "loc": [ -84.34457999999999, 38.801328 ], "pop": 4743, "state": "KY" }, { "_id": "41007", "city": "CALIFORNIA", "loc": [ -84.309794, 38.900614 ], "pop": 3427, "state": "KY" }, { "_id": "41008", "city": "CARROLLTON", "loc": [ -85.173036, 38.669565 ], "pop": 7072, "state": "KY" }, { "_id": "41010", "city": "CORINTH", "loc": [ -84.584596, 38.53021 ], "pop": 1701, "state": "KY" }, { "_id": "41011", "city": "COVINGTON", "loc": [ -84.52121, 39.070839 ], "pop": 29098, "state": "KY" }, { "_id": "41014", "city": "ROUSE", "loc": [ -84.505061, 39.066593 ], "pop": 8607, "state": "KY" }, { "_id": "41015", "city": "LATONIA", "loc": [ -84.498858, 39.021686 ], "pop": 19857, "state": "KY" }, { "_id": "41016", "city": "LUDLOW", "loc": [ -84.548304, 39.088946 ], "pop": 7210, "state": "KY" }, { "_id": "41017", "city": "DIXIE", "loc": [ -84.56961099999999, 39.032378 ], "pop": 34285, "state": "KY" }, { "_id": "41018", "city": "ERLANGER", "loc": [ -84.597745, 39.008238 ], "pop": 23909, "state": "KY" }, { "_id": "41030", "city": "CRITTENDEN", "loc": [ -84.598202, 38.774107 ], "pop": 2630, "state": "KY" }, { "_id": "41031", "city": "CYNTHIANA", "loc": [ -84.294921, 38.396403 ], "pop": 13375, "state": "KY" }, { "_id": "41033", "city": "DEMOSSVILLE", "loc": [ -84.47080200000001, 38.75165 ], "pop": 1292, "state": "KY" }, { "_id": "41034", "city": "DOVER", "loc": [ -83.871793, 38.691016 ], "pop": 1991, "state": "KY" }, { "_id": "41035", "city": "DRY RIDGE", "loc": [ -84.62373599999999, 38.704854 ], "pop": 6092, "state": "KY" }, { "_id": "41039", "city": "EWING", "loc": [ -83.873317, 38.415651 ], "pop": 2396, "state": "KY" }, { "_id": "41040", "city": "FALMOUTH", "loc": [ -84.345124, 38.664304 ], "pop": 6779, "state": "KY" }, { "_id": "41041", "city": "FLEMINGSBURG", "loc": [ -83.70796799999999, 38.427983 ], "pop": 6549, "state": "KY" }, { "_id": "41042", "city": "FLORENCE", "loc": [ -84.64196099999999, 38.994065 ], "pop": 34010, "state": "KY" }, { "_id": "41043", "city": "FOSTER", "loc": [ -84.156593, 38.75064 ], "pop": 1479, "state": "KY" }, { "_id": "41044", "city": "GERMANTOWN", "loc": [ -83.960616, 38.707534 ], "pop": 88, "state": "KY" }, { "_id": "41045", "city": "GHENT", "loc": [ -85.055662, 38.718823 ], "pop": 980, "state": "KY" }, { "_id": "41046", "city": "GLENCOE", "loc": [ -84.81155200000001, 38.722946 ], "pop": 589, "state": "KY" }, { "_id": "41048", "city": "HEBRON", "loc": [ -84.700745, 39.07553 ], "pop": 3497, "state": "KY" }, { "_id": "41049", "city": "HILLSBORO", "loc": [ -83.66967, 38.29294 ], "pop": 1981, "state": "KY" }, { "_id": "41051", "city": "INDEPENDENCE", "loc": [ -84.547912, 38.935407 ], "pop": 12778, "state": "KY" }, { "_id": "41052", "city": "JONESVILLE", "loc": [ -84.76367, 38.648251 ], "pop": 295, "state": "KY" }, { "_id": "41055", "city": "MAYS LICK", "loc": [ -83.87487400000001, 38.52692 ], "pop": 1786, "state": "KY" }, { "_id": "41056", "city": "LIMESTONE SQ", "loc": [ -83.758858, 38.619716 ], "pop": 12889, "state": "KY" }, { "_id": "41059", "city": "MELBOURNE", "loc": [ -84.353751, 39.006699 ], "pop": 2688, "state": "KY" }, { "_id": "41063", "city": "MORNING VIEW", "loc": [ -84.506918, 38.83942 ], "pop": 3938, "state": "KY" }, { "_id": "41064", "city": "MOUNT OLIVET", "loc": [ -84.047977, 38.521751 ], "pop": 2124, "state": "KY" }, { "_id": "41071", "city": "SOUTHGATE", "loc": [ -84.48651099999999, 39.082847 ], "pop": 22918, "state": "KY" }, { "_id": "41073", "city": "BELLEVUE", "loc": [ -84.478746, 39.102431 ], "pop": 6997, "state": "KY" }, { "_id": "41074", "city": "DAYTON", "loc": [ -84.471155, 39.111428 ], "pop": 6576, "state": "KY" }, { "_id": "41075", "city": "FORT THOMAS", "loc": [ -84.45234000000001, 39.078634 ], "pop": 16165, "state": "KY" }, { "_id": "41076", "city": "NEWPORT", "loc": [ -84.440792, 39.026184 ], "pop": 11237, "state": "KY" }, { "_id": "41080", "city": "PETERSBURG", "loc": [ -84.837104, 39.041561 ], "pop": 1219, "state": "KY" }, { "_id": "41083", "city": "SANDERS", "loc": [ -84.973151, 38.661004 ], "pop": 516, "state": "KY" }, { "_id": "41085", "city": "SILVER GROVE", "loc": [ -84.390849, 39.034262 ], "pop": 1210, "state": "KY" }, { "_id": "41086", "city": "SPARTA", "loc": [ -84.881334, 38.725582 ], "pop": 1186, "state": "KY" }, { "_id": "41091", "city": "UNION", "loc": [ -84.72735900000001, 38.943511 ], "pop": 4468, "state": "KY" }, { "_id": "41092", "city": "VERONA", "loc": [ -84.69072199999999, 38.839012 ], "pop": 2169, "state": "KY" }, { "_id": "41093", "city": "WALLINGFORD", "loc": [ -83.562532, 38.337449 ], "pop": 1366, "state": "KY" }, { "_id": "41094", "city": "WALTON", "loc": [ -84.63276999999999, 38.887491 ], "pop": 6253, "state": "KY" }, { "_id": "41095", "city": "WARSAW", "loc": [ -84.84958399999999, 38.780704 ], "pop": 3618, "state": "KY" }, { "_id": "41097", "city": "WILLIAMSTOWN", "loc": [ -84.57441, 38.629191 ], "pop": 5019, "state": "KY" }, { "_id": "41098", "city": "WORTHVILLE", "loc": [ -85.066321, 38.617948 ], "pop": 724, "state": "KY" }, { "_id": "41101", "city": "WESTWOOD", "loc": [ -82.702709, 38.443038 ], "pop": 17464, "state": "KY" }, { "_id": "41102", "city": "ASHLAND", "loc": [ -82.644721, 38.461255 ], "pop": 24865, "state": "KY" }, { "_id": "41121", "city": "ARGILLITE", "loc": [ -82.809442, 38.432228 ], "pop": 467, "state": "KY" }, { "_id": "41124", "city": "BLAINE", "loc": [ -82.851347, 38.026974 ], "pop": 982, "state": "KY" }, { "_id": "41127", "city": "CAMP DIX", "loc": [ -83.28779299999999, 38.508044 ], "pop": 269, "state": "KY" }, { "_id": "41129", "city": "CATLETTSBURG", "loc": [ -82.632065, 38.379946 ], "pop": 8851, "state": "KY" }, { "_id": "41132", "city": "DENTON", "loc": [ -82.82692400000001, 38.295212 ], "pop": 452, "state": "KY" }, { "_id": "41135", "city": "HEAD OF GRASSY", "loc": [ -83.261786, 38.367225 ], "pop": 435, "state": "KY" }, { "_id": "41137", "city": "FIREBRICK", "loc": [ -83.04320300000001, 38.687785 ], "pop": 279, "state": "KY" }, { "_id": "41139", "city": "FLATWOODS", "loc": [ -82.72122, 38.518776 ], "pop": 8397, "state": "KY" }, { "_id": "41141", "city": "GARRISON", "loc": [ -83.200036, 38.586915 ], "pop": 3066, "state": "KY" }, { "_id": "41143", "city": "FULTZ", "loc": [ -82.965087, 38.328037 ], "pop": 11771, "state": "KY" }, { "_id": "41144", "city": "LYNN", "loc": [ -82.868396, 38.547969 ], "pop": 11666, "state": "KY" }, { "_id": "41146", "city": "HITCHINS", "loc": [ -82.92026799999999, 38.254585 ], "pop": 3187, "state": "KY" }, { "_id": "41149", "city": "ISONVILLE", "loc": [ -83.050607, 38.046229 ], "pop": 890, "state": "KY" }, { "_id": "41159", "city": "MARTHA", "loc": [ -82.95576, 38.015228 ], "pop": 706, "state": "KY" }, { "_id": "41163", "city": "OLDTOWN", "loc": [ -82.95695000000001, 38.441153 ], "pop": 690, "state": "KY" }, { "_id": "41164", "city": "LAWTON", "loc": [ -83.16898500000001, 38.336275 ], "pop": 5763, "state": "KY" }, { "_id": "41166", "city": "QUINCY", "loc": [ -83.105647, 38.627059 ], "pop": 512, "state": "KY" }, { "_id": "41168", "city": "RUSH", "loc": [ -82.747602, 38.30893 ], "pop": 1502, "state": "KY" }, { "_id": "41169", "city": "RACELAND", "loc": [ -82.715632, 38.522575 ], "pop": 6469, "state": "KY" }, { "_id": "41170", "city": "SAINT PAUL", "loc": [ -83.067931, 38.665445 ], "pop": 222, "state": "KY" }, { "_id": "41171", "city": "BURKE", "loc": [ -83.12725, 38.129368 ], "pop": 5319, "state": "KY" }, { "_id": "41174", "city": "SOUTH PORTSMOUTH", "loc": [ -83.01621799999999, 38.708706 ], "pop": 813, "state": "KY" }, { "_id": "41175", "city": "MALONETON", "loc": [ -82.94637299999999, 38.709269 ], "pop": 4923, "state": "KY" }, { "_id": "41177", "city": "STEPHENS", "loc": [ -82.983689, 38.114625 ], "pop": 261, "state": "KY" }, { "_id": "41179", "city": "TRINITY", "loc": [ -83.355448, 38.551511 ], "pop": 5141, "state": "KY" }, { "_id": "41180", "city": "WEBBVILLE", "loc": [ -82.789743, 38.163377 ], "pop": 1654, "state": "KY" }, { "_id": "41183", "city": "WORTHINGTON", "loc": [ -82.739553, 38.551102 ], "pop": 1829, "state": "KY" }, { "_id": "41189", "city": "TOLLESBORO", "loc": [ -83.560458, 38.572332 ], "pop": 3061, "state": "KY" }, { "_id": "41201", "city": "ADAMS", "loc": [ -82.702437, 37.991375 ], "pop": 2540, "state": "KY" }, { "_id": "41204", "city": "BOONS CAMP", "loc": [ -82.67043, 37.821609 ], "pop": 260, "state": "KY" }, { "_id": "41214", "city": "DAVELLA", "loc": [ -82.58672900000001, 37.790019 ], "pop": 766, "state": "KY" }, { "_id": "41215", "city": "DENVER", "loc": [ -82.86304800000001, 37.796582 ], "pop": 573, "state": "KY" }, { "_id": "41216", "city": "EAST POINT", "loc": [ -82.828801, 37.708578 ], "pop": 1014, "state": "KY" }, { "_id": "41219", "city": "ELNA", "loc": [ -82.882825, 37.938594 ], "pop": 766, "state": "KY" }, { "_id": "41220", "city": "FUGET", "loc": [ -82.911422, 37.902164 ], "pop": 285, "state": "KY" }, { "_id": "41222", "city": "HAGERHILL", "loc": [ -82.81491, 37.803511 ], "pop": 739, "state": "KY" }, { "_id": "41224", "city": "JOB", "loc": [ -82.520421, 37.867149 ], "pop": 4231, "state": "KY" }, { "_id": "41226", "city": "KEATON", "loc": [ -82.95610499999999, 37.968049 ], "pop": 354, "state": "KY" }, { "_id": "41228", "city": "LEANDER", "loc": [ -82.831045, 37.761904 ], "pop": 1037, "state": "KY" }, { "_id": "41230", "city": "CLIFFORD", "loc": [ -82.617598, 38.094332 ], "pop": 8123, "state": "KY" }, { "_id": "41231", "city": "LOVELY", "loc": [ -82.363794, 37.792109 ], "pop": 958, "state": "KY" }, { "_id": "41234", "city": "MEALLY", "loc": [ -82.74417699999999, 37.796498 ], "pop": 925, "state": "KY" }, { "_id": "41237", "city": "OFFUTT", "loc": [ -82.70812599999999, 37.852766 ], "pop": 462, "state": "KY" }, { "_id": "41238", "city": "MANILA", "loc": [ -82.928079, 37.826409 ], "pop": 1430, "state": "KY" }, { "_id": "41240", "city": "NIPPA", "loc": [ -82.805162, 37.819293 ], "pop": 4095, "state": "KY" }, { "_id": "41250", "city": "LAURA", "loc": [ -82.44875399999999, 37.763752 ], "pop": 1700, "state": "KY" }, { "_id": "41254", "city": "RIVER", "loc": [ -82.67094400000001, 37.875063 ], "pop": 169, "state": "KY" }, { "_id": "41255", "city": "SITKA", "loc": [ -82.844554, 37.892187 ], "pop": 598, "state": "KY" }, { "_id": "41256", "city": "BARNETTS CREEK", "loc": [ -82.85742999999999, 37.838463 ], "pop": 1267, "state": "KY" }, { "_id": "41257", "city": "STAMBAUGH", "loc": [ -82.76779000000001, 37.84112 ], "pop": 165, "state": "KY" }, { "_id": "41258", "city": "RICEVILLE", "loc": [ -82.911269, 37.743408 ], "pop": 816, "state": "KY" }, { "_id": "41260", "city": "THELMA", "loc": [ -82.775532, 37.798745 ], "pop": 3956, "state": "KY" }, { "_id": "41262", "city": "DAVISPORT", "loc": [ -82.59926900000001, 37.879292 ], "pop": 1923, "state": "KY" }, { "_id": "41263", "city": "TUTOR KEY", "loc": [ -82.735106, 37.860527 ], "pop": 33, "state": "KY" }, { "_id": "41265", "city": "VAN LEAR", "loc": [ -82.703236, 37.692916 ], "pop": 3387, "state": "KY" }, { "_id": "41266", "city": "FUGET", "loc": [ -82.911224, 37.902927 ], "pop": 764, "state": "KY" }, { "_id": "41267", "city": "HODE", "loc": [ -82.432192, 37.858088 ], "pop": 2656, "state": "KY" }, { "_id": "41269", "city": "WHITEHOUSE", "loc": [ -82.775328, 37.895347 ], "pop": 2105, "state": "KY" }, { "_id": "41271", "city": "WILLIAMSPORT", "loc": [ -82.710455, 37.81416 ], "pop": 295, "state": "KY" }, { "_id": "41274", "city": "WITTENSVILLE", "loc": [ -82.80998700000001, 37.870297 ], "pop": 689, "state": "KY" }, { "_id": "41301", "city": "FLAT", "loc": [ -83.516395, 37.750243 ], "pop": 5038, "state": "KY" }, { "_id": "41306", "city": "ALTRO", "loc": [ -83.395749, 37.356346 ], "pop": 436, "state": "KY" }, { "_id": "41311", "city": "VADA", "loc": [ -83.702337, 37.581891 ], "pop": 6877, "state": "KY" }, { "_id": "41314", "city": "MORRIS FORK", "loc": [ -83.660624, 37.478717 ], "pop": 2675, "state": "KY" }, { "_id": "41315", "city": "BURKHART", "loc": [ -83.27339600000001, 37.687451 ], "pop": 233, "state": "KY" }, { "_id": "41317", "city": "CLAYHOLE", "loc": [ -83.281254, 37.466076 ], "pop": 2294, "state": "KY" }, { "_id": "41321", "city": "DECOY", "loc": [ -83.02895599999999, 37.49046 ], "pop": 184, "state": "KY" }, { "_id": "41327", "city": "GILLMORE", "loc": [ -83.348026, 37.697155 ], "pop": 44, "state": "KY" }, { "_id": "41328", "city": "GREEN HALL", "loc": [ -83.780693, 37.368938 ], "pop": 185, "state": "KY" }, { "_id": "41331", "city": "HADDIX", "loc": [ -83.376176, 37.492249 ], "pop": 513, "state": "KY" }, { "_id": "41332", "city": "GRASSY CREEK", "loc": [ -83.39891799999999, 37.775989 ], "pop": 978, "state": "KY" }, { "_id": "41338", "city": "ISLAND CITY", "loc": [ -83.717991, 37.389926 ], "pop": 526, "state": "KY" }, { "_id": "41339", "city": "CANOE", "loc": [ -83.39690400000001, 37.557378 ], "pop": 6384, "state": "KY" }, { "_id": "41340", "city": "LAMBRIC", "loc": [ -83.100888, 37.579455 ], "pop": 14, "state": "KY" }, { "_id": "41342", "city": "LEE CITY", "loc": [ -83.325474, 37.731163 ], "pop": 233, "state": "KY" }, { "_id": "41343", "city": "LEECO", "loc": [ -83.692806, 37.698933 ], "pop": 66, "state": "KY" }, { "_id": "41346", "city": "LITTLE", "loc": [ -83.382373, 37.432158 ], "pop": 247, "state": "KY" }, { "_id": "41348", "city": "HARDSHELL", "loc": [ -83.328889, 37.484106 ], "pop": 375, "state": "KY" }, { "_id": "41351", "city": "MISTLETOE", "loc": [ -83.588078, 37.331428 ], "pop": 72, "state": "KY" }, { "_id": "41357", "city": "NOCTOR", "loc": [ -83.270831, 37.569915 ], "pop": 771, "state": "KY" }, { "_id": "41358", "city": "OLD LANDING", "loc": [ -83.805784, 37.639678 ], "pop": 253, "state": "KY" }, { "_id": "41360", "city": "PINE RIDGE", "loc": [ -83.632059, 37.774872 ], "pop": 334, "state": "KY" }, { "_id": "41363", "city": "QUICKSAND", "loc": [ -83.365098, 37.532947 ], "pop": 727, "state": "KY" }, { "_id": "41364", "city": "RICETOWN", "loc": [ -83.61506199999999, 37.409305 ], "pop": 672, "state": "KY" }, { "_id": "41365", "city": "ROGERS", "loc": [ -83.65667000000001, 37.739538 ], "pop": 288, "state": "KY" }, { "_id": "41366", "city": "ROUSSEAU", "loc": [ -83.21472, 37.63491 ], "pop": 104, "state": "KY" }, { "_id": "41367", "city": "ROWDY", "loc": [ -83.20403, 37.413063 ], "pop": 245, "state": "KY" }, { "_id": "41369", "city": "SALDEE", "loc": [ -83.373268, 37.455799 ], "pop": 118, "state": "KY" }, { "_id": "41377", "city": "TALBERT", "loc": [ -83.448185, 37.399505 ], "pop": 352, "state": "KY" }, { "_id": "41385", "city": "VANCLEVE", "loc": [ -83.38055300000001, 37.64768 ], "pop": 1335, "state": "KY" }, { "_id": "41386", "city": "VINCENT", "loc": [ -83.784628, 37.443733 ], "pop": 586, "state": "KY" }, { "_id": "41390", "city": "WHICK", "loc": [ -83.374707, 37.41022 ], "pop": 235, "state": "KY" }, { "_id": "41396", "city": "ZACHARIAH", "loc": [ -83.677244, 37.674917 ], "pop": 36, "state": "KY" }, { "_id": "41397", "city": "ZOE", "loc": [ -83.668778, 37.666371 ], "pop": 190, "state": "KY" }, { "_id": "41407", "city": "CANEY", "loc": [ -83.291662, 37.809847 ], "pop": 1754, "state": "KY" }, { "_id": "41409", "city": "CARVER", "loc": [ -83.06900899999999, 37.650274 ], "pop": 368, "state": "KY" }, { "_id": "41412", "city": "COTTLE", "loc": [ -83.220078, 37.892975 ], "pop": 73, "state": "KY" }, { "_id": "41419", "city": "EDNA", "loc": [ -83.179973, 37.799813 ], "pop": 312, "state": "KY" }, { "_id": "41421", "city": "ELKFORK", "loc": [ -83.077112, 37.940358 ], "pop": 2081, "state": "KY" }, { "_id": "41422", "city": "ELSIE", "loc": [ -83.142321, 37.768875 ], "pop": 84, "state": "KY" }, { "_id": "41425", "city": "EZEL", "loc": [ -83.388835, 37.903985 ], "pop": 1488, "state": "KY" }, { "_id": "41441", "city": "HENDRICKS", "loc": [ -83.098108, 37.70505 ], "pop": 377, "state": "KY" }, { "_id": "41447", "city": "LENOX", "loc": [ -83.18159300000001, 37.967224 ], "pop": 550, "state": "KY" }, { "_id": "41464", "city": "ROYALTON", "loc": [ -82.98666900000001, 37.652116 ], "pop": 1550, "state": "KY" }, { "_id": "41465", "city": "BETHANNA", "loc": [ -83.055443, 37.763499 ], "pop": 8442, "state": "KY" }, { "_id": "41466", "city": "SEITZ", "loc": [ -83.174941, 37.668402 ], "pop": 395, "state": "KY" }, { "_id": "41472", "city": "BLAIRS MILL", "loc": [ -83.279926, 37.949746 ], "pop": 4700, "state": "KY" }, { "_id": "41474", "city": "WHITE OAK", "loc": [ -83.204869, 37.849769 ], "pop": 361, "state": "KY" }, { "_id": "41501", "city": "BROAD BOTTOM", "loc": [ -82.52017499999999, 37.506833 ], "pop": 17362, "state": "KY" }, { "_id": "41503", "city": "SOUTH WILLIAMSON", "loc": [ -82.288608, 37.666991 ], "pop": 899, "state": "KY" }, { "_id": "41512", "city": "ASHCAMP", "loc": [ -82.461269, 37.258909 ], "pop": 2274, "state": "KY" }, { "_id": "41513", "city": "BELCHER", "loc": [ -82.396536, 37.3137 ], "pop": 111, "state": "KY" }, { "_id": "41514", "city": "BELFRY", "loc": [ -82.257301, 37.64011 ], "pop": 1744, "state": "KY" }, { "_id": "41519", "city": "CANADA", "loc": [ -82.35330999999999, 37.637816 ], "pop": 817, "state": "KY" }, { "_id": "41522", "city": "SENTERVILLE", "loc": [ -82.353337, 37.302649 ], "pop": 1988, "state": "KY" }, { "_id": "41524", "city": "BIGGS", "loc": [ -82.25746599999999, 37.361002 ], "pop": 724, "state": "KY" }, { "_id": "41527", "city": "FOREST HILLS", "loc": [ -82.299145, 37.643238 ], "pop": 363, "state": "KY" }, { "_id": "41528", "city": "FREEBURN", "loc": [ -82.143378, 37.551188 ], "pop": 1749, "state": "KY" }, { "_id": "41529", "city": "AFLEX", "loc": [ -82.30796100000001, 37.689943 ], "pop": 802, "state": "KY" }, { "_id": "41531", "city": "HARDY", "loc": [ -82.255236, 37.602652 ], "pop": 1693, "state": "KY" }, { "_id": "41535", "city": "HUDDY", "loc": [ -82.25004, 37.566819 ], "pop": 513, "state": "KY" }, { "_id": "41536", "city": "JAMBOREE", "loc": [ -82.089129, 37.485976 ], "pop": 848, "state": "KY" }, { "_id": "41537", "city": "PAYNE GAP", "loc": [ -82.630045, 37.186328 ], "pop": 3615, "state": "KY" }, { "_id": "41539", "city": "KIMPER", "loc": [ -82.31804099999999, 37.469588 ], "pop": 2317, "state": "KY" }, { "_id": "41540", "city": "LICK CREEK", "loc": [ -82.325456, 37.347969 ], "pop": 221, "state": "KY" }, { "_id": "41543", "city": "MC ANDREWS", "loc": [ -82.25579999999999, 37.544986 ], "pop": 830, "state": "KY" }, { "_id": "41544", "city": "MC CARR", "loc": [ -82.167365, 37.596944 ], "pop": 1054, "state": "KY" }, { "_id": "41545", "city": "MC COMBS", "loc": [ -82.54822799999999, 37.593432 ], "pop": 173, "state": "KY" }, { "_id": "41546", "city": "MC VEIGH", "loc": [ -82.22280000000001, 37.534249 ], "pop": 603, "state": "KY" }, { "_id": "41548", "city": "MOUTHCARD", "loc": [ -82.305424, 37.333908 ], "pop": 156, "state": "KY" }, { "_id": "41551", "city": "PAW PAW", "loc": [ -82.134942, 37.435562 ], "pop": 228, "state": "KY" }, { "_id": "41553", "city": "PHELPS", "loc": [ -82.158378, 37.498736 ], "pop": 2947, "state": "KY" }, { "_id": "41554", "city": "PHYLLIS", "loc": [ -82.266786, 37.422152 ], "pop": 891, "state": "KY" }, { "_id": "41555", "city": "PINSONFORK", "loc": [ -82.19536600000001, 37.565137 ], "pop": 568, "state": "KY" }, { "_id": "41557", "city": "FISHTRAP", "loc": [ -82.426256, 37.524072 ], "pop": 3807, "state": "KY" }, { "_id": "41559", "city": "REGINA", "loc": [ -82.37369700000001, 37.359686 ], "pop": 1559, "state": "KY" }, { "_id": "41560", "city": "ROBINSON CREEK", "loc": [ -82.567679, 37.334708 ], "pop": 6715, "state": "KY" }, { "_id": "41562", "city": "SHELBIANA", "loc": [ -82.455321, 37.375478 ], "pop": 9187, "state": "KY" }, { "_id": "41563", "city": "SHELBY GAP", "loc": [ -82.575149, 37.232743 ], "pop": 952, "state": "KY" }, { "_id": "41564", "city": "SIDNEY", "loc": [ -82.338666, 37.580225 ], "pop": 1727, "state": "KY" }, { "_id": "41565", "city": "SPEIGHT", "loc": [ -82.71650200000001, 37.262473 ], "pop": 17, "state": "KY" }, { "_id": "41566", "city": "STEELE", "loc": [ -82.20707899999999, 37.40292 ], "pop": 1321, "state": "KY" }, { "_id": "41567", "city": "STONE", "loc": [ -82.28898700000001, 37.560639 ], "pop": 1239, "state": "KY" }, { "_id": "41568", "city": "ARGO", "loc": [ -82.073522, 37.530336 ], "pop": 471, "state": "KY" }, { "_id": "41570", "city": "TURKEY CREEK", "loc": [ -82.32022499999999, 37.659347 ], "pop": 264, "state": "KY" }, { "_id": "41571", "city": "VARNEY", "loc": [ -82.350976, 37.698541 ], "pop": 827, "state": "KY" }, { "_id": "41572", "city": "ETTY", "loc": [ -82.649445, 37.313669 ], "pop": 2622, "state": "KY" }, { "_id": "41601", "city": "ALLEN", "loc": [ -82.63627200000001, 37.566182 ], "pop": 1768, "state": "KY" }, { "_id": "41602", "city": "AUXIER", "loc": [ -82.767736, 37.721847 ], "pop": 2461, "state": "KY" }, { "_id": "41603", "city": "BANNER", "loc": [ -82.69736899999999, 37.577051 ], "pop": 1043, "state": "KY" }, { "_id": "41604", "city": "LIGON", "loc": [ -82.680295, 37.372179 ], "pop": 956, "state": "KY" }, { "_id": "41605", "city": "BETSY LAYNE", "loc": [ -82.700249, 37.531593 ], "pop": 353, "state": "KY" }, { "_id": "41606", "city": "BEVINSVILLE", "loc": [ -82.712468, 37.338488 ], "pop": 3200, "state": "KY" }, { "_id": "41607", "city": "BLUE RIVER", "loc": [ -82.827361, 37.648097 ], "pop": 247, "state": "KY" }, { "_id": "41614", "city": "CRAYNOR", "loc": [ -82.69176, 37.408673 ], "pop": 260, "state": "KY" }, { "_id": "41615", "city": "DANA", "loc": [ -82.670501, 37.546653 ], "pop": 227, "state": "KY" }, { "_id": "41616", "city": "DAVID", "loc": [ -82.892748, 37.604387 ], "pop": 60, "state": "KY" }, { "_id": "41622", "city": "EASTERN", "loc": [ -82.82649600000001, 37.532386 ], "pop": 509, "state": "KY" }, { "_id": "41626", "city": "ENDICOTT", "loc": [ -82.627608, 37.681936 ], "pop": 42, "state": "KY" }, { "_id": "41627", "city": "ESTILL", "loc": [ -82.81962900000001, 37.46201 ], "pop": 263, "state": "KY" }, { "_id": "41629", "city": "GALVESTON", "loc": [ -82.661868, 37.478249 ], "pop": 1030, "state": "KY" }, { "_id": "41630", "city": "GARRETT", "loc": [ -82.846192, 37.486126 ], "pop": 1408, "state": "KY" }, { "_id": "41631", "city": "GRETHEL", "loc": [ -82.739575, 37.459599 ], "pop": 2126, "state": "KY" }, { "_id": "41632", "city": "WALDO", "loc": [ -82.93574, 37.546661 ], "pop": 699, "state": "KY" }, { "_id": "41633", "city": "HALO", "loc": [ -82.73060599999999, 37.307629 ], "pop": 119, "state": "KY" }, { "_id": "41635", "city": "HAROLD", "loc": [ -82.621595, 37.504184 ], "pop": 1286, "state": "KY" }, { "_id": "41636", "city": "BUCKINGHAM", "loc": [ -82.73245, 37.393499 ], "pop": 879, "state": "KY" }, { "_id": "41637", "city": "PYRMID", "loc": [ -82.864919, 37.513484 ], "pop": 568, "state": "KY" }, { "_id": "41639", "city": "HONAKER", "loc": [ -82.667534, 37.514977 ], "pop": 772, "state": "KY" }, { "_id": "41640", "city": "ELMROCK", "loc": [ -82.836764, 37.506204 ], "pop": 115, "state": "KY" }, { "_id": "41642", "city": "IVEL", "loc": [ -82.64268, 37.555443 ], "pop": 1038, "state": "KY" }, { "_id": "41643", "city": "LACKEY", "loc": [ -82.798012, 37.464283 ], "pop": 591, "state": "KY" }, { "_id": "41645", "city": "LANGLEY", "loc": [ -82.797648, 37.538079 ], "pop": 648, "state": "KY" }, { "_id": "41647", "city": "EAST MC DOWELL", "loc": [ -82.745018, 37.425232 ], "pop": 376, "state": "KY" }, { "_id": "41649", "city": "HITE", "loc": [ -82.74785199999999, 37.563267 ], "pop": 4649, "state": "KY" }, { "_id": "41653", "city": "EMMA", "loc": [ -82.788135, 37.649462 ], "pop": 9573, "state": "KY" }, { "_id": "41655", "city": "PRINTER", "loc": [ -82.70602700000001, 37.505485 ], "pop": 243, "state": "KY" }, { "_id": "41659", "city": "STANVILLE", "loc": [ -82.669174, 37.578386 ], "pop": 309, "state": "KY" }, { "_id": "41660", "city": "TEABERRY", "loc": [ -82.640456, 37.421955 ], "pop": 2248, "state": "KY" }, { "_id": "41666", "city": "WAYLAND", "loc": [ -82.80103699999999, 37.436709 ], "pop": 928, "state": "KY" }, { "_id": "41701", "city": "DARFORK", "loc": [ -83.199845, 37.252641 ], "pop": 11851, "state": "KY" }, { "_id": "41712", "city": "ARY", "loc": [ -83.139253, 37.354364 ], "pop": 331, "state": "KY" }, { "_id": "41714", "city": "BEAR BRANCH", "loc": [ -83.494449, 37.210894 ], "pop": 400, "state": "KY" }, { "_id": "41719", "city": "BLUE DIAMOND", "loc": [ -83.228579, 37.310812 ], "pop": 861, "state": "KY" }, { "_id": "41721", "city": "BUCKHORN", "loc": [ -83.49364799999999, 37.301036 ], "pop": 640, "state": "KY" }, { "_id": "41722", "city": "TRIBBEY", "loc": [ -83.15848699999999, 37.328174 ], "pop": 2312, "state": "KY" }, { "_id": "41723", "city": "BUSY", "loc": [ -83.30070499999999, 37.26316 ], "pop": 967, "state": "KY" }, { "_id": "41725", "city": "CARRIE", "loc": [ -83.041549, 37.297995 ], "pop": 457, "state": "KY" }, { "_id": "41727", "city": "CHAVIES", "loc": [ -83.33146600000001, 37.355545 ], "pop": 564, "state": "KY" }, { "_id": "41728", "city": "CINDA", "loc": [ -83.302886, 37.09667 ], "pop": 584, "state": "KY" }, { "_id": "41729", "city": "COMBS", "loc": [ -83.20229399999999, 37.291321 ], "pop": 1001, "state": "KY" }, { "_id": "41730", "city": "CONFLUENCE", "loc": [ -83.37110199999999, 37.271904 ], "pop": 184, "state": "KY" }, { "_id": "41731", "city": "ULVAH", "loc": [ -83.035127, 37.120385 ], "pop": 1289, "state": "KY" }, { "_id": "41732", "city": "CUTSHIN", "loc": [ -83.247304, 37.108109 ], "pop": 1591, "state": "KY" }, { "_id": "41733", "city": "DAISY", "loc": [ -83.095095, 37.115936 ], "pop": 77, "state": "KY" }, { "_id": "41735", "city": "DELPHIA", "loc": [ -83.095574, 37.023317 ], "pop": 349, "state": "KY" }, { "_id": "41736", "city": "DICE", "loc": [ -83.20533500000001, 37.382539 ], "pop": 1251, "state": "KY" }, { "_id": "41740", "city": "BEARVILLE", "loc": [ -83.068449, 37.322096 ], "pop": 1961, "state": "KY" }, { "_id": "41743", "city": "FISTY", "loc": [ -83.108251, 37.356348 ], "pop": 172, "state": "KY" }, { "_id": "41745", "city": "GAYS CREEK", "loc": [ -83.455607, 37.350421 ], "pop": 369, "state": "KY" }, { "_id": "41746", "city": "HAPPY", "loc": [ -83.081408, 37.195047 ], "pop": 784, "state": "KY" }, { "_id": "41749", "city": "DRYHILL", "loc": [ -83.415668, 37.154604 ], "pop": 5507, "state": "KY" }, { "_id": "41754", "city": "NAPFOR", "loc": [ -83.305913, 37.318325 ], "pop": 2357, "state": "KY" }, { "_id": "41756", "city": "LEATHERWOOD", "loc": [ -83.15125399999999, 37.040503 ], "pop": 241, "state": "KY" }, { "_id": "41759", "city": "ANCO", "loc": [ -83.03212499999999, 37.233926 ], "pop": 1442, "state": "KY" }, { "_id": "41760", "city": "SCUDDY", "loc": [ -83.093242, 37.212182 ], "pop": 296, "state": "KY" }, { "_id": "41763", "city": "SLEMP", "loc": [ -83.11694, 37.08037 ], "pop": 1012, "state": "KY" }, { "_id": "41764", "city": "SMILAX", "loc": [ -83.284533, 37.166314 ], "pop": 634, "state": "KY" }, { "_id": "41765", "city": "TALCUM", "loc": [ -83.047864, 37.383621 ], "pop": 375, "state": "KY" }, { "_id": "41772", "city": "VEST", "loc": [ -83.06265, 37.408732 ], "pop": 312, "state": "KY" }, { "_id": "41773", "city": "VICCO", "loc": [ -83.09979199999999, 37.189826 ], "pop": 3072, "state": "KY" }, { "_id": "41774", "city": "FARLER", "loc": [ -83.158299, 37.150655 ], "pop": 1364, "state": "KY" }, { "_id": "41775", "city": "WENDOVER", "loc": [ -83.350185, 37.129115 ], "pop": 314, "state": "KY" }, { "_id": "41776", "city": "FREW", "loc": [ -83.292655, 37.192435 ], "pop": 474, "state": "KY" }, { "_id": "41777", "city": "BIG ROCK", "loc": [ -83.227006, 37.043019 ], "pop": 405, "state": "KY" }, { "_id": "41801", "city": "AMBURGEY", "loc": [ -83.000483, 37.26716 ], "pop": 329, "state": "KY" }, { "_id": "41804", "city": "CARCASSONNE", "loc": [ -82.940189, 37.134266 ], "pop": 552, "state": "KY" }, { "_id": "41805", "city": "BRINKLEY", "loc": [ -82.91397600000001, 37.262613 ], "pop": 1204, "state": "KY" }, { "_id": "41811", "city": "CROWN", "loc": [ -82.847442, 37.159125 ], "pop": 295, "state": "KY" }, { "_id": "41812", "city": "DEANE", "loc": [ -82.799722, 37.23332 ], "pop": 1400, "state": "KY" }, { "_id": "41815", "city": "ERMINE", "loc": [ -82.822118, 37.174612 ], "pop": 3231, "state": "KY" }, { "_id": "41817", "city": "LARKSLANE", "loc": [ -82.89384699999999, 37.377663 ], "pop": 1287, "state": "KY" }, { "_id": "41819", "city": "GILLY", "loc": [ -83.069317, 36.990109 ], "pop": 555, "state": "KY" }, { "_id": "41821", "city": "SKYLINE", "loc": [ -83.020354, 37.069879 ], "pop": 426, "state": "KY" }, { "_id": "41822", "city": "HINDMAN", "loc": [ -82.952653, 37.327607 ], "pop": 2965, "state": "KY" }, { "_id": "41823", "city": "HOLLYBUSH", "loc": [ -82.831509, 37.337608 ], "pop": 380, "state": "KY" }, { "_id": "41824", "city": "ISOM", "loc": [ -82.913348, 37.196027 ], "pop": 714, "state": "KY" }, { "_id": "41825", "city": "JACKHORN", "loc": [ -82.691856, 37.171685 ], "pop": 1380, "state": "KY" }, { "_id": "41826", "city": "JEREMIAH", "loc": [ -82.92683599999999, 37.165127 ], "pop": 623, "state": "KY" }, { "_id": "41828", "city": "PUNCHEON", "loc": [ -82.78472499999999, 37.270944 ], "pop": 293, "state": "KY" }, { "_id": "41829", "city": "KONA", "loc": [ -82.752469, 37.166814 ], "pop": 607, "state": "KY" }, { "_id": "41831", "city": "SOFT SHELL", "loc": [ -82.956428, 37.383737 ], "pop": 765, "state": "KY" }, { "_id": "41832", "city": "LETCHER", "loc": [ -82.980908, 37.155 ], "pop": 571, "state": "KY" }, { "_id": "41833", "city": "LINEFORK", "loc": [ -82.919765, 37.051399 ], "pop": 860, "state": "KY" }, { "_id": "41834", "city": "LITTCARR", "loc": [ -82.965098, 37.271457 ], "pop": 468, "state": "KY" }, { "_id": "41836", "city": "MALLIE", "loc": [ -82.871364, 37.334623 ], "pop": 792, "state": "KY" }, { "_id": "41838", "city": "MILLSTONE", "loc": [ -82.7533, 37.151615 ], "pop": 247, "state": "KY" }, { "_id": "41839", "city": "MOUSIE", "loc": [ -82.901768, 37.433125 ], "pop": 795, "state": "KY" }, { "_id": "41840", "city": "FLEMING NEON", "loc": [ -82.69755499999999, 37.212056 ], "pop": 2563, "state": "KY" }, { "_id": "41843", "city": "OMAHA", "loc": [ -82.830417, 37.311528 ], "pop": 336, "state": "KY" }, { "_id": "41844", "city": "RAVEN", "loc": [ -82.82916400000001, 37.363252 ], "pop": 197, "state": "KY" }, { "_id": "41845", "city": "PREMIUM", "loc": [ -82.95811500000001, 37.068587 ], "pop": 311, "state": "KY" }, { "_id": "41847", "city": "REDFOX", "loc": [ -82.871865, 37.25311 ], "pop": 974, "state": "KY" }, { "_id": "41848", "city": "ROXANA", "loc": [ -83.034488, 37.090502 ], "pop": 117, "state": "KY" }, { "_id": "41849", "city": "SECO", "loc": [ -82.735832, 37.176523 ], "pop": 791, "state": "KY" }, { "_id": "41855", "city": "THORNTON", "loc": [ -82.73820000000001, 37.129622 ], "pop": 635, "state": "KY" }, { "_id": "41858", "city": "DAY RURAL", "loc": [ -82.838768, 37.115463 ], "pop": 4678, "state": "KY" }, { "_id": "41859", "city": "DEMA", "loc": [ -82.852313, 37.421491 ], "pop": 468, "state": "KY" }, { "_id": "41861", "city": "RAVEN", "loc": [ -82.826064, 37.404328 ], "pop": 128, "state": "KY" }, { "_id": "41862", "city": "DRY CREEK", "loc": [ -82.781036, 37.346979 ], "pop": 1605, "state": "KY" }, { "_id": "42001", "city": "PADUCAH", "loc": [ -88.66320399999999, 37.063377 ], "pop": 27002, "state": "KY" }, { "_id": "42003", "city": "PADUCAH", "loc": [ -88.593388, 37.036833 ], "pop": 29932, "state": "KY" }, { "_id": "42020", "city": "ALMO", "loc": [ -88.308666, 36.712805 ], "pop": 1509, "state": "KY" }, { "_id": "42021", "city": "ARLINGTON", "loc": [ -88.94383500000001, 36.800117 ], "pop": 1780, "state": "KY" }, { "_id": "42023", "city": "BARDWELL", "loc": [ -89.020855, 36.863387 ], "pop": 1957, "state": "KY" }, { "_id": "42024", "city": "BARLOW", "loc": [ -89.04081499999999, 37.049279 ], "pop": 1335, "state": "KY" }, { "_id": "42025", "city": "BENTON", "loc": [ -88.35477299999999, 36.880649 ], "pop": 15886, "state": "KY" }, { "_id": "42027", "city": "BOAZ", "loc": [ -88.622288, 36.929974 ], "pop": 1609, "state": "KY" }, { "_id": "42028", "city": "BURNA", "loc": [ -88.39418499999999, 37.231514 ], "pop": 453, "state": "KY" }, { "_id": "42029", "city": "CALVERT CITY", "loc": [ -88.38111499999999, 37.014741 ], "pop": 4479, "state": "KY" }, { "_id": "42031", "city": "CLINTON", "loc": [ -88.967574, 36.667531 ], "pop": 4143, "state": "KY" }, { "_id": "42032", "city": "COLUMBUS", "loc": [ -89.098288, 36.755505 ], "pop": 454, "state": "KY" }, { "_id": "42035", "city": "CUNNINGHAM", "loc": [ -88.872815, 36.896256 ], "pop": 1501, "state": "KY" }, { "_id": "42036", "city": "DEXTER", "loc": [ -88.180695, 36.70313 ], "pop": 1800, "state": "KY" }, { "_id": "42038", "city": "EDDYVILLE", "loc": [ -88.04939, 37.066385 ], "pop": 4402, "state": "KY" }, { "_id": "42039", "city": "FANCY FARM", "loc": [ -88.791785, 36.77674 ], "pop": 1423, "state": "KY" }, { "_id": "42040", "city": "FARMINGTON", "loc": [ -88.547832, 36.686903 ], "pop": 2821, "state": "KY" }, { "_id": "42041", "city": "CRUTCHFIELD", "loc": [ -88.889224, 36.528678 ], "pop": 5955, "state": "KY" }, { "_id": "42044", "city": "GILBERTSVILLE", "loc": [ -88.274856, 36.962465 ], "pop": 3285, "state": "KY" }, { "_id": "42045", "city": "IUKA", "loc": [ -88.261382, 37.05781 ], "pop": 2210, "state": "KY" }, { "_id": "42047", "city": "HAMPTON", "loc": [ -88.364897, 37.334764 ], "pop": 922, "state": "KY" }, { "_id": "42048", "city": "HARDIN", "loc": [ -88.262153, 36.776233 ], "pop": 3246, "state": "KY" }, { "_id": "42049", "city": "HAZEL", "loc": [ -88.331862, 36.542215 ], "pop": 3235, "state": "KY" }, { "_id": "42050", "city": "HICKMAN", "loc": [ -89.194667, 36.559269 ], "pop": 3676, "state": "KY" }, { "_id": "42051", "city": "HICKORY", "loc": [ -88.678782, 36.847783 ], "pop": 3140, "state": "KY" }, { "_id": "42053", "city": "KEVIL", "loc": [ -88.876366, 37.087231 ], "pop": 5019, "state": "KY" }, { "_id": "42054", "city": "KIRKSEY", "loc": [ -88.423815, 36.673092 ], "pop": 3190, "state": "KY" }, { "_id": "42055", "city": "KUTTAWA", "loc": [ -88.14981299999999, 37.061871 ], "pop": 2222, "state": "KY" }, { "_id": "42056", "city": "LA CENTER", "loc": [ -88.972954, 37.083019 ], "pop": 1563, "state": "KY" }, { "_id": "42058", "city": "LEDBETTER", "loc": [ -88.486503, 37.049167 ], "pop": 2278, "state": "KY" }, { "_id": "42064", "city": "MARION", "loc": [ -88.100471, 37.325426 ], "pop": 8733, "state": "KY" }, { "_id": "42066", "city": "MAYFIELD", "loc": [ -88.650637, 36.732686 ], "pop": 16321, "state": "KY" }, { "_id": "42069", "city": "MELBER", "loc": [ -88.752037, 36.919658 ], "pop": 1187, "state": "KY" }, { "_id": "42071", "city": "MURRAY", "loc": [ -88.30324899999999, 36.609915 ], "pop": 20388, "state": "KY" }, { "_id": "42076", "city": "NEW CONCORD", "loc": [ -88.09547999999999, 36.550003 ], "pop": 922, "state": "KY" }, { "_id": "42078", "city": "SALEM", "loc": [ -88.27113900000001, 37.255346 ], "pop": 1801, "state": "KY" }, { "_id": "42079", "city": "SEDALIA", "loc": [ -88.594813, 36.588208 ], "pop": 1983, "state": "KY" }, { "_id": "42081", "city": "CARRSVILLE", "loc": [ -88.383593, 37.12269 ], "pop": 1200, "state": "KY" }, { "_id": "42082", "city": "SYMSONIA", "loc": [ -88.528576, 36.871544 ], "pop": 2725, "state": "KY" }, { "_id": "42083", "city": "TILINE", "loc": [ -88.254679, 37.162773 ], "pop": 198, "state": "KY" }, { "_id": "42085", "city": "WATER VALLEY", "loc": [ -88.80837099999999, 36.569358 ], "pop": 409, "state": "KY" }, { "_id": "42086", "city": "WEST PADUCAH", "loc": [ -88.76107500000001, 37.092239 ], "pop": 2223, "state": "KY" }, { "_id": "42087", "city": "WICKLIFFE", "loc": [ -89.01769299999999, 36.967969 ], "pop": 2605, "state": "KY" }, { "_id": "42088", "city": "WINGO", "loc": [ -88.73944899999999, 36.625282 ], "pop": 2643, "state": "KY" }, { "_id": "42101", "city": "PLUM SPRINGS", "loc": [ -86.45589099999999, 37.007874 ], "pop": 40671, "state": "KY" }, { "_id": "42103", "city": "BOWLING GREEN", "loc": [ -86.393321, 36.96629 ], "pop": 11391, "state": "KY" }, { "_id": "42104", "city": "BOWLING GREEN", "loc": [ -86.448077, 36.937537 ], "pop": 14948, "state": "KY" }, { "_id": "42120", "city": "ADOLPHUS", "loc": [ -86.26359600000001, 36.677486 ], "pop": 1976, "state": "KY" }, { "_id": "42122", "city": "ALVATON", "loc": [ -86.363213, 36.86296 ], "pop": 2934, "state": "KY" }, { "_id": "42123", "city": "AUSTIN", "loc": [ -85.98502999999999, 36.812376 ], "pop": 425, "state": "KY" }, { "_id": "42124", "city": "BEAUMONT", "loc": [ -85.64882900000001, 36.88758 ], "pop": 206, "state": "KY" }, { "_id": "42127", "city": "CAVE CITY", "loc": [ -85.944283, 37.11696 ], "pop": 6283, "state": "KY" }, { "_id": "42129", "city": "SUBTLE", "loc": [ -85.592741, 36.985197 ], "pop": 4020, "state": "KY" }, { "_id": "42130", "city": "EIGHTY EIGHT", "loc": [ -85.828076, 36.939238 ], "pop": 2716, "state": "KY" }, { "_id": "42131", "city": "ETOILE", "loc": [ -85.91727899999999, 36.813428 ], "pop": 138, "state": "KY" }, { "_id": "42133", "city": "FOUNTAIN RUN", "loc": [ -85.952023, 36.72002 ], "pop": 1568, "state": "KY" }, { "_id": "42134", "city": "FRANKLIN", "loc": [ -86.570043, 36.725353 ], "pop": 14684, "state": "KY" }, { "_id": "42140", "city": "GAMALIEL", "loc": [ -85.81335300000001, 36.654037 ], "pop": 1377, "state": "KY" }, { "_id": "42141", "city": "GLASGOW", "loc": [ -85.92205300000001, 36.988189 ], "pop": 21079, "state": "KY" }, { "_id": "42151", "city": "HESTAND", "loc": [ -85.569799, 36.653473 ], "pop": 386, "state": "KY" }, { "_id": "42153", "city": "HOLLAND", "loc": [ -86.049756, 36.667316 ], "pop": 330, "state": "KY" }, { "_id": "42154", "city": "KNOB LICK", "loc": [ -85.71369799999999, 36.996922 ], "pop": 656, "state": "KY" }, { "_id": "42155", "city": "LAMB", "loc": [ -85.885413, 36.799768 ], "pop": 189, "state": "KY" }, { "_id": "42156", "city": "LUCAS", "loc": [ -86.035678, 36.837594 ], "pop": 415, "state": "KY" }, { "_id": "42157", "city": "MOUNT HERMAN", "loc": [ -85.81916200000001, 36.808982 ], "pop": 816, "state": "KY" }, { "_id": "42159", "city": "OAKLAND", "loc": [ -86.285934, 37.007595 ], "pop": 2879, "state": "KY" }, { "_id": "42160", "city": "PARK CITY", "loc": [ -86.077619, 37.057926 ], "pop": 1351, "state": "KY" }, { "_id": "42163", "city": "ROCKY HILL", "loc": [ -86.11009, 37.067481 ], "pop": 139, "state": "KY" }, { "_id": "42164", "city": "SCOTTSVILLE", "loc": [ -86.192863, 36.761437 ], "pop": 11611, "state": "KY" }, { "_id": "42166", "city": "SUMMER SHADE", "loc": [ -85.708322, 36.888345 ], "pop": 2281, "state": "KY" }, { "_id": "42167", "city": "T VILLE", "loc": [ -85.696842, 36.713085 ], "pop": 8016, "state": "KY" }, { "_id": "42169", "city": "WILLOW SHADE", "loc": [ -85.62203, 36.858183 ], "pop": 126, "state": "KY" }, { "_id": "42170", "city": "WOODBURN", "loc": [ -86.562291, 36.855688 ], "pop": 1573, "state": "KY" }, { "_id": "42171", "city": "SMITHS GROVE", "loc": [ -86.19375700000001, 37.058104 ], "pop": 4650, "state": "KY" }, { "_id": "42202", "city": "ADAIRVILLE", "loc": [ -86.85852300000001, 36.691385 ], "pop": 2481, "state": "KY" }, { "_id": "42204", "city": "ALLENSVILLE", "loc": [ -87.02444199999999, 36.694744 ], "pop": 842, "state": "KY" }, { "_id": "42206", "city": "AUBURN", "loc": [ -86.719813, 36.881755 ], "pop": 4192, "state": "KY" }, { "_id": "42207", "city": "BEE SPRING", "loc": [ -86.279377, 37.29754 ], "pop": 1480, "state": "KY" }, { "_id": "42210", "city": "REEDYVILLE", "loc": [ -86.27400299999999, 37.18817 ], "pop": 2296, "state": "KY" }, { "_id": "42211", "city": "GOLDEN POND", "loc": [ -87.84124300000001, 36.846421 ], "pop": 9683, "state": "KY" }, { "_id": "42214", "city": "CENTER", "loc": [ -85.670455, 37.100897 ], "pop": 2051, "state": "KY" }, { "_id": "42215", "city": "CERULEAN", "loc": [ -87.66484800000001, 36.949619 ], "pop": 1654, "state": "KY" }, { "_id": "42217", "city": "CROFTON", "loc": [ -87.48907199999999, 37.034387 ], "pop": 3531, "state": "KY" }, { "_id": "42220", "city": "ELKTON", "loc": [ -87.167833, 36.909403 ], "pop": 7207, "state": "KY" }, { "_id": "42223", "city": "FORT CAMPBELL", "loc": [ -87.459706, 36.653584 ], "pop": 18861, "state": "KY" }, { "_id": "42232", "city": "GRACEY", "loc": [ -87.6545, 36.856393 ], "pop": 92, "state": "KY" }, { "_id": "42234", "city": "TINY TOWN", "loc": [ -87.170931, 36.664268 ], "pop": 2307, "state": "KY" }, { "_id": "42236", "city": "HERNDON", "loc": [ -87.608215, 36.708469 ], "pop": 810, "state": "KY" }, { "_id": "42240", "city": "HOPKINSVILLE", "loc": [ -87.485148, 36.862053 ], "pop": 39331, "state": "KY" }, { "_id": "42250", "city": "HUFF", "loc": [ -86.38211200000001, 37.234241 ], "pop": 92, "state": "KY" }, { "_id": "42252", "city": "JETSON", "loc": [ -86.520872, 37.240367 ], "pop": 1375, "state": "KY" }, { "_id": "42254", "city": "LA FAYETTE", "loc": [ -87.65634, 36.658165 ], "pop": 123, "state": "KY" }, { "_id": "42256", "city": "LEWISBURG", "loc": [ -86.988748, 37.003747 ], "pop": 3241, "state": "KY" }, { "_id": "42257", "city": "LINDSEYVILLE", "loc": [ -86.296384, 37.22813 ], "pop": 601, "state": "KY" }, { "_id": "42259", "city": "MAMMOTH CAVE NAT", "loc": [ -86.178112, 37.274385 ], "pop": 1354, "state": "KY" }, { "_id": "42261", "city": "LOGANSPORT", "loc": [ -86.703726, 37.19102 ], "pop": 5488, "state": "KY" }, { "_id": "42262", "city": "OAK GROVE", "loc": [ -87.42551400000001, 36.665225 ], "pop": 3556, "state": "KY" }, { "_id": "42265", "city": "OLMSTEAD", "loc": [ -86.981846, 36.78463 ], "pop": 1529, "state": "KY" }, { "_id": "42266", "city": "PEMBROKE", "loc": [ -87.331892, 36.798221 ], "pop": 1221, "state": "KY" }, { "_id": "42268", "city": "QUALITY", "loc": [ -86.86905299999999, 37.035402 ], "pop": 1436, "state": "KY" }, { "_id": "42273", "city": "ROCHESTER", "loc": [ -86.85921, 37.204778 ], "pop": 669, "state": "KY" }, { "_id": "42274", "city": "BROWNING", "loc": [ -86.58538900000001, 36.939859 ], "pop": 1592, "state": "KY" }, { "_id": "42275", "city": "ROUNDHILL", "loc": [ -86.40697400000001, 37.25601 ], "pop": 405, "state": "KY" }, { "_id": "42276", "city": "DAYSVILLE", "loc": [ -86.88870799999999, 36.853074 ], "pop": 12585, "state": "KY" }, { "_id": "42280", "city": "SHARON GROVE", "loc": [ -87.10029, 36.927754 ], "pop": 651, "state": "KY" }, { "_id": "42284", "city": "SUNFISH", "loc": [ -86.390826, 37.3022 ], "pop": 483, "state": "KY" }, { "_id": "42285", "city": "KYROCK", "loc": [ -86.29568999999999, 37.252343 ], "pop": 416, "state": "KY" }, { "_id": "42286", "city": "TRENTON", "loc": [ -87.261098, 36.731384 ], "pop": 1209, "state": "KY" }, { "_id": "42287", "city": "WELCHS CREEK", "loc": [ -86.637139, 37.30856 ], "pop": 2972, "state": "KY" }, { "_id": "42301", "city": "OWENSBORO", "loc": [ -87.155394, 37.751255 ], "pop": 40043, "state": "KY" }, { "_id": "42303", "city": "OWENSBORO", "loc": [ -87.080252, 37.755884 ], "pop": 32552, "state": "KY" }, { "_id": "42320", "city": "BEAVER DAM", "loc": [ -86.87293200000001, 37.386958 ], "pop": 6508, "state": "KY" }, { "_id": "42321", "city": "BEECH CREEK", "loc": [ -87.12385399999999, 37.183704 ], "pop": 303, "state": "KY" }, { "_id": "42323", "city": "BEECHMONT", "loc": [ -87.03934, 37.177552 ], "pop": 2431, "state": "KY" }, { "_id": "42324", "city": "BELTON", "loc": [ -86.977369, 37.151056 ], "pop": 1137, "state": "KY" }, { "_id": "42325", "city": "BREMEN", "loc": [ -87.232989, 37.342955 ], "pop": 3631, "state": "KY" }, { "_id": "42326", "city": "BROWDER", "loc": [ -86.97819699999999, 37.259333 ], "pop": 0, "state": "KY" }, { "_id": "42327", "city": "CALHOUN", "loc": [ -87.27730699999999, 37.574997 ], "pop": 3734, "state": "KY" }, { "_id": "42328", "city": "CENTERTOWN", "loc": [ -87.00902000000001, 37.407918 ], "pop": 1434, "state": "KY" }, { "_id": "42330", "city": "CENTRAL CITY", "loc": [ -87.12023600000001, 37.300699 ], "pop": 8187, "state": "KY" }, { "_id": "42333", "city": "CROMWELL", "loc": [ -86.769964, 37.341765 ], "pop": 356, "state": "KY" }, { "_id": "42337", "city": "DRAKESBORO", "loc": [ -87.047966, 37.213588 ], "pop": 1552, "state": "KY" }, { "_id": "42338", "city": "DUNDEE", "loc": [ -86.760446, 37.551052 ], "pop": 255, "state": "KY" }, { "_id": "42339", "city": "DUNMOR", "loc": [ -87.00789, 37.083967 ], "pop": 534, "state": "KY" }, { "_id": "42343", "city": "FORDSVILLE", "loc": [ -86.726251, 37.629738 ], "pop": 2108, "state": "KY" }, { "_id": "42344", "city": "GRAHAM", "loc": [ -87.25784899999999, 37.225836 ], "pop": 2837, "state": "KY" }, { "_id": "42345", "city": "GREENVILLE", "loc": [ -87.18061299999999, 37.207642 ], "pop": 8616, "state": "KY" }, { "_id": "42347", "city": "HARTFORD", "loc": [ -86.91798199999999, 37.478533 ], "pop": 4628, "state": "KY" }, { "_id": "42348", "city": "HAWESVILLE", "loc": [ -86.76380399999999, 37.850318 ], "pop": 4194, "state": "KY" }, { "_id": "42349", "city": "HORSE BRANCH", "loc": [ -86.698734, 37.423417 ], "pop": 1880, "state": "KY" }, { "_id": "42350", "city": "ISLAND", "loc": [ -87.16921000000001, 37.447109 ], "pop": 1453, "state": "KY" }, { "_id": "42351", "city": "LEWISPORT", "loc": [ -86.895712, 37.909016 ], "pop": 4102, "state": "KY" }, { "_id": "42352", "city": "LIVERMORE", "loc": [ -87.12386100000001, 37.504453 ], "pop": 2336, "state": "KY" }, { "_id": "42355", "city": "MACEO", "loc": [ -86.999915, 37.843601 ], "pop": 2223, "state": "KY" }, { "_id": "42358", "city": "NARROWS", "loc": [ -86.68671999999999, 37.569072 ], "pop": 124, "state": "KY" }, { "_id": "42361", "city": "OLATON", "loc": [ -86.728223, 37.498666 ], "pop": 1838, "state": "KY" }, { "_id": "42365", "city": "PENROD", "loc": [ -86.998181, 37.116725 ], "pop": 354, "state": "KY" }, { "_id": "42366", "city": "PHILPOT", "loc": [ -86.937172, 37.718317 ], "pop": 6890, "state": "KY" }, { "_id": "42368", "city": "REYNOLDS STATION", "loc": [ -86.77942, 37.696533 ], "pop": 1389, "state": "KY" }, { "_id": "42369", "city": "ROCKPORT", "loc": [ -86.97462400000001, 37.326871 ], "pop": 647, "state": "KY" }, { "_id": "42371", "city": "RUMSEY", "loc": [ -87.280644, 37.50762 ], "pop": 836, "state": "KY" }, { "_id": "42372", "city": "SACRAMENTO", "loc": [ -87.273584, 37.417687 ], "pop": 1265, "state": "KY" }, { "_id": "42376", "city": "UTICA", "loc": [ -87.059082, 37.620559 ], "pop": 4800, "state": "KY" }, { "_id": "42378", "city": "WHITESVILLE", "loc": [ -86.869912, 37.683402 ], "pop": 640, "state": "KY" }, { "_id": "42404", "city": "CLAY", "loc": [ -87.836793, 37.475599 ], "pop": 2708, "state": "KY" }, { "_id": "42406", "city": "CORYDON", "loc": [ -87.700033, 37.744284 ], "pop": 3688, "state": "KY" }, { "_id": "42408", "city": "DAWSON SPRINGS", "loc": [ -87.68205, 37.196386 ], "pop": 6728, "state": "KY" }, { "_id": "42409", "city": "DIXON", "loc": [ -87.701904, 37.510587 ], "pop": 1093, "state": "KY" }, { "_id": "42410", "city": "EARLINGTON", "loc": [ -87.522679, 37.267899 ], "pop": 2445, "state": "KY" }, { "_id": "42411", "city": "FREDONIA", "loc": [ -88.011229, 37.212956 ], "pop": 1557, "state": "KY" }, { "_id": "42413", "city": "HANSON", "loc": [ -87.47513499999999, 37.438246 ], "pop": 2329, "state": "KY" }, { "_id": "42420", "city": "HENDERSON", "loc": [ -87.563228, 37.827393 ], "pop": 34941, "state": "KY" }, { "_id": "42431", "city": "MADISONVILLE", "loc": [ -87.49532600000001, 37.325551 ], "pop": 26866, "state": "KY" }, { "_id": "42436", "city": "MANITOU", "loc": [ -87.56117999999999, 37.407972 ], "pop": 1425, "state": "KY" }, { "_id": "42437", "city": "HENSHAW", "loc": [ -87.87685999999999, 37.663935 ], "pop": 10346, "state": "KY" }, { "_id": "42441", "city": "NEBO", "loc": [ -87.686521, 37.368255 ], "pop": 1639, "state": "KY" }, { "_id": "42442", "city": "NORTONVILLE", "loc": [ -87.460505, 37.183367 ], "pop": 2811, "state": "KY" }, { "_id": "42445", "city": "PRINCETON", "loc": [ -87.863226, 37.115097 ], "pop": 11736, "state": "KY" }, { "_id": "42450", "city": "PROVIDENCE", "loc": [ -87.750512, 37.404958 ], "pop": 4778, "state": "KY" }, { "_id": "42451", "city": "REED", "loc": [ -87.37038200000001, 37.858764 ], "pop": 1072, "state": "KY" }, { "_id": "42452", "city": "ROBARDS", "loc": [ -87.526596, 37.675836 ], "pop": 1416, "state": "KY" }, { "_id": "42453", "city": "SAINT CHARLES", "loc": [ -87.55386, 37.176635 ], "pop": 848, "state": "KY" }, { "_id": "42455", "city": "SEBREE", "loc": [ -87.52548899999999, 37.588921 ], "pop": 2911, "state": "KY" }, { "_id": "42456", "city": "SLAUGHTERS", "loc": [ -87.50534399999999, 37.5054 ], "pop": 914, "state": "KY" }, { "_id": "42458", "city": "SPOTTSVILLE", "loc": [ -87.424682, 37.839948 ], "pop": 1534, "state": "KY" }, { "_id": "42459", "city": "STURGIS", "loc": [ -87.99645700000001, 37.548669 ], "pop": 5483, "state": "KY" }, { "_id": "42461", "city": "UNIONTOWN", "loc": [ -87.92633499999999, 37.767741 ], "pop": 1555, "state": "KY" }, { "_id": "42462", "city": "WAVERLY", "loc": [ -87.80668799999999, 37.742985 ], "pop": 1521, "state": "KY" }, { "_id": "42464", "city": "WHITE PLAINS", "loc": [ -87.36441499999999, 37.178765 ], "pop": 1877, "state": "KY" }, { "_id": "42501", "city": "ALCALDE", "loc": [ -84.60436199999999, 37.073853 ], "pop": 28546, "state": "KY" }, { "_id": "42516", "city": "BETHELRIDGE", "loc": [ -84.778971, 37.22459 ], "pop": 550, "state": "KY" }, { "_id": "42518", "city": "BRONSTON", "loc": [ -84.63141299999999, 36.952488 ], "pop": 2417, "state": "KY" }, { "_id": "42519", "city": "SLOANS VALLEY", "loc": [ -84.565237, 36.96145 ], "pop": 2843, "state": "KY" }, { "_id": "42528", "city": "DUNNVILLE", "loc": [ -84.929507, 37.176894 ], "pop": 2308, "state": "KY" }, { "_id": "42532", "city": "JABEZ", "loc": [ -84.863157, 37.066884 ], "pop": 364, "state": "KY" }, { "_id": "42539", "city": "LIBERTY", "loc": [ -84.971864, 37.314553 ], "pop": 7831, "state": "KY" }, { "_id": "42541", "city": "MIDDLEBURG", "loc": [ -84.832103, 37.359082 ], "pop": 697, "state": "KY" }, { "_id": "42544", "city": "POINTER", "loc": [ -84.766245, 37.064216 ], "pop": 3861, "state": "KY" }, { "_id": "42553", "city": "SCIENCE HILL", "loc": [ -84.64865, 37.168333 ], "pop": 2899, "state": "KY" }, { "_id": "42554", "city": "SHOPVILLE", "loc": [ -84.44593999999999, 37.174243 ], "pop": 3258, "state": "KY" }, { "_id": "42555", "city": "SLOANS VALLEY", "loc": [ -84.37620099999999, 36.968617 ], "pop": 0, "state": "KY" }, { "_id": "42558", "city": "TATEVILLE", "loc": [ -84.43836400000001, 36.973892 ], "pop": 0, "state": "KY" }, { "_id": "42566", "city": "YOSEMITE", "loc": [ -84.81241199999999, 37.307355 ], "pop": 380, "state": "KY" }, { "_id": "42567", "city": "PULASKI", "loc": [ -84.605593, 37.247038 ], "pop": 5867, "state": "KY" }, { "_id": "42601", "city": "AARON", "loc": [ -85.19911399999999, 36.812827 ], "pop": 270, "state": "KY" }, { "_id": "42602", "city": "ALBANY", "loc": [ -85.140677, 36.68569 ], "pop": 6419, "state": "KY" }, { "_id": "42603", "city": "ALPHA", "loc": [ -85.092405, 36.779735 ], "pop": 2163, "state": "KY" }, { "_id": "42611", "city": "COOPERSVILLE", "loc": [ -84.718717, 36.722168 ], "pop": 350, "state": "KY" }, { "_id": "42613", "city": "DELTA", "loc": [ -84.68402399999999, 36.801658 ], "pop": 639, "state": "KY" }, { "_id": "42629", "city": "JAMESTOWN", "loc": [ -85.096844, 36.967955 ], "pop": 5140, "state": "KY" }, { "_id": "42633", "city": "PUEBLO", "loc": [ -84.839251, 36.842723 ], "pop": 13523, "state": "KY" }, { "_id": "42634", "city": "PARKERS LAKE", "loc": [ -84.443642, 36.834689 ], "pop": 1952, "state": "KY" }, { "_id": "42635", "city": "HOLLYHILL", "loc": [ -84.412745, 36.663677 ], "pop": 4865, "state": "KY" }, { "_id": "42638", "city": "REVELO", "loc": [ -84.472189, 36.673363 ], "pop": 221, "state": "KY" }, { "_id": "42640", "city": "ROCKYBRANCH", "loc": [ -84.81017900000001, 36.668512 ], "pop": 79, "state": "KY" }, { "_id": "42642", "city": "WEBBS CROSS ROAD", "loc": [ -85.042873, 37.056683 ], "pop": 9569, "state": "KY" }, { "_id": "42643", "city": "SAWYER", "loc": [ -84.361745, 36.925337 ], "pop": 288, "state": "KY" }, { "_id": "42647", "city": "STEARNS", "loc": [ -84.51648400000001, 36.708184 ], "pop": 4201, "state": "KY" }, { "_id": "42649", "city": "STRUNK", "loc": [ -84.430801, 36.619068 ], "pop": 481, "state": "KY" }, { "_id": "42653", "city": "WIBORG", "loc": [ -84.46836399999999, 36.738597 ], "pop": 3595, "state": "KY" }, { "_id": "42655", "city": "WINDY", "loc": [ -84.961122, 36.778411 ], "pop": 2481, "state": "KY" }, { "_id": "42701", "city": "E TOWN", "loc": [ -85.858977, 37.706973 ], "pop": 31300, "state": "KY" }, { "_id": "42711", "city": "BAKERTON", "loc": [ -85.331723, 36.871151 ], "pop": 222, "state": "KY" }, { "_id": "42712", "city": "BIG CLIFTY", "loc": [ -86.139498, 37.527801 ], "pop": 1459, "state": "KY" }, { "_id": "42713", "city": "BONNIEVILLE", "loc": [ -85.895996, 37.374141 ], "pop": 1627, "state": "KY" }, { "_id": "42714", "city": "BOW", "loc": [ -85.301935, 36.708119 ], "pop": 697, "state": "KY" }, { "_id": "42715", "city": "BREEDING", "loc": [ -85.407822, 36.981043 ], "pop": 692, "state": "KY" }, { "_id": "42716", "city": "BUFFALO", "loc": [ -85.643411, 37.47864 ], "pop": 1614, "state": "KY" }, { "_id": "42717", "city": "BURKESVILLE", "loc": [ -85.39702800000001, 36.806791 ], "pop": 4891, "state": "KY" }, { "_id": "42718", "city": "CAMPBELLSVILLE", "loc": [ -85.35075500000001, 37.346618 ], "pop": 19358, "state": "KY" }, { "_id": "42721", "city": "CANEYVILLE", "loc": [ -86.470207, 37.422168 ], "pop": 3148, "state": "KY" }, { "_id": "42722", "city": "CANMER", "loc": [ -85.720292, 37.269562 ], "pop": 465, "state": "KY" }, { "_id": "42723", "city": "CASEY CREEK", "loc": [ -85.20764800000001, 37.273479 ], "pop": 1102, "state": "KY" }, { "_id": "42724", "city": "STEPHENSBURG", "loc": [ -86.006046, 37.660339 ], "pop": 3153, "state": "KY" }, { "_id": "42726", "city": "WAX", "loc": [ -86.160219, 37.427896 ], "pop": 3001, "state": "KY" }, { "_id": "42728", "city": "MONTPELIER", "loc": [ -85.269265, 37.116408 ], "pop": 10012, "state": "KY" }, { "_id": "42729", "city": "CUB RUN", "loc": [ -86.08132000000001, 37.314855 ], "pop": 609, "state": "KY" }, { "_id": "42730", "city": "CUNDIFF", "loc": [ -85.274434, 36.957125 ], "pop": 429, "state": "KY" }, { "_id": "42731", "city": "DUBRE", "loc": [ -85.568281, 36.891998 ], "pop": 210, "state": "KY" }, { "_id": "42732", "city": "E VIEW", "loc": [ -86.119153, 37.61478 ], "pop": 2728, "state": "KY" }, { "_id": "42733", "city": "ELK HORN", "loc": [ -85.19176400000001, 37.339287 ], "pop": 637, "state": "KY" }, { "_id": "42735", "city": "FAIRPLAY", "loc": [ -85.32621399999999, 37.035626 ], "pop": 557, "state": "KY" }, { "_id": "42736", "city": "FINLEY", "loc": [ -85.35244899999999, 37.454549 ], "pop": 1153, "state": "KY" }, { "_id": "42740", "city": "GLENDALE", "loc": [ -85.892101, 37.603398 ], "pop": 991, "state": "KY" }, { "_id": "42741", "city": "GLENS FORK", "loc": [ -85.240117, 37.018195 ], "pop": 788, "state": "KY" }, { "_id": "42742", "city": "GRADYVILLE", "loc": [ -85.42753, 37.054438 ], "pop": 775, "state": "KY" }, { "_id": "42743", "city": "GREENSBURG", "loc": [ -85.523639, 37.243009 ], "pop": 8471, "state": "KY" }, { "_id": "42746", "city": "HARDYVILLE", "loc": [ -85.75417400000001, 37.224905 ], "pop": 1234, "state": "KY" }, { "_id": "42748", "city": "HODGENVILLE", "loc": [ -85.723206, 37.574566 ], "pop": 6666, "state": "KY" }, { "_id": "42749", "city": "HORSE CAVE", "loc": [ -85.87854900000001, 37.184939 ], "pop": 5282, "state": "KY" }, { "_id": "42752", "city": "KETTLE", "loc": [ -85.40917, 36.694573 ], "pop": 991, "state": "KY" }, { "_id": "42753", "city": "KNIFLEY", "loc": [ -85.112844, 37.231886 ], "pop": 648, "state": "KY" }, { "_id": "42754", "city": "SADLER", "loc": [ -86.30371, 37.493098 ], "pop": 13023, "state": "KY" }, { "_id": "42757", "city": "MAGNOLIA", "loc": [ -85.730823, 37.416464 ], "pop": 2960, "state": "KY" }, { "_id": "42761", "city": "MILLTOWN", "loc": [ -85.444181, 37.103415 ], "pop": 625, "state": "KY" }, { "_id": "42762", "city": "MILLWOOD", "loc": [ -86.37982100000001, 37.460879 ], "pop": 561, "state": "KY" }, { "_id": "42764", "city": "MOUNT SHERMAN", "loc": [ -85.631381, 37.453408 ], "pop": 589, "state": "KY" }, { "_id": "42765", "city": "MUNFORDVILLE", "loc": [ -85.920141, 37.289812 ], "pop": 4085, "state": "KY" }, { "_id": "42768", "city": "PEYTONSBURG", "loc": [ -85.371663, 36.646299 ], "pop": 272, "state": "KY" }, { "_id": "42776", "city": "SONORA", "loc": [ -85.92296899999999, 37.52207 ], "pop": 2396, "state": "KY" }, { "_id": "42782", "city": "SUMMERSVILLE", "loc": [ -85.619376, 37.34186 ], "pop": 778, "state": "KY" }, { "_id": "42784", "city": "UPTON", "loc": [ -85.908619, 37.456802 ], "pop": 2272, "state": "KY" }, { "_id": "42788", "city": "WHITE MILLS", "loc": [ -86.039519, 37.543765 ], "pop": 540, "state": "KY" }, { "_id": "43001", "city": "ALEXANDRIA", "loc": [ -82.60768299999999, 40.105965 ], "pop": 2485, "state": "OH" }, { "_id": "43002", "city": "AMLIN", "loc": [ -83.179157, 40.07203 ], "pop": 1699, "state": "OH" }, { "_id": "43003", "city": "ASHLEY", "loc": [ -82.954201, 40.416264 ], "pop": 3009, "state": "OH" }, { "_id": "43004", "city": "BLACKLICK", "loc": [ -82.807857, 40.020952 ], "pop": 2288, "state": "OH" }, { "_id": "43006", "city": "BRINKHAVEN", "loc": [ -82.155289, 40.458346 ], "pop": 378, "state": "OH" }, { "_id": "43009", "city": "CABLE", "loc": [ -83.64696000000001, 40.178411 ], "pop": 1660, "state": "OH" }, { "_id": "43011", "city": "CENTERBURG", "loc": [ -82.68003899999999, 40.286513 ], "pop": 4437, "state": "OH" }, { "_id": "43013", "city": "CROTON", "loc": [ -82.698948, 40.237603 ], "pop": 1197, "state": "OH" }, { "_id": "43014", "city": "DANVILLE", "loc": [ -82.26385500000001, 40.455693 ], "pop": 2033, "state": "OH" }, { "_id": "43015", "city": "DELAWARE", "loc": [ -83.072312, 40.293186 ], "pop": 29384, "state": "OH" }, { "_id": "43017", "city": "DUBLIN", "loc": [ -83.114633, 40.109297 ], "pop": 34840, "state": "OH" }, { "_id": "43019", "city": "FREDERICKTOWN", "loc": [ -82.585711, 40.497613 ], "pop": 10647, "state": "OH" }, { "_id": "43021", "city": "GALENA", "loc": [ -82.895937, 40.191546 ], "pop": 4893, "state": "OH" }, { "_id": "43022", "city": "GAMBIER", "loc": [ -82.382752, 40.378241 ], "pop": 3903, "state": "OH" }, { "_id": "43023", "city": "GRANVILLE", "loc": [ -82.51939900000001, 40.078791 ], "pop": 9523, "state": "OH" }, { "_id": "43025", "city": "HEBRON", "loc": [ -82.491868, 39.953464 ], "pop": 7920, "state": "OH" }, { "_id": "43026", "city": "HILLIARD", "loc": [ -83.138333, 40.032187 ], "pop": 25442, "state": "OH" }, { "_id": "43028", "city": "HOWARD", "loc": [ -82.33335099999999, 40.415818 ], "pop": 1972, "state": "OH" }, { "_id": "43029", "city": "IRWIN", "loc": [ -83.458699, 40.128352 ], "pop": 498, "state": "OH" }, { "_id": "43031", "city": "JOHNSTOWN", "loc": [ -82.697284, 40.14452 ], "pop": 7550, "state": "OH" }, { "_id": "43036", "city": "MAGNETIC SPRINGS", "loc": [ -83.26714200000001, 40.358023 ], "pop": 708, "state": "OH" }, { "_id": "43037", "city": "MARTINSBURG", "loc": [ -82.356691, 40.267954 ], "pop": 370, "state": "OH" }, { "_id": "43040", "city": "MARYSVILLE", "loc": [ -83.362213, 40.247723 ], "pop": 19644, "state": "OH" }, { "_id": "43044", "city": "MECHANICSBURG", "loc": [ -83.572352, 40.064659 ], "pop": 5390, "state": "OH" }, { "_id": "43045", "city": "MILFORD CENTER", "loc": [ -83.437333, 40.181666 ], "pop": 1260, "state": "OH" }, { "_id": "43046", "city": "MILLERSPORT", "loc": [ -82.52834799999999, 39.899307 ], "pop": 3171, "state": "OH" }, { "_id": "43050", "city": "MOUNT VERNON", "loc": [ -82.487286, 40.384937 ], "pop": 24421, "state": "OH" }, { "_id": "43054", "city": "NEW ALBANY", "loc": [ -82.798793, 40.084686 ], "pop": 3520, "state": "OH" }, { "_id": "43055", "city": "NEWARK", "loc": [ -82.40456500000001, 40.072429 ], "pop": 56412, "state": "OH" }, { "_id": "43056", "city": "HEATH", "loc": [ -82.38752700000001, 40.019659 ], "pop": 13336, "state": "OH" }, { "_id": "43060", "city": "NORTH LEWISBURG", "loc": [ -83.561476, 40.222871 ], "pop": 1407, "state": "OH" }, { "_id": "43061", "city": "OSTRANDER", "loc": [ -83.197813, 40.273971 ], "pop": 2622, "state": "OH" }, { "_id": "43062", "city": "PATASKALA", "loc": [ -82.668656, 40.000925 ], "pop": 15470, "state": "OH" }, { "_id": "43064", "city": "PLAIN CITY", "loc": [ -83.269049, 40.097356 ], "pop": 8323, "state": "OH" }, { "_id": "43065", "city": "SHAWNEE HILLS", "loc": [ -83.074921, 40.152652 ], "pop": 14955, "state": "OH" }, { "_id": "43066", "city": "RADNOR", "loc": [ -83.178074, 40.391779 ], "pop": 1150, "state": "OH" }, { "_id": "43067", "city": "RAYMOND", "loc": [ -83.36492699999999, 40.247321 ], "pop": 576, "state": "OH" }, { "_id": "43068", "city": "REYNOLDSBURG", "loc": [ -82.803454, 39.955145 ], "pop": 35820, "state": "OH" }, { "_id": "43071", "city": "SAINT LOUISVILLE", "loc": [ -82.356015, 40.181776 ], "pop": 2389, "state": "OH" }, { "_id": "43072", "city": "SAINT PARIS", "loc": [ -83.96306199999999, 40.105755 ], "pop": 5963, "state": "OH" }, { "_id": "43074", "city": "SUNBURY", "loc": [ -82.851051, 40.265499 ], "pop": 7508, "state": "OH" }, { "_id": "43076", "city": "THORNVILLE", "loc": [ -82.407059, 39.897364 ], "pop": 8187, "state": "OH" }, { "_id": "43078", "city": "URBANA", "loc": [ -83.76714200000001, 40.106639 ], "pop": 20175, "state": "OH" }, { "_id": "43080", "city": "UTICA", "loc": [ -82.413459, 40.244137 ], "pop": 5502, "state": "OH" }, { "_id": "43081", "city": "WESTERVILLE", "loc": [ -82.910504, 40.114569 ], "pop": 49023, "state": "OH" }, { "_id": "43084", "city": "WOODSTOCK", "loc": [ -83.546149, 40.181644 ], "pop": 793, "state": "OH" }, { "_id": "43085", "city": "WORTHINGTON", "loc": [ -83.010069, 40.105155 ], "pop": 27229, "state": "OH" }, { "_id": "43102", "city": "AMANDA", "loc": [ -82.755236, 39.625104 ], "pop": 3730, "state": "OH" }, { "_id": "43103", "city": "ASHVILLE", "loc": [ -82.94456700000001, 39.731576 ], "pop": 9050, "state": "OH" }, { "_id": "43105", "city": "BALTIMORE", "loc": [ -82.62402299999999, 39.864452 ], "pop": 5765, "state": "OH" }, { "_id": "43106", "city": "BLOOMINGBURG", "loc": [ -83.409521, 39.628617 ], "pop": 1643, "state": "OH" }, { "_id": "43107", "city": "HIDE A WAY HILLS", "loc": [ -82.42547999999999, 39.698807 ], "pop": 3087, "state": "OH" }, { "_id": "43110", "city": "CANAL WINCHESTER", "loc": [ -82.80436899999999, 39.83486 ], "pop": 8444, "state": "OH" }, { "_id": "43112", "city": "CARROLL", "loc": [ -82.708358, 39.795743 ], "pop": 3914, "state": "OH" }, { "_id": "43113", "city": "CIRCLEVILLE", "loc": [ -82.92996599999999, 39.598836 ], "pop": 22337, "state": "OH" }, { "_id": "43115", "city": "CLARKSBURG", "loc": [ -83.156282, 39.490432 ], "pop": 1523, "state": "OH" }, { "_id": "43119", "city": "GALLOWAY", "loc": [ -83.183848, 39.936604 ], "pop": 9984, "state": "OH" }, { "_id": "43123", "city": "GROVE CITY", "loc": [ -83.083944, 39.881382 ], "pop": 33730, "state": "OH" }, { "_id": "43125", "city": "GROVEPORT", "loc": [ -82.887219, 39.858137 ], "pop": 7728, "state": "OH" }, { "_id": "43128", "city": "JEFFERSONVILLE", "loc": [ -83.56873, 39.65896 ], "pop": 2359, "state": "OH" }, { "_id": "43130", "city": "LANCASTER", "loc": [ -82.60307400000001, 39.718697 ], "pop": 54451, "state": "OH" }, { "_id": "43135", "city": "LAURELVILLE", "loc": [ -82.721219, 39.4757 ], "pop": 4552, "state": "OH" }, { "_id": "43137", "city": "LOCKBOURNE", "loc": [ -82.97636900000001, 39.814236 ], "pop": 1423, "state": "OH" }, { "_id": "43138", "city": "LOGAN", "loc": [ -82.412594, 39.537175 ], "pop": 16011, "state": "OH" }, { "_id": "43140", "city": "LONDON", "loc": [ -83.443899, 39.900074 ], "pop": 20432, "state": "OH" }, { "_id": "43143", "city": "MOUNT STERLING", "loc": [ -83.280618, 39.717506 ], "pop": 4912, "state": "OH" }, { "_id": "43145", "city": "NEW HOLLAND", "loc": [ -83.250429, 39.558897 ], "pop": 1768, "state": "OH" }, { "_id": "43146", "city": "ORIENT", "loc": [ -83.15431700000001, 39.795386 ], "pop": 13491, "state": "OH" }, { "_id": "43147", "city": "PICKERINGTON", "loc": [ -82.75626699999999, 39.906062 ], "pop": 18424, "state": "OH" }, { "_id": "43148", "city": "PLEASANTVILLE", "loc": [ -82.504268, 39.822684 ], "pop": 1272, "state": "OH" }, { "_id": "43149", "city": "ROCKBRIDGE", "loc": [ -82.562572, 39.550907 ], "pop": 2063, "state": "OH" }, { "_id": "43150", "city": "RUSHVILLE", "loc": [ -82.427981, 39.767375 ], "pop": 1558, "state": "OH" }, { "_id": "43152", "city": "SOUTH BLOOMINGVI", "loc": [ -82.639404, 39.374145 ], "pop": 1429, "state": "OH" }, { "_id": "43153", "city": "SOUTH SOLON", "loc": [ -83.59698400000001, 39.742295 ], "pop": 766, "state": "OH" }, { "_id": "43154", "city": "STOUTSVILLE", "loc": [ -82.81927899999999, 39.60672 ], "pop": 1666, "state": "OH" }, { "_id": "43155", "city": "SUGAR GROVE", "loc": [ -82.532113, 39.627699 ], "pop": 1572, "state": "OH" }, { "_id": "43160", "city": "WASHINGTON COURT", "loc": [ -83.438817, 39.534346 ], "pop": 21357, "state": "OH" }, { "_id": "43162", "city": "WEST JEFFERSON", "loc": [ -83.28530600000001, 39.942409 ], "pop": 7411, "state": "OH" }, { "_id": "43164", "city": "WILLIAMSPORT", "loc": [ -83.12505299999999, 39.611739 ], "pop": 2192, "state": "OH" }, { "_id": "43201", "city": "COLUMBUS", "loc": [ -83.004732, 39.995157 ], "pop": 37110, "state": "OH" }, { "_id": "43202", "city": "COLUMBUS", "loc": [ -83.011842, 40.020084 ], "pop": 21526, "state": "OH" }, { "_id": "43203", "city": "COLUMBUS", "loc": [ -82.969131, 39.971925 ], "pop": 11047, "state": "OH" }, { "_id": "43204", "city": "COLUMBUS", "loc": [ -83.07799900000001, 39.952333 ], "pop": 38794, "state": "OH" }, { "_id": "43205", "city": "COLUMBUS", "loc": [ -82.96435200000001, 39.956905 ], "pop": 17567, "state": "OH" }, { "_id": "43206", "city": "COLUMBUS", "loc": [ -82.974845, 39.942639 ], "pop": 26587, "state": "OH" }, { "_id": "43207", "city": "COLUMBUS", "loc": [ -82.97033399999999, 39.904565 ], "pop": 44404, "state": "OH" }, { "_id": "43209", "city": "BEXLEY", "loc": [ -82.92659500000001, 39.958999 ], "pop": 29574, "state": "OH" }, { "_id": "43210", "city": "COLUMBUS", "loc": [ -83.01640399999999, 40.002804 ], "pop": 10690, "state": "OH" }, { "_id": "43211", "city": "COLUMBUS", "loc": [ -82.973196, 40.011792 ], "pop": 28031, "state": "OH" }, { "_id": "43212", "city": "COLUMBUS", "loc": [ -83.045579, 39.987381 ], "pop": 18478, "state": "OH" }, { "_id": "43213", "city": "WHITEHALL", "loc": [ -82.878275, 39.967146 ], "pop": 29375, "state": "OH" }, { "_id": "43214", "city": "COLUMBUS", "loc": [ -83.01875, 40.053482 ], "pop": 26080, "state": "OH" }, { "_id": "43215", "city": "COLUMBUS", "loc": [ -83.004383, 39.967106 ], "pop": 10145, "state": "OH" }, { "_id": "43217", "city": "COLUMBUS", "loc": [ -82.94748300000001, 39.806209 ], "pop": 2150, "state": "OH" }, { "_id": "43219", "city": "SHEPARD", "loc": [ -82.936459, 40.004394 ], "pop": 24841, "state": "OH" }, { "_id": "43220", "city": "COLUMBUS", "loc": [ -83.066911, 40.049484 ], "pop": 24378, "state": "OH" }, { "_id": "43221", "city": "UPPER ARLINGTON", "loc": [ -83.064592, 40.015431 ], "pop": 21283, "state": "OH" }, { "_id": "43222", "city": "COLUMBUS", "loc": [ -83.031109, 39.957628 ], "pop": 7019, "state": "OH" }, { "_id": "43223", "city": "COLUMBUS", "loc": [ -83.046344, 39.938753 ], "pop": 30538, "state": "OH" }, { "_id": "43224", "city": "COLUMBUS", "loc": [ -82.968947, 40.042493 ], "pop": 41442, "state": "OH" }, { "_id": "43227", "city": "COLUMBUS", "loc": [ -82.890298, 39.944394 ], "pop": 24945, "state": "OH" }, { "_id": "43228", "city": "LINCOLN VILLAGE", "loc": [ -83.123858, 39.947876 ], "pop": 37615, "state": "OH" }, { "_id": "43229", "city": "COLUMBUS", "loc": [ -82.972568, 40.083886 ], "pop": 45798, "state": "OH" }, { "_id": "43230", "city": "GAHANNA", "loc": [ -82.882429, 40.038458 ], "pop": 34342, "state": "OH" }, { "_id": "43231", "city": "COLUMBUS", "loc": [ -82.938275, 40.080984 ], "pop": 14519, "state": "OH" }, { "_id": "43232", "city": "COLUMBUS", "loc": [ -82.866432, 39.923024 ], "pop": 38848, "state": "OH" }, { "_id": "43235", "city": "WEST WORTHINGTON", "loc": [ -83.059287, 40.101271 ], "pop": 34051, "state": "OH" }, { "_id": "43302", "city": "MARION", "loc": [ -83.127056, 40.587648 ], "pop": 50967, "state": "OH" }, { "_id": "43310", "city": "BELLE CENTER", "loc": [ -83.768773, 40.502371 ], "pop": 2057, "state": "OH" }, { "_id": "43311", "city": "BELLEFONTAINE", "loc": [ -83.757076, 40.360472 ], "pop": 16796, "state": "OH" }, { "_id": "43314", "city": "CALEDONIA", "loc": [ -82.992465, 40.627239 ], "pop": 3120, "state": "OH" }, { "_id": "43315", "city": "CARDINGTON", "loc": [ -82.933728, 40.506583 ], "pop": 4739, "state": "OH" }, { "_id": "43316", "city": "CAREY", "loc": [ -83.383578, 40.948599 ], "pop": 6177, "state": "OH" }, { "_id": "43318", "city": "DE GRAFF", "loc": [ -83.9153, 40.305773 ], "pop": 3452, "state": "OH" }, { "_id": "43319", "city": "EAST LIBERTY", "loc": [ -83.58622099999999, 40.307682 ], "pop": 1351, "state": "OH" }, { "_id": "43320", "city": "EDISON", "loc": [ -82.90230099999999, 40.590475 ], "pop": 1319, "state": "OH" }, { "_id": "43321", "city": "FULTON", "loc": [ -82.83624399999999, 40.465013 ], "pop": 1181, "state": "OH" }, { "_id": "43323", "city": "HARPSTER", "loc": [ -83.23428, 40.747541 ], "pop": 719, "state": "OH" }, { "_id": "43324", "city": "HUNTSVILLE", "loc": [ -83.792748, 40.441295 ], "pop": 1953, "state": "OH" }, { "_id": "43326", "city": "KENTON", "loc": [ -83.611087, 40.640433 ], "pop": 15332, "state": "OH" }, { "_id": "43331", "city": "LAKEVIEW", "loc": [ -83.90813900000001, 40.503033 ], "pop": 5722, "state": "OH" }, { "_id": "43332", "city": "LA RUE", "loc": [ -83.373397, 40.578879 ], "pop": 2120, "state": "OH" }, { "_id": "43333", "city": "LEWISTOWN", "loc": [ -83.92089300000001, 40.42768 ], "pop": 958, "state": "OH" }, { "_id": "43334", "city": "MARENGO", "loc": [ -82.812136, 40.389512 ], "pop": 3338, "state": "OH" }, { "_id": "43335", "city": "MARTEL", "loc": [ -82.90586, 40.670775 ], "pop": 659, "state": "OH" }, { "_id": "43337", "city": "MORRAL", "loc": [ -83.204606, 40.695366 ], "pop": 1035, "state": "OH" }, { "_id": "43338", "city": "MOUNT GILEAD", "loc": [ -82.806235, 40.538371 ], "pop": 8271, "state": "OH" }, { "_id": "43340", "city": "MOUNT VICTORY", "loc": [ -83.494165, 40.52321 ], "pop": 1015, "state": "OH" }, { "_id": "43341", "city": "NEW BLOOMINGTON", "loc": [ -83.322351, 40.607301 ], "pop": 1428, "state": "OH" }, { "_id": "43342", "city": "PROSPECT", "loc": [ -83.176295, 40.472659 ], "pop": 3365, "state": "OH" }, { "_id": "43343", "city": "QUINCY", "loc": [ -83.974411, 40.287606 ], "pop": 1147, "state": "OH" }, { "_id": "43344", "city": "RICHWOOD", "loc": [ -83.31363899999999, 40.43698 ], "pop": 4055, "state": "OH" }, { "_id": "43345", "city": "RIDGEWAY", "loc": [ -83.570161, 40.520923 ], "pop": 857, "state": "OH" }, { "_id": "43346", "city": "ROUNDHEAD", "loc": [ -83.848502, 40.580337 ], "pop": 641, "state": "OH" }, { "_id": "43347", "city": "RUSHSYLVANIA", "loc": [ -83.659789, 40.465808 ], "pop": 1544, "state": "OH" }, { "_id": "43348", "city": "RUSSELLS POINT", "loc": [ -83.879825, 40.474956 ], "pop": 2416, "state": "OH" }, { "_id": "43350", "city": "SPARTA", "loc": [ -82.697034, 40.373492 ], "pop": 966, "state": "OH" }, { "_id": "43351", "city": "UPPER SANDUSKY", "loc": [ -83.29771100000001, 40.824876 ], "pop": 9778, "state": "OH" }, { "_id": "43356", "city": "WALDO", "loc": [ -83.070609, 40.460544 ], "pop": 1170, "state": "OH" }, { "_id": "43357", "city": "WEST LIBERTY", "loc": [ -83.752763, 40.262541 ], "pop": 4148, "state": "OH" }, { "_id": "43358", "city": "WEST MANSFIELD", "loc": [ -83.52427400000001, 40.404284 ], "pop": 2580, "state": "OH" }, { "_id": "43359", "city": "WHARTON", "loc": [ -83.463016, 40.861216 ], "pop": 378, "state": "OH" }, { "_id": "43360", "city": "ZANESFIELD", "loc": [ -83.664832, 40.302396 ], "pop": 1171, "state": "OH" }, { "_id": "43402", "city": "BOWLING GREEN", "loc": [ -83.650749, 41.381513 ], "pop": 34468, "state": "OH" }, { "_id": "43406", "city": "BRADNER", "loc": [ -83.4456, 41.329789 ], "pop": 1934, "state": "OH" }, { "_id": "43407", "city": "BURGOON", "loc": [ -83.247455, 41.267986 ], "pop": 572, "state": "OH" }, { "_id": "43410", "city": "CLYDE", "loc": [ -82.991849, 41.302397 ], "pop": 9650, "state": "OH" }, { "_id": "43412", "city": "CURTICE", "loc": [ -83.285825, 41.647736 ], "pop": 2426, "state": "OH" }, { "_id": "43413", "city": "CYGNET", "loc": [ -83.61415100000001, 41.247024 ], "pop": 1516, "state": "OH" }, { "_id": "43416", "city": "ELMORE", "loc": [ -83.27673, 41.468144 ], "pop": 3230, "state": "OH" }, { "_id": "43420", "city": "FREMONT", "loc": [ -83.118095, 41.349792 ], "pop": 31615, "state": "OH" }, { "_id": "43430", "city": "GENOA", "loc": [ -83.35898400000001, 41.530005 ], "pop": 5405, "state": "OH" }, { "_id": "43431", "city": "GIBSONBURG", "loc": [ -83.335762, 41.380474 ], "pop": 3874, "state": "OH" }, { "_id": "43432", "city": "ELLISTON", "loc": [ -83.261135, 41.527136 ], "pop": 115, "state": "OH" }, { "_id": "43435", "city": "MILLERSVILLE", "loc": [ -83.323184, 41.318005 ], "pop": 1427, "state": "OH" }, { "_id": "43436", "city": "ISLE SAINT GEORG", "loc": [ -82.819275, 41.713668 ], "pop": 38, "state": "OH" }, { "_id": "43438", "city": "KELLEYS ISLAND", "loc": [ -82.706811, 41.600755 ], "pop": 172, "state": "OH" }, { "_id": "43439", "city": "LACARNE", "loc": [ -83.02400400000001, 41.527846 ], "pop": 1457, "state": "OH" }, { "_id": "43440", "city": "LAKESIDE", "loc": [ -82.77139200000001, 41.52913 ], "pop": 4410, "state": "OH" }, { "_id": "43442", "city": "LINDSEY", "loc": [ -83.21347400000001, 41.414747 ], "pop": 1646, "state": "OH" }, { "_id": "43443", "city": "LUCKEY", "loc": [ -83.46739599999999, 41.451669 ], "pop": 1771, "state": "OH" }, { "_id": "43445", "city": "BONO", "loc": [ -83.345536, 41.596249 ], "pop": 3895, "state": "OH" }, { "_id": "43447", "city": "MILLBURY", "loc": [ -83.43808300000001, 41.56106 ], "pop": 3100, "state": "OH" }, { "_id": "43449", "city": "OAK HARBOR", "loc": [ -83.127764, 41.523556 ], "pop": 9620, "state": "OH" }, { "_id": "43450", "city": "PEMBERVILLE", "loc": [ -83.473642, 41.402258 ], "pop": 2569, "state": "OH" }, { "_id": "43451", "city": "PORTAGE", "loc": [ -83.614299, 41.312702 ], "pop": 1304, "state": "OH" }, { "_id": "43452", "city": "PORT CLINTON", "loc": [ -82.909368, 41.521535 ], "pop": 11851, "state": "OH" }, { "_id": "43456", "city": "PUT IN BAY", "loc": [ -82.822593, 41.651356 ], "pop": 518, "state": "OH" }, { "_id": "43457", "city": "RISINGSUN", "loc": [ -83.43259, 41.270639 ], "pop": 1756, "state": "OH" }, { "_id": "43460", "city": "ROSSFORD", "loc": [ -83.563793, 41.604908 ], "pop": 5861, "state": "OH" }, { "_id": "43462", "city": "RUDOLPH", "loc": [ -83.683212, 41.296734 ], "pop": 1737, "state": "OH" }, { "_id": "43464", "city": "VICKERY", "loc": [ -82.89895300000001, 41.39099 ], "pop": 1976, "state": "OH" }, { "_id": "43465", "city": "WALBRIDGE", "loc": [ -83.493008, 41.586067 ], "pop": 4597, "state": "OH" }, { "_id": "43466", "city": "WAYNE", "loc": [ -83.47006500000001, 41.299312 ], "pop": 1572, "state": "OH" }, { "_id": "43469", "city": "WOODVILLE", "loc": [ -83.364643, 41.451206 ], "pop": 2968, "state": "OH" }, { "_id": "43501", "city": "ALVORDTON", "loc": [ -84.43553300000001, 41.662489 ], "pop": 954, "state": "OH" }, { "_id": "43502", "city": "ARCHBOLD", "loc": [ -84.304833, 41.533255 ], "pop": 6565, "state": "OH" }, { "_id": "43504", "city": "BERKEY", "loc": [ -83.830972, 41.698892 ], "pop": 843, "state": "OH" }, { "_id": "43506", "city": "BRYAN", "loc": [ -84.56287, 41.474839 ], "pop": 14693, "state": "OH" }, { "_id": "43511", "city": "CUSTAR", "loc": [ -83.834919, 41.295318 ], "pop": 1049, "state": "OH" }, { "_id": "43512", "city": "DEFIANCE", "loc": [ -84.362583, 41.279858 ], "pop": 29859, "state": "OH" }, { "_id": "43515", "city": "DELTA", "loc": [ -83.9866, 41.557695 ], "pop": 11110, "state": "OH" }, { "_id": "43516", "city": "DESHLER", "loc": [ -83.896434, 41.223945 ], "pop": 4043, "state": "OH" }, { "_id": "43517", "city": "EDGERTON", "loc": [ -84.734937, 41.442496 ], "pop": 3663, "state": "OH" }, { "_id": "43518", "city": "EDON", "loc": [ -84.757002, 41.584219 ], "pop": 2688, "state": "OH" }, { "_id": "43521", "city": "FAYETTE", "loc": [ -84.32500400000001, 41.671716 ], "pop": 2248, "state": "OH" }, { "_id": "43522", "city": "GRAND RAPIDS", "loc": [ -83.85524599999999, 41.437855 ], "pop": 3362, "state": "OH" }, { "_id": "43524", "city": "HAMLER", "loc": [ -84.071989, 41.212874 ], "pop": 1949, "state": "OH" }, { "_id": "43525", "city": "HASKINS", "loc": [ -83.70585800000001, 41.465159 ], "pop": 549, "state": "OH" }, { "_id": "43526", "city": "HICKSVILLE", "loc": [ -84.758852, 41.303378 ], "pop": 5541, "state": "OH" }, { "_id": "43527", "city": "HOLGATE", "loc": [ -84.144735, 41.254859 ], "pop": 2032, "state": "OH" }, { "_id": "43528", "city": "HOLLAND", "loc": [ -83.725712, 41.622629 ], "pop": 10773, "state": "OH" }, { "_id": "43532", "city": "LIBERTY CENTER", "loc": [ -83.985889, 41.451371 ], "pop": 3933, "state": "OH" }, { "_id": "43533", "city": "LYONS", "loc": [ -84.06235100000001, 41.690546 ], "pop": 1395, "state": "OH" }, { "_id": "43534", "city": "MC CLURE", "loc": [ -83.942482, 41.377309 ], "pop": 1876, "state": "OH" }, { "_id": "43535", "city": "MALINTA", "loc": [ -84.045731, 41.308425 ], "pop": 1121, "state": "OH" }, { "_id": "43536", "city": "MARK CENTER", "loc": [ -84.62778, 41.291669 ], "pop": 963, "state": "OH" }, { "_id": "43537", "city": "MAUMEE", "loc": [ -83.66283, 41.581682 ], "pop": 22993, "state": "OH" }, { "_id": "43540", "city": "METAMORA", "loc": [ -83.925972, 41.695233 ], "pop": 1531, "state": "OH" }, { "_id": "43542", "city": "MONCLOVA", "loc": [ -83.775718, 41.568416 ], "pop": 2286, "state": "OH" }, { "_id": "43543", "city": "MONTPELIER", "loc": [ -84.61470300000001, 41.59821 ], "pop": 7569, "state": "OH" }, { "_id": "43545", "city": "NAPOLEON", "loc": [ -84.143271, 41.390969 ], "pop": 14196, "state": "OH" }, { "_id": "43548", "city": "NEW BAVARIA", "loc": [ -84.19133600000001, 41.208649 ], "pop": 523, "state": "OH" }, { "_id": "43549", "city": "NEY", "loc": [ -84.526921, 41.378083 ], "pop": 1801, "state": "OH" }, { "_id": "43551", "city": "PERRYSBURG", "loc": [ -83.592727, 41.542926 ], "pop": 29621, "state": "OH" }, { "_id": "43554", "city": "PIONEER", "loc": [ -84.53632399999999, 41.665619 ], "pop": 2350, "state": "OH" }, { "_id": "43556", "city": "SHERWOOD", "loc": [ -84.541674, 41.294593 ], "pop": 1686, "state": "OH" }, { "_id": "43557", "city": "STRYKER", "loc": [ -84.408914, 41.486123 ], "pop": 2607, "state": "OH" }, { "_id": "43558", "city": "SWANTON", "loc": [ -83.871821, 41.594497 ], "pop": 10729, "state": "OH" }, { "_id": "43560", "city": "SYLVANIA", "loc": [ -83.70682499999999, 41.707985 ], "pop": 24564, "state": "OH" }, { "_id": "43566", "city": "WATERVILLE", "loc": [ -83.733142, 41.502248 ], "pop": 5918, "state": "OH" }, { "_id": "43567", "city": "WAUSEON", "loc": [ -84.153745, 41.566796 ], "pop": 10493, "state": "OH" }, { "_id": "43569", "city": "WESTON", "loc": [ -83.797336, 41.351593 ], "pop": 2560, "state": "OH" }, { "_id": "43570", "city": "WEST UNITY", "loc": [ -84.442066, 41.575645 ], "pop": 3305, "state": "OH" }, { "_id": "43571", "city": "WHITEHOUSE", "loc": [ -83.81151, 41.519432 ], "pop": 5199, "state": "OH" }, { "_id": "43602", "city": "TOLEDO", "loc": [ -83.55474700000001, 41.647984 ], "pop": 4084, "state": "OH" }, { "_id": "43604", "city": "TOLEDO", "loc": [ -83.52494900000001, 41.661415 ], "pop": 5506, "state": "OH" }, { "_id": "43605", "city": "OREGON", "loc": [ -83.51234100000001, 41.640701 ], "pop": 33168, "state": "OH" }, { "_id": "43606", "city": "TOLEDO", "loc": [ -83.605992, 41.671213 ], "pop": 29111, "state": "OH" }, { "_id": "43607", "city": "TOLEDO", "loc": [ -83.597419, 41.650417 ], "pop": 30240, "state": "OH" }, { "_id": "43608", "city": "TOLEDO", "loc": [ -83.53435899999999, 41.677908 ], "pop": 21427, "state": "OH" }, { "_id": "43609", "city": "TOLEDO", "loc": [ -83.577282, 41.629761 ], "pop": 29228, "state": "OH" }, { "_id": "43610", "city": "TOLEDO", "loc": [ -83.557303, 41.676693 ], "pop": 8374, "state": "OH" }, { "_id": "43611", "city": "TOLEDO", "loc": [ -83.489203, 41.704507 ], "pop": 23349, "state": "OH" }, { "_id": "43612", "city": "TOLEDO", "loc": [ -83.565622, 41.704567 ], "pop": 33408, "state": "OH" }, { "_id": "43613", "city": "TOLEDO", "loc": [ -83.603397, 41.703913 ], "pop": 35327, "state": "OH" }, { "_id": "43614", "city": "TOLEDO", "loc": [ -83.62917, 41.60279 ], "pop": 31020, "state": "OH" }, { "_id": "43615", "city": "TOLEDO", "loc": [ -83.67058299999999, 41.649197 ], "pop": 38173, "state": "OH" }, { "_id": "43616", "city": "OREGON", "loc": [ -83.471366, 41.641842 ], "pop": 15713, "state": "OH" }, { "_id": "43617", "city": "TOLEDO", "loc": [ -83.716967, 41.666765 ], "pop": 7449, "state": "OH" }, { "_id": "43618", "city": "OREGON", "loc": [ -83.392302, 41.665636 ], "pop": 3379, "state": "OH" }, { "_id": "43619", "city": "NORTHWOOD", "loc": [ -83.48056, 41.607986 ], "pop": 7526, "state": "OH" }, { "_id": "43620", "city": "TOLEDO", "loc": [ -83.553602, 41.66536 ], "pop": 8471, "state": "OH" }, { "_id": "43623", "city": "TOLEDO", "loc": [ -83.64340799999999, 41.707968 ], "pop": 21315, "state": "OH" }, { "_id": "43624", "city": "TOLEDO", "loc": [ -83.545005, 41.65627 ], "pop": 1596, "state": "OH" }, { "_id": "43701", "city": "SONORA", "loc": [ -82.008898, 39.944265 ], "pop": 56655, "state": "OH" }, { "_id": "43713", "city": "SOMERTON", "loc": [ -81.171295, 39.9812 ], "pop": 7140, "state": "OH" }, { "_id": "43716", "city": "BEALLSVILLE", "loc": [ -81.014358, 39.872601 ], "pop": 716, "state": "OH" }, { "_id": "43718", "city": "BELMONT", "loc": [ -81.006564, 40.03202 ], "pop": 3229, "state": "OH" }, { "_id": "43719", "city": "BETHESDA", "loc": [ -81.076742, 40.019221 ], "pop": 2464, "state": "OH" }, { "_id": "43720", "city": "BLUE ROCK", "loc": [ -81.891023, 39.799996 ], "pop": 1001, "state": "OH" }, { "_id": "43723", "city": "BYESVILLE", "loc": [ -81.548485, 39.962336 ], "pop": 5164, "state": "OH" }, { "_id": "43724", "city": "CALDWELL", "loc": [ -81.51528, 39.746651 ], "pop": 7043, "state": "OH" }, { "_id": "43725", "city": "CLAYSVILLE", "loc": [ -81.59127700000001, 40.030501 ], "pop": 21261, "state": "OH" }, { "_id": "43727", "city": "CHANDLERSVILLE", "loc": [ -81.830084, 39.889659 ], "pop": 1368, "state": "OH" }, { "_id": "43728", "city": "CHESTERHILL", "loc": [ -81.877286, 39.495277 ], "pop": 1323, "state": "OH" }, { "_id": "43730", "city": "HEMLOCK", "loc": [ -82.097737, 39.634902 ], "pop": 3374, "state": "OH" }, { "_id": "43731", "city": "CROOKSVILLE", "loc": [ -82.084018, 39.762321 ], "pop": 4609, "state": "OH" }, { "_id": "43732", "city": "CUMBERLAND", "loc": [ -81.625925, 39.874092 ], "pop": 1831, "state": "OH" }, { "_id": "43734", "city": "DUNCAN FALLS", "loc": [ -81.911665, 39.877777 ], "pop": 957, "state": "OH" }, { "_id": "43739", "city": "GLENFORD", "loc": [ -82.302592, 39.869935 ], "pop": 1632, "state": "OH" }, { "_id": "43746", "city": "HOPEWELL", "loc": [ -82.175619, 39.96008 ], "pop": 1160, "state": "OH" }, { "_id": "43747", "city": "JERUSALEM", "loc": [ -81.092088, 39.848831 ], "pop": 2037, "state": "OH" }, { "_id": "43748", "city": "JUNCTION CITY", "loc": [ -82.31552499999999, 39.696531 ], "pop": 2577, "state": "OH" }, { "_id": "43749", "city": "GUERNSEY", "loc": [ -81.53036, 40.166544 ], "pop": 2109, "state": "OH" }, { "_id": "43754", "city": "LEWISVILLE", "loc": [ -81.231583, 39.768379 ], "pop": 1366, "state": "OH" }, { "_id": "43755", "city": "LORE CITY", "loc": [ -81.44785299999999, 40.045854 ], "pop": 1487, "state": "OH" }, { "_id": "43756", "city": "MC CONNELSVILLE", "loc": [ -81.837625, 39.670014 ], "pop": 4784, "state": "OH" }, { "_id": "43758", "city": "MALTA", "loc": [ -81.912746, 39.648212 ], "pop": 3127, "state": "OH" }, { "_id": "43760", "city": "MOUNT PERRY", "loc": [ -82.188039, 39.878798 ], "pop": 1550, "state": "OH" }, { "_id": "43762", "city": "NEW CONCORD", "loc": [ -81.738727, 40.008798 ], "pop": 4770, "state": "OH" }, { "_id": "43764", "city": "NEW LEXINGTON", "loc": [ -82.20188400000001, 39.717438 ], "pop": 8536, "state": "OH" }, { "_id": "43766", "city": "NEW STRAITSVILLE", "loc": [ -82.24880400000001, 39.586872 ], "pop": 1669, "state": "OH" }, { "_id": "43767", "city": "NORWICH", "loc": [ -81.802425, 39.993438 ], "pop": 1142, "state": "OH" }, { "_id": "43771", "city": "PHILO", "loc": [ -81.917479, 39.845773 ], "pop": 1374, "state": "OH" }, { "_id": "43772", "city": "PLEASANT CITY", "loc": [ -81.55797, 39.909514 ], "pop": 1231, "state": "OH" }, { "_id": "43773", "city": "QUAKER CITY", "loc": [ -81.289883, 39.986576 ], "pop": 2139, "state": "OH" }, { "_id": "43777", "city": "ROSEVILLE", "loc": [ -82.079212, 39.818656 ], "pop": 4293, "state": "OH" }, { "_id": "43778", "city": "SALESVILLE", "loc": [ -81.372793, 40.008146 ], "pop": 1009, "state": "OH" }, { "_id": "43779", "city": "SARAHSVILLE", "loc": [ -81.467825, 39.793846 ], "pop": 947, "state": "OH" }, { "_id": "43780", "city": "SENECAVILLE", "loc": [ -81.458043, 39.933719 ], "pop": 3014, "state": "OH" }, { "_id": "43782", "city": "SHAWNEE", "loc": [ -82.208459, 39.610984 ], "pop": 1019, "state": "OH" }, { "_id": "43783", "city": "SOMERSET", "loc": [ -82.29911, 39.793615 ], "pop": 2541, "state": "OH" }, { "_id": "43787", "city": "PENNSVILLE", "loc": [ -81.82525099999999, 39.561434 ], "pop": 1865, "state": "OH" }, { "_id": "43788", "city": "SUMMERFIELD", "loc": [ -81.331993, 39.803597 ], "pop": 1151, "state": "OH" }, { "_id": "43793", "city": "ANTIOCH", "loc": [ -81.10336, 39.753063 ], "pop": 5231, "state": "OH" }, { "_id": "43802", "city": "ADAMSVILLE", "loc": [ -81.871847, 40.07929 ], "pop": 943, "state": "OH" }, { "_id": "43804", "city": "BALTIC", "loc": [ -81.679171, 40.447568 ], "pop": 2225, "state": "OH" }, { "_id": "43811", "city": "CONESVILLE", "loc": [ -81.89507399999999, 40.180441 ], "pop": 696, "state": "OH" }, { "_id": "43812", "city": "COSHOCTON", "loc": [ -81.866033, 40.275412 ], "pop": 21561, "state": "OH" }, { "_id": "43821", "city": "ADAMS MILLS", "loc": [ -82.018807, 40.112941 ], "pop": 4204, "state": "OH" }, { "_id": "43822", "city": "FRAZEYSBURG", "loc": [ -82.129279, 40.131616 ], "pop": 2746, "state": "OH" }, { "_id": "43824", "city": "FRESNO", "loc": [ -81.762297, 40.371126 ], "pop": 2777, "state": "OH" }, { "_id": "43830", "city": "NASHPORT", "loc": [ -82.09976, 40.038588 ], "pop": 3579, "state": "OH" }, { "_id": "43832", "city": "NEWCOMERSTOWN", "loc": [ -81.593969, 40.273895 ], "pop": 7574, "state": "OH" }, { "_id": "43837", "city": "PORT WASHINGTON", "loc": [ -81.521518, 40.340359 ], "pop": 1190, "state": "OH" }, { "_id": "43840", "city": "STONE CREEK", "loc": [ -81.589018, 40.405188 ], "pop": 1208, "state": "OH" }, { "_id": "43843", "city": "WALHONDING", "loc": [ -82.20935900000001, 40.362037 ], "pop": 937, "state": "OH" }, { "_id": "43844", "city": "WARSAW", "loc": [ -82.055989, 40.317243 ], "pop": 3177, "state": "OH" }, { "_id": "43845", "city": "WEST LAFAYETTE", "loc": [ -81.736102, 40.271829 ], "pop": 4667, "state": "OH" }, { "_id": "43901", "city": "ADENA", "loc": [ -80.88153800000001, 40.212581 ], "pop": 1690, "state": "OH" }, { "_id": "43902", "city": "ALLEDONIA", "loc": [ -80.957753, 39.905271 ], "pop": 499, "state": "OH" }, { "_id": "43903", "city": "AMSTERDAM", "loc": [ -80.959554, 40.473131 ], "pop": 819, "state": "OH" }, { "_id": "43906", "city": "BELLAIRE", "loc": [ -80.763813, 40.020399 ], "pop": 10480, "state": "OH" }, { "_id": "43907", "city": "MOOREFIELD", "loc": [ -80.996244, 40.264537 ], "pop": 5925, "state": "OH" }, { "_id": "43908", "city": "BERGHOLZ", "loc": [ -80.88615299999999, 40.47771 ], "pop": 3392, "state": "OH" }, { "_id": "43910", "city": "BLOOMINGDALE", "loc": [ -80.807214, 40.3742 ], "pop": 3925, "state": "OH" }, { "_id": "43912", "city": "BRIDGEPORT", "loc": [ -80.774682, 40.075184 ], "pop": 7706, "state": "OH" }, { "_id": "43913", "city": "BRILLIANT", "loc": [ -80.63194900000001, 40.268283 ], "pop": 2057, "state": "OH" }, { "_id": "43915", "city": "CLARINGTON", "loc": [ -80.911311, 39.781908 ], "pop": 1890, "state": "OH" }, { "_id": "43917", "city": "DILLONVALE", "loc": [ -80.802843, 40.212132 ], "pop": 5972, "state": "OH" }, { "_id": "43920", "city": "CALCUTTA", "loc": [ -80.578669, 40.645918 ], "pop": 25993, "state": "OH" }, { "_id": "43930", "city": "HAMMONDSVILLE", "loc": [ -80.729918, 40.579909 ], "pop": 1060, "state": "OH" }, { "_id": "43932", "city": "IRONDALE", "loc": [ -80.791546, 40.511052 ], "pop": 496, "state": "OH" }, { "_id": "43933", "city": "ARMSTRONG MILLS", "loc": [ -80.882181, 39.956304 ], "pop": 1795, "state": "OH" }, { "_id": "43935", "city": "MARTINS FERRY", "loc": [ -80.736125, 40.103597 ], "pop": 10605, "state": "OH" }, { "_id": "43938", "city": "MINGO JUNCTION", "loc": [ -80.625021, 40.320256 ], "pop": 6388, "state": "OH" }, { "_id": "43942", "city": "POWHATAN POINT", "loc": [ -80.8168, 39.867935 ], "pop": 2694, "state": "OH" }, { "_id": "43943", "city": "RAYLAND", "loc": [ -80.71253400000001, 40.208274 ], "pop": 4623, "state": "OH" }, { "_id": "43944", "city": "RICHMOND", "loc": [ -80.76128, 40.426061 ], "pop": 2326, "state": "OH" }, { "_id": "43945", "city": "SALINEVILLE", "loc": [ -80.83497699999999, 40.619525 ], "pop": 3617, "state": "OH" }, { "_id": "43946", "city": "SARDIS", "loc": [ -80.924308, 39.652639 ], "pop": 2785, "state": "OH" }, { "_id": "43947", "city": "SHADYSIDE", "loc": [ -80.764309, 39.967497 ], "pop": 5918, "state": "OH" }, { "_id": "43950", "city": "SAINT CLAIRSVILL", "loc": [ -80.90228500000001, 40.083439 ], "pop": 14292, "state": "OH" }, { "_id": "43952", "city": "WINTERSVILLE", "loc": [ -80.66115000000001, 40.370638 ], "pop": 35873, "state": "OH" }, { "_id": "43963", "city": "TILTONSVILLE", "loc": [ -80.699647, 40.168075 ], "pop": 872, "state": "OH" }, { "_id": "43964", "city": "TORONTO", "loc": [ -80.632504, 40.473298 ], "pop": 11981, "state": "OH" }, { "_id": "43968", "city": "WELLSVILLE", "loc": [ -80.66209499999999, 40.617099 ], "pop": 8315, "state": "OH" }, { "_id": "43971", "city": "YORKVILLE", "loc": [ -80.70773699999999, 40.158051 ], "pop": 1213, "state": "OH" }, { "_id": "43973", "city": "FREEPORT", "loc": [ -81.276955, 40.192502 ], "pop": 1905, "state": "OH" }, { "_id": "43976", "city": "HOPEDALE", "loc": [ -80.902136, 40.349647 ], "pop": 1501, "state": "OH" }, { "_id": "43977", "city": "FLUSHING", "loc": [ -81.07572999999999, 40.145144 ], "pop": 2719, "state": "OH" }, { "_id": "43983", "city": "PIEDMONT", "loc": [ -81.214494, 40.150716 ], "pop": 420, "state": "OH" }, { "_id": "43986", "city": "JEWETT", "loc": [ -81.000379, 40.37446 ], "pop": 1998, "state": "OH" }, { "_id": "43988", "city": "SCIO", "loc": [ -81.10157700000001, 40.40116 ], "pop": 2640, "state": "OH" }, { "_id": "44001", "city": "SOUTH AMHERST", "loc": [ -82.228165, 41.390506 ], "pop": 18839, "state": "OH" }, { "_id": "44003", "city": "ANDOVER", "loc": [ -80.575374, 41.622488 ], "pop": 3491, "state": "OH" }, { "_id": "44004", "city": "ASHTABULA", "loc": [ -80.794681, 41.867877 ], "pop": 37480, "state": "OH" }, { "_id": "44010", "city": "AUSTINBURG", "loc": [ -80.858422, 41.75536 ], "pop": 1902, "state": "OH" }, { "_id": "44011", "city": "AVON", "loc": [ -82.020359, 41.446713 ], "pop": 7332, "state": "OH" }, { "_id": "44012", "city": "AVON LAKE", "loc": [ -82.011094, 41.501904 ], "pop": 15061, "state": "OH" }, { "_id": "44017", "city": "BEREA", "loc": [ -81.861756, 41.367557 ], "pop": 18561, "state": "OH" }, { "_id": "44021", "city": "BURTON", "loc": [ -81.15262, 41.452702 ], "pop": 6677, "state": "OH" }, { "_id": "44022", "city": "CHAGRIN FALLS", "loc": [ -81.361437, 41.418577 ], "pop": 29184, "state": "OH" }, { "_id": "44024", "city": "CHARDON", "loc": [ -81.205629, 41.571862 ], "pop": 20339, "state": "OH" }, { "_id": "44026", "city": "CHESTERLAND", "loc": [ -81.342102, 41.534378 ], "pop": 12510, "state": "OH" }, { "_id": "44028", "city": "COLUMBIA STATION", "loc": [ -81.934398, 41.318708 ], "pop": 8436, "state": "OH" }, { "_id": "44030", "city": "CONNEAUT", "loc": [ -80.580257, 41.934479 ], "pop": 16612, "state": "OH" }, { "_id": "44032", "city": "DORSET", "loc": [ -80.668334, 41.658972 ], "pop": 1536, "state": "OH" }, { "_id": "44035", "city": "ELYRIA", "loc": [ -82.10508799999999, 41.372353 ], "pop": 66674, "state": "OH" }, { "_id": "44039", "city": "NORTH RIDGEVILLE", "loc": [ -82.00332299999999, 41.396432 ], "pop": 21574, "state": "OH" }, { "_id": "44040", "city": "GATES MILLS", "loc": [ -81.415021, 41.532368 ], "pop": 2879, "state": "OH" }, { "_id": "44041", "city": "GENEVA", "loc": [ -80.947363, 41.802864 ], "pop": 14694, "state": "OH" }, { "_id": "44044", "city": "GRAFTON", "loc": [ -82.043098, 41.28537 ], "pop": 12127, "state": "OH" }, { "_id": "44046", "city": "HUNTSBURG", "loc": [ -81.05718299999999, 41.530559 ], "pop": 1804, "state": "OH" }, { "_id": "44047", "city": "JEFFERSON", "loc": [ -80.75616599999999, 41.733513 ], "pop": 8242, "state": "OH" }, { "_id": "44048", "city": "KINGSVILLE", "loc": [ -80.66009200000001, 41.872311 ], "pop": 2192, "state": "OH" }, { "_id": "44050", "city": "LAGRANGE", "loc": [ -82.12791799999999, 41.242278 ], "pop": 5092, "state": "OH" }, { "_id": "44052", "city": "LORAIN", "loc": [ -82.17103899999999, 41.457796 ], "pop": 35989, "state": "OH" }, { "_id": "44053", "city": "LORAIN", "loc": [ -82.203833, 41.432002 ], "pop": 16141, "state": "OH" }, { "_id": "44054", "city": "SHEFFIELD LAKE", "loc": [ -82.096497, 41.482276 ], "pop": 11685, "state": "OH" }, { "_id": "44055", "city": "LORAIN", "loc": [ -82.134992, 41.436131 ], "pop": 22919, "state": "OH" }, { "_id": "44056", "city": "MACEDONIA", "loc": [ -81.499578, 41.322236 ], "pop": 7470, "state": "OH" }, { "_id": "44057", "city": "MADISON", "loc": [ -81.058819, 41.805367 ], "pop": 18357, "state": "OH" }, { "_id": "44060", "city": "MENTOR", "loc": [ -81.342133, 41.689468 ], "pop": 60109, "state": "OH" }, { "_id": "44062", "city": "MIDDLEFIELD", "loc": [ -81.03733800000001, 41.445547 ], "pop": 11700, "state": "OH" }, { "_id": "44064", "city": "MONTVILLE", "loc": [ -81.057036, 41.603446 ], "pop": 1867, "state": "OH" }, { "_id": "44065", "city": "NEWBURY", "loc": [ -81.23452, 41.475022 ], "pop": 2907, "state": "OH" }, { "_id": "44067", "city": "NORTHFIELD", "loc": [ -81.54294299999999, 41.320821 ], "pop": 14014, "state": "OH" }, { "_id": "44070", "city": "NORTH OLMSTED", "loc": [ -81.913056, 41.420129 ], "pop": 34123, "state": "OH" }, { "_id": "44072", "city": "NOVELTY", "loc": [ -81.334228, 41.476288 ], "pop": 4736, "state": "OH" }, { "_id": "44074", "city": "OBERLIN", "loc": [ -82.222863, 41.28987 ], "pop": 11631, "state": "OH" }, { "_id": "44076", "city": "EAST ORWELL", "loc": [ -80.839671, 41.533456 ], "pop": 3814, "state": "OH" }, { "_id": "44077", "city": "FAIRPORT HARBOR", "loc": [ -81.24366499999999, 41.714014 ], "pop": 43783, "state": "OH" }, { "_id": "44081", "city": "PERRY", "loc": [ -81.14331199999999, 41.767916 ], "pop": 5571, "state": "OH" }, { "_id": "44082", "city": "PIERPONT", "loc": [ -80.57411399999999, 41.767661 ], "pop": 1460, "state": "OH" }, { "_id": "44084", "city": "ROAMING SHORES", "loc": [ -80.88513399999999, 41.6651 ], "pop": 2979, "state": "OH" }, { "_id": "44085", "city": "ROAMING SHORES", "loc": [ -80.832075, 41.602629 ], "pop": 1810, "state": "OH" }, { "_id": "44086", "city": "THOMPSON", "loc": [ -81.057318, 41.676189 ], "pop": 2668, "state": "OH" }, { "_id": "44087", "city": "TWINSBURG", "loc": [ -81.455912, 41.328851 ], "pop": 11274, "state": "OH" }, { "_id": "44089", "city": "VERMILION", "loc": [ -82.355417, 41.409989 ], "pop": 15058, "state": "OH" }, { "_id": "44090", "city": "WELLINGTON", "loc": [ -82.22691500000001, 41.171178 ], "pop": 9870, "state": "OH" }, { "_id": "44092", "city": "WICKLIFFE", "loc": [ -81.46917500000001, 41.604565 ], "pop": 18334, "state": "OH" }, { "_id": "44093", "city": "WILLIAMSFIELD", "loc": [ -80.596378, 41.538296 ], "pop": 1817, "state": "OH" }, { "_id": "44094", "city": "WILLOUGHBY", "loc": [ -81.407619, 41.630229 ], "pop": 30153, "state": "OH" }, { "_id": "44095", "city": "WILLOWICK", "loc": [ -81.44788699999999, 41.649822 ], "pop": 37473, "state": "OH" }, { "_id": "44099", "city": "WINDSOR", "loc": [ -80.966745, 41.56233 ], "pop": 2085, "state": "OH" }, { "_id": "44102", "city": "CLEVELAND", "loc": [ -81.739791, 41.473508 ], "pop": 53416, "state": "OH" }, { "_id": "44103", "city": "CLEVELAND", "loc": [ -81.640475, 41.515726 ], "pop": 28288, "state": "OH" }, { "_id": "44104", "city": "CLEVELAND", "loc": [ -81.62450200000001, 41.480924 ], "pop": 34766, "state": "OH" }, { "_id": "44105", "city": "CLEVELAND", "loc": [ -81.61900199999999, 41.450912 ], "pop": 56341, "state": "OH" }, { "_id": "44106", "city": "CLEVELAND", "loc": [ -81.60757, 41.508359 ], "pop": 35787, "state": "OH" }, { "_id": "44107", "city": "EDGEWATER", "loc": [ -81.79714300000001, 41.482654 ], "pop": 59702, "state": "OH" }, { "_id": "44108", "city": "CLEVELAND", "loc": [ -81.608974, 41.53492 ], "pop": 40401, "state": "OH" }, { "_id": "44109", "city": "CLEVELAND", "loc": [ -81.703315, 41.445768 ], "pop": 47515, "state": "OH" }, { "_id": "44110", "city": "CLEVELAND", "loc": [ -81.57327600000001, 41.563557 ], "pop": 26613, "state": "OH" }, { "_id": "44111", "city": "CLEVELAND", "loc": [ -81.78435, 41.457066 ], "pop": 43366, "state": "OH" }, { "_id": "44112", "city": "EAST CLEVELAND", "loc": [ -81.576262, 41.535517 ], "pop": 41340, "state": "OH" }, { "_id": "44113", "city": "CLEVELAND", "loc": [ -81.701848, 41.481648 ], "pop": 20211, "state": "OH" }, { "_id": "44114", "city": "CLEVELAND", "loc": [ -81.67425, 41.506351 ], "pop": 4673, "state": "OH" }, { "_id": "44115", "city": "CLEVELAND", "loc": [ -81.66700899999999, 41.494574 ], "pop": 7035, "state": "OH" }, { "_id": "44116", "city": "ROCKY RIVER", "loc": [ -81.851246, 41.469401 ], "pop": 20410, "state": "OH" }, { "_id": "44117", "city": "EUCLID", "loc": [ -81.52568599999999, 41.569615 ], "pop": 12371, "state": "OH" }, { "_id": "44118", "city": "CLEVELAND HEIGHT", "loc": [ -81.553945, 41.501213 ], "pop": 45619, "state": "OH" }, { "_id": "44119", "city": "CLEVELAND", "loc": [ -81.54675899999999, 41.588238 ], "pop": 13654, "state": "OH" }, { "_id": "44120", "city": "CLEVELAND", "loc": [ -81.583911, 41.471433 ], "pop": 49357, "state": "OH" }, { "_id": "44121", "city": "SOUTH EUCLID", "loc": [ -81.53375800000001, 41.526019 ], "pop": 37107, "state": "OH" }, { "_id": "44122", "city": "BEACHWOOD", "loc": [ -81.523172, 41.470109 ], "pop": 35115, "state": "OH" }, { "_id": "44123", "city": "SHORE", "loc": [ -81.524325, 41.604416 ], "pop": 18724, "state": "OH" }, { "_id": "44124", "city": "LYNDHURST MAYFIE", "loc": [ -81.46801000000001, 41.514349 ], "pop": 41699, "state": "OH" }, { "_id": "44125", "city": "GARFIELD HEIGHTS", "loc": [ -81.605385, 41.415792 ], "pop": 31020, "state": "OH" }, { "_id": "44126", "city": "FAIRVIEW PARK", "loc": [ -81.856381, 41.4433 ], "pop": 18145, "state": "OH" }, { "_id": "44127", "city": "CLEVELAND", "loc": [ -81.648999, 41.470125 ], "pop": 9046, "state": "OH" }, { "_id": "44128", "city": "CLEVELAND", "loc": [ -81.548574, 41.441565 ], "pop": 35258, "state": "OH" }, { "_id": "44129", "city": "PARMA", "loc": [ -81.734604, 41.396474 ], "pop": 30370, "state": "OH" }, { "_id": "44130", "city": "MIDPARK", "loc": [ -81.77485799999999, 41.377178 ], "pop": 52198, "state": "OH" }, { "_id": "44131", "city": "INDEPENDENCE", "loc": [ -81.66421, 41.380905 ], "pop": 20594, "state": "OH" }, { "_id": "44132", "city": "NOBLE", "loc": [ -81.499056, 41.608516 ], "pop": 16398, "state": "OH" }, { "_id": "44133", "city": "NORTH ROYALTON", "loc": [ -81.74565699999999, 41.323164 ], "pop": 23197, "state": "OH" }, { "_id": "44134", "city": "PARMA", "loc": [ -81.705726, 41.390764 ], "pop": 41397, "state": "OH" }, { "_id": "44135", "city": "CLEVELAND", "loc": [ -81.804433, 41.434177 ], "pop": 31032, "state": "OH" }, { "_id": "44136", "city": "STRONGSVILLE", "loc": [ -81.828457, 41.313218 ], "pop": 35308, "state": "OH" }, { "_id": "44137", "city": "MAPLE HEIGHTS", "loc": [ -81.560339, 41.410513 ], "pop": 26945, "state": "OH" }, { "_id": "44138", "city": "OLMSTED FALLS", "loc": [ -81.915769, 41.373351 ], "pop": 15722, "state": "OH" }, { "_id": "44139", "city": "SOLON", "loc": [ -81.442082, 41.386597 ], "pop": 18830, "state": "OH" }, { "_id": "44140", "city": "BAY VILLAGE", "loc": [ -81.92886799999999, 41.484137 ], "pop": 17000, "state": "OH" }, { "_id": "44141", "city": "BRECKSVILLE", "loc": [ -81.62608299999999, 41.316554 ], "pop": 12172, "state": "OH" }, { "_id": "44142", "city": "BROOKPARK", "loc": [ -81.81181100000001, 41.397944 ], "pop": 22865, "state": "OH" }, { "_id": "44143", "city": "RICHMOND HEIGHTS", "loc": [ -81.48471499999999, 41.552195 ], "pop": 21114, "state": "OH" }, { "_id": "44144", "city": "BROOKLYN", "loc": [ -81.73522199999999, 41.434419 ], "pop": 22288, "state": "OH" }, { "_id": "44145", "city": "WESTLAKE", "loc": [ -81.92177100000001, 41.453459 ], "pop": 27099, "state": "OH" }, { "_id": "44146", "city": "BEDFORD", "loc": [ -81.52315, 41.392067 ], "pop": 33014, "state": "OH" }, { "_id": "44147", "city": "BROADVIEW HEIGHT", "loc": [ -81.680879, 41.32907 ], "pop": 11951, "state": "OH" }, { "_id": "44201", "city": "ATWATER", "loc": [ -81.19845599999999, 41.033487 ], "pop": 7081, "state": "OH" }, { "_id": "44202", "city": "REMINDERVILLE", "loc": [ -81.36042399999999, 41.320935 ], "pop": 11547, "state": "OH" }, { "_id": "44203", "city": "NORTON", "loc": [ -81.615314, 41.018589 ], "pop": 42160, "state": "OH" }, { "_id": "44212", "city": "BRUNSWICK", "loc": [ -81.827968, 41.247053 ], "pop": 32435, "state": "OH" }, { "_id": "44214", "city": "BURBANK", "loc": [ -81.99575299999999, 40.963725 ], "pop": 1298, "state": "OH" }, { "_id": "44215", "city": "CHIPPEWA LAKE", "loc": [ -81.909173, 41.06719 ], "pop": 2714, "state": "OH" }, { "_id": "44216", "city": "CLINTON", "loc": [ -81.587079, 40.939062 ], "pop": 8830, "state": "OH" }, { "_id": "44217", "city": "CRESTON", "loc": [ -81.921083, 40.978846 ], "pop": 6602, "state": "OH" }, { "_id": "44221", "city": "CUYAHOGA FALLS", "loc": [ -81.478961, 41.140082 ], "pop": 32009, "state": "OH" }, { "_id": "44223", "city": "CUYAHOGA FALLS", "loc": [ -81.51071899999999, 41.146448 ], "pop": 14757, "state": "OH" }, { "_id": "44224", "city": "STOW", "loc": [ -81.438017, 41.174808 ], "pop": 31912, "state": "OH" }, { "_id": "44230", "city": "DOYLESTOWN", "loc": [ -81.684845, 40.965042 ], "pop": 7451, "state": "OH" }, { "_id": "44231", "city": "GARRETTSVILLE", "loc": [ -81.070365, 41.298803 ], "pop": 7352, "state": "OH" }, { "_id": "44233", "city": "HINCKLEY", "loc": [ -81.74527, 41.241872 ], "pop": 5845, "state": "OH" }, { "_id": "44234", "city": "HIRAM", "loc": [ -81.14644, 41.332253 ], "pop": 3775, "state": "OH" }, { "_id": "44235", "city": "HOMERVILLE", "loc": [ -82.12495699999999, 41.02669 ], "pop": 1196, "state": "OH" }, { "_id": "44236", "city": "HUDSON", "loc": [ -81.43665900000001, 41.245836 ], "pop": 18695, "state": "OH" }, { "_id": "44240", "city": "KENT", "loc": [ -81.34976, 41.14492 ], "pop": 43071, "state": "OH" }, { "_id": "44241", "city": "STREETSBORO", "loc": [ -81.33829799999999, 41.249099 ], "pop": 10735, "state": "OH" }, { "_id": "44253", "city": "LITCHFIELD", "loc": [ -82.015674, 41.166847 ], "pop": 2506, "state": "OH" }, { "_id": "44254", "city": "LODI", "loc": [ -82.014661, 41.032713 ], "pop": 4776, "state": "OH" }, { "_id": "44255", "city": "MANTUA", "loc": [ -81.22825899999999, 41.294141 ], "pop": 7324, "state": "OH" }, { "_id": "44256", "city": "MEDINA", "loc": [ -81.858351, 41.140415 ], "pop": 35686, "state": "OH" }, { "_id": "44260", "city": "MOGADORE", "loc": [ -81.358963, 41.038196 ], "pop": 12947, "state": "OH" }, { "_id": "44262", "city": "MUNROE FALLS", "loc": [ -81.43756500000001, 41.14202 ], "pop": 5375, "state": "OH" }, { "_id": "44264", "city": "PENINSULA", "loc": [ -81.540013, 41.225579 ], "pop": 1886, "state": "OH" }, { "_id": "44266", "city": "RAVENNA", "loc": [ -81.233656, 41.164886 ], "pop": 31700, "state": "OH" }, { "_id": "44270", "city": "RITTMAN", "loc": [ -81.782599, 40.968381 ], "pop": 8270, "state": "OH" }, { "_id": "44272", "city": "ROOTSTOWN", "loc": [ -81.202642, 41.099534 ], "pop": 3556, "state": "OH" }, { "_id": "44273", "city": "SEVILLE", "loc": [ -81.856199, 41.022731 ], "pop": 3611, "state": "OH" }, { "_id": "44275", "city": "SPENCER", "loc": [ -82.099907, 41.098287 ], "pop": 2595, "state": "OH" }, { "_id": "44276", "city": "STERLING", "loc": [ -81.85191399999999, 40.953263 ], "pop": 1838, "state": "OH" }, { "_id": "44278", "city": "TALLMADGE", "loc": [ -81.425966, 41.097492 ], "pop": 15402, "state": "OH" }, { "_id": "44280", "city": "VALLEY CITY", "loc": [ -81.92446700000001, 41.236806 ], "pop": 3711, "state": "OH" }, { "_id": "44281", "city": "WADSWORTH", "loc": [ -81.73737300000001, 41.038375 ], "pop": 24707, "state": "OH" }, { "_id": "44286", "city": "RICHFIELD", "loc": [ -81.64666800000001, 41.23712 ], "pop": 4724, "state": "OH" }, { "_id": "44287", "city": "WEST SALEM", "loc": [ -82.106638, 40.948514 ], "pop": 5351, "state": "OH" }, { "_id": "44288", "city": "WINDHAM", "loc": [ -81.053451, 41.239244 ], "pop": 4561, "state": "OH" }, { "_id": "44301", "city": "AKRON", "loc": [ -81.520048, 41.044852 ], "pop": 18356, "state": "OH" }, { "_id": "44302", "city": "AKRON", "loc": [ -81.54201500000001, 41.091988 ], "pop": 6835, "state": "OH" }, { "_id": "44303", "city": "AKRON", "loc": [ -81.53860899999999, 41.102508 ], "pop": 8658, "state": "OH" }, { "_id": "44304", "city": "AKRON", "loc": [ -81.508526, 41.080808 ], "pop": 9521, "state": "OH" }, { "_id": "44305", "city": "AKRON", "loc": [ -81.464409, 41.076029 ], "pop": 25788, "state": "OH" }, { "_id": "44306", "city": "AKRON", "loc": [ -81.49155399999999, 41.04791 ], "pop": 25758, "state": "OH" }, { "_id": "44307", "city": "AKRON", "loc": [ -81.54878600000001, 41.069465 ], "pop": 9945, "state": "OH" }, { "_id": "44308", "city": "AKRON", "loc": [ -81.519363, 41.079576 ], "pop": 1113, "state": "OH" }, { "_id": "44310", "city": "AKRON", "loc": [ -81.500586, 41.107547 ], "pop": 25482, "state": "OH" }, { "_id": "44311", "city": "AKRON", "loc": [ -81.520005, 41.063784 ], "pop": 9040, "state": "OH" }, { "_id": "44312", "city": "AKRON", "loc": [ -81.43852800000001, 41.033442 ], "pop": 32097, "state": "OH" }, { "_id": "44313", "city": "AKRON", "loc": [ -81.568487, 41.121995 ], "pop": 23501, "state": "OH" }, { "_id": "44314", "city": "AKRON", "loc": [ -81.559825, 41.040774 ], "pop": 21289, "state": "OH" }, { "_id": "44319", "city": "AKRON", "loc": [ -81.53467999999999, 40.97912 ], "pop": 21902, "state": "OH" }, { "_id": "44320", "city": "AKRON", "loc": [ -81.56744, 41.083496 ], "pop": 25910, "state": "OH" }, { "_id": "44321", "city": "COPLEY", "loc": [ -81.648045, 41.103139 ], "pop": 8756, "state": "OH" }, { "_id": "44333", "city": "FAIRLAWN", "loc": [ -81.62385, 41.146734 ], "pop": 15383, "state": "OH" }, { "_id": "44401", "city": "BERLIN CENTER", "loc": [ -80.934104, 41.024319 ], "pop": 2771, "state": "OH" }, { "_id": "44402", "city": "BRISTOLVILLE", "loc": [ -80.85683899999999, 41.379749 ], "pop": 3220, "state": "OH" }, { "_id": "44403", "city": "BROOKFIELD", "loc": [ -80.578767, 41.247957 ], "pop": 5819, "state": "OH" }, { "_id": "44404", "city": "BURGHILL", "loc": [ -80.54406, 41.334688 ], "pop": 802, "state": "OH" }, { "_id": "44405", "city": "CAMPBELL", "loc": [ -80.589721, 41.077829 ], "pop": 10027, "state": "OH" }, { "_id": "44406", "city": "CANFIELD", "loc": [ -80.75643599999999, 41.029328 ], "pop": 16683, "state": "OH" }, { "_id": "44408", "city": "COLUMBIANA", "loc": [ -80.697473, 40.885279 ], "pop": 9868, "state": "OH" }, { "_id": "44410", "city": "CORTLAND", "loc": [ -80.73274499999999, 41.325125 ], "pop": 15687, "state": "OH" }, { "_id": "44411", "city": "DEERFIELD", "loc": [ -81.05282699999999, 41.03586 ], "pop": 2323, "state": "OH" }, { "_id": "44412", "city": "DIAMOND", "loc": [ -81.0425, 41.093473 ], "pop": 1854, "state": "OH" }, { "_id": "44413", "city": "EAST PALESTINE", "loc": [ -80.546513, 40.840554 ], "pop": 7493, "state": "OH" }, { "_id": "44417", "city": "FARMDALE", "loc": [ -80.662818, 41.392301 ], "pop": 1781, "state": "OH" }, { "_id": "44418", "city": "FOWLER", "loc": [ -80.60589400000001, 41.334851 ], "pop": 1692, "state": "OH" }, { "_id": "44420", "city": "GIRARD", "loc": [ -80.693305, 41.161136 ], "pop": 16480, "state": "OH" }, { "_id": "44423", "city": "HANOVERTON", "loc": [ -80.914445, 40.773116 ], "pop": 2461, "state": "OH" }, { "_id": "44425", "city": "HUBBARD", "loc": [ -80.57619200000001, 41.162401 ], "pop": 15616, "state": "OH" }, { "_id": "44427", "city": "KENSINGTON", "loc": [ -80.938079, 40.71418 ], "pop": 1463, "state": "OH" }, { "_id": "44428", "city": "KINSMAN", "loc": [ -80.57650599999999, 41.435442 ], "pop": 3397, "state": "OH" }, { "_id": "44429", "city": "LAKE MILTON", "loc": [ -80.97235000000001, 41.101354 ], "pop": 3984, "state": "OH" }, { "_id": "44430", "city": "LEAVITTSBURG", "loc": [ -80.886922, 41.244498 ], "pop": 4368, "state": "OH" }, { "_id": "44431", "city": "LEETONIA", "loc": [ -80.758453, 40.863077 ], "pop": 4281, "state": "OH" }, { "_id": "44432", "city": "LISBON", "loc": [ -80.758674, 40.759154 ], "pop": 11236, "state": "OH" }, { "_id": "44436", "city": "LOWELLVILLE", "loc": [ -80.541551, 41.050256 ], "pop": 3882, "state": "OH" }, { "_id": "44437", "city": "MC DONALD", "loc": [ -80.73116899999999, 41.158026 ], "pop": 4868, "state": "OH" }, { "_id": "44438", "city": "MASURY", "loc": [ -80.53256500000001, 41.22552 ], "pop": 5864, "state": "OH" }, { "_id": "44440", "city": "MINERAL RIDGE", "loc": [ -80.75529299999999, 41.131843 ], "pop": 921, "state": "OH" }, { "_id": "44441", "city": "NEGLEY", "loc": [ -80.564497, 40.774601 ], "pop": 2222, "state": "OH" }, { "_id": "44442", "city": "NEW MIDDLETOWN", "loc": [ -80.553415, 40.964607 ], "pop": 3396, "state": "OH" }, { "_id": "44443", "city": "NEW SPRINGFIELD", "loc": [ -80.58558499999999, 40.926517 ], "pop": 2547, "state": "OH" }, { "_id": "44444", "city": "NEWTON FALLS", "loc": [ -80.970135, 41.191047 ], "pop": 11623, "state": "OH" }, { "_id": "44445", "city": "NEW WATERFORD", "loc": [ -80.62085500000001, 40.848941 ], "pop": 3141, "state": "OH" }, { "_id": "44446", "city": "NILES", "loc": [ -80.755775, 41.182414 ], "pop": 27450, "state": "OH" }, { "_id": "44449", "city": "NORTH BENTON", "loc": [ -81.01616799999999, 40.987579 ], "pop": 892, "state": "OH" }, { "_id": "44450", "city": "NORTH BLOOMFIELD", "loc": [ -80.80683500000001, 41.456887 ], "pop": 3393, "state": "OH" }, { "_id": "44451", "city": "NORTH JACKSON", "loc": [ -80.86225, 41.088044 ], "pop": 2448, "state": "OH" }, { "_id": "44452", "city": "NORTH LIMA", "loc": [ -80.654911, 40.964866 ], "pop": 2657, "state": "OH" }, { "_id": "44454", "city": "PETERSBURG", "loc": [ -80.540031, 40.904861 ], "pop": 650, "state": "OH" }, { "_id": "44455", "city": "ROGERS", "loc": [ -80.620237, 40.778943 ], "pop": 1418, "state": "OH" }, { "_id": "44460", "city": "SALEM", "loc": [ -80.86188300000001, 40.900024 ], "pop": 26756, "state": "OH" }, { "_id": "44470", "city": "SOUTHINGTON", "loc": [ -80.948474, 41.298312 ], "pop": 3019, "state": "OH" }, { "_id": "44471", "city": "STRUTHERS", "loc": [ -80.59848700000001, 41.050847 ], "pop": 12318, "state": "OH" }, { "_id": "44473", "city": "VIENNA", "loc": [ -80.65499800000001, 41.217478 ], "pop": 5638, "state": "OH" }, { "_id": "44481", "city": "WARREN", "loc": [ -80.87180600000001, 41.172426 ], "pop": 5407, "state": "OH" }, { "_id": "44483", "city": "WARREN", "loc": [ -80.81644799999999, 41.263878 ], "pop": 30257, "state": "OH" }, { "_id": "44484", "city": "WARREN", "loc": [ -80.76424299999999, 41.231819 ], "pop": 25898, "state": "OH" }, { "_id": "44485", "city": "WARREN", "loc": [ -80.84413600000001, 41.240511 ], "pop": 24847, "state": "OH" }, { "_id": "44490", "city": "WASHINGTONVILLE", "loc": [ -80.763137, 40.897331 ], "pop": 482, "state": "OH" }, { "_id": "44491", "city": "WEST FARMINGTON", "loc": [ -80.96724500000001, 41.350849 ], "pop": 768, "state": "OH" }, { "_id": "44502", "city": "YOUNGSTOWN", "loc": [ -80.640905, 41.077366 ], "pop": 13671, "state": "OH" }, { "_id": "44503", "city": "YOUNGSTOWN", "loc": [ -80.650007, 41.102016 ], "pop": 1315, "state": "OH" }, { "_id": "44504", "city": "YOUNGSTOWN", "loc": [ -80.653887, 41.123686 ], "pop": 5845, "state": "OH" }, { "_id": "44505", "city": "YOUNGSTOWN", "loc": [ -80.627748, 41.125748 ], "pop": 25106, "state": "OH" }, { "_id": "44506", "city": "YOUNGSTOWN", "loc": [ -80.625916, 41.096045 ], "pop": 5619, "state": "OH" }, { "_id": "44507", "city": "YOUNGSTOWN", "loc": [ -80.65533600000001, 41.073236 ], "pop": 10501, "state": "OH" }, { "_id": "44509", "city": "YOUNGSTOWN", "loc": [ -80.694463, 41.10498 ], "pop": 14399, "state": "OH" }, { "_id": "44510", "city": "YOUNGSTOWN", "loc": [ -80.667204, 41.119714 ], "pop": 4513, "state": "OH" }, { "_id": "44511", "city": "YOUNGSTOWN", "loc": [ -80.69309800000001, 41.070402 ], "pop": 27278, "state": "OH" }, { "_id": "44512", "city": "BOARDMAN", "loc": [ -80.666629, 41.031985 ], "pop": 35628, "state": "OH" }, { "_id": "44514", "city": "POLAND", "loc": [ -80.610254, 41.023258 ], "pop": 21694, "state": "OH" }, { "_id": "44515", "city": "AUSTINTOWN", "loc": [ -80.743966, 41.093903 ], "pop": 27130, "state": "OH" }, { "_id": "44601", "city": "ALLIANCE", "loc": [ -81.11819300000001, 40.915842 ], "pop": 35230, "state": "OH" }, { "_id": "44606", "city": "APPLE CREEK", "loc": [ -81.809256, 40.755118 ], "pop": 7286, "state": "OH" }, { "_id": "44608", "city": "BEACH CITY", "loc": [ -81.58512899999999, 40.656199 ], "pop": 2321, "state": "OH" }, { "_id": "44609", "city": "BELOIT", "loc": [ -80.98966900000001, 40.895678 ], "pop": 3205, "state": "OH" }, { "_id": "44611", "city": "BIG PRAIRIE", "loc": [ -82.072048, 40.618777 ], "pop": 1956, "state": "OH" }, { "_id": "44612", "city": "BOLIVAR", "loc": [ -81.44635599999999, 40.634692 ], "pop": 4225, "state": "OH" }, { "_id": "44613", "city": "BREWSTER", "loc": [ -81.598752, 40.714387 ], "pop": 2129, "state": "OH" }, { "_id": "44614", "city": "CANAL FULTON", "loc": [ -81.577269, 40.88871 ], "pop": 10310, "state": "OH" }, { "_id": "44615", "city": "CARROLLTON", "loc": [ -81.081789, 40.578663 ], "pop": 10052, "state": "OH" }, { "_id": "44618", "city": "DALTON", "loc": [ -81.70077999999999, 40.779326 ], "pop": 6069, "state": "OH" }, { "_id": "44620", "city": "DELLROY", "loc": [ -81.19856, 40.586143 ], "pop": 1844, "state": "OH" }, { "_id": "44621", "city": "DENNISON", "loc": [ -81.320301, 40.408885 ], "pop": 4573, "state": "OH" }, { "_id": "44622", "city": "DOVER", "loc": [ -81.476321, 40.534338 ], "pop": 17042, "state": "OH" }, { "_id": "44624", "city": "DUNDEE", "loc": [ -81.676519, 40.639441 ], "pop": 3871, "state": "OH" }, { "_id": "44625", "city": "EAST ROCHESTER", "loc": [ -81.01749, 40.756288 ], "pop": 1531, "state": "OH" }, { "_id": "44626", "city": "EAST SPARTA", "loc": [ -81.368728, 40.697065 ], "pop": 2908, "state": "OH" }, { "_id": "44627", "city": "FREDERICKSBURG", "loc": [ -81.851812, 40.685953 ], "pop": 3336, "state": "OH" }, { "_id": "44628", "city": "GLENMONT", "loc": [ -82.150538, 40.521682 ], "pop": 1908, "state": "OH" }, { "_id": "44629", "city": "GNADENHUTTEN", "loc": [ -81.40585799999999, 40.372123 ], "pop": 5892, "state": "OH" }, { "_id": "44632", "city": "HARTVILLE", "loc": [ -81.32387300000001, 40.961798 ], "pop": 8318, "state": "OH" }, { "_id": "44633", "city": "HOLMESVILLE", "loc": [ -81.927476, 40.633042 ], "pop": 2145, "state": "OH" }, { "_id": "44634", "city": "HOMEWORTH", "loc": [ -81.065473, 40.859192 ], "pop": 3400, "state": "OH" }, { "_id": "44637", "city": "KILLBUCK", "loc": [ -81.983721, 40.4933 ], "pop": 1868, "state": "OH" }, { "_id": "44638", "city": "LAKEVILLE", "loc": [ -82.145477, 40.651965 ], "pop": 1516, "state": "OH" }, { "_id": "44641", "city": "LOUISVILLE", "loc": [ -81.25946399999999, 40.847729 ], "pop": 18994, "state": "OH" }, { "_id": "44643", "city": "MAGNOLIA", "loc": [ -81.307607, 40.651414 ], "pop": 2166, "state": "OH" }, { "_id": "44644", "city": "MALVERN", "loc": [ -81.18378, 40.684532 ], "pop": 4761, "state": "OH" }, { "_id": "44645", "city": "MARSHALLVILLE", "loc": [ -81.722527, 40.906677 ], "pop": 1838, "state": "OH" }, { "_id": "44646", "city": "MASSILLON", "loc": [ -81.497263, 40.811605 ], "pop": 45092, "state": "OH" }, { "_id": "44647", "city": "MASSILLON", "loc": [ -81.553252, 40.795918 ], "pop": 17715, "state": "OH" }, { "_id": "44651", "city": "MECHANICSTOWN", "loc": [ -80.956025, 40.626279 ], "pop": 709, "state": "OH" }, { "_id": "44654", "city": "MILLERSBURG", "loc": [ -81.83238299999999, 40.556683 ], "pop": 20350, "state": "OH" }, { "_id": "44656", "city": "ZOARVILLE", "loc": [ -81.354561, 40.625686 ], "pop": 2969, "state": "OH" }, { "_id": "44657", "city": "MINERVA", "loc": [ -81.103076, 40.742049 ], "pop": 10547, "state": "OH" }, { "_id": "44662", "city": "NAVARRE", "loc": [ -81.533824, 40.720405 ], "pop": 10006, "state": "OH" }, { "_id": "44663", "city": "NEW PHILADELPHIA", "loc": [ -81.435827, 40.484539 ], "pop": 24640, "state": "OH" }, { "_id": "44666", "city": "NORTH LAWRENCE", "loc": [ -81.629946, 40.838652 ], "pop": 2528, "state": "OH" }, { "_id": "44667", "city": "ORRVILLE", "loc": [ -81.774109, 40.845836 ], "pop": 11983, "state": "OH" }, { "_id": "44669", "city": "PARIS", "loc": [ -81.15398999999999, 40.801413 ], "pop": 1338, "state": "OH" }, { "_id": "44672", "city": "SEBRING", "loc": [ -81.023191, 40.922694 ], "pop": 6276, "state": "OH" }, { "_id": "44675", "city": "SHERRODSVILLE", "loc": [ -81.23394500000001, 40.518418 ], "pop": 1330, "state": "OH" }, { "_id": "44676", "city": "SHREVE", "loc": [ -82.03245099999999, 40.692584 ], "pop": 4312, "state": "OH" }, { "_id": "44677", "city": "SMITHVILLE", "loc": [ -81.863328, 40.859228 ], "pop": 2695, "state": "OH" }, { "_id": "44680", "city": "STRASBURG", "loc": [ -81.536646, 40.60028 ], "pop": 3201, "state": "OH" }, { "_id": "44681", "city": "SUGARCREEK", "loc": [ -81.66035599999999, 40.514785 ], "pop": 4772, "state": "OH" }, { "_id": "44683", "city": "UHRICHSVILLE", "loc": [ -81.33736500000001, 40.390502 ], "pop": 6925, "state": "OH" }, { "_id": "44685", "city": "UNIONTOWN", "loc": [ -81.421108, 40.963694 ], "pop": 21009, "state": "OH" }, { "_id": "44688", "city": "WAYNESBURG", "loc": [ -81.265891, 40.682881 ], "pop": 3149, "state": "OH" }, { "_id": "44689", "city": "WILMOT", "loc": [ -81.63524700000001, 40.656723 ], "pop": 286, "state": "OH" }, { "_id": "44691", "city": "WOOSTER", "loc": [ -81.948272, 40.809354 ], "pop": 35504, "state": "OH" }, { "_id": "44695", "city": "BOWERSTON", "loc": [ -81.18624, 40.437056 ], "pop": 1484, "state": "OH" }, { "_id": "44699", "city": "TIPPECANOE", "loc": [ -81.291937, 40.279748 ], "pop": 1184, "state": "OH" }, { "_id": "44702", "city": "CANTON", "loc": [ -81.373946, 40.80267 ], "pop": 1208, "state": "OH" }, { "_id": "44703", "city": "CANTON", "loc": [ -81.381439, 40.809791 ], "pop": 11520, "state": "OH" }, { "_id": "44704", "city": "CANTON", "loc": [ -81.353701, 40.799076 ], "pop": 5408, "state": "OH" }, { "_id": "44705", "city": "CANTON", "loc": [ -81.33990300000001, 40.825866 ], "pop": 21271, "state": "OH" }, { "_id": "44706", "city": "CANTON", "loc": [ -81.411903, 40.767959 ], "pop": 19443, "state": "OH" }, { "_id": "44707", "city": "NORTH INDUSTRY", "loc": [ -81.360407, 40.776885 ], "pop": 11010, "state": "OH" }, { "_id": "44708", "city": "CANTON", "loc": [ -81.424116, 40.81196 ], "pop": 25891, "state": "OH" }, { "_id": "44709", "city": "NORTH CANTON", "loc": [ -81.385947, 40.837227 ], "pop": 19371, "state": "OH" }, { "_id": "44710", "city": "CANTON", "loc": [ -81.416946, 40.791107 ], "pop": 9928, "state": "OH" }, { "_id": "44714", "city": "CANTON", "loc": [ -81.360963, 40.827174 ], "pop": 8988, "state": "OH" }, { "_id": "44718", "city": "JACKSON BELDEN", "loc": [ -81.448514, 40.85479 ], "pop": 10407, "state": "OH" }, { "_id": "44720", "city": "NORTH CANTON", "loc": [ -81.413464, 40.889919 ], "pop": 33193, "state": "OH" }, { "_id": "44721", "city": "CANTON", "loc": [ -81.33279, 40.883446 ], "pop": 10254, "state": "OH" }, { "_id": "44730", "city": "EAST CANTON", "loc": [ -81.278295, 40.784983 ], "pop": 6154, "state": "OH" }, { "_id": "44802", "city": "ALVADA", "loc": [ -83.376982, 41.046284 ], "pop": 1955, "state": "OH" }, { "_id": "44804", "city": "ARCADIA", "loc": [ -83.50194999999999, 41.111562 ], "pop": 1142, "state": "OH" }, { "_id": "44805", "city": "ASHLAND", "loc": [ -82.31893100000001, 40.855892 ], "pop": 27072, "state": "OH" }, { "_id": "44807", "city": "CARROTHERS", "loc": [ -82.88972099999999, 41.077755 ], "pop": 2792, "state": "OH" }, { "_id": "44811", "city": "BELLEVUE", "loc": [ -82.85765000000001, 41.268432 ], "pop": 14361, "state": "OH" }, { "_id": "44813", "city": "BELLVILLE", "loc": [ -82.517516, 40.613604 ], "pop": 6432, "state": "OH" }, { "_id": "44814", "city": "BERLIN HEIGHTS", "loc": [ -82.47771299999999, 41.320519 ], "pop": 2485, "state": "OH" }, { "_id": "44817", "city": "BLOOMDALE", "loc": [ -83.572356, 41.181489 ], "pop": 1331, "state": "OH" }, { "_id": "44818", "city": "BLOOMVILLE", "loc": [ -82.989874, 41.018206 ], "pop": 2572, "state": "OH" }, { "_id": "44820", "city": "BUCYRUS", "loc": [ -82.969829, 40.810306 ], "pop": 19018, "state": "OH" }, { "_id": "44822", "city": "BUTLER", "loc": [ -82.398984, 40.543754 ], "pop": 3870, "state": "OH" }, { "_id": "44824", "city": "CASTALIA", "loc": [ -82.799426, 41.387229 ], "pop": 4027, "state": "OH" }, { "_id": "44825", "city": "CHATFIELD", "loc": [ -83.021432, 40.956637 ], "pop": 514, "state": "OH" }, { "_id": "44826", "city": "COLLINS", "loc": [ -82.490402, 41.245023 ], "pop": 1934, "state": "OH" }, { "_id": "44827", "city": "CRESTLINE", "loc": [ -82.736723, 40.792714 ], "pop": 6723, "state": "OH" }, { "_id": "44830", "city": "FOSTORIA", "loc": [ -83.413938, 41.162346 ], "pop": 20686, "state": "OH" }, { "_id": "44833", "city": "GALION", "loc": [ -82.793943, 40.730316 ], "pop": 19069, "state": "OH" }, { "_id": "44836", "city": "GREEN SPRINGS", "loc": [ -83.088549, 41.228111 ], "pop": 3752, "state": "OH" }, { "_id": "44837", "city": "GREENWICH", "loc": [ -82.51334, 41.04068 ], "pop": 3054, "state": "OH" }, { "_id": "44839", "city": "SHINROCK", "loc": [ -82.555491, 41.390662 ], "pop": 10386, "state": "OH" }, { "_id": "44840", "city": "JEROMESVILLE", "loc": [ -82.186134, 40.813366 ], "pop": 4052, "state": "OH" }, { "_id": "44841", "city": "KANSAS", "loc": [ -83.329829, 41.212543 ], "pop": 893, "state": "OH" }, { "_id": "44842", "city": "LOUDONVILLE", "loc": [ -82.23559, 40.636059 ], "pop": 4767, "state": "OH" }, { "_id": "44843", "city": "LUCAS", "loc": [ -82.408671, 40.70389 ], "pop": 2127, "state": "OH" }, { "_id": "44844", "city": "MC CUTCHENVILLE", "loc": [ -83.26366899999999, 40.975225 ], "pop": 515, "state": "OH" }, { "_id": "44845", "city": "MELMORE", "loc": [ -83.143238, 41.038954 ], "pop": 1611, "state": "OH" }, { "_id": "44846", "city": "MILAN", "loc": [ -82.612565, 41.311065 ], "pop": 3568, "state": "OH" }, { "_id": "44847", "city": "MONROEVILLE", "loc": [ -82.70233, 41.218074 ], "pop": 2721, "state": "OH" }, { "_id": "44849", "city": "NEVADA", "loc": [ -83.12656699999999, 40.825946 ], "pop": 2464, "state": "OH" }, { "_id": "44851", "city": "NEW LONDON", "loc": [ -82.39658799999999, 41.090575 ], "pop": 4243, "state": "OH" }, { "_id": "44853", "city": "NEW RIEGEL", "loc": [ -83.24180699999999, 41.036058 ], "pop": 1483, "state": "OH" }, { "_id": "44854", "city": "NEW WASHINGTON", "loc": [ -82.850359, 40.957076 ], "pop": 1679, "state": "OH" }, { "_id": "44855", "city": "NORTH FAIRFIELD", "loc": [ -82.599801, 41.102987 ], "pop": 1229, "state": "OH" }, { "_id": "44857", "city": "NORWALK", "loc": [ -82.60785, 41.240314 ], "pop": 21687, "state": "OH" }, { "_id": "44859", "city": "NOVA", "loc": [ -82.33843899999999, 41.028215 ], "pop": 1565, "state": "OH" }, { "_id": "44864", "city": "PERRYSVILLE", "loc": [ -82.321307, 40.660626 ], "pop": 2818, "state": "OH" }, { "_id": "44865", "city": "PLYMOUTH", "loc": [ -82.66349200000001, 41.00031 ], "pop": 4122, "state": "OH" }, { "_id": "44866", "city": "POLK", "loc": [ -82.212587, 40.934293 ], "pop": 2293, "state": "OH" }, { "_id": "44867", "city": "REPUBLIC", "loc": [ -83.019407, 41.125876 ], "pop": 1735, "state": "OH" }, { "_id": "44870", "city": "SANDUSKY", "loc": [ -82.70632999999999, 41.434878 ], "pop": 44129, "state": "OH" }, { "_id": "44874", "city": "SAVANNAH", "loc": [ -82.344272, 40.945382 ], "pop": 2983, "state": "OH" }, { "_id": "44875", "city": "SHELBY", "loc": [ -82.654949, 40.878432 ], "pop": 14736, "state": "OH" }, { "_id": "44878", "city": "SHILOH", "loc": [ -82.522155, 40.934015 ], "pop": 4297, "state": "OH" }, { "_id": "44880", "city": "SULLIVAN", "loc": [ -82.21721700000001, 41.036818 ], "pop": 1772, "state": "OH" }, { "_id": "44882", "city": "SYCAMORE", "loc": [ -83.149176, 40.941299 ], "pop": 2610, "state": "OH" }, { "_id": "44883", "city": "TIFFIN", "loc": [ -83.18435599999999, 41.123822 ], "pop": 28310, "state": "OH" }, { "_id": "44887", "city": "TIRO", "loc": [ -82.797032, 40.880992 ], "pop": 1471, "state": "OH" }, { "_id": "44889", "city": "WAKEMAN", "loc": [ -82.378168, 41.263748 ], "pop": 6464, "state": "OH" }, { "_id": "44890", "city": "WILLARD", "loc": [ -82.72880499999999, 41.062787 ], "pop": 11156, "state": "OH" }, { "_id": "44902", "city": "MANSFIELD", "loc": [ -82.512269, 40.755937 ], "pop": 8504, "state": "OH" }, { "_id": "44903", "city": "MANSFIELD", "loc": [ -82.52538, 40.762258 ], "pop": 26575, "state": "OH" }, { "_id": "44904", "city": "LEXINGTON", "loc": [ -82.590605, 40.682568 ], "pop": 12466, "state": "OH" }, { "_id": "44905", "city": "LINCOLN", "loc": [ -82.474609, 40.777173 ], "pop": 16221, "state": "OH" }, { "_id": "44906", "city": "MANSFIELD", "loc": [ -82.55929500000001, 40.762679 ], "pop": 16809, "state": "OH" }, { "_id": "44907", "city": "MANSFIELD", "loc": [ -82.51983300000001, 40.734483 ], "pop": 14891, "state": "OH" }, { "_id": "45001", "city": "ADDYSTON", "loc": [ -84.709602, 39.137364 ], "pop": 1198, "state": "OH" }, { "_id": "45002", "city": "CLEVES", "loc": [ -84.733969, 39.193707 ], "pop": 10249, "state": "OH" }, { "_id": "45003", "city": "COLLEGE CORNER", "loc": [ -84.804951, 39.575453 ], "pop": 708, "state": "OH" }, { "_id": "45005", "city": "CARLISLE", "loc": [ -84.305881, 39.547839 ], "pop": 29720, "state": "OH" }, { "_id": "45011", "city": "HAMILTON", "loc": [ -84.52211699999999, 39.405906 ], "pop": 41229, "state": "OH" }, { "_id": "45013", "city": "ROSSVILLE", "loc": [ -84.606655, 39.40619 ], "pop": 48553, "state": "OH" }, { "_id": "45014", "city": "FAIRFIELD", "loc": [ -84.547881, 39.326602 ], "pop": 41880, "state": "OH" }, { "_id": "45015", "city": "LINDENWALD", "loc": [ -84.551187, 39.367152 ], "pop": 13310, "state": "OH" }, { "_id": "45030", "city": "HARRISON", "loc": [ -84.78368, 39.259208 ], "pop": 15218, "state": "OH" }, { "_id": "45036", "city": "OTTERBIEN HOME", "loc": [ -84.218754, 39.442047 ], "pop": 24354, "state": "OH" }, { "_id": "45039", "city": "MAINEVILLE", "loc": [ -84.252567, 39.313878 ], "pop": 12215, "state": "OH" }, { "_id": "45040", "city": "MASON", "loc": [ -84.31493500000001, 39.335741 ], "pop": 18803, "state": "OH" }, { "_id": "45042", "city": "MIDDLETOWN", "loc": [ -84.389601, 39.532121 ], "pop": 27251, "state": "OH" }, { "_id": "45044", "city": "EXCELLO", "loc": [ -84.383461, 39.485259 ], "pop": 38868, "state": "OH" }, { "_id": "45050", "city": "MONROE", "loc": [ -84.365196, 39.441285 ], "pop": 4352, "state": "OH" }, { "_id": "45052", "city": "NORTH BEND", "loc": [ -84.727261, 39.153605 ], "pop": 4013, "state": "OH" }, { "_id": "45053", "city": "OKEANA", "loc": [ -84.776149, 39.353732 ], "pop": 2894, "state": "OH" }, { "_id": "45054", "city": "OREGONIA", "loc": [ -84.051136, 39.414479 ], "pop": 1405, "state": "OH" }, { "_id": "45056", "city": "MIAMI UNIVERSITY", "loc": [ -84.738518, 39.503838 ], "pop": 26075, "state": "OH" }, { "_id": "45064", "city": "SOMERVILLE", "loc": [ -84.621911, 39.555366 ], "pop": 902, "state": "OH" }, { "_id": "45065", "city": "SOUTH LEBANON", "loc": [ -84.21078300000001, 39.371451 ], "pop": 2774, "state": "OH" }, { "_id": "45066", "city": "SPRINGBORO", "loc": [ -84.228774, 39.562975 ], "pop": 9106, "state": "OH" }, { "_id": "45067", "city": "TRENTON", "loc": [ -84.45976899999999, 39.479937 ], "pop": 7072, "state": "OH" }, { "_id": "45068", "city": "WAYNESVILLE", "loc": [ -84.081518, 39.528489 ], "pop": 6880, "state": "OH" }, { "_id": "45069", "city": "WEST CHESTER", "loc": [ -84.39978600000001, 39.340243 ], "pop": 32613, "state": "OH" }, { "_id": "45101", "city": "ABERDEEN", "loc": [ -83.763723, 38.670864 ], "pop": 2176, "state": "OH" }, { "_id": "45102", "city": "AMELIA", "loc": [ -84.211174, 39.021138 ], "pop": 15931, "state": "OH" }, { "_id": "45103", "city": "BATAVIA", "loc": [ -84.14512499999999, 39.095661 ], "pop": 14416, "state": "OH" }, { "_id": "45106", "city": "BETHEL", "loc": [ -84.09195, 38.94236 ], "pop": 10408, "state": "OH" }, { "_id": "45107", "city": "BLANCHESTER", "loc": [ -83.973977, 39.303442 ], "pop": 6158, "state": "OH" }, { "_id": "45111", "city": "CAMP DENNISON", "loc": [ -84.289659, 39.196212 ], "pop": 482, "state": "OH" }, { "_id": "45113", "city": "CLARKSVILLE", "loc": [ -83.959407, 39.404233 ], "pop": 1434, "state": "OH" }, { "_id": "45118", "city": "FAYETTEVILLE", "loc": [ -83.950087, 39.186214 ], "pop": 3177, "state": "OH" }, { "_id": "45120", "city": "FELICITY", "loc": [ -84.098581, 38.826248 ], "pop": 2662, "state": "OH" }, { "_id": "45121", "city": "GEORGETOWN", "loc": [ -83.909153, 38.871708 ], "pop": 7474, "state": "OH" }, { "_id": "45122", "city": "GOSHEN", "loc": [ -84.118764, 39.220931 ], "pop": 11742, "state": "OH" }, { "_id": "45123", "city": "GREENFIELD", "loc": [ -83.389805, 39.347763 ], "pop": 8106, "state": "OH" }, { "_id": "45130", "city": "HAMERSVILLE", "loc": [ -83.99306199999999, 38.919962 ], "pop": 3415, "state": "OH" }, { "_id": "45133", "city": "HILLSBORO", "loc": [ -83.60640600000001, 39.167877 ], "pop": 19825, "state": "OH" }, { "_id": "45135", "city": "LEESBURG", "loc": [ -83.548146, 39.345767 ], "pop": 3684, "state": "OH" }, { "_id": "45140", "city": "LOVELAND", "loc": [ -84.258802, 39.244484 ], "pop": 29488, "state": "OH" }, { "_id": "45142", "city": "LYNCHBURG", "loc": [ -83.80212400000001, 39.211931 ], "pop": 4539, "state": "OH" }, { "_id": "45144", "city": "MANCHESTER", "loc": [ -83.618064, 38.698167 ], "pop": 4303, "state": "OH" }, { "_id": "45146", "city": "MARTINSVILLE", "loc": [ -83.800545, 39.312705 ], "pop": 1413, "state": "OH" }, { "_id": "45148", "city": "MIDLAND", "loc": [ -83.893131, 39.29169 ], "pop": 1488, "state": "OH" }, { "_id": "45150", "city": "DAY HEIGHTS", "loc": [ -84.243814, 39.179987 ], "pop": 24709, "state": "OH" }, { "_id": "45152", "city": "MORROW", "loc": [ -84.11808499999999, 39.347619 ], "pop": 5498, "state": "OH" }, { "_id": "45153", "city": "MOSCOW", "loc": [ -84.195824, 38.858255 ], "pop": 1957, "state": "OH" }, { "_id": "45154", "city": "MOUNT ORAB", "loc": [ -83.948027, 39.045368 ], "pop": 8247, "state": "OH" }, { "_id": "45157", "city": "NEW RICHMOND", "loc": [ -84.237903, 38.953663 ], "pop": 8660, "state": "OH" }, { "_id": "45159", "city": "NEW VIENNA", "loc": [ -83.688171, 39.332058 ], "pop": 2213, "state": "OH" }, { "_id": "45162", "city": "PLEASANT PLAIN", "loc": [ -84.09673600000001, 39.288382 ], "pop": 2911, "state": "OH" }, { "_id": "45167", "city": "RIPLEY", "loc": [ -83.822677, 38.755095 ], "pop": 3742, "state": "OH" }, { "_id": "45168", "city": "RUSSELLVILLE", "loc": [ -83.76245900000001, 38.851128 ], "pop": 1600, "state": "OH" }, { "_id": "45169", "city": "SABINA", "loc": [ -83.65025199999999, 39.490022 ], "pop": 4866, "state": "OH" }, { "_id": "45171", "city": "SARDINIA", "loc": [ -83.796649, 38.983232 ], "pop": 3377, "state": "OH" }, { "_id": "45174", "city": "TERRACE PARK", "loc": [ -84.30976200000001, 39.160155 ], "pop": 2133, "state": "OH" }, { "_id": "45176", "city": "WILLIAMSBURG", "loc": [ -84.043167, 39.075345 ], "pop": 5038, "state": "OH" }, { "_id": "45177", "city": "WILMINGTON", "loc": [ -83.84165299999999, 39.448788 ], "pop": 18361, "state": "OH" }, { "_id": "45202", "city": "CINCINNATI", "loc": [ -84.50195600000001, 39.107225 ], "pop": 6428, "state": "OH" }, { "_id": "45203", "city": "CINCINNATI", "loc": [ -84.525684, 39.10754 ], "pop": 5327, "state": "OH" }, { "_id": "45204", "city": "CINCINNATI", "loc": [ -84.566794, 39.102498 ], "pop": 11444, "state": "OH" }, { "_id": "45205", "city": "CINCINNATI", "loc": [ -84.575672, 39.110439 ], "pop": 23052, "state": "OH" }, { "_id": "45206", "city": "CINCINNATI", "loc": [ -84.485258, 39.126916 ], "pop": 14017, "state": "OH" }, { "_id": "45207", "city": "CINCINNATI", "loc": [ -84.47062099999999, 39.139747 ], "pop": 8156, "state": "OH" }, { "_id": "45208", "city": "CINCINNATI", "loc": [ -84.435474, 39.136082 ], "pop": 19557, "state": "OH" }, { "_id": "45209", "city": "CINCINNATI", "loc": [ -84.42783300000001, 39.151578 ], "pop": 12082, "state": "OH" }, { "_id": "45210", "city": "CINCINNATI", "loc": [ -84.513535, 39.112579 ], "pop": 11349, "state": "OH" }, { "_id": "45211", "city": "CINCINNATI", "loc": [ -84.59671400000001, 39.152401 ], "pop": 44072, "state": "OH" }, { "_id": "45212", "city": "NORWOOD", "loc": [ -84.452765, 39.162505 ], "pop": 26737, "state": "OH" }, { "_id": "45213", "city": "TAFT", "loc": [ -84.418701, 39.182905 ], "pop": 14333, "state": "OH" }, { "_id": "45214", "city": "CINCINNATI", "loc": [ -84.541442, 39.120642 ], "pop": 12013, "state": "OH" }, { "_id": "45215", "city": "LOCKLAND", "loc": [ -84.457168, 39.230063 ], "pop": 34166, "state": "OH" }, { "_id": "45216", "city": "ELMWOOD PLACE", "loc": [ -84.479232, 39.199183 ], "pop": 10261, "state": "OH" }, { "_id": "45217", "city": "SAINT BERNARD", "loc": [ -84.497424, 39.161715 ], "pop": 8838, "state": "OH" }, { "_id": "45218", "city": "GREENHILLS", "loc": [ -84.51960800000001, 39.266573 ], "pop": 4680, "state": "OH" }, { "_id": "45219", "city": "CINCINNATI", "loc": [ -84.513127, 39.127027 ], "pop": 21619, "state": "OH" }, { "_id": "45220", "city": "CINCINNATI", "loc": [ -84.521738, 39.143183 ], "pop": 15449, "state": "OH" }, { "_id": "45223", "city": "CINCINNATI", "loc": [ -84.54780700000001, 39.169619 ], "pop": 15639, "state": "OH" }, { "_id": "45224", "city": "COLLEGE HILL", "loc": [ -84.53883, 39.203079 ], "pop": 23394, "state": "OH" }, { "_id": "45225", "city": "CINCINNATI", "loc": [ -84.55326700000001, 39.144654 ], "pop": 13324, "state": "OH" }, { "_id": "45226", "city": "CINCINNATI", "loc": [ -84.431194, 39.117356 ], "pop": 5711, "state": "OH" }, { "_id": "45227", "city": "MADISONVILLE", "loc": [ -84.38721099999999, 39.15431 ], "pop": 21393, "state": "OH" }, { "_id": "45228", "city": "CINCINNATI", "loc": [ -84.42353900000001, 39.066448 ], "pop": 538, "state": "OH" }, { "_id": "45229", "city": "CINCINNATI", "loc": [ -84.48918399999999, 39.149016 ], "pop": 19811, "state": "OH" }, { "_id": "45230", "city": "ANDERSON", "loc": [ -84.378727, 39.080861 ], "pop": 26856, "state": "OH" }, { "_id": "45231", "city": "CINCINNATI", "loc": [ -84.543702, 39.241827 ], "pop": 44838, "state": "OH" }, { "_id": "45232", "city": "CINCINNATI", "loc": [ -84.514101, 39.185926 ], "pop": 9364, "state": "OH" }, { "_id": "45233", "city": "SAYLOR PARK", "loc": [ -84.669411, 39.11928 ], "pop": 15452, "state": "OH" }, { "_id": "45236", "city": "TAFT", "loc": [ -84.394746, 39.207302 ], "pop": 26113, "state": "OH" }, { "_id": "45237", "city": "CINCINNATI", "loc": [ -84.45799700000001, 39.18797 ], "pop": 25445, "state": "OH" }, { "_id": "45238", "city": "WESTERN HILLS", "loc": [ -84.608805, 39.111667 ], "pop": 48302, "state": "OH" }, { "_id": "45239", "city": "GROESBECK", "loc": [ -84.57922499999999, 39.207995 ], "pop": 27024, "state": "OH" }, { "_id": "45240", "city": "PARKDALE", "loc": [ -84.52629899999999, 39.286424 ], "pop": 27517, "state": "OH" }, { "_id": "45241", "city": "SHARONVILLE", "loc": [ -84.391161, 39.276745 ], "pop": 21992, "state": "OH" }, { "_id": "45242", "city": "SYCAMORE", "loc": [ -84.359919, 39.239881 ], "pop": 21183, "state": "OH" }, { "_id": "45243", "city": "MADEIRA", "loc": [ -84.35934899999999, 39.187847 ], "pop": 14999, "state": "OH" }, { "_id": "45244", "city": "NEWTOWN", "loc": [ -84.347765, 39.107091 ], "pop": 12310, "state": "OH" }, { "_id": "45245", "city": "NEWTOWN", "loc": [ -84.277383, 39.091293 ], "pop": 36134, "state": "OH" }, { "_id": "45246", "city": "GLENDALE", "loc": [ -84.472353, 39.28751 ], "pop": 13861, "state": "OH" }, { "_id": "45247", "city": "GROESBECK", "loc": [ -84.631608, 39.207604 ], "pop": 16834, "state": "OH" }, { "_id": "45248", "city": "WESTWOOD", "loc": [ -84.651535, 39.159056 ], "pop": 20735, "state": "OH" }, { "_id": "45249", "city": "SYCAMORE", "loc": [ -84.326673, 39.275946 ], "pop": 10312, "state": "OH" }, { "_id": "45251", "city": "GROESBECK", "loc": [ -84.587987, 39.253005 ], "pop": 22487, "state": "OH" }, { "_id": "45252", "city": "CINCINNATI", "loc": [ -84.62832, 39.266803 ], "pop": 3302, "state": "OH" }, { "_id": "45255", "city": "ANDERSON", "loc": [ -84.33077400000001, 39.070642 ], "pop": 15600, "state": "OH" }, { "_id": "45302", "city": "ANNA", "loc": [ -84.21034400000001, 40.405105 ], "pop": 3483, "state": "OH" }, { "_id": "45303", "city": "ANSONIA", "loc": [ -84.640642, 40.215064 ], "pop": 2230, "state": "OH" }, { "_id": "45304", "city": "CASTINE", "loc": [ -84.53702, 39.988367 ], "pop": 8201, "state": "OH" }, { "_id": "45305", "city": "BELLBROOK", "loc": [ -84.08244999999999, 39.640187 ], "pop": 8162, "state": "OH" }, { "_id": "45306", "city": "BOTKINS", "loc": [ -84.177994, 40.465897 ], "pop": 2168, "state": "OH" }, { "_id": "45308", "city": "BRADFORD", "loc": [ -84.429288, 40.128558 ], "pop": 6966, "state": "OH" }, { "_id": "45309", "city": "BROOKVILLE", "loc": [ -84.416464, 39.841393 ], "pop": 11613, "state": "OH" }, { "_id": "45311", "city": "CAMDEN", "loc": [ -84.61000799999999, 39.613391 ], "pop": 8394, "state": "OH" }, { "_id": "45312", "city": "CASSTOWN", "loc": [ -84.108799, 40.071578 ], "pop": 1283, "state": "OH" }, { "_id": "45314", "city": "CEDARVILLE", "loc": [ -83.801253, 39.748424 ], "pop": 4685, "state": "OH" }, { "_id": "45315", "city": "CLAYTON", "loc": [ -84.33989, 39.855124 ], "pop": 2269, "state": "OH" }, { "_id": "45317", "city": "CONOVER", "loc": [ -84.02829699999999, 40.145694 ], "pop": 1053, "state": "OH" }, { "_id": "45318", "city": "COVINGTON", "loc": [ -84.34964600000001, 40.11756 ], "pop": 3154, "state": "OH" }, { "_id": "45320", "city": "EATON", "loc": [ -84.65084899999999, 39.742572 ], "pop": 13779, "state": "OH" }, { "_id": "45321", "city": "ELDORADO", "loc": [ -84.67859199999999, 39.888209 ], "pop": 1168, "state": "OH" }, { "_id": "45322", "city": "UNION", "loc": [ -84.309515, 39.873976 ], "pop": 20297, "state": "OH" }, { "_id": "45323", "city": "ENON", "loc": [ -83.938464, 39.866282 ], "pop": 5820, "state": "OH" }, { "_id": "45324", "city": "FAIRBORN", "loc": [ -84.019789, 39.805311 ], "pop": 35733, "state": "OH" }, { "_id": "45325", "city": "FARMERSVILLE", "loc": [ -84.420507, 39.686684 ], "pop": 2292, "state": "OH" }, { "_id": "45326", "city": "FLETCHER", "loc": [ -84.13303999999999, 40.152622 ], "pop": 1752, "state": "OH" }, { "_id": "45327", "city": "GERMANTOWN", "loc": [ -84.376384, 39.6244 ], "pop": 8187, "state": "OH" }, { "_id": "45331", "city": "GREENVILLE", "loc": [ -84.63418900000001, 40.098726 ], "pop": 23035, "state": "OH" }, { "_id": "45332", "city": "HOLLANSBURG", "loc": [ -84.79008, 39.989862 ], "pop": 789, "state": "OH" }, { "_id": "45333", "city": "HOUSTON", "loc": [ -84.352109, 40.253478 ], "pop": 1613, "state": "OH" }, { "_id": "45334", "city": "JACKSON CENTER", "loc": [ -84.045677, 40.435802 ], "pop": 2318, "state": "OH" }, { "_id": "45335", "city": "JAMESTOWN", "loc": [ -83.750417, 39.642848 ], "pop": 6956, "state": "OH" }, { "_id": "45337", "city": "LAURA", "loc": [ -84.3994, 39.978492 ], "pop": 2602, "state": "OH" }, { "_id": "45338", "city": "LEWISBURG", "loc": [ -84.53685, 39.853404 ], "pop": 5582, "state": "OH" }, { "_id": "45339", "city": "LUDLOW FALLS", "loc": [ -84.33339100000001, 39.987091 ], "pop": 1888, "state": "OH" }, { "_id": "45340", "city": "MAPLEWOOD", "loc": [ -84.076657, 40.343743 ], "pop": 2071, "state": "OH" }, { "_id": "45341", "city": "MEDWAY", "loc": [ -84.026808, 39.879774 ], "pop": 4385, "state": "OH" }, { "_id": "45342", "city": "MIAMISBURG", "loc": [ -84.267477, 39.632095 ], "pop": 27356, "state": "OH" }, { "_id": "45344", "city": "NEW CARLISLE", "loc": [ -84.021704, 39.930025 ], "pop": 17912, "state": "OH" }, { "_id": "45345", "city": "NEW LEBANON", "loc": [ -84.395591, 39.739798 ], "pop": 7359, "state": "OH" }, { "_id": "45346", "city": "NEW MADISON", "loc": [ -84.722211, 39.968711 ], "pop": 2519, "state": "OH" }, { "_id": "45347", "city": "NEW PARIS", "loc": [ -84.779337, 39.861718 ], "pop": 3783, "state": "OH" }, { "_id": "45348", "city": "NEW WESTON", "loc": [ -84.630792, 40.334923 ], "pop": 1266, "state": "OH" }, { "_id": "45356", "city": "PIQUA", "loc": [ -84.25305299999999, 40.148621 ], "pop": 24508, "state": "OH" }, { "_id": "45359", "city": "PLEASANT HILL", "loc": [ -84.34363399999999, 40.053136 ], "pop": 2553, "state": "OH" }, { "_id": "45362", "city": "ROSSBURG", "loc": [ -84.626419, 40.29465 ], "pop": 1450, "state": "OH" }, { "_id": "45363", "city": "RUSSIA", "loc": [ -84.412255, 40.234065 ], "pop": 911, "state": "OH" }, { "_id": "45365", "city": "SIDNEY", "loc": [ -84.162223, 40.287357 ], "pop": 27517, "state": "OH" }, { "_id": "45368", "city": "SELMA", "loc": [ -83.660787, 39.846939 ], "pop": 4143, "state": "OH" }, { "_id": "45369", "city": "SOUTH VIENNA", "loc": [ -83.61570399999999, 39.94732 ], "pop": 3814, "state": "OH" }, { "_id": "45370", "city": "SPRING VALLEY", "loc": [ -84.10158300000001, 39.602761 ], "pop": 5950, "state": "OH" }, { "_id": "45371", "city": "PHONETON", "loc": [ -84.17150100000001, 39.943577 ], "pop": 14967, "state": "OH" }, { "_id": "45373", "city": "TROY", "loc": [ -84.20315100000001, 40.037394 ], "pop": 29422, "state": "OH" }, { "_id": "45377", "city": "VANDALIA", "loc": [ -84.20226599999999, 39.888273 ], "pop": 14355, "state": "OH" }, { "_id": "45380", "city": "VERSAILLES", "loc": [ -84.49569700000001, 40.227284 ], "pop": 4921, "state": "OH" }, { "_id": "45381", "city": "WEST ALEXANDRIA", "loc": [ -84.535214, 39.725898 ], "pop": 5707, "state": "OH" }, { "_id": "45382", "city": "WEST MANCHESTER", "loc": [ -84.619383, 39.902564 ], "pop": 1599, "state": "OH" }, { "_id": "45383", "city": "WEST MILTON", "loc": [ -84.324237, 39.953077 ], "pop": 6095, "state": "OH" }, { "_id": "45385", "city": "XENIA", "loc": [ -83.93687799999999, 39.684204 ], "pop": 36683, "state": "OH" }, { "_id": "45387", "city": "YELLOW SPRINGS", "loc": [ -83.889066, 39.799569 ], "pop": 5743, "state": "OH" }, { "_id": "45388", "city": "YORKSHIRE", "loc": [ -84.483587, 40.328328 ], "pop": 1054, "state": "OH" }, { "_id": "45390", "city": "UNION CITY", "loc": [ -84.783209, 40.201773 ], "pop": 4123, "state": "OH" }, { "_id": "45402", "city": "DAYTON", "loc": [ -84.189508, 39.756305 ], "pop": 2811, "state": "OH" }, { "_id": "45403", "city": "DAYTON", "loc": [ -84.14980199999999, 39.761728 ], "pop": 19567, "state": "OH" }, { "_id": "45404", "city": "DAYTON", "loc": [ -84.16215699999999, 39.78619 ], "pop": 14396, "state": "OH" }, { "_id": "45405", "city": "DAYTON", "loc": [ -84.21354599999999, 39.78993 ], "pop": 25151, "state": "OH" }, { "_id": "45406", "city": "DAYTON", "loc": [ -84.237297, 39.782148 ], "pop": 31024, "state": "OH" }, { "_id": "45407", "city": "DAYTON", "loc": [ -84.224232, 39.762699 ], "pop": 13708, "state": "OH" }, { "_id": "45408", "city": "DAYTON", "loc": [ -84.22896299999999, 39.739526 ], "pop": 13177, "state": "OH" }, { "_id": "45409", "city": "DAYTON", "loc": [ -84.182495, 39.728496 ], "pop": 12633, "state": "OH" }, { "_id": "45410", "city": "DAYTON", "loc": [ -84.16001, 39.74743 ], "pop": 19743, "state": "OH" }, { "_id": "45414", "city": "DAYTON", "loc": [ -84.202444, 39.828528 ], "pop": 23033, "state": "OH" }, { "_id": "45415", "city": "DAYTON", "loc": [ -84.26132800000001, 39.835488 ], "pop": 12885, "state": "OH" }, { "_id": "45416", "city": "TROTWOOD", "loc": [ -84.25982399999999, 39.805541 ], "pop": 6905, "state": "OH" }, { "_id": "45417", "city": "DAYTON", "loc": [ -84.246961, 39.752812 ], "pop": 14617, "state": "OH" }, { "_id": "45418", "city": "DAYTON", "loc": [ -84.267696, 39.716251 ], "pop": 6913, "state": "OH" }, { "_id": "45419", "city": "DAYTON", "loc": [ -84.163656, 39.715486 ], "pop": 17079, "state": "OH" }, { "_id": "45420", "city": "KETTERING", "loc": [ -84.133892, 39.721286 ], "pop": 26955, "state": "OH" }, { "_id": "45424", "city": "HUBER HEIGHTS", "loc": [ -84.123287, 39.845339 ], "pop": 48120, "state": "OH" }, { "_id": "45426", "city": "TROTWOOD", "loc": [ -84.298283, 39.810548 ], "pop": 17853, "state": "OH" }, { "_id": "45427", "city": "DAYTON", "loc": [ -84.28188400000001, 39.754527 ], "pop": 13469, "state": "OH" }, { "_id": "45429", "city": "KETTERING", "loc": [ -84.156077, 39.686392 ], "pop": 27574, "state": "OH" }, { "_id": "45430", "city": "BEAVERCREEK", "loc": [ -84.083596, 39.709381 ], "pop": 6511, "state": "OH" }, { "_id": "45431", "city": "BEAVERCREEK", "loc": [ -84.099802, 39.765396 ], "pop": 25772, "state": "OH" }, { "_id": "45432", "city": "BEAVERCREEK", "loc": [ -84.094157, 39.740774 ], "pop": 14917, "state": "OH" }, { "_id": "45433", "city": "DAYTON", "loc": [ -84.059048, 39.813758 ], "pop": 2298, "state": "OH" }, { "_id": "45434", "city": "BEAVERCREEK", "loc": [ -84.040385, 39.716552 ], "pop": 8855, "state": "OH" }, { "_id": "45439", "city": "WEST CARROLLTON", "loc": [ -84.21626000000001, 39.689617 ], "pop": 9866, "state": "OH" }, { "_id": "45440", "city": "DAYTON", "loc": [ -84.113573, 39.674854 ], "pop": 17129, "state": "OH" }, { "_id": "45449", "city": "WEST CARROLLTON", "loc": [ -84.237887, 39.662098 ], "pop": 20391, "state": "OH" }, { "_id": "45458", "city": "CENTERVILLE", "loc": [ -84.16269699999999, 39.615755 ], "pop": 16364, "state": "OH" }, { "_id": "45459", "city": "CENTERVILLE", "loc": [ -84.166422, 39.645957 ], "pop": 25767, "state": "OH" }, { "_id": "45502", "city": "SPRINGFIELD", "loc": [ -83.84133799999999, 39.930486 ], "pop": 16510, "state": "OH" }, { "_id": "45503", "city": "SPRINGFIELD", "loc": [ -83.78043, 39.9528 ], "pop": 30547, "state": "OH" }, { "_id": "45504", "city": "SPRINGFIELD", "loc": [ -83.83430199999999, 39.940793 ], "pop": 19854, "state": "OH" }, { "_id": "45505", "city": "SPRINGFIELD", "loc": [ -83.78559300000001, 39.910588 ], "pop": 23956, "state": "OH" }, { "_id": "45506", "city": "SPRINGFIELD", "loc": [ -83.827512, 39.910418 ], "pop": 19027, "state": "OH" }, { "_id": "45601", "city": "CHILLICOTHE", "loc": [ -82.98949, 39.337997 ], "pop": 54615, "state": "OH" }, { "_id": "45612", "city": "BAINBRIDGE", "loc": [ -83.276268, 39.213116 ], "pop": 4356, "state": "OH" }, { "_id": "45613", "city": "BEAVER", "loc": [ -82.847469, 39.023847 ], "pop": 2953, "state": "OH" }, { "_id": "45614", "city": "BIDWELL", "loc": [ -82.27009200000001, 38.927647 ], "pop": 3572, "state": "OH" }, { "_id": "45616", "city": "BLUE CREEK", "loc": [ -83.35268000000001, 38.756451 ], "pop": 1436, "state": "OH" }, { "_id": "45619", "city": "CHESAPEAKE", "loc": [ -82.45044799999999, 38.455089 ], "pop": 8076, "state": "OH" }, { "_id": "45620", "city": "CHESHIRE", "loc": [ -82.123537, 38.958678 ], "pop": 1007, "state": "OH" }, { "_id": "45622", "city": "CREOLA", "loc": [ -82.493835, 39.3497 ], "pop": 535, "state": "OH" }, { "_id": "45623", "city": "CROWN CITY", "loc": [ -82.265717, 38.613548 ], "pop": 2677, "state": "OH" }, { "_id": "45628", "city": "FRANKFORT", "loc": [ -83.203356, 39.391015 ], "pop": 3985, "state": "OH" }, { "_id": "45629", "city": "FRANKLIN FURNACE", "loc": [ -82.814477, 38.628216 ], "pop": 3956, "state": "OH" }, { "_id": "45631", "city": "GALLIPOLIS", "loc": [ -82.22902000000001, 38.814781 ], "pop": 18163, "state": "OH" }, { "_id": "45634", "city": "HAMDEN", "loc": [ -82.50997599999999, 39.168497 ], "pop": 1554, "state": "OH" }, { "_id": "45638", "city": "IRONTON", "loc": [ -82.665351, 38.529429 ], "pop": 21093, "state": "OH" }, { "_id": "45640", "city": "JACKSON", "loc": [ -82.647209, 39.042821 ], "pop": 13373, "state": "OH" }, { "_id": "45644", "city": "KINGSTON", "loc": [ -82.84880800000001, 39.441432 ], "pop": 1347, "state": "OH" }, { "_id": "45645", "city": "KITTS HILL", "loc": [ -82.548897, 38.564945 ], "pop": 2837, "state": "OH" }, { "_id": "45646", "city": "LATHAM", "loc": [ -83.328294, 39.080436 ], "pop": 351, "state": "OH" }, { "_id": "45647", "city": "LONDONDERRY", "loc": [ -82.783288, 39.272283 ], "pop": 1481, "state": "OH" }, { "_id": "45648", "city": "LUCASVILLE", "loc": [ -82.99400900000001, 38.893832 ], "pop": 12974, "state": "OH" }, { "_id": "45651", "city": "ALLENSVILLE", "loc": [ -82.49069900000001, 39.255326 ], "pop": 5028, "state": "OH" }, { "_id": "45652", "city": "MC DERMOTT", "loc": [ -83.06889200000001, 38.836203 ], "pop": 2932, "state": "OH" }, { "_id": "45653", "city": "MINFORD", "loc": [ -82.855538, 38.875087 ], "pop": 3969, "state": "OH" }, { "_id": "45654", "city": "NEW PLYMOUTH", "loc": [ -82.389172, 39.388421 ], "pop": 804, "state": "OH" }, { "_id": "45656", "city": "OAK HILL", "loc": [ -82.58834299999999, 38.891559 ], "pop": 6036, "state": "OH" }, { "_id": "45657", "city": "OTWAY", "loc": [ -83.222172, 38.85203 ], "pop": 2287, "state": "OH" }, { "_id": "45658", "city": "PATRIOT", "loc": [ -82.427491, 38.77702 ], "pop": 2202, "state": "OH" }, { "_id": "45659", "city": "PEDRO", "loc": [ -82.647722, 38.650323 ], "pop": 3870, "state": "OH" }, { "_id": "45660", "city": "PEEBLES", "loc": [ -83.36869799999999, 38.986885 ], "pop": 7298, "state": "OH" }, { "_id": "45661", "city": "IDAHO", "loc": [ -83.076742, 39.040196 ], "pop": 4342, "state": "OH" }, { "_id": "45662", "city": "NEW BOSTON", "loc": [ -82.94864, 38.757252 ], "pop": 33275, "state": "OH" }, { "_id": "45663", "city": "PORTSMOUTH", "loc": [ -83.047657, 38.749222 ], "pop": 8485, "state": "OH" }, { "_id": "45669", "city": "PROCTORVILLE", "loc": [ -82.352294, 38.463461 ], "pop": 8976, "state": "OH" }, { "_id": "45670", "city": "RADCLIFF", "loc": [ -82.354243, 39.105205 ], "pop": 1413, "state": "OH" }, { "_id": "45671", "city": "RARDEN", "loc": [ -83.237337, 38.943388 ], "pop": 524, "state": "OH" }, { "_id": "45672", "city": "RAY", "loc": [ -82.69080099999999, 39.207678 ], "pop": 1472, "state": "OH" }, { "_id": "45673", "city": "RICHMOND DALE", "loc": [ -82.814913, 39.203922 ], "pop": 454, "state": "OH" }, { "_id": "45675", "city": "ROCK CAMP", "loc": [ -82.563832, 38.522145 ], "pop": 435, "state": "OH" }, { "_id": "45678", "city": "SCOTTOWN", "loc": [ -82.39668500000001, 38.594034 ], "pop": 1433, "state": "OH" }, { "_id": "45679", "city": "SEAMAN", "loc": [ -83.593625, 38.962072 ], "pop": 3482, "state": "OH" }, { "_id": "45680", "city": "SOUTH POINT", "loc": [ -82.55288299999999, 38.433856 ], "pop": 13272, "state": "OH" }, { "_id": "45681", "city": "SOUTH SALEM", "loc": [ -83.271953, 39.302137 ], "pop": 1001, "state": "OH" }, { "_id": "45682", "city": "SOUTH WEBSTER", "loc": [ -82.720151, 38.819967 ], "pop": 2094, "state": "OH" }, { "_id": "45684", "city": "STOUT", "loc": [ -83.208984, 38.654588 ], "pop": 1342, "state": "OH" }, { "_id": "45685", "city": "THURMAN", "loc": [ -82.404996, 38.898786 ], "pop": 2291, "state": "OH" }, { "_id": "45686", "city": "VINTON", "loc": [ -82.35701400000001, 38.978338 ], "pop": 1898, "state": "OH" }, { "_id": "45688", "city": "WATERLOO", "loc": [ -82.517399, 38.718152 ], "pop": 385, "state": "OH" }, { "_id": "45690", "city": "WAVERLY", "loc": [ -83.004874, 39.126445 ], "pop": 14422, "state": "OH" }, { "_id": "45692", "city": "WELLSTON", "loc": [ -82.548474, 39.118897 ], "pop": 9486, "state": "OH" }, { "_id": "45693", "city": "WEST UNION", "loc": [ -83.533349, 38.801702 ], "pop": 8656, "state": "OH" }, { "_id": "45694", "city": "WHEELERSBURG", "loc": [ -82.82043400000001, 38.741793 ], "pop": 10537, "state": "OH" }, { "_id": "45696", "city": "WILLOW WOOD", "loc": [ -82.453, 38.593976 ], "pop": 665, "state": "OH" }, { "_id": "45697", "city": "WINCHESTER", "loc": [ -83.66613700000001, 38.935283 ], "pop": 3146, "state": "OH" }, { "_id": "45701", "city": "ATHENS", "loc": [ -82.102011, 39.317824 ], "pop": 28523, "state": "OH" }, { "_id": "45710", "city": "ALBANY", "loc": [ -82.217727, 39.209664 ], "pop": 4090, "state": "OH" }, { "_id": "45711", "city": "AMESVILLE", "loc": [ -81.96497599999999, 39.408641 ], "pop": 1661, "state": "OH" }, { "_id": "45714", "city": "BELPRE", "loc": [ -81.596795, 39.286772 ], "pop": 9237, "state": "OH" }, { "_id": "45715", "city": "BEVERLY", "loc": [ -81.63458799999999, 39.571435 ], "pop": 2715, "state": "OH" }, { "_id": "45723", "city": "COOLVILLE", "loc": [ -81.83286699999999, 39.214131 ], "pop": 5023, "state": "OH" }, { "_id": "45724", "city": "CUTLER", "loc": [ -81.76573, 39.404172 ], "pop": 2624, "state": "OH" }, { "_id": "45727", "city": "DEXTER CITY", "loc": [ -81.467151, 39.652585 ], "pop": 277, "state": "OH" }, { "_id": "45729", "city": "FLEMING", "loc": [ -81.65644399999999, 39.392806 ], "pop": 1864, "state": "OH" }, { "_id": "45732", "city": "GLOUSTER", "loc": [ -82.08712800000001, 39.497837 ], "pop": 6226, "state": "OH" }, { "_id": "45734", "city": "RINARD MILLS", "loc": [ -81.18915200000001, 39.659384 ], "pop": 535, "state": "OH" }, { "_id": "45735", "city": "GUYSVILLE", "loc": [ -81.926841, 39.294368 ], "pop": 359, "state": "OH" }, { "_id": "45741", "city": "DEXTER", "loc": [ -82.23118599999999, 39.056325 ], "pop": 1613, "state": "OH" }, { "_id": "45742", "city": "LITTLE HOCKING", "loc": [ -81.70710699999999, 39.280046 ], "pop": 3346, "state": "OH" }, { "_id": "45743", "city": "LONG BOTTOM", "loc": [ -81.88874800000001, 39.08015 ], "pop": 1692, "state": "OH" }, { "_id": "45744", "city": "LOWELL", "loc": [ -81.519679, 39.53847 ], "pop": 1741, "state": "OH" }, { "_id": "45745", "city": "WARNER", "loc": [ -81.35451999999999, 39.593895 ], "pop": 1900, "state": "OH" }, { "_id": "45746", "city": "MACKSBURG", "loc": [ -81.44708799999999, 39.620356 ], "pop": 445, "state": "OH" }, { "_id": "45750", "city": "MARIETTA", "loc": [ -81.464438, 39.428141 ], "pop": 25904, "state": "OH" }, { "_id": "45760", "city": "MIDDLEPORT", "loc": [ -82.060012, 38.999312 ], "pop": 3433, "state": "OH" }, { "_id": "45761", "city": "MILLFIELD", "loc": [ -82.111328, 39.407711 ], "pop": 2656, "state": "OH" }, { "_id": "45764", "city": "NELSONVILLE", "loc": [ -82.23088300000001, 39.455635 ], "pop": 8924, "state": "OH" }, { "_id": "45766", "city": "NEW MARSHFIELD", "loc": [ -82.22251300000001, 39.338295 ], "pop": 2321, "state": "OH" }, { "_id": "45767", "city": "NEW MATAMORAS", "loc": [ -81.093998, 39.528819 ], "pop": 3032, "state": "OH" }, { "_id": "45768", "city": "NEWPORT", "loc": [ -81.24017499999999, 39.39711 ], "pop": 1645, "state": "OH" }, { "_id": "45769", "city": "POMEROY", "loc": [ -82.033145, 39.060729 ], "pop": 5509, "state": "OH" }, { "_id": "45770", "city": "PORTLAND", "loc": [ -81.813548, 38.999919 ], "pop": 905, "state": "OH" }, { "_id": "45771", "city": "RACINE", "loc": [ -81.925759, 38.978551 ], "pop": 3774, "state": "OH" }, { "_id": "45772", "city": "REEDSVILLE", "loc": [ -81.792433, 39.149002 ], "pop": 1305, "state": "OH" }, { "_id": "45773", "city": "RENO", "loc": [ -81.38043, 39.378408 ], "pop": 2673, "state": "OH" }, { "_id": "45775", "city": "RUTLAND", "loc": [ -82.121914, 39.045653 ], "pop": 1598, "state": "OH" }, { "_id": "45776", "city": "SHADE", "loc": [ -82.021755, 39.212862 ], "pop": 1890, "state": "OH" }, { "_id": "45778", "city": "STEWART", "loc": [ -81.892884, 39.32133 ], "pop": 975, "state": "OH" }, { "_id": "45780", "city": "THE PLAINS", "loc": [ -82.134148, 39.366177 ], "pop": 3567, "state": "OH" }, { "_id": "45784", "city": "VINCENT", "loc": [ -81.67426500000001, 39.337446 ], "pop": 1524, "state": "OH" }, { "_id": "45786", "city": "WATERFORD", "loc": [ -81.655917, 39.515904 ], "pop": 3932, "state": "OH" }, { "_id": "45788", "city": "WHIPPLE", "loc": [ -81.36363900000001, 39.480975 ], "pop": 1835, "state": "OH" }, { "_id": "45789", "city": "WINGETT RUN", "loc": [ -81.28399899999999, 39.542813 ], "pop": 365, "state": "OH" }, { "_id": "45801", "city": "LIMA", "loc": [ -84.097296, 40.764066 ], "pop": 27344, "state": "OH" }, { "_id": "45804", "city": "LIMA", "loc": [ -84.089023, 40.727476 ], "pop": 19289, "state": "OH" }, { "_id": "45805", "city": "LIMA", "loc": [ -84.14591, 40.739911 ], "pop": 23080, "state": "OH" }, { "_id": "45806", "city": "CRIDERSVILLE", "loc": [ -84.144049, 40.675926 ], "pop": 12250, "state": "OH" }, { "_id": "45807", "city": "ELIDA", "loc": [ -84.163966, 40.791599 ], "pop": 9531, "state": "OH" }, { "_id": "45810", "city": "ADA", "loc": [ -83.81540200000001, 40.770931 ], "pop": 7299, "state": "OH" }, { "_id": "45812", "city": "ALGER", "loc": [ -83.825011, 40.705967 ], "pop": 2394, "state": "OH" }, { "_id": "45813", "city": "ANTWERP", "loc": [ -84.74479599999999, 41.188736 ], "pop": 3039, "state": "OH" }, { "_id": "45814", "city": "ARLINGTON", "loc": [ -83.668536, 40.876109 ], "pop": 2603, "state": "OH" }, { "_id": "45817", "city": "BLUFFTON", "loc": [ -83.891397, 40.878978 ], "pop": 6055, "state": "OH" }, { "_id": "45821", "city": "CECIL", "loc": [ -84.62964599999999, 41.217355 ], "pop": 1527, "state": "OH" }, { "_id": "45822", "city": "CARTHAGENA", "loc": [ -84.57006699999999, 40.546074 ], "pop": 18799, "state": "OH" }, { "_id": "45827", "city": "CLOVERDALE", "loc": [ -84.29382, 41.037934 ], "pop": 1225, "state": "OH" }, { "_id": "45828", "city": "COLDWATER", "loc": [ -84.651653, 40.484557 ], "pop": 6677, "state": "OH" }, { "_id": "45830", "city": "COLUMBUS GROVE", "loc": [ -84.07046699999999, 40.91372 ], "pop": 6030, "state": "OH" }, { "_id": "45831", "city": "CONTINENTAL", "loc": [ -84.235778, 41.114769 ], "pop": 3518, "state": "OH" }, { "_id": "45832", "city": "CONVOY", "loc": [ -84.723772, 40.926998 ], "pop": 2134, "state": "OH" }, { "_id": "45833", "city": "DELPHOS", "loc": [ -84.32467800000001, 40.833619 ], "pop": 10062, "state": "OH" }, { "_id": "45835", "city": "DOLA", "loc": [ -83.68937099999999, 40.787645 ], "pop": 256, "state": "OH" }, { "_id": "45836", "city": "DUNKIRK", "loc": [ -83.633912, 40.782375 ], "pop": 1522, "state": "OH" }, { "_id": "45840", "city": "FINDLAY", "loc": [ -83.645656, 41.044903 ], "pop": 48109, "state": "OH" }, { "_id": "45841", "city": "JENERA", "loc": [ -83.725628, 40.900388 ], "pop": 335, "state": "OH" }, { "_id": "45843", "city": "PATTERSON", "loc": [ -83.509771, 40.79955 ], "pop": 3333, "state": "OH" }, { "_id": "45844", "city": "FORT JENNINGS", "loc": [ -84.237381, 40.948393 ], "pop": 5287, "state": "OH" }, { "_id": "45845", "city": "FORT LORAMIE", "loc": [ -84.37413100000001, 40.330632 ], "pop": 2639, "state": "OH" }, { "_id": "45846", "city": "FORT RECOVERY", "loc": [ -84.76125, 40.401829 ], "pop": 3555, "state": "OH" }, { "_id": "45849", "city": "GROVER HILL", "loc": [ -84.49560099999999, 41.024497 ], "pop": 1113, "state": "OH" }, { "_id": "45850", "city": "HARROD", "loc": [ -83.94364899999999, 40.717657 ], "pop": 4897, "state": "OH" }, { "_id": "45851", "city": "HAVILAND", "loc": [ -84.6139, 41.032911 ], "pop": 659, "state": "OH" }, { "_id": "45856", "city": "LEIPSIC", "loc": [ -83.995723, 41.109197 ], "pop": 4657, "state": "OH" }, { "_id": "45858", "city": "MC COMB", "loc": [ -83.801423, 41.112498 ], "pop": 2298, "state": "OH" }, { "_id": "45860", "city": "MARIA STEIN", "loc": [ -84.50757900000001, 40.406225 ], "pop": 2284, "state": "OH" }, { "_id": "45862", "city": "MENDON", "loc": [ -84.51515000000001, 40.677737 ], "pop": 1527, "state": "OH" }, { "_id": "45863", "city": "MIDDLE POINT", "loc": [ -84.417495, 40.873147 ], "pop": 2691, "state": "OH" }, { "_id": "45865", "city": "MINSTER", "loc": [ -84.372895, 40.390983 ], "pop": 4436, "state": "OH" }, { "_id": "45867", "city": "MOUNT BLANCHARD", "loc": [ -83.555286, 40.892929 ], "pop": 957, "state": "OH" }, { "_id": "45868", "city": "MOUNT CORY", "loc": [ -83.809285, 40.943717 ], "pop": 1553, "state": "OH" }, { "_id": "45869", "city": "NEW BREMEN", "loc": [ -84.38209999999999, 40.438917 ], "pop": 3400, "state": "OH" }, { "_id": "45871", "city": "NEW KNOXVILLE", "loc": [ -84.311797, 40.50386 ], "pop": 2003, "state": "OH" }, { "_id": "45872", "city": "NORTH BALTIMORE", "loc": [ -83.680581, 41.186703 ], "pop": 3820, "state": "OH" }, { "_id": "45873", "city": "OAKWOOD", "loc": [ -84.396923, 41.090788 ], "pop": 3129, "state": "OH" }, { "_id": "45874", "city": "OHIO CITY", "loc": [ -84.673063, 40.785428 ], "pop": 3117, "state": "OH" }, { "_id": "45875", "city": "GILBOA", "loc": [ -84.047293, 41.029747 ], "pop": 10177, "state": "OH" }, { "_id": "45876", "city": "OTTOVILLE", "loc": [ -84.347392, 40.937218 ], "pop": 1972, "state": "OH" }, { "_id": "45877", "city": "PANDORA", "loc": [ -83.952073, 40.95087 ], "pop": 2026, "state": "OH" }, { "_id": "45879", "city": "PAULDING", "loc": [ -84.572227, 41.141016 ], "pop": 6565, "state": "OH" }, { "_id": "45880", "city": "PAYNE", "loc": [ -84.734127, 41.08069 ], "pop": 2766, "state": "OH" }, { "_id": "45881", "city": "RAWSON", "loc": [ -83.806951, 41.000135 ], "pop": 955, "state": "OH" }, { "_id": "45882", "city": "ROCKFORD", "loc": [ -84.664174, 40.677077 ], "pop": 3038, "state": "OH" }, { "_id": "45883", "city": "SAINT HENRY", "loc": [ -84.63333799999999, 40.409138 ], "pop": 3615, "state": "OH" }, { "_id": "45885", "city": "SAINT MARYS", "loc": [ -84.39439900000001, 40.543988 ], "pop": 13066, "state": "OH" }, { "_id": "45886", "city": "SCOTT", "loc": [ -84.58445500000001, 40.989238 ], "pop": 397, "state": "OH" }, { "_id": "45887", "city": "SPENCERVILLE", "loc": [ -84.34125, 40.703767 ], "pop": 5745, "state": "OH" }, { "_id": "45889", "city": "VAN BUREN", "loc": [ -83.647302, 41.132691 ], "pop": 1232, "state": "OH" }, { "_id": "45890", "city": "VANLUE", "loc": [ -83.497062, 40.958314 ], "pop": 901, "state": "OH" }, { "_id": "45891", "city": "VAN WERT", "loc": [ -84.59036399999999, 40.868927 ], "pop": 16625, "state": "OH" }, { "_id": "45894", "city": "VENEDOCIA", "loc": [ -84.46204, 40.768454 ], "pop": 966, "state": "OH" }, { "_id": "45895", "city": "WAPAKONETA", "loc": [ -84.177378, 40.568978 ], "pop": 16364, "state": "OH" }, { "_id": "45896", "city": "WAYNESFIELD", "loc": [ -83.95847500000001, 40.607185 ], "pop": 1648, "state": "OH" }, { "_id": "45898", "city": "WILLSHIRE", "loc": [ -84.77773000000001, 40.734618 ], "pop": 1265, "state": "OH" }, { "_id": "46001", "city": "ALEXANDRIA", "loc": [ -85.668148, 40.256081 ], "pop": 11011, "state": "IN" }, { "_id": "46011", "city": "ANDERSON", "loc": [ -85.72530500000001, 40.114577 ], "pop": 17280, "state": "IN" }, { "_id": "46012", "city": "ANDERSON", "loc": [ -85.65359100000001, 40.130947 ], "pop": 20949, "state": "IN" }, { "_id": "46013", "city": "ANDERSON", "loc": [ -85.68007299999999, 40.061865 ], "pop": 17037, "state": "IN" }, { "_id": "46016", "city": "ANDERSON", "loc": [ -85.684566, 40.098799 ], "pop": 22838, "state": "IN" }, { "_id": "46017", "city": "CHESTERFIELD", "loc": [ -85.601493, 40.096431 ], "pop": 6038, "state": "IN" }, { "_id": "46030", "city": "ARCADIA", "loc": [ -86.040882, 40.17758 ], "pop": 4137, "state": "IN" }, { "_id": "46031", "city": "ATLANTA", "loc": [ -85.93394499999999, 40.146964 ], "pop": 2450, "state": "IN" }, { "_id": "46032", "city": "CARMEL", "loc": [ -86.124545, 39.971232 ], "pop": 40090, "state": "IN" }, { "_id": "46034", "city": "CICERO", "loc": [ -86.024844, 40.126781 ], "pop": 4309, "state": "IN" }, { "_id": "46035", "city": "COLFAX", "loc": [ -86.659271, 40.195619 ], "pop": 1343, "state": "IN" }, { "_id": "46036", "city": "ELWOOD", "loc": [ -85.839055, 40.280278 ], "pop": 13598, "state": "IN" }, { "_id": "46038", "city": "FISHERS", "loc": [ -86.023048, 39.957486 ], "pop": 11918, "state": "IN" }, { "_id": "46039", "city": "FOREST", "loc": [ -86.320098, 40.375728 ], "pop": 879, "state": "IN" }, { "_id": "46040", "city": "FORTVILLE", "loc": [ -85.81855400000001, 39.922835 ], "pop": 5887, "state": "IN" }, { "_id": "46041", "city": "HILLISBURG", "loc": [ -86.511387, 40.288404 ], "pop": 20713, "state": "IN" }, { "_id": "46044", "city": "FRANKTON", "loc": [ -85.77911, 40.228548 ], "pop": 3723, "state": "IN" }, { "_id": "46048", "city": "INGALLS", "loc": [ -85.825596, 40.000237 ], "pop": 763, "state": "IN" }, { "_id": "46049", "city": "KEMPTON", "loc": [ -86.1887, 40.275946 ], "pop": 1501, "state": "IN" }, { "_id": "46050", "city": "KIRKLIN", "loc": [ -86.33237200000001, 40.203066 ], "pop": 2038, "state": "IN" }, { "_id": "46051", "city": "LAPEL", "loc": [ -85.84395000000001, 40.085429 ], "pop": 3221, "state": "IN" }, { "_id": "46052", "city": "LEBANON", "loc": [ -86.464074, 40.044894 ], "pop": 17322, "state": "IN" }, { "_id": "46055", "city": "MC CORDSVILLE", "loc": [ -85.909502, 39.901823 ], "pop": 1450, "state": "IN" }, { "_id": "46056", "city": "MARKLEVILLE", "loc": [ -85.622736, 39.994385 ], "pop": 2957, "state": "IN" }, { "_id": "46057", "city": "MICHIGANTOWN", "loc": [ -86.37530599999999, 40.310823 ], "pop": 2207, "state": "IN" }, { "_id": "46058", "city": "MULBERRY", "loc": [ -86.661261, 40.343299 ], "pop": 1938, "state": "IN" }, { "_id": "46060", "city": "NOBLESVILLE", "loc": [ -86.016294, 40.056292 ], "pop": 26318, "state": "IN" }, { "_id": "46064", "city": "PENDLETON", "loc": [ -85.794614, 39.979237 ], "pop": 13824, "state": "IN" }, { "_id": "46065", "city": "ROSSVILLE", "loc": [ -86.607966, 40.410928 ], "pop": 2217, "state": "IN" }, { "_id": "46068", "city": "SHARPSVILLE", "loc": [ -86.10864100000001, 40.373232 ], "pop": 3570, "state": "IN" }, { "_id": "46069", "city": "SHERIDAN", "loc": [ -86.23674099999999, 40.110407 ], "pop": 7155, "state": "IN" }, { "_id": "46070", "city": "SUMMITVILLE", "loc": [ -85.640261, 40.339833 ], "pop": 1902, "state": "IN" }, { "_id": "46071", "city": "THORNTOWN", "loc": [ -86.589822, 40.113335 ], "pop": 4159, "state": "IN" }, { "_id": "46072", "city": "TIPTON", "loc": [ -86.043291, 40.281725 ], "pop": 8060, "state": "IN" }, { "_id": "46074", "city": "WESTFIELD", "loc": [ -86.149907, 40.048868 ], "pop": 6841, "state": "IN" }, { "_id": "46075", "city": "WHITESTOWN", "loc": [ -86.35071600000001, 40.00002 ], "pop": 1378, "state": "IN" }, { "_id": "46076", "city": "WINDFALL", "loc": [ -85.947624, 40.366891 ], "pop": 1535, "state": "IN" }, { "_id": "46077", "city": "ZIONSVILLE", "loc": [ -86.276737, 39.956111 ], "pop": 9759, "state": "IN" }, { "_id": "46104", "city": "ARLINGTON", "loc": [ -85.582775, 39.648791 ], "pop": 1194, "state": "IN" }, { "_id": "46105", "city": "BAINBRIDGE", "loc": [ -86.771119, 39.740664 ], "pop": 3147, "state": "IN" }, { "_id": "46106", "city": "BARGERSVILLE", "loc": [ -86.179687, 39.499989 ], "pop": 3310, "state": "IN" }, { "_id": "46107", "city": "BEECH GROVE", "loc": [ -86.093299, 39.715434 ], "pop": 13051, "state": "IN" }, { "_id": "46110", "city": "BOGGSTOWN", "loc": [ -85.915965, 39.568331 ], "pop": 958, "state": "IN" }, { "_id": "46112", "city": "BROWNSBURG", "loc": [ -86.386933, 39.846605 ], "pop": 18768, "state": "IN" }, { "_id": "46113", "city": "CAMBY", "loc": [ -86.31181100000001, 39.640501 ], "pop": 2681, "state": "IN" }, { "_id": "46115", "city": "CARTHAGE", "loc": [ -85.575382, 39.746627 ], "pop": 1910, "state": "IN" }, { "_id": "46117", "city": "CHARLOTTESVILLE", "loc": [ -85.653599, 39.811981 ], "pop": 1762, "state": "IN" }, { "_id": "46118", "city": "CLAYTON", "loc": [ -86.495921, 39.668154 ], "pop": 4566, "state": "IN" }, { "_id": "46120", "city": "CLOVERDALE", "loc": [ -86.814021, 39.543442 ], "pop": 7062, "state": "IN" }, { "_id": "46121", "city": "COATESVILLE", "loc": [ -86.63144699999999, 39.693041 ], "pop": 1992, "state": "IN" }, { "_id": "46122", "city": "DANVILLE", "loc": [ -86.534254, 39.762815 ], "pop": 8632, "state": "IN" }, { "_id": "46124", "city": "EDINBURGH", "loc": [ -85.97071200000001, 39.362601 ], "pop": 5115, "state": "IN" }, { "_id": "46126", "city": "FAIRLAND", "loc": [ -85.891284, 39.629467 ], "pop": 6682, "state": "IN" }, { "_id": "46127", "city": "FALMOUTH", "loc": [ -85.352423, 39.743617 ], "pop": 531, "state": "IN" }, { "_id": "46128", "city": "FILLMORE", "loc": [ -86.746861, 39.647518 ], "pop": 1711, "state": "IN" }, { "_id": "46130", "city": "FOUNTAINTOWN", "loc": [ -85.78482700000001, 39.675131 ], "pop": 1555, "state": "IN" }, { "_id": "46131", "city": "FRANKLIN", "loc": [ -86.06075199999999, 39.485389 ], "pop": 14959, "state": "IN" }, { "_id": "46133", "city": "GLENWOOD", "loc": [ -85.273532, 39.612436 ], "pop": 149, "state": "IN" }, { "_id": "46135", "city": "GREENCASTLE", "loc": [ -86.86861399999999, 39.649487 ], "pop": 13300, "state": "IN" }, { "_id": "46140", "city": "GREENFIELD", "loc": [ -85.81410200000001, 39.790204 ], "pop": 28919, "state": "IN" }, { "_id": "46142", "city": "GREENWOOD", "loc": [ -86.148993, 39.622398 ], "pop": 24735, "state": "IN" }, { "_id": "46143", "city": "GREENWOOD", "loc": [ -86.13091900000001, 39.596037 ], "pop": 24633, "state": "IN" }, { "_id": "46147", "city": "JAMESTOWN", "loc": [ -86.623561, 39.95789 ], "pop": 2355, "state": "IN" }, { "_id": "46148", "city": "KNIGHTSTOWN", "loc": [ -85.52614800000001, 39.806029 ], "pop": 3842, "state": "IN" }, { "_id": "46149", "city": "LIZTON", "loc": [ -86.542857, 39.884326 ], "pop": 1586, "state": "IN" }, { "_id": "46150", "city": "MANILLA", "loc": [ -85.635369, 39.575711 ], "pop": 1696, "state": "IN" }, { "_id": "46151", "city": "CENTERTON", "loc": [ -86.42901000000001, 39.447646 ], "pop": 31539, "state": "IN" }, { "_id": "46156", "city": "MILROY", "loc": [ -85.50437100000001, 39.495474 ], "pop": 2154, "state": "IN" }, { "_id": "46157", "city": "MONROVIA", "loc": [ -86.48936999999999, 39.571397 ], "pop": 2205, "state": "IN" }, { "_id": "46158", "city": "MOORESVILLE", "loc": [ -86.36417299999999, 39.591469 ], "pop": 18800, "state": "IN" }, { "_id": "46160", "city": "MORGANTOWN", "loc": [ -86.280297, 39.362841 ], "pop": 2193, "state": "IN" }, { "_id": "46161", "city": "MORRISTOWN", "loc": [ -85.69341900000001, 39.667477 ], "pop": 2215, "state": "IN" }, { "_id": "46162", "city": "NEEDHAM", "loc": [ -86.00409399999999, 39.477935 ], "pop": 2353, "state": "IN" }, { "_id": "46163", "city": "NEW PALESTINE", "loc": [ -85.90515000000001, 39.723264 ], "pop": 3794, "state": "IN" }, { "_id": "46164", "city": "NINEVEH", "loc": [ -86.097641, 39.365597 ], "pop": 3528, "state": "IN" }, { "_id": "46165", "city": "NORTH SALEM", "loc": [ -86.63883300000001, 39.867051 ], "pop": 1541, "state": "IN" }, { "_id": "46166", "city": "PARAGON", "loc": [ -86.577867, 39.404203 ], "pop": 1244, "state": "IN" }, { "_id": "46167", "city": "PITTSBORO", "loc": [ -86.46454799999999, 39.861529 ], "pop": 3466, "state": "IN" }, { "_id": "46168", "city": "AVON", "loc": [ -86.395061, 39.716036 ], "pop": 29182, "state": "IN" }, { "_id": "46171", "city": "REELSVILLE", "loc": [ -86.94998, 39.546416 ], "pop": 2027, "state": "IN" }, { "_id": "46172", "city": "ROACHDALE", "loc": [ -86.79022500000001, 39.832545 ], "pop": 2293, "state": "IN" }, { "_id": "46173", "city": "RUSHVILLE", "loc": [ -85.43212, 39.619232 ], "pop": 11721, "state": "IN" }, { "_id": "46175", "city": "RUSSELLVILLE", "loc": [ -86.96697500000001, 39.836598 ], "pop": 775, "state": "IN" }, { "_id": "46176", "city": "SHELBYVILLE", "loc": [ -85.787515, 39.50434 ], "pop": 24691, "state": "IN" }, { "_id": "46180", "city": "STILESVILLE", "loc": [ -86.61819, 39.639113 ], "pop": 1135, "state": "IN" }, { "_id": "46181", "city": "TRAFALGAR", "loc": [ -86.18379299999999, 39.369585 ], "pop": 3538, "state": "IN" }, { "_id": "46182", "city": "WALDRON", "loc": [ -85.664407, 39.468849 ], "pop": 1878, "state": "IN" }, { "_id": "46184", "city": "NEW WHITELAND", "loc": [ -86.093476, 39.555313 ], "pop": 7226, "state": "IN" }, { "_id": "46186", "city": "WILKINSON", "loc": [ -85.61436, 39.895668 ], "pop": 2567, "state": "IN" }, { "_id": "46201", "city": "INDIANAPOLIS", "loc": [ -86.109348, 39.775006 ], "pop": 42096, "state": "IN" }, { "_id": "46202", "city": "INDIANAPOLIS", "loc": [ -86.159502, 39.785063 ], "pop": 15672, "state": "IN" }, { "_id": "46203", "city": "INDIANAPOLIS", "loc": [ -86.117859, 39.743025 ], "pop": 42566, "state": "IN" }, { "_id": "46204", "city": "INDIANAPOLIS", "loc": [ -86.153491, 39.771986 ], "pop": 4327, "state": "IN" }, { "_id": "46205", "city": "INDIANAPOLIS", "loc": [ -86.138582, 39.826761 ], "pop": 35328, "state": "IN" }, { "_id": "46208", "city": "INDIANAPOLIS", "loc": [ -86.179444, 39.829905 ], "pop": 39610, "state": "IN" }, { "_id": "46214", "city": "EAGLE CREEK", "loc": [ -86.289952, 39.792678 ], "pop": 16644, "state": "IN" }, { "_id": "46216", "city": "FORT BENJAMIN HA", "loc": [ -86.016688, 39.857731 ], "pop": 1566, "state": "IN" }, { "_id": "46217", "city": "SOUTHPORT", "loc": [ -86.175394, 39.664141 ], "pop": 16644, "state": "IN" }, { "_id": "46218", "city": "INDIANAPOLIS", "loc": [ -86.10142500000001, 39.80817 ], "pop": 39965, "state": "IN" }, { "_id": "46219", "city": "INDIANAPOLIS", "loc": [ -86.049533, 39.782092 ], "pop": 38198, "state": "IN" }, { "_id": "46220", "city": "INDIANAPOLIS", "loc": [ -86.11815, 39.864685 ], "pop": 35482, "state": "IN" }, { "_id": "46221", "city": "INDIANAPOLIS", "loc": [ -86.19243, 39.750885 ], "pop": 7920, "state": "IN" }, { "_id": "46222", "city": "INDIANAPOLIS", "loc": [ -86.21357399999999, 39.788971 ], "pop": 39240, "state": "IN" }, { "_id": "46224", "city": "SPEEDWAY", "loc": [ -86.25730799999999, 39.798674 ], "pop": 32130, "state": "IN" }, { "_id": "46225", "city": "INDIANAPOLIS", "loc": [ -86.156944, 39.740599 ], "pop": 8464, "state": "IN" }, { "_id": "46226", "city": "LAWRENCE", "loc": [ -86.048945, 39.836969 ], "pop": 47144, "state": "IN" }, { "_id": "46227", "city": "SOUTHPORT", "loc": [ -86.129817, 39.675 ], "pop": 52257, "state": "IN" }, { "_id": "46229", "city": "CUMBERLAND", "loc": [ -85.98382599999999, 39.792219 ], "pop": 19914, "state": "IN" }, { "_id": "46231", "city": "BRIDGEPORT", "loc": [ -86.31828899999999, 39.740637 ], "pop": 5531, "state": "IN" }, { "_id": "46234", "city": "CLERMONT", "loc": [ -86.324117, 39.788438 ], "pop": 13865, "state": "IN" }, { "_id": "46236", "city": "OAKLANDON", "loc": [ -85.98505900000001, 39.849588 ], "pop": 31475, "state": "IN" }, { "_id": "46237", "city": "SOUTHPORT", "loc": [ -86.07890999999999, 39.686777 ], "pop": 18919, "state": "IN" }, { "_id": "46239", "city": "WANAMAKER", "loc": [ -86.00820899999999, 39.721826 ], "pop": 8611, "state": "IN" }, { "_id": "46240", "city": "NORA", "loc": [ -86.129548, 39.9057 ], "pop": 17553, "state": "IN" }, { "_id": "46241", "city": "PARK FLETCHER", "loc": [ -86.250856, 39.723814 ], "pop": 44731, "state": "IN" }, { "_id": "46250", "city": "CASTLETON", "loc": [ -86.069112, 39.9069 ], "pop": 17196, "state": "IN" }, { "_id": "46254", "city": "EAGLE CREEK", "loc": [ -86.2638, 39.841379 ], "pop": 23015, "state": "IN" }, { "_id": "46256", "city": "CASTLETON", "loc": [ -86.023877, 39.90114 ], "pop": 20589, "state": "IN" }, { "_id": "46259", "city": "ACTON", "loc": [ -85.992603, 39.660901 ], "pop": 3642, "state": "IN" }, { "_id": "46260", "city": "NORA", "loc": [ -86.184809, 39.897488 ], "pop": 29718, "state": "IN" }, { "_id": "46268", "city": "NEW AUGUSTA", "loc": [ -86.222104, 39.900296 ], "pop": 14109, "state": "IN" }, { "_id": "46278", "city": "NEW AUGUSTA", "loc": [ -86.291455, 39.883858 ], "pop": 4727, "state": "IN" }, { "_id": "46280", "city": "NORA", "loc": [ -86.13894000000001, 39.938417 ], "pop": 5281, "state": "IN" }, { "_id": "46290", "city": "NORA", "loc": [ -86.167118, 39.93077 ], "pop": 75, "state": "IN" }, { "_id": "46303", "city": "EAST CEDAR LAKE", "loc": [ -87.444509, 41.377338 ], "pop": 11557, "state": "IN" }, { "_id": "46304", "city": "PORTER", "loc": [ -87.050196, 41.603949 ], "pop": 19024, "state": "IN" }, { "_id": "46307", "city": "CROWN POINT", "loc": [ -87.355586, 41.423571 ], "pop": 37816, "state": "IN" }, { "_id": "46310", "city": "DEMOTTE", "loc": [ -87.249129, 41.171319 ], "pop": 10188, "state": "IN" }, { "_id": "46311", "city": "DYER", "loc": [ -87.510803, 41.491976 ], "pop": 13426, "state": "IN" }, { "_id": "46312", "city": "EAST CHICAGO", "loc": [ -87.462734, 41.634893 ], "pop": 33775, "state": "IN" }, { "_id": "46319", "city": "GRIFFITH", "loc": [ -87.422837, 41.53352 ], "pop": 19758, "state": "IN" }, { "_id": "46320", "city": "HAMMOND", "loc": [ -87.50791099999999, 41.609929 ], "pop": 16636, "state": "IN" }, { "_id": "46321", "city": "MUNSTER", "loc": [ -87.50110100000001, 41.554438 ], "pop": 19906, "state": "IN" }, { "_id": "46322", "city": "HIGHLAND", "loc": [ -87.45691100000001, 41.55005 ], "pop": 24029, "state": "IN" }, { "_id": "46323", "city": "HAMMOND", "loc": [ -87.45319600000001, 41.587755 ], "pop": 23456, "state": "IN" }, { "_id": "46324", "city": "HAMMOND", "loc": [ -87.503393, 41.583954 ], "pop": 23585, "state": "IN" }, { "_id": "46327", "city": "HAMMOND", "loc": [ -87.51134999999999, 41.632695 ], "pop": 12384, "state": "IN" }, { "_id": "46340", "city": "HANNA", "loc": [ -86.77592199999999, 41.408767 ], "pop": 941, "state": "IN" }, { "_id": "46341", "city": "HEBRON", "loc": [ -87.20879100000001, 41.315537 ], "pop": 6230, "state": "IN" }, { "_id": "46342", "city": "HOBART", "loc": [ -87.252499, 41.526281 ], "pop": 32127, "state": "IN" }, { "_id": "46347", "city": "KOUTS", "loc": [ -87.02404300000001, 41.309085 ], "pop": 3244, "state": "IN" }, { "_id": "46348", "city": "LA CROSSE", "loc": [ -86.868216, 41.315709 ], "pop": 1352, "state": "IN" }, { "_id": "46349", "city": "LAKE VILLAGE", "loc": [ -87.44542199999999, 41.138741 ], "pop": 2208, "state": "IN" }, { "_id": "46350", "city": "LA PORTE", "loc": [ -86.70765400000001, 41.599438 ], "pop": 36301, "state": "IN" }, { "_id": "46356", "city": "LOWELL", "loc": [ -87.419072, 41.284531 ], "pop": 12579, "state": "IN" }, { "_id": "46360", "city": "MICHIGAN CITY", "loc": [ -86.869899, 41.698031 ], "pop": 55392, "state": "IN" }, { "_id": "46365", "city": "MILL CREEK", "loc": [ -86.547247, 41.556102 ], "pop": 2091, "state": "IN" }, { "_id": "46366", "city": "NORTH JUDSON", "loc": [ -86.696601, 41.224372 ], "pop": 8426, "state": "IN" }, { "_id": "46368", "city": "PORTAGE", "loc": [ -87.17568900000001, 41.567201 ], "pop": 40860, "state": "IN" }, { "_id": "46371", "city": "ROLLING PRAIRIE", "loc": [ -86.584092, 41.72286 ], "pop": 3694, "state": "IN" }, { "_id": "46373", "city": "SAINT JOHN", "loc": [ -87.476376, 41.44949 ], "pop": 4786, "state": "IN" }, { "_id": "46374", "city": "SAN PIERRE", "loc": [ -86.87253200000001, 41.21108 ], "pop": 1499, "state": "IN" }, { "_id": "46375", "city": "SCHERERVILLE", "loc": [ -87.460532, 41.492233 ], "pop": 14152, "state": "IN" }, { "_id": "46382", "city": "UNION MILLS", "loc": [ -86.83551199999999, 41.460236 ], "pop": 3155, "state": "IN" }, { "_id": "46383", "city": "VALPARAISO", "loc": [ -87.075866, 41.475661 ], "pop": 53439, "state": "IN" }, { "_id": "46390", "city": "WANATAH", "loc": [ -86.876439, 41.384477 ], "pop": 711, "state": "IN" }, { "_id": "46391", "city": "WESTVILLE", "loc": [ -86.90131700000001, 41.536516 ], "pop": 6212, "state": "IN" }, { "_id": "46392", "city": "WHEATFIELD", "loc": [ -87.06987599999999, 41.177948 ], "pop": 5415, "state": "IN" }, { "_id": "46394", "city": "WHITING", "loc": [ -87.50053699999999, 41.678656 ], "pop": 13157, "state": "IN" }, { "_id": "46402", "city": "GARY", "loc": [ -87.338548, 41.599711 ], "pop": 10873, "state": "IN" }, { "_id": "46403", "city": "GARY", "loc": [ -87.258984, 41.603612 ], "pop": 16489, "state": "IN" }, { "_id": "46404", "city": "GARY", "loc": [ -87.373153, 41.589937 ], "pop": 23031, "state": "IN" }, { "_id": "46405", "city": "LAKE STATION", "loc": [ -87.262209, 41.568629 ], "pop": 12437, "state": "IN" }, { "_id": "46406", "city": "GARY", "loc": [ -87.40621, 41.587806 ], "pop": 15132, "state": "IN" }, { "_id": "46407", "city": "GARY", "loc": [ -87.334958, 41.580429 ], "pop": 21360, "state": "IN" }, { "_id": "46408", "city": "GARY", "loc": [ -87.35883, 41.542178 ], "pop": 21586, "state": "IN" }, { "_id": "46409", "city": "GARY", "loc": [ -87.32712600000001, 41.541247 ], "pop": 14119, "state": "IN" }, { "_id": "46410", "city": "MERRILLVILLE", "loc": [ -87.350932, 41.4957 ], "pop": 30765, "state": "IN" }, { "_id": "46501", "city": "ARGOS", "loc": [ -86.250573, 41.230827 ], "pop": 3630, "state": "IN" }, { "_id": "46504", "city": "BOURBON", "loc": [ -86.11743800000001, 41.309785 ], "pop": 2976, "state": "IN" }, { "_id": "46506", "city": "BREMEN", "loc": [ -86.19323, 41.446701 ], "pop": 13832, "state": "IN" }, { "_id": "46507", "city": "BRISTOL", "loc": [ -85.82619200000001, 41.716885 ], "pop": 7086, "state": "IN" }, { "_id": "46510", "city": "CLAYPOOL", "loc": [ -85.868571, 41.116497 ], "pop": 4891, "state": "IN" }, { "_id": "46511", "city": "CULVER MILITARY", "loc": [ -86.412888, 41.22307 ], "pop": 3289, "state": "IN" }, { "_id": "46514", "city": "ELKHART", "loc": [ -85.972949, 41.710083 ], "pop": 33830, "state": "IN" }, { "_id": "46516", "city": "ELKHART", "loc": [ -85.962137, 41.676333 ], "pop": 29971, "state": "IN" }, { "_id": "46517", "city": "ELKHART", "loc": [ -85.972849, 41.646922 ], "pop": 17983, "state": "IN" }, { "_id": "46524", "city": "ETNA GREEN", "loc": [ -86.034995, 41.291789 ], "pop": 1290, "state": "IN" }, { "_id": "46526", "city": "FORAKER", "loc": [ -85.837988, 41.584484 ], "pop": 41317, "state": "IN" }, { "_id": "46530", "city": "GRANGER", "loc": [ -86.141104, 41.742704 ], "pop": 17591, "state": "IN" }, { "_id": "46531", "city": "GROVERTOWN", "loc": [ -86.52890499999999, 41.321969 ], "pop": 1077, "state": "IN" }, { "_id": "46532", "city": "HAMLET", "loc": [ -86.53213, 41.393338 ], "pop": 4314, "state": "IN" }, { "_id": "46534", "city": "OBER", "loc": [ -86.610715, 41.29006 ], "pop": 7437, "state": "IN" }, { "_id": "46536", "city": "LAKEVILLE", "loc": [ -86.27144, 41.525328 ], "pop": 3355, "state": "IN" }, { "_id": "46538", "city": "LEESBURG", "loc": [ -85.816028, 41.326592 ], "pop": 1823, "state": "IN" }, { "_id": "46539", "city": "MENTONE", "loc": [ -86.029918, 41.161494 ], "pop": 2163, "state": "IN" }, { "_id": "46540", "city": "MIDDLEBURY", "loc": [ -85.711443, 41.675415 ], "pop": 7737, "state": "IN" }, { "_id": "46542", "city": "MILFORD", "loc": [ -85.85543800000001, 41.401141 ], "pop": 4861, "state": "IN" }, { "_id": "46543", "city": "MILLERSBURG", "loc": [ -85.707249, 41.533513 ], "pop": 2078, "state": "IN" }, { "_id": "46544", "city": "MISHAWAKA", "loc": [ -86.162301, 41.650659 ], "pop": 29911, "state": "IN" }, { "_id": "46545", "city": "MISHAWAKA", "loc": [ -86.168232, 41.683498 ], "pop": 23031, "state": "IN" }, { "_id": "46550", "city": "NAPPANEE", "loc": [ -85.994534, 41.449297 ], "pop": 10640, "state": "IN" }, { "_id": "46552", "city": "NEW CARLISLE", "loc": [ -86.48382700000001, 41.705115 ], "pop": 3574, "state": "IN" }, { "_id": "46553", "city": "NEW PARIS", "loc": [ -85.83383000000001, 41.491652 ], "pop": 2723, "state": "IN" }, { "_id": "46554", "city": "NORTH LIBERTY", "loc": [ -86.41332800000001, 41.542507 ], "pop": 4056, "state": "IN" }, { "_id": "46555", "city": "NORTH WEBSTER", "loc": [ -85.70787199999999, 41.308423 ], "pop": 6197, "state": "IN" }, { "_id": "46556", "city": "SAINT MARYS", "loc": [ -86.242893, 41.70057 ], "pop": 6903, "state": "IN" }, { "_id": "46561", "city": "OSCEOLA", "loc": [ -86.078883, 41.674074 ], "pop": 8029, "state": "IN" }, { "_id": "46562", "city": "PIERCETON", "loc": [ -85.706119, 41.212406 ], "pop": 3128, "state": "IN" }, { "_id": "46563", "city": "INWOOD", "loc": [ -86.32408700000001, 41.333897 ], "pop": 16087, "state": "IN" }, { "_id": "46565", "city": "SHIPSHEWANA", "loc": [ -85.593198, 41.663257 ], "pop": 3850, "state": "IN" }, { "_id": "46567", "city": "SYRACUSE", "loc": [ -85.718352, 41.40649 ], "pop": 7695, "state": "IN" }, { "_id": "46570", "city": "TIPPECANOE", "loc": [ -86.10950800000001, 41.216609 ], "pop": 1188, "state": "IN" }, { "_id": "46571", "city": "TOPEKA", "loc": [ -85.531668, 41.563441 ], "pop": 5749, "state": "IN" }, { "_id": "46573", "city": "WAKARUSA", "loc": [ -86.02052399999999, 41.540073 ], "pop": 2776, "state": "IN" }, { "_id": "46574", "city": "WALKERTON", "loc": [ -86.451018, 41.445748 ], "pop": 5279, "state": "IN" }, { "_id": "46580", "city": "WARSAW", "loc": [ -85.85078, 41.24377 ], "pop": 22851, "state": "IN" }, { "_id": "46590", "city": "WINONA LAKE", "loc": [ -85.83053099999999, 41.211007 ], "pop": 7559, "state": "IN" }, { "_id": "46601", "city": "SOUTH BEND", "loc": [ -86.253489, 41.672699 ], "pop": 5479, "state": "IN" }, { "_id": "46613", "city": "SOUTH BEND", "loc": [ -86.247865, 41.654636 ], "pop": 11827, "state": "IN" }, { "_id": "46614", "city": "SOUTH BEND", "loc": [ -86.243278, 41.625461 ], "pop": 27521, "state": "IN" }, { "_id": "46615", "city": "SOUTH BEND", "loc": [ -86.210375, 41.67413 ], "pop": 15580, "state": "IN" }, { "_id": "46616", "city": "SOUTH BEND", "loc": [ -86.26473900000001, 41.691894 ], "pop": 8132, "state": "IN" }, { "_id": "46617", "city": "SOUTH BEND", "loc": [ -86.2351, 41.684966 ], "pop": 11057, "state": "IN" }, { "_id": "46619", "city": "SOUTH BEND", "loc": [ -86.31526599999999, 41.667397 ], "pop": 19880, "state": "IN" }, { "_id": "46628", "city": "SOUTH BEND", "loc": [ -86.294929, 41.701525 ], "pop": 24914, "state": "IN" }, { "_id": "46635", "city": "SOUTH BEND", "loc": [ -86.20780600000001, 41.716768 ], "pop": 6989, "state": "IN" }, { "_id": "46637", "city": "SOUTH BEND", "loc": [ -86.240694, 41.729936 ], "pop": 16351, "state": "IN" }, { "_id": "46701", "city": "ALBION", "loc": [ -85.41418299999999, 41.348217 ], "pop": 6907, "state": "IN" }, { "_id": "46702", "city": "ANDREWS", "loc": [ -85.60672599999999, 40.861792 ], "pop": 2138, "state": "IN" }, { "_id": "46703", "city": "ANGOLA", "loc": [ -85.019803, 41.656321 ], "pop": 15134, "state": "IN" }, { "_id": "46705", "city": "ASHLEY", "loc": [ -85.05038500000001, 41.534651 ], "pop": 1272, "state": "IN" }, { "_id": "46706", "city": "AUBURN", "loc": [ -85.046848, 41.359001 ], "pop": 12503, "state": "IN" }, { "_id": "46710", "city": "AVILLA", "loc": [ -85.241418, 41.36894 ], "pop": 2154, "state": "IN" }, { "_id": "46711", "city": "LINN GROVE", "loc": [ -84.934271, 40.661517 ], "pop": 6577, "state": "IN" }, { "_id": "46714", "city": "BLUFFTON", "loc": [ -85.162199, 40.736837 ], "pop": 14669, "state": "IN" }, { "_id": "46721", "city": "BUTLER", "loc": [ -84.878716, 41.42873 ], "pop": 5982, "state": "IN" }, { "_id": "46723", "city": "CHURUBUSCO", "loc": [ -85.324364, 41.228988 ], "pop": 6796, "state": "IN" }, { "_id": "46725", "city": "COLUMBIA CITY", "loc": [ -85.473736, 41.161855 ], "pop": 17282, "state": "IN" }, { "_id": "46730", "city": "CORUNNA", "loc": [ -85.137028, 41.450377 ], "pop": 2373, "state": "IN" }, { "_id": "46731", "city": "CRAIGVILLE", "loc": [ -85.090379, 40.793034 ], "pop": 323, "state": "IN" }, { "_id": "46732", "city": "CROMWELL", "loc": [ -85.603133, 41.37514 ], "pop": 2872, "state": "IN" }, { "_id": "46733", "city": "DECATUR", "loc": [ -84.931432, 40.827333 ], "pop": 19069, "state": "IN" }, { "_id": "46737", "city": "FREMONT", "loc": [ -84.94524699999999, 41.733125 ], "pop": 4248, "state": "IN" }, { "_id": "46738", "city": "GARRETT", "loc": [ -85.13467, 41.348216 ], "pop": 6459, "state": "IN" }, { "_id": "46740", "city": "GENEVA", "loc": [ -84.962074, 40.607129 ], "pop": 3676, "state": "IN" }, { "_id": "46741", "city": "GRABILL", "loc": [ -84.94059300000001, 41.210753 ], "pop": 4267, "state": "IN" }, { "_id": "46742", "city": "HAMILTON", "loc": [ -84.89509200000001, 41.5566 ], "pop": 2344, "state": "IN" }, { "_id": "46743", "city": "HARLAN", "loc": [ -84.838635, 41.228468 ], "pop": 653, "state": "IN" }, { "_id": "46745", "city": "HOAGLAND", "loc": [ -85.00751, 40.952375 ], "pop": 1483, "state": "IN" }, { "_id": "46746", "city": "HOWE", "loc": [ -85.472746, 41.728594 ], "pop": 6040, "state": "IN" }, { "_id": "46747", "city": "HELMER", "loc": [ -85.141953, 41.559887 ], "pop": 2012, "state": "IN" }, { "_id": "46748", "city": "HUNTERTOWN", "loc": [ -85.16772400000001, 41.239113 ], "pop": 2265, "state": "IN" }, { "_id": "46750", "city": "HUNTINGTON", "loc": [ -85.505438, 40.881128 ], "pop": 23716, "state": "IN" }, { "_id": "46755", "city": "KENDALLVILLE", "loc": [ -85.260874, 41.448206 ], "pop": 11784, "state": "IN" }, { "_id": "46759", "city": "KEYSTONE", "loc": [ -85.276748, 40.589667 ], "pop": 518, "state": "IN" }, { "_id": "46760", "city": "KIMMELL", "loc": [ -85.51873399999999, 41.363103 ], "pop": 2095, "state": "IN" }, { "_id": "46761", "city": "LAGRANGE", "loc": [ -85.40401, 41.652008 ], "pop": 8410, "state": "IN" }, { "_id": "46763", "city": "LAOTTO", "loc": [ -85.19008599999999, 41.299119 ], "pop": 3483, "state": "IN" }, { "_id": "46764", "city": "LARWILL", "loc": [ -85.61386899999999, 41.164623 ], "pop": 1496, "state": "IN" }, { "_id": "46765", "city": "LEO", "loc": [ -85.03009299999999, 41.224864 ], "pop": 3047, "state": "IN" }, { "_id": "46766", "city": "LIBERTY CENTER", "loc": [ -85.277411, 40.700159 ], "pop": 1027, "state": "IN" }, { "_id": "46767", "city": "LIGONIER", "loc": [ -85.59272, 41.466175 ], "pop": 5212, "state": "IN" }, { "_id": "46770", "city": "MARKLE", "loc": [ -85.373994, 40.837972 ], "pop": 3084, "state": "IN" }, { "_id": "46772", "city": "MONROE", "loc": [ -84.844128, 40.700523 ], "pop": 873, "state": "IN" }, { "_id": "46773", "city": "MONROEVILLE", "loc": [ -84.89373000000001, 40.987044 ], "pop": 4093, "state": "IN" }, { "_id": "46774", "city": "NEW HAVEN", "loc": [ -85.01173, 41.069856 ], "pop": 12742, "state": "IN" }, { "_id": "46776", "city": "ORLAND", "loc": [ -85.146512, 41.730884 ], "pop": 1326, "state": "IN" }, { "_id": "46777", "city": "OSSIAN", "loc": [ -85.15704100000001, 40.880611 ], "pop": 5394, "state": "IN" }, { "_id": "46779", "city": "PLEASANT LAKE", "loc": [ -85.021276, 41.584255 ], "pop": 1625, "state": "IN" }, { "_id": "46781", "city": "PONETO", "loc": [ -85.25618799999999, 40.641871 ], "pop": 709, "state": "IN" }, { "_id": "46783", "city": "ROANOKE", "loc": [ -85.35263, 40.960003 ], "pop": 4973, "state": "IN" }, { "_id": "46784", "city": "ROME CITY", "loc": [ -85.374303, 41.484907 ], "pop": 3040, "state": "IN" }, { "_id": "46785", "city": "SAINT JOE", "loc": [ -84.90425, 41.324049 ], "pop": 1161, "state": "IN" }, { "_id": "46787", "city": "SOUTH WHITLEY", "loc": [ -85.61425199999999, 41.072635 ], "pop": 3791, "state": "IN" }, { "_id": "46788", "city": "SPENCERVILLE", "loc": [ -84.93975, 41.269555 ], "pop": 1905, "state": "IN" }, { "_id": "46791", "city": "UNIONDALE", "loc": [ -85.273206, 40.871658 ], "pop": 2419, "state": "IN" }, { "_id": "46792", "city": "WARREN", "loc": [ -85.41833699999999, 40.688646 ], "pop": 2404, "state": "IN" }, { "_id": "46793", "city": "WATERLOO", "loc": [ -85.022103, 41.440216 ], "pop": 3802, "state": "IN" }, { "_id": "46794", "city": "WAWAKA", "loc": [ -85.48042700000001, 41.483251 ], "pop": 1545, "state": "IN" }, { "_id": "46795", "city": "WOLCOTTVILLE", "loc": [ -85.314986, 41.556972 ], "pop": 5921, "state": "IN" }, { "_id": "46797", "city": "WOODBURN", "loc": [ -84.892871, 41.136102 ], "pop": 5044, "state": "IN" }, { "_id": "46798", "city": "YODER", "loc": [ -85.19582800000001, 40.937059 ], "pop": 691, "state": "IN" }, { "_id": "46802", "city": "FORT WAYNE", "loc": [ -85.15431, 41.070717 ], "pop": 10837, "state": "IN" }, { "_id": "46803", "city": "FORT WAYNE", "loc": [ -85.10736199999999, 41.069452 ], "pop": 13295, "state": "IN" }, { "_id": "46804", "city": "FORT WAYNE", "loc": [ -85.256013, 41.050843 ], "pop": 23713, "state": "IN" }, { "_id": "46805", "city": "FORT WAYNE", "loc": [ -85.118865, 41.097663 ], "pop": 22657, "state": "IN" }, { "_id": "46806", "city": "FORT WAYNE", "loc": [ -85.113496, 41.047988 ], "pop": 28184, "state": "IN" }, { "_id": "46807", "city": "FORT WAYNE", "loc": [ -85.14616700000001, 41.049054 ], "pop": 18346, "state": "IN" }, { "_id": "46808", "city": "FORT WAYNE", "loc": [ -85.162121, 41.093877 ], "pop": 19401, "state": "IN" }, { "_id": "46809", "city": "FORT WAYNE", "loc": [ -85.18340000000001, 41.02543 ], "pop": 9804, "state": "IN" }, { "_id": "46815", "city": "FORT WAYNE", "loc": [ -85.062397, 41.105318 ], "pop": 25377, "state": "IN" }, { "_id": "46816", "city": "FORT WAYNE", "loc": [ -85.097573, 41.016519 ], "pop": 15507, "state": "IN" }, { "_id": "46818", "city": "FORT WAYNE", "loc": [ -85.206686, 41.146847 ], "pop": 10155, "state": "IN" }, { "_id": "46819", "city": "FORT WAYNE", "loc": [ -85.152743, 41.005167 ], "pop": 9139, "state": "IN" }, { "_id": "46825", "city": "FORT WAYNE", "loc": [ -85.12315599999999, 41.146482 ], "pop": 19522, "state": "IN" }, { "_id": "46835", "city": "FORT WAYNE", "loc": [ -85.06853099999999, 41.137051 ], "pop": 26758, "state": "IN" }, { "_id": "46845", "city": "FORT WAYNE", "loc": [ -85.119088, 41.195783 ], "pop": 9168, "state": "IN" }, { "_id": "46901", "city": "KOKOMO", "loc": [ -86.145273, 40.49884 ], "pop": 37261, "state": "IN" }, { "_id": "46902", "city": "KOKOMO", "loc": [ -86.135227, 40.450856 ], "pop": 36889, "state": "IN" }, { "_id": "46910", "city": "AKRON", "loc": [ -86.03947100000001, 41.038921 ], "pop": 2617, "state": "IN" }, { "_id": "46911", "city": "AMBOY", "loc": [ -85.949726, 40.610505 ], "pop": 1555, "state": "IN" }, { "_id": "46913", "city": "BRINGHURST", "loc": [ -86.520369, 40.516294 ], "pop": 212, "state": "IN" }, { "_id": "46914", "city": "BUNKER HILL", "loc": [ -86.09614999999999, 40.642267 ], "pop": 3073, "state": "IN" }, { "_id": "46917", "city": "CAMDEN", "loc": [ -86.51521700000001, 40.599588 ], "pop": 1527, "state": "IN" }, { "_id": "46919", "city": "CONVERSE", "loc": [ -85.876299, 40.577031 ], "pop": 1353, "state": "IN" }, { "_id": "46920", "city": "CUTLER", "loc": [ -86.446172, 40.4785 ], "pop": 2495, "state": "IN" }, { "_id": "46923", "city": "DELPHI", "loc": [ -86.678849, 40.57339 ], "pop": 7576, "state": "IN" }, { "_id": "46926", "city": "CHILI", "loc": [ -86.076953, 40.869363 ], "pop": 5339, "state": "IN" }, { "_id": "46928", "city": "FAIRMOUNT", "loc": [ -85.67132700000001, 40.418755 ], "pop": 6230, "state": "IN" }, { "_id": "46929", "city": "FLORA", "loc": [ -86.501572, 40.544467 ], "pop": 3249, "state": "IN" }, { "_id": "46932", "city": "GALVESTON", "loc": [ -86.1972, 40.586249 ], "pop": 3059, "state": "IN" }, { "_id": "46933", "city": "GAS CITY", "loc": [ -85.60553299999999, 40.487895 ], "pop": 6975, "state": "IN" }, { "_id": "46936", "city": "GREENTOWN", "loc": [ -85.958195, 40.479096 ], "pop": 5785, "state": "IN" }, { "_id": "46938", "city": "JONESBORO", "loc": [ -85.63649599999999, 40.481456 ], "pop": 3989, "state": "IN" }, { "_id": "46939", "city": "KEWANNA", "loc": [ -86.40605499999999, 41.008706 ], "pop": 1966, "state": "IN" }, { "_id": "46940", "city": "LA FONTAINE", "loc": [ -85.697138, 40.690896 ], "pop": 2947, "state": "IN" }, { "_id": "46941", "city": "LAGRO", "loc": [ -85.72044699999999, 40.819897 ], "pop": 2255, "state": "IN" }, { "_id": "46947", "city": "LOGANSPORT", "loc": [ -86.359888, 40.760377 ], "pop": 27829, "state": "IN" }, { "_id": "46950", "city": "LUCERNE", "loc": [ -86.407726, 40.861434 ], "pop": 809, "state": "IN" }, { "_id": "46951", "city": "MACY", "loc": [ -86.126428, 40.961838 ], "pop": 633, "state": "IN" }, { "_id": "46952", "city": "MARION", "loc": [ -85.674127, 40.574333 ], "pop": 24986, "state": "IN" }, { "_id": "46953", "city": "MARION", "loc": [ -85.661624, 40.53592 ], "pop": 22079, "state": "IN" }, { "_id": "46960", "city": "MONTEREY", "loc": [ -86.51786199999999, 41.138334 ], "pop": 997, "state": "IN" }, { "_id": "46962", "city": "NORTH MANCHESTER", "loc": [ -85.784184, 40.998603 ], "pop": 10772, "state": "IN" }, { "_id": "46970", "city": "PERU", "loc": [ -86.068044, 40.749203 ], "pop": 19549, "state": "IN" }, { "_id": "46971", "city": "GRISSOM AIR FORC", "loc": [ -86.14729199999999, 40.663546 ], "pop": 4364, "state": "IN" }, { "_id": "46974", "city": "ROANN", "loc": [ -85.88988500000001, 40.906649 ], "pop": 1612, "state": "IN" }, { "_id": "46975", "city": "ROCHESTER", "loc": [ -86.23100700000001, 41.065493 ], "pop": 14259, "state": "IN" }, { "_id": "46978", "city": "ROYAL CENTER", "loc": [ -86.507751, 40.864499 ], "pop": 1558, "state": "IN" }, { "_id": "46979", "city": "RUSSIAVILLE", "loc": [ -86.267467, 40.415086 ], "pop": 1724, "state": "IN" }, { "_id": "46982", "city": "SILVER LAKE", "loc": [ -85.87920699999999, 41.074318 ], "pop": 1566, "state": "IN" }, { "_id": "46985", "city": "STAR CITY", "loc": [ -86.54040500000001, 40.960176 ], "pop": 951, "state": "IN" }, { "_id": "46986", "city": "SWAYZEE", "loc": [ -85.826542, 40.511199 ], "pop": 1891, "state": "IN" }, { "_id": "46988", "city": "TWELVE MILE", "loc": [ -86.21259499999999, 40.854661 ], "pop": 873, "state": "IN" }, { "_id": "46989", "city": "UPLAND", "loc": [ -85.499049, 40.454841 ], "pop": 6027, "state": "IN" }, { "_id": "46990", "city": "URBANA", "loc": [ -85.748481, 40.898655 ], "pop": 505, "state": "IN" }, { "_id": "46991", "city": "LANDESS", "loc": [ -85.481891, 40.63199 ], "pop": 3670, "state": "IN" }, { "_id": "46992", "city": "WABASH", "loc": [ -85.83212399999999, 40.790947 ], "pop": 17371, "state": "IN" }, { "_id": "46994", "city": "WALTON", "loc": [ -86.280501, 40.677225 ], "pop": 4935, "state": "IN" }, { "_id": "46996", "city": "WINAMAC", "loc": [ -86.630697, 41.056242 ], "pop": 6857, "state": "IN" }, { "_id": "47001", "city": "AURORA", "loc": [ -84.945188, 39.071897 ], "pop": 9435, "state": "IN" }, { "_id": "47006", "city": "BATESVILLE", "loc": [ -85.222053, 39.300057 ], "pop": 6963, "state": "IN" }, { "_id": "47010", "city": "BATH", "loc": [ -84.836007, 39.499237 ], "pop": 197, "state": "IN" }, { "_id": "47011", "city": "BENNINGTON", "loc": [ -85.07189700000001, 38.875993 ], "pop": 1376, "state": "IN" }, { "_id": "47012", "city": "BROOKVILLE", "loc": [ -84.99942299999999, 39.421305 ], "pop": 9204, "state": "IN" }, { "_id": "47016", "city": "CEDAR GROVE", "loc": [ -84.892402, 39.345891 ], "pop": 1522, "state": "IN" }, { "_id": "47017", "city": "CROSS PLAINS", "loc": [ -85.21221, 38.949046 ], "pop": 802, "state": "IN" }, { "_id": "47018", "city": "DILLSBORO", "loc": [ -85.05499399999999, 38.996195 ], "pop": 3699, "state": "IN" }, { "_id": "47020", "city": "FLORENCE", "loc": [ -84.93987199999999, 38.822436 ], "pop": 1019, "state": "IN" }, { "_id": "47021", "city": "FRIENDSHIP", "loc": [ -85.215296, 39.114591 ], "pop": 218, "state": "IN" }, { "_id": "47022", "city": "GUILFORD", "loc": [ -84.961586, 39.205855 ], "pop": 2595, "state": "IN" }, { "_id": "47023", "city": "HOLTON", "loc": [ -85.37394500000001, 39.049817 ], "pop": 2384, "state": "IN" }, { "_id": "47024", "city": "LAUREL", "loc": [ -85.208044, 39.491573 ], "pop": 3041, "state": "IN" }, { "_id": "47025", "city": "LAWRENCEBURG", "loc": [ -84.865819, 39.140123 ], "pop": 15358, "state": "IN" }, { "_id": "47030", "city": "METAMORA", "loc": [ -85.15044, 39.428775 ], "pop": 1085, "state": "IN" }, { "_id": "47031", "city": "MILAN", "loc": [ -85.13242, 39.150333 ], "pop": 3877, "state": "IN" }, { "_id": "47032", "city": "MOORES HILL", "loc": [ -85.063806, 39.094459 ], "pop": 2729, "state": "IN" }, { "_id": "47036", "city": "OLDENBURG", "loc": [ -85.22223, 39.359797 ], "pop": 1398, "state": "IN" }, { "_id": "47037", "city": "OSGOOD", "loc": [ -85.293812, 39.157342 ], "pop": 4785, "state": "IN" }, { "_id": "47038", "city": "PATRIOT", "loc": [ -84.85154300000001, 38.853691 ], "pop": 1265, "state": "IN" }, { "_id": "47040", "city": "RISING SUN", "loc": [ -84.88067599999999, 38.956667 ], "pop": 4500, "state": "IN" }, { "_id": "47041", "city": "SUNMAN", "loc": [ -85.11592899999999, 39.262307 ], "pop": 4719, "state": "IN" }, { "_id": "47042", "city": "VERSAILLES", "loc": [ -85.223489, 39.051074 ], "pop": 4753, "state": "IN" }, { "_id": "47043", "city": "VEVAY", "loc": [ -85.085217, 38.772423 ], "pop": 3974, "state": "IN" }, { "_id": "47060", "city": "W HARRISON", "loc": [ -84.878027, 39.266727 ], "pop": 5338, "state": "IN" }, { "_id": "47102", "city": "AUSTIN", "loc": [ -85.796188, 38.747801 ], "pop": 6713, "state": "IN" }, { "_id": "47106", "city": "BORDEN", "loc": [ -85.92147300000001, 38.436171 ], "pop": 4080, "state": "IN" }, { "_id": "47108", "city": "CAMPBELLSBURG", "loc": [ -86.235846, 38.669037 ], "pop": 2900, "state": "IN" }, { "_id": "47110", "city": "CENTRAL", "loc": [ -86.19738099999999, 38.094543 ], "pop": 779, "state": "IN" }, { "_id": "47111", "city": "CHARLESTOWN", "loc": [ -85.660614, 38.456778 ], "pop": 9896, "state": "IN" }, { "_id": "47112", "city": "CORYDON", "loc": [ -86.114465, 38.218865 ], "pop": 10928, "state": "IN" }, { "_id": "47114", "city": "CRANDALL", "loc": [ -86.069804, 38.28927 ], "pop": 239, "state": "IN" }, { "_id": "47115", "city": "DEPAUW", "loc": [ -86.210857, 38.336078 ], "pop": 3269, "state": "IN" }, { "_id": "47116", "city": "ECKERTY", "loc": [ -86.60593900000001, 38.318548 ], "pop": 971, "state": "IN" }, { "_id": "47117", "city": "ELIZABETH", "loc": [ -85.95887399999999, 38.124389 ], "pop": 3273, "state": "IN" }, { "_id": "47118", "city": "ENGLISH", "loc": [ -86.442875, 38.325807 ], "pop": 3424, "state": "IN" }, { "_id": "47119", "city": "FLOYDS KNOBS", "loc": [ -85.89955500000001, 38.351006 ], "pop": 9954, "state": "IN" }, { "_id": "47120", "city": "FREDERICKSBURG", "loc": [ -86.17825499999999, 38.482118 ], "pop": 1846, "state": "IN" }, { "_id": "47122", "city": "GEORGETOWN", "loc": [ -85.961704, 38.302943 ], "pop": 4446, "state": "IN" }, { "_id": "47123", "city": "GRANTSBURG", "loc": [ -86.466043, 38.289183 ], "pop": 154, "state": "IN" }, { "_id": "47124", "city": "GREENVILLE", "loc": [ -86.00829899999999, 38.353533 ], "pop": 1162, "state": "IN" }, { "_id": "47125", "city": "HARDINSBURG", "loc": [ -86.317983, 38.462599 ], "pop": 2496, "state": "IN" }, { "_id": "47126", "city": "HENRYVILLE", "loc": [ -85.773403, 38.539829 ], "pop": 2648, "state": "IN" }, { "_id": "47129", "city": "CLARKSVILLE", "loc": [ -85.524438, 38.537273 ], "pop": 379, "state": "IN" }, { "_id": "47130", "city": "JEFFERSONVILLE", "loc": [ -85.735885, 38.307767 ], "pop": 56543, "state": "IN" }, { "_id": "47135", "city": "LACONIA", "loc": [ -86.08441500000001, 38.052703 ], "pop": 1058, "state": "IN" }, { "_id": "47136", "city": "LANESVILLE", "loc": [ -85.95931400000001, 38.244817 ], "pop": 3524, "state": "IN" }, { "_id": "47137", "city": "LEAVENWORTH", "loc": [ -86.35986200000001, 38.194244 ], "pop": 1152, "state": "IN" }, { "_id": "47138", "city": "LEXINGTON", "loc": [ -85.65891499999999, 38.650643 ], "pop": 2803, "state": "IN" }, { "_id": "47140", "city": "MARENGO", "loc": [ -86.357784, 38.373603 ], "pop": 1539, "state": "IN" }, { "_id": "47141", "city": "MARYSVILLE", "loc": [ -85.630809, 38.554488 ], "pop": 828, "state": "IN" }, { "_id": "47142", "city": "MAUCKPORT", "loc": [ -86.184622, 38.04366 ], "pop": 520, "state": "IN" }, { "_id": "47143", "city": "MEMPHIS", "loc": [ -85.777501, 38.464181 ], "pop": 2381, "state": "IN" }, { "_id": "47145", "city": "MILLTOWN", "loc": [ -86.300344, 38.344453 ], "pop": 1724, "state": "IN" }, { "_id": "47147", "city": "NABB", "loc": [ -85.521704, 38.612768 ], "pop": 2246, "state": "IN" }, { "_id": "47150", "city": "NEW ALBANY", "loc": [ -85.822085, 38.308919 ], "pop": 44969, "state": "IN" }, { "_id": "47160", "city": "NEW MIDDLETOWN", "loc": [ -86.055261, 38.144199 ], "pop": 1593, "state": "IN" }, { "_id": "47161", "city": "NEW SALISBURY", "loc": [ -86.088731, 38.339885 ], "pop": 4814, "state": "IN" }, { "_id": "47162", "city": "NEW WASHINGTON", "loc": [ -85.45987, 38.557521 ], "pop": 380, "state": "IN" }, { "_id": "47163", "city": "OTISCO", "loc": [ -85.66470200000001, 38.542342 ], "pop": 1738, "state": "IN" }, { "_id": "47164", "city": "PALMYRA", "loc": [ -86.088778, 38.410484 ], "pop": 814, "state": "IN" }, { "_id": "47165", "city": "PEKIN", "loc": [ -86.017045, 38.49308 ], "pop": 5351, "state": "IN" }, { "_id": "47166", "city": "RAMSEY", "loc": [ -86.130768, 38.335442 ], "pop": 1146, "state": "IN" }, { "_id": "47167", "city": "SALEM", "loc": [ -86.07874200000001, 38.607138 ], "pop": 10949, "state": "IN" }, { "_id": "47170", "city": "SCOTTSBURG", "loc": [ -85.798654, 38.688499 ], "pop": 13114, "state": "IN" }, { "_id": "47172", "city": "SPEED", "loc": [ -85.763518, 38.390331 ], "pop": 8658, "state": "IN" }, { "_id": "47174", "city": "SULPHUR", "loc": [ -86.487296, 38.227194 ], "pop": 303, "state": "IN" }, { "_id": "47175", "city": "TASWELL", "loc": [ -86.538675, 38.346302 ], "pop": 950, "state": "IN" }, { "_id": "47177", "city": "UNDERWOOD", "loc": [ -85.767211, 38.590251 ], "pop": 818, "state": "IN" }, { "_id": "47201", "city": "COLUMBUS", "loc": [ -85.93174500000001, 39.205507 ], "pop": 40769, "state": "IN" }, { "_id": "47203", "city": "COLUMBUS", "loc": [ -85.885497, 39.230097 ], "pop": 15656, "state": "IN" }, { "_id": "47220", "city": "BROWNSTOWN", "loc": [ -86.048619, 38.883593 ], "pop": 4963, "state": "IN" }, { "_id": "47223", "city": "BUTLERVILLE", "loc": [ -85.494415, 39.120598 ], "pop": 813, "state": "IN" }, { "_id": "47224", "city": "CANAAN", "loc": [ -85.268896, 38.869644 ], "pop": 936, "state": "IN" }, { "_id": "47227", "city": "COMMISKEY", "loc": [ -85.643384, 38.852629 ], "pop": 896, "state": "IN" }, { "_id": "47228", "city": "CORTLAND", "loc": [ -86.000918, 38.991546 ], "pop": 1680, "state": "IN" }, { "_id": "47229", "city": "CROTHERSVILLE", "loc": [ -85.846965, 38.806672 ], "pop": 3865, "state": "IN" }, { "_id": "47230", "city": "DEPUTY", "loc": [ -85.63040700000001, 38.775891 ], "pop": 1448, "state": "IN" }, { "_id": "47231", "city": "DUPONT", "loc": [ -85.50920499999999, 38.890504 ], "pop": 716, "state": "IN" }, { "_id": "47232", "city": "ELIZABETHTOWN", "loc": [ -85.81531099999999, 39.124291 ], "pop": 1222, "state": "IN" }, { "_id": "47234", "city": "FLAT ROCK", "loc": [ -85.67588600000001, 39.407503 ], "pop": 1496, "state": "IN" }, { "_id": "47235", "city": "FREETOWN", "loc": [ -86.12405099999999, 38.995728 ], "pop": 1380, "state": "IN" }, { "_id": "47236", "city": "GRAMMER", "loc": [ -85.718338, 39.159192 ], "pop": 412, "state": "IN" }, { "_id": "47240", "city": "ADAMS", "loc": [ -85.47353200000001, 39.331223 ], "pop": 19250, "state": "IN" }, { "_id": "47243", "city": "HANOVER", "loc": [ -85.476316, 38.71378 ], "pop": 4900, "state": "IN" }, { "_id": "47244", "city": "HARTSVILLE", "loc": [ -85.70046000000001, 39.273318 ], "pop": 543, "state": "IN" }, { "_id": "47246", "city": "HOPE", "loc": [ -85.766538, 39.25733 ], "pop": 5676, "state": "IN" }, { "_id": "47250", "city": "MADISON", "loc": [ -85.40701900000001, 38.764866 ], "pop": 20596, "state": "IN" }, { "_id": "47260", "city": "MEDORA", "loc": [ -86.189733, 38.825505 ], "pop": 1576, "state": "IN" }, { "_id": "47264", "city": "NORMAN", "loc": [ -86.20793399999999, 38.929996 ], "pop": 1834, "state": "IN" }, { "_id": "47265", "city": "NORTH VERNON", "loc": [ -85.627216, 39.001763 ], "pop": 13466, "state": "IN" }, { "_id": "47270", "city": "PARIS CROSSING", "loc": [ -85.74872499999999, 38.855843 ], "pop": 972, "state": "IN" }, { "_id": "47272", "city": "SAINT PAUL", "loc": [ -85.599374, 39.427747 ], "pop": 1389, "state": "IN" }, { "_id": "47273", "city": "SCIPIO", "loc": [ -85.71285899999999, 39.066544 ], "pop": 5043, "state": "IN" }, { "_id": "47274", "city": "SEYMOUR", "loc": [ -85.88247699999999, 38.957133 ], "pop": 21094, "state": "IN" }, { "_id": "47281", "city": "VALLONIA", "loc": [ -86.068997, 38.817413 ], "pop": 1338, "state": "IN" }, { "_id": "47282", "city": "VERNON", "loc": [ -85.598377, 38.96887 ], "pop": 2277, "state": "IN" }, { "_id": "47283", "city": "WESTPORT", "loc": [ -85.585596, 39.174856 ], "pop": 3065, "state": "IN" }, { "_id": "47302", "city": "MUNCIE", "loc": [ -85.380689, 40.168414 ], "pop": 29709, "state": "IN" }, { "_id": "47303", "city": "MUNCIE", "loc": [ -85.37896600000001, 40.217992 ], "pop": 26033, "state": "IN" }, { "_id": "47304", "city": "MUNCIE", "loc": [ -85.429115, 40.211134 ], "pop": 28452, "state": "IN" }, { "_id": "47305", "city": "MUNCIE", "loc": [ -85.386163, 40.193299 ], "pop": 5251, "state": "IN" }, { "_id": "47306", "city": "BALL STATE UNIVE", "loc": [ -85.41015299999999, 40.192739 ], "pop": 3259, "state": "IN" }, { "_id": "47320", "city": "ALBANY", "loc": [ -85.257987, 40.292049 ], "pop": 4625, "state": "IN" }, { "_id": "47325", "city": "BROWNSVILLE", "loc": [ -84.98806999999999, 39.684485 ], "pop": 850, "state": "IN" }, { "_id": "47326", "city": "BRYANT", "loc": [ -84.911748, 40.54462 ], "pop": 1350, "state": "IN" }, { "_id": "47327", "city": "CAMBRIDGE CITY", "loc": [ -85.16845499999999, 39.818171 ], "pop": 4998, "state": "IN" }, { "_id": "47330", "city": "CENTERVILLE", "loc": [ -85.00317, 39.808103 ], "pop": 5475, "state": "IN" }, { "_id": "47331", "city": "CONNERSVILLE", "loc": [ -85.14643100000001, 39.643508 ], "pop": 25503, "state": "IN" }, { "_id": "47334", "city": "DALEVILLE", "loc": [ -85.511016, 40.125738 ], "pop": 5063, "state": "IN" }, { "_id": "47336", "city": "DUNKIRK", "loc": [ -85.22554100000001, 40.388291 ], "pop": 4413, "state": "IN" }, { "_id": "47338", "city": "EATON", "loc": [ -85.354387, 40.337673 ], "pop": 3637, "state": "IN" }, { "_id": "47339", "city": "ECONOMY", "loc": [ -85.08780299999999, 39.971215 ], "pop": 677, "state": "IN" }, { "_id": "47340", "city": "FARMLAND", "loc": [ -85.125381, 40.194454 ], "pop": 1784, "state": "IN" }, { "_id": "47341", "city": "FOUNTAIN CITY", "loc": [ -84.908996, 39.963429 ], "pop": 2020, "state": "IN" }, { "_id": "47342", "city": "GASTON", "loc": [ -85.489842, 40.29479 ], "pop": 4594, "state": "IN" }, { "_id": "47345", "city": "GREENS FORK", "loc": [ -85.049413, 39.89163 ], "pop": 1054, "state": "IN" }, { "_id": "47346", "city": "HAGERSTOWN", "loc": [ -85.16009099999999, 39.92277 ], "pop": 3906, "state": "IN" }, { "_id": "47348", "city": "HARTFORD CITY", "loc": [ -85.375771, 40.454106 ], "pop": 9762, "state": "IN" }, { "_id": "47352", "city": "LEWISVILLE", "loc": [ -85.36211, 39.828288 ], "pop": 1219, "state": "IN" }, { "_id": "47353", "city": "LIBERTY", "loc": [ -84.908947, 39.612645 ], "pop": 6126, "state": "IN" }, { "_id": "47354", "city": "LOSANTVILLE", "loc": [ -85.21084999999999, 40.047492 ], "pop": 1768, "state": "IN" }, { "_id": "47355", "city": "LYNN", "loc": [ -84.93003, 40.051863 ], "pop": 3544, "state": "IN" }, { "_id": "47356", "city": "MIDDLETOWN", "loc": [ -85.536778, 40.047488 ], "pop": 4613, "state": "IN" }, { "_id": "47357", "city": "MILTON", "loc": [ -85.142267, 39.776279 ], "pop": 1488, "state": "IN" }, { "_id": "47358", "city": "MODOC", "loc": [ -85.091904, 40.05816 ], "pop": 1253, "state": "IN" }, { "_id": "47359", "city": "MONTPELIER", "loc": [ -85.251339, 40.557656 ], "pop": 3753, "state": "IN" }, { "_id": "47360", "city": "MOORELAND", "loc": [ -85.258065, 39.994066 ], "pop": 1265, "state": "IN" }, { "_id": "47362", "city": "NEW CASTLE", "loc": [ -85.366322, 39.920765 ], "pop": 25888, "state": "IN" }, { "_id": "47368", "city": "PARKER CITY", "loc": [ -85.196265, 40.193841 ], "pop": 1818, "state": "IN" }, { "_id": "47369", "city": "PENNVILLE", "loc": [ -85.14916599999999, 40.508195 ], "pop": 1236, "state": "IN" }, { "_id": "47371", "city": "PORTLAND", "loc": [ -84.992825, 40.430564 ], "pop": 13186, "state": "IN" }, { "_id": "47373", "city": "REDKEY", "loc": [ -85.16196600000001, 40.326491 ], "pop": 2971, "state": "IN" }, { "_id": "47374", "city": "RICHMOND", "loc": [ -84.89360600000001, 39.83244 ], "pop": 50516, "state": "IN" }, { "_id": "47380", "city": "RIDGEVILLE", "loc": [ -85.03710100000001, 40.280359 ], "pop": 1343, "state": "IN" }, { "_id": "47381", "city": "SALAMONIA", "loc": [ -84.855098, 40.358234 ], "pop": 741, "state": "IN" }, { "_id": "47382", "city": "SARATOGA", "loc": [ -84.950846, 40.257365 ], "pop": 1244, "state": "IN" }, { "_id": "47383", "city": "SELMA", "loc": [ -85.273765, 40.169295 ], "pop": 4009, "state": "IN" }, { "_id": "47384", "city": "SHIRLEY", "loc": [ -85.518151, 39.91582 ], "pop": 2292, "state": "IN" }, { "_id": "47385", "city": "SPICELAND", "loc": [ -85.445043, 39.827078 ], "pop": 2270, "state": "IN" }, { "_id": "47386", "city": "SPRINGPORT", "loc": [ -85.36886699999999, 40.008848 ], "pop": 3393, "state": "IN" }, { "_id": "47387", "city": "STRAUGHN", "loc": [ -85.272406, 39.831946 ], "pop": 1300, "state": "IN" }, { "_id": "47388", "city": "SULPHUR SPRINGS", "loc": [ -85.440747, 40.011121 ], "pop": 1242, "state": "IN" }, { "_id": "47390", "city": "UNION CITY", "loc": [ -84.826787, 40.202372 ], "pop": 5393, "state": "IN" }, { "_id": "47392", "city": "WEBSTER", "loc": [ -84.942908, 39.905701 ], "pop": 540, "state": "IN" }, { "_id": "47393", "city": "WILLIAMSBURG", "loc": [ -84.998442, 39.958005 ], "pop": 1272, "state": "IN" }, { "_id": "47394", "city": "WINCHESTER", "loc": [ -85.004366, 40.16959 ], "pop": 8830, "state": "IN" }, { "_id": "47396", "city": "YORKTOWN", "loc": [ -85.49599499999999, 40.183581 ], "pop": 5027, "state": "IN" }, { "_id": "47401", "city": "BLOOMINGTON", "loc": [ -86.508262, 39.140057 ], "pop": 31456, "state": "IN" }, { "_id": "47403", "city": "BLOOMINGTON", "loc": [ -86.57686699999999, 39.12632 ], "pop": 23435, "state": "IN" }, { "_id": "47404", "city": "BLOOMINGTON", "loc": [ -86.57572, 39.195026 ], "pop": 15079, "state": "IN" }, { "_id": "47408", "city": "WOODBRIDGE", "loc": [ -86.505836, 39.183175 ], "pop": 30907, "state": "IN" }, { "_id": "47421", "city": "BEDFORD", "loc": [ -86.487072, 38.872881 ], "pop": 27071, "state": "IN" }, { "_id": "47424", "city": "BLOOMFIELD", "loc": [ -86.867549, 39.029542 ], "pop": 9014, "state": "IN" }, { "_id": "47427", "city": "COAL CITY", "loc": [ -86.988297, 39.257304 ], "pop": 1647, "state": "IN" }, { "_id": "47429", "city": "ELLETTSVILLE", "loc": [ -86.619635, 39.254477 ], "pop": 4960, "state": "IN" }, { "_id": "47431", "city": "FREEDOM", "loc": [ -86.850027, 39.215147 ], "pop": 1003, "state": "IN" }, { "_id": "47432", "city": "FRENCH LICK", "loc": [ -86.61955500000001, 38.532351 ], "pop": 3920, "state": "IN" }, { "_id": "47433", "city": "GOSPORT", "loc": [ -86.6583, 39.344969 ], "pop": 2269, "state": "IN" }, { "_id": "47436", "city": "HELTONVILLE", "loc": [ -86.370328, 38.948014 ], "pop": 1402, "state": "IN" }, { "_id": "47438", "city": "JASONVILLE", "loc": [ -87.202292, 39.172333 ], "pop": 4340, "state": "IN" }, { "_id": "47441", "city": "LINTON", "loc": [ -87.172286, 39.046139 ], "pop": 9233, "state": "IN" }, { "_id": "47443", "city": "LYONS", "loc": [ -87.101595, 38.971731 ], "pop": 1706, "state": "IN" }, { "_id": "47446", "city": "MITCHELL", "loc": [ -86.476096, 38.742625 ], "pop": 9516, "state": "IN" }, { "_id": "47448", "city": "NASHVILLE", "loc": [ -86.22199000000001, 39.236712 ], "pop": 11751, "state": "IN" }, { "_id": "47449", "city": "NEWBERRY", "loc": [ -87.008055, 38.922905 ], "pop": 386, "state": "IN" }, { "_id": "47451", "city": "OOLITIC", "loc": [ -86.52461700000001, 38.89378 ], "pop": 1493, "state": "IN" }, { "_id": "47452", "city": "ORLEANS", "loc": [ -86.453157, 38.653464 ], "pop": 4309, "state": "IN" }, { "_id": "47453", "city": "OWENSBURG", "loc": [ -86.744122, 38.952216 ], "pop": 1497, "state": "IN" }, { "_id": "47454", "city": "PAOLI", "loc": [ -86.44902, 38.550697 ], "pop": 6790, "state": "IN" }, { "_id": "47456", "city": "QUINCY", "loc": [ -86.80250599999999, 39.439521 ], "pop": 2959, "state": "IN" }, { "_id": "47459", "city": "SOLSBERRY", "loc": [ -86.737843, 39.119047 ], "pop": 1832, "state": "IN" }, { "_id": "47460", "city": "SPENCER", "loc": [ -86.77894000000001, 39.289067 ], "pop": 10170, "state": "IN" }, { "_id": "47462", "city": "SPRINGVILLE", "loc": [ -86.613879, 38.950655 ], "pop": 1726, "state": "IN" }, { "_id": "47465", "city": "SWITZ CITY", "loc": [ -87.05023799999999, 39.036937 ], "pop": 1347, "state": "IN" }, { "_id": "47468", "city": "UNIONVILLE", "loc": [ -86.418947, 39.251396 ], "pop": 1111, "state": "IN" }, { "_id": "47469", "city": "WEST BADEN SPRIN", "loc": [ -86.613826, 38.585501 ], "pop": 1757, "state": "IN" }, { "_id": "47470", "city": "WILLIAMS", "loc": [ -86.628488, 38.773478 ], "pop": 1960, "state": "IN" }, { "_id": "47471", "city": "WORTHINGTON", "loc": [ -86.99905800000001, 39.12298 ], "pop": 2365, "state": "IN" }, { "_id": "47501", "city": "WASHINGTON", "loc": [ -87.17065599999999, 38.653568 ], "pop": 15495, "state": "IN" }, { "_id": "47512", "city": "BICKNELL", "loc": [ -87.31371799999999, 38.77272 ], "pop": 4470, "state": "IN" }, { "_id": "47513", "city": "BIRDSEYE", "loc": [ -86.710193, 38.30058 ], "pop": 1591, "state": "IN" }, { "_id": "47514", "city": "BRANCHVILLE", "loc": [ -86.585866, 38.157189 ], "pop": 1314, "state": "IN" }, { "_id": "47515", "city": "SIBERIA", "loc": [ -86.72181500000001, 38.163101 ], "pop": 912, "state": "IN" }, { "_id": "47516", "city": "BRUCEVILLE", "loc": [ -87.431299, 38.756279 ], "pop": 1167, "state": "IN" }, { "_id": "47519", "city": "CANNELBURG", "loc": [ -86.96686800000001, 38.694696 ], "pop": 1265, "state": "IN" }, { "_id": "47520", "city": "MOUNT PLEASANT", "loc": [ -86.732617, 37.910851 ], "pop": 2290, "state": "IN" }, { "_id": "47521", "city": "CELESTINE", "loc": [ -86.756809, 38.387789 ], "pop": 858, "state": "IN" }, { "_id": "47522", "city": "CRANE NAVAL DEPO", "loc": [ -86.86547299999999, 38.849618 ], "pop": 371, "state": "IN" }, { "_id": "47523", "city": "DALE", "loc": [ -87.00698199999999, 38.170638 ], "pop": 3459, "state": "IN" }, { "_id": "47524", "city": "DECKER", "loc": [ -87.553713, 38.507629 ], "pop": 621, "state": "IN" }, { "_id": "47525", "city": "DERBY", "loc": [ -86.57695099999999, 38.023933 ], "pop": 485, "state": "IN" }, { "_id": "47527", "city": "DUBOIS", "loc": [ -86.78319, 38.472824 ], "pop": 2200, "state": "IN" }, { "_id": "47528", "city": "EDWARDSPORT", "loc": [ -87.251856, 38.810584 ], "pop": 497, "state": "IN" }, { "_id": "47529", "city": "ELNORA", "loc": [ -87.065243, 38.822284 ], "pop": 2373, "state": "IN" }, { "_id": "47531", "city": "EVANSTON", "loc": [ -86.836422, 38.022436 ], "pop": 163, "state": "IN" }, { "_id": "47532", "city": "FERDINAND", "loc": [ -86.860669, 38.233582 ], "pop": 3725, "state": "IN" }, { "_id": "47537", "city": "GENTRYVILLE", "loc": [ -87.04413700000001, 38.085458 ], "pop": 824, "state": "IN" }, { "_id": "47541", "city": "HOLLAND", "loc": [ -87.008768, 38.23851 ], "pop": 2072, "state": "IN" }, { "_id": "47542", "city": "HUNTINGBURG", "loc": [ -86.953299, 38.297902 ], "pop": 7415, "state": "IN" }, { "_id": "47546", "city": "HAYSVILLE", "loc": [ -86.940787, 38.404392 ], "pop": 16927, "state": "IN" }, { "_id": "47550", "city": "BUFFALOVILLE", "loc": [ -86.962908, 38.047904 ], "pop": 202, "state": "IN" }, { "_id": "47551", "city": "LEOPOLD", "loc": [ -86.60442999999999, 38.101138 ], "pop": 623, "state": "IN" }, { "_id": "47552", "city": "LINCOLN CITY", "loc": [ -86.98720400000001, 38.127565 ], "pop": 233, "state": "IN" }, { "_id": "47553", "city": "LOOGOOTEE", "loc": [ -86.913658, 38.662901 ], "pop": 6068, "state": "IN" }, { "_id": "47555", "city": "MAGNET", "loc": [ -86.48353, 38.088165 ], "pop": 240, "state": "IN" }, { "_id": "47556", "city": "MARIAH HILL", "loc": [ -86.831593, 38.149493 ], "pop": 1317, "state": "IN" }, { "_id": "47557", "city": "MONROE CITY", "loc": [ -87.364136, 38.60015 ], "pop": 1915, "state": "IN" }, { "_id": "47558", "city": "MONTGOMERY", "loc": [ -87.047603, 38.652146 ], "pop": 2675, "state": "IN" }, { "_id": "47561", "city": "OAKTOWN", "loc": [ -87.387877, 38.857939 ], "pop": 2569, "state": "IN" }, { "_id": "47562", "city": "ODON", "loc": [ -86.97521399999999, 38.818666 ], "pop": 4198, "state": "IN" }, { "_id": "47564", "city": "OTWELL", "loc": [ -87.09854799999999, 38.466221 ], "pop": 912, "state": "IN" }, { "_id": "47567", "city": "PETERSBURG", "loc": [ -87.28829399999999, 38.478929 ], "pop": 6614, "state": "IN" }, { "_id": "47568", "city": "PLAINVILLE", "loc": [ -87.157822, 38.791507 ], "pop": 895, "state": "IN" }, { "_id": "47574", "city": "ROME", "loc": [ -86.595787, 37.937561 ], "pop": 297, "state": "IN" }, { "_id": "47575", "city": "KYANA", "loc": [ -86.82485800000001, 38.332222 ], "pop": 2012, "state": "IN" }, { "_id": "47576", "city": "SAINT CROIX", "loc": [ -86.603511, 38.239773 ], "pop": 325, "state": "IN" }, { "_id": "47577", "city": "SAINT MEINRAD", "loc": [ -86.842916, 38.181946 ], "pop": 652, "state": "IN" }, { "_id": "47578", "city": "SANDBORN", "loc": [ -87.20253200000001, 38.881743 ], "pop": 919, "state": "IN" }, { "_id": "47579", "city": "SANTA CLAUS", "loc": [ -86.90352799999999, 38.094496 ], "pop": 2323, "state": "IN" }, { "_id": "47580", "city": "SCHNELLVILLE", "loc": [ -86.756506, 38.341436 ], "pop": 199, "state": "IN" }, { "_id": "47581", "city": "SHOALS", "loc": [ -86.776094, 38.679103 ], "pop": 4562, "state": "IN" }, { "_id": "47585", "city": "STENDAL", "loc": [ -87.12045000000001, 38.283472 ], "pop": 596, "state": "IN" }, { "_id": "47586", "city": "TELL CITY", "loc": [ -86.745704, 37.965505 ], "pop": 11583, "state": "IN" }, { "_id": "47587", "city": "TOBINSPORT", "loc": [ -86.634128, 37.874726 ], "pop": 151, "state": "IN" }, { "_id": "47588", "city": "TROY", "loc": [ -86.797766, 37.997994 ], "pop": 727, "state": "IN" }, { "_id": "47590", "city": "VELPEN", "loc": [ -87.098996, 38.367981 ], "pop": 393, "state": "IN" }, { "_id": "47591", "city": "VINCENNES", "loc": [ -87.509806, 38.67344 ], "pop": 26841, "state": "IN" }, { "_id": "47597", "city": "WHEATLAND", "loc": [ -87.30620399999999, 38.667055 ], "pop": 885, "state": "IN" }, { "_id": "47598", "city": "WINSLOW", "loc": [ -87.222328, 38.363951 ], "pop": 3994, "state": "IN" }, { "_id": "47601", "city": "BOONVILLE", "loc": [ -87.261994, 38.047435 ], "pop": 11964, "state": "IN" }, { "_id": "47610", "city": "CHANDLER", "loc": [ -87.375552, 38.042304 ], "pop": 5641, "state": "IN" }, { "_id": "47611", "city": "CHRISNEY", "loc": [ -87.070421, 38.005995 ], "pop": 1455, "state": "IN" }, { "_id": "47612", "city": "CYNTHIANA", "loc": [ -87.711518, 38.174299 ], "pop": 1277, "state": "IN" }, { "_id": "47613", "city": "ELBERFELD", "loc": [ -87.41794299999999, 38.205267 ], "pop": 3361, "state": "IN" }, { "_id": "47615", "city": "GRANDVIEW", "loc": [ -86.956774, 37.970297 ], "pop": 1990, "state": "IN" }, { "_id": "47616", "city": "GRIFFIN", "loc": [ -87.916631, 38.206858 ], "pop": 329, "state": "IN" }, { "_id": "47619", "city": "LYNNVILLE", "loc": [ -87.293486, 38.196085 ], "pop": 1329, "state": "IN" }, { "_id": "47620", "city": "MOUNT VERNON", "loc": [ -87.856887, 37.950569 ], "pop": 16037, "state": "IN" }, { "_id": "47630", "city": "NEWBURGH", "loc": [ -87.393798, 37.963746 ], "pop": 21793, "state": "IN" }, { "_id": "47631", "city": "NEW HARMONY", "loc": [ -87.917186, 38.124502 ], "pop": 1432, "state": "IN" }, { "_id": "47633", "city": "POSEYVILLE", "loc": [ -87.802747, 38.171986 ], "pop": 2009, "state": "IN" }, { "_id": "47634", "city": "RICHLAND", "loc": [ -87.200957, 37.913599 ], "pop": 2862, "state": "IN" }, { "_id": "47635", "city": "ROCKPORT", "loc": [ -87.07701, 37.885803 ], "pop": 4850, "state": "IN" }, { "_id": "47637", "city": "TENNYSON", "loc": [ -87.13875, 38.123207 ], "pop": 1378, "state": "IN" }, { "_id": "47638", "city": "WADESVILLE", "loc": [ -87.754295, 38.082791 ], "pop": 3614, "state": "IN" }, { "_id": "47639", "city": "HAUBSTADT", "loc": [ -87.57982699999999, 38.189536 ], "pop": 3568, "state": "IN" }, { "_id": "47640", "city": "HAZLETON", "loc": [ -87.49834799999999, 38.462283 ], "pop": 1214, "state": "IN" }, { "_id": "47647", "city": "BUCKSKIN", "loc": [ -87.43077, 38.220867 ], "pop": 236, "state": "IN" }, { "_id": "47648", "city": "FORT BRANCH", "loc": [ -87.56823300000001, 38.247136 ], "pop": 4031, "state": "IN" }, { "_id": "47649", "city": "FRANCISCO", "loc": [ -87.453621, 38.332953 ], "pop": 1503, "state": "IN" }, { "_id": "47660", "city": "OAKLAND CITY", "loc": [ -87.351907, 38.336053 ], "pop": 4244, "state": "IN" }, { "_id": "47665", "city": "OWENSVILLE", "loc": [ -87.709052, 38.274414 ], "pop": 3159, "state": "IN" }, { "_id": "47666", "city": "PATOKA", "loc": [ -87.595789, 38.414296 ], "pop": 1434, "state": "IN" }, { "_id": "47670", "city": "PRINCETON", "loc": [ -87.569069, 38.352502 ], "pop": 11579, "state": "IN" }, { "_id": "47708", "city": "EVANSVILLE", "loc": [ -87.571973, 37.971818 ], "pop": 857, "state": "IN" }, { "_id": "47710", "city": "EVANSVILLE", "loc": [ -87.574569, 38.008617 ], "pop": 22336, "state": "IN" }, { "_id": "47711", "city": "EVANSVILLE", "loc": [ -87.535236, 38.076377 ], "pop": 9387, "state": "IN" }, { "_id": "47712", "city": "EVANSVILLE", "loc": [ -87.634682, 37.998484 ], "pop": 35603, "state": "IN" }, { "_id": "47713", "city": "EVANSVILLE", "loc": [ -87.55768, 37.962326 ], "pop": 14121, "state": "IN" }, { "_id": "47714", "city": "EVANSVILLE", "loc": [ -87.529302, 37.959076 ], "pop": 27381, "state": "IN" }, { "_id": "47715", "city": "EVANSVILLE", "loc": [ -87.48552599999999, 37.967815 ], "pop": 30611, "state": "IN" }, { "_id": "47720", "city": "EVANSVILLE", "loc": [ -87.538793, 37.998832 ], "pop": 25504, "state": "IN" }, { "_id": "47802", "city": "TERRE HAUTE", "loc": [ -87.402019, 39.40697 ], "pop": 29656, "state": "IN" }, { "_id": "47803", "city": "TERRE HAUTE", "loc": [ -87.353967, 39.465696 ], "pop": 17709, "state": "IN" }, { "_id": "47804", "city": "TERRE HAUTE", "loc": [ -87.39449399999999, 39.493665 ], "pop": 11573, "state": "IN" }, { "_id": "47805", "city": "NORTH TERRE HAUT", "loc": [ -87.341109, 39.535981 ], "pop": 13652, "state": "IN" }, { "_id": "47807", "city": "TERRE HAUTE", "loc": [ -87.400859, 39.470974 ], "pop": 19106, "state": "IN" }, { "_id": "47832", "city": "BLOOMINGDALE", "loc": [ -87.255967, 39.834808 ], "pop": 770, "state": "IN" }, { "_id": "47833", "city": "BOWLING GREEN", "loc": [ -87.00524900000001, 39.381209 ], "pop": 734, "state": "IN" }, { "_id": "47834", "city": "BRAZIL", "loc": [ -87.12776700000001, 39.521041 ], "pop": 18960, "state": "IN" }, { "_id": "47836", "city": "BRIDGETON", "loc": [ -87.18139600000001, 39.648366 ], "pop": 818, "state": "IN" }, { "_id": "47837", "city": "CARBON", "loc": [ -87.064455, 39.57463 ], "pop": 790, "state": "IN" }, { "_id": "47838", "city": "CARLISLE", "loc": [ -87.366738, 38.976297 ], "pop": 2324, "state": "IN" }, { "_id": "47840", "city": "CENTERPOINT", "loc": [ -87.09347, 39.390989 ], "pop": 955, "state": "IN" }, { "_id": "47841", "city": "CLAY CITY", "loc": [ -87.108244, 39.2727 ], "pop": 2275, "state": "IN" }, { "_id": "47842", "city": "CLINTON", "loc": [ -87.4208, 39.659142 ], "pop": 9250, "state": "IN" }, { "_id": "47846", "city": "CORY", "loc": [ -87.195644, 39.343545 ], "pop": 259, "state": "IN" }, { "_id": "47847", "city": "DANA", "loc": [ -87.501018, 39.752829 ], "pop": 1833, "state": "IN" }, { "_id": "47848", "city": "DUGGER", "loc": [ -87.259867, 39.069057 ], "pop": 1144, "state": "IN" }, { "_id": "47849", "city": "FAIRBANKS", "loc": [ -87.518483, 39.212865 ], "pop": 655, "state": "IN" }, { "_id": "47850", "city": "FARMERSBURG", "loc": [ -87.502365, 39.268456 ], "pop": 335, "state": "IN" }, { "_id": "47854", "city": "HILLSDALE", "loc": [ -87.40410199999999, 39.771235 ], "pop": 858, "state": "IN" }, { "_id": "47858", "city": "LEWIS", "loc": [ -87.26368100000001, 39.273261 ], "pop": 308, "state": "IN" }, { "_id": "47859", "city": "MARSHALL", "loc": [ -87.178032, 39.906216 ], "pop": 617, "state": "IN" }, { "_id": "47861", "city": "MEROM", "loc": [ -87.539675, 39.032307 ], "pop": 649, "state": "IN" }, { "_id": "47862", "city": "MONTEZUMA", "loc": [ -87.360679, 39.796061 ], "pop": 1444, "state": "IN" }, { "_id": "47866", "city": "PIMENTO", "loc": [ -87.379186, 39.289792 ], "pop": 1123, "state": "IN" }, { "_id": "47868", "city": "POLAND", "loc": [ -86.963103, 39.446195 ], "pop": 292, "state": "IN" }, { "_id": "47872", "city": "ROCKVILLE", "loc": [ -87.197794, 39.768152 ], "pop": 7895, "state": "IN" }, { "_id": "47874", "city": "ROSEDALE", "loc": [ -87.308592, 39.62391 ], "pop": 3463, "state": "IN" }, { "_id": "47879", "city": "SHELBURN", "loc": [ -87.361194, 39.209924 ], "pop": 5300, "state": "IN" }, { "_id": "47882", "city": "SULLIVAN", "loc": [ -87.410235, 39.101018 ], "pop": 8921, "state": "IN" }, { "_id": "47885", "city": "SANDFORD", "loc": [ -87.46708599999999, 39.49384 ], "pop": 11459, "state": "IN" }, { "_id": "47901", "city": "LAFAYETTE", "loc": [ -86.888358, 40.417743 ], "pop": 2971, "state": "IN" }, { "_id": "47904", "city": "LAFAYETTE", "loc": [ -86.873464, 40.427649 ], "pop": 15231, "state": "IN" }, { "_id": "47905", "city": "LAFAYETTE", "loc": [ -86.860236, 40.400054 ], "pop": 53104, "state": "IN" }, { "_id": "47906", "city": "WEST LAFAYETTE", "loc": [ -86.923661, 40.444025 ], "pop": 54702, "state": "IN" }, { "_id": "47917", "city": "AMBIA", "loc": [ -87.47955399999999, 40.479328 ], "pop": 794, "state": "IN" }, { "_id": "47918", "city": "ATTICA", "loc": [ -87.224108, 40.281127 ], "pop": 5523, "state": "IN" }, { "_id": "47920", "city": "BATTLE GROUND", "loc": [ -86.823784, 40.5248 ], "pop": 1646, "state": "IN" }, { "_id": "47921", "city": "BOSWELL", "loc": [ -87.378947, 40.518021 ], "pop": 1118, "state": "IN" }, { "_id": "47922", "city": "BROOK", "loc": [ -87.35268499999999, 40.865534 ], "pop": 1341, "state": "IN" }, { "_id": "47923", "city": "BROOKSTON", "loc": [ -86.875311, 40.601088 ], "pop": 3200, "state": "IN" }, { "_id": "47926", "city": "BURNETTSVILLE", "loc": [ -86.574744, 40.707753 ], "pop": 2102, "state": "IN" }, { "_id": "47928", "city": "CAYUGA", "loc": [ -87.459019, 39.930028 ], "pop": 3160, "state": "IN" }, { "_id": "47929", "city": "CHALMERS", "loc": [ -86.862621, 40.669265 ], "pop": 809, "state": "IN" }, { "_id": "47930", "city": "CLARKS HILL", "loc": [ -86.760766, 40.262805 ], "pop": 2119, "state": "IN" }, { "_id": "47932", "city": "COVINGTON", "loc": [ -87.38187600000001, 40.132618 ], "pop": 4711, "state": "IN" }, { "_id": "47933", "city": "CRAWFORDSVILLE", "loc": [ -86.90742400000001, 40.032524 ], "pop": 22838, "state": "IN" }, { "_id": "47940", "city": "DARLINGTON", "loc": [ -86.764505, 40.111778 ], "pop": 1941, "state": "IN" }, { "_id": "47942", "city": "EARL PARK", "loc": [ -87.423199, 40.694465 ], "pop": 903, "state": "IN" }, { "_id": "47943", "city": "FAIR OAKS", "loc": [ -87.197031, 41.072862 ], "pop": 1254, "state": "IN" }, { "_id": "47944", "city": "FOWLER", "loc": [ -87.30901900000001, 40.625511 ], "pop": 3762, "state": "IN" }, { "_id": "47946", "city": "FRANCESVILLE", "loc": [ -86.85534, 40.97094 ], "pop": 1808, "state": "IN" }, { "_id": "47948", "city": "GOODLAND", "loc": [ -87.299858, 40.766872 ], "pop": 1341, "state": "IN" }, { "_id": "47949", "city": "HILLSBORO", "loc": [ -87.154509, 40.083452 ], "pop": 2318, "state": "IN" }, { "_id": "47950", "city": "IDAVILLE", "loc": [ -86.655647, 40.767372 ], "pop": 673, "state": "IN" }, { "_id": "47951", "city": "KENTLAND", "loc": [ -87.44707099999999, 40.787678 ], "pop": 2609, "state": "IN" }, { "_id": "47952", "city": "CATES", "loc": [ -87.30354800000001, 39.989383 ], "pop": 2183, "state": "IN" }, { "_id": "47954", "city": "LADOGA", "loc": [ -86.80309800000001, 39.91325 ], "pop": 2405, "state": "IN" }, { "_id": "47955", "city": "LINDEN", "loc": [ -86.89054899999999, 40.183316 ], "pop": 1274, "state": "IN" }, { "_id": "47957", "city": "MEDARYVILLE", "loc": [ -86.880844, 41.089734 ], "pop": 2030, "state": "IN" }, { "_id": "47959", "city": "MONON", "loc": [ -86.86353699999999, 40.861176 ], "pop": 3119, "state": "IN" }, { "_id": "47960", "city": "MONTICELLO", "loc": [ -86.754999, 40.762556 ], "pop": 13599, "state": "IN" }, { "_id": "47963", "city": "MOROCCO", "loc": [ -87.41871, 40.964547 ], "pop": 2461, "state": "IN" }, { "_id": "47967", "city": "NEW RICHMOND", "loc": [ -86.978925, 40.18118 ], "pop": 909, "state": "IN" }, { "_id": "47968", "city": "NEW ROSS", "loc": [ -86.752768, 39.988266 ], "pop": 1440, "state": "IN" }, { "_id": "47970", "city": "OTTERBEIN", "loc": [ -87.12249, 40.517013 ], "pop": 1527, "state": "IN" }, { "_id": "47971", "city": "OXFORD", "loc": [ -87.252576, 40.521708 ], "pop": 1641, "state": "IN" }, { "_id": "47974", "city": "PERRYSVILLE", "loc": [ -87.464787, 40.073697 ], "pop": 1672, "state": "IN" }, { "_id": "47975", "city": "PINE VILLAGE", "loc": [ -87.231724, 40.432759 ], "pop": 1310, "state": "IN" }, { "_id": "47977", "city": "REMINGTON", "loc": [ -87.15994000000001, 40.766653 ], "pop": 1937, "state": "IN" }, { "_id": "47978", "city": "COLLEGEVILLE", "loc": [ -87.13373300000001, 40.947731 ], "pop": 9776, "state": "IN" }, { "_id": "47980", "city": "REYNOLDS", "loc": [ -86.86914, 40.760608 ], "pop": 1148, "state": "IN" }, { "_id": "47981", "city": "ROMNEY", "loc": [ -86.90441199999999, 40.2605 ], "pop": 694, "state": "IN" }, { "_id": "47985", "city": "TANGIER", "loc": [ -87.341551, 39.920601 ], "pop": 711, "state": "IN" }, { "_id": "47987", "city": "VEEDERSBURG", "loc": [ -87.260167, 40.118616 ], "pop": 3081, "state": "IN" }, { "_id": "47989", "city": "WAVELAND", "loc": [ -87.01776, 39.901996 ], "pop": 1548, "state": "IN" }, { "_id": "47990", "city": "WAYNETOWN", "loc": [ -87.051165, 40.085788 ], "pop": 1529, "state": "IN" }, { "_id": "47991", "city": "WEST LEBANON", "loc": [ -87.43667600000001, 40.241491 ], "pop": 2957, "state": "IN" }, { "_id": "47992", "city": "WESTPOINT", "loc": [ -87.05747700000001, 40.358052 ], "pop": 145, "state": "IN" }, { "_id": "47993", "city": "MARSHFIELD", "loc": [ -87.278689, 40.309435 ], "pop": 3591, "state": "IN" }, { "_id": "47994", "city": "WINGATE", "loc": [ -87.066441, 40.166594 ], "pop": 552, "state": "IN" }, { "_id": "47995", "city": "WOLCOTT", "loc": [ -87.028997, 40.751613 ], "pop": 1909, "state": "IN" }, { "_id": "48001", "city": "PEARL BEACH", "loc": [ -82.560159, 42.630704 ], "pop": 11783, "state": "MI" }, { "_id": "48002", "city": "BERLIN", "loc": [ -82.886809, 42.919864 ], "pop": 1333, "state": "MI" }, { "_id": "48003", "city": "ALMONT", "loc": [ -83.036221, 42.926007 ], "pop": 5315, "state": "MI" }, { "_id": "48004", "city": "ANCHORVILLE", "loc": [ -82.70939199999999, 42.711817 ], "pop": 5360, "state": "MI" }, { "_id": "48005", "city": "ARMADA", "loc": [ -82.889905, 42.840903 ], "pop": 4819, "state": "MI" }, { "_id": "48006", "city": "GREENWOOD", "loc": [ -82.678141, 43.056424 ], "pop": 2325, "state": "MI" }, { "_id": "48009", "city": "BIRMINGHAM", "loc": [ -83.213255, 42.544396 ], "pop": 19611, "state": "MI" }, { "_id": "48014", "city": "MUSSEY", "loc": [ -82.92518800000001, 43.019976 ], "pop": 4304, "state": "MI" }, { "_id": "48015", "city": "CENTER LINE", "loc": [ -83.02477, 42.47879 ], "pop": 8923, "state": "MI" }, { "_id": "48017", "city": "CLAWSON", "loc": [ -83.150317, 42.536468 ], "pop": 14008, "state": "MI" }, { "_id": "48021", "city": "EASTPOINTE", "loc": [ -82.945896, 42.465756 ], "pop": 35073, "state": "MI" }, { "_id": "48022", "city": "EMMETT", "loc": [ -82.785402, 42.987239 ], "pop": 2335, "state": "MI" }, { "_id": "48023", "city": "IRA", "loc": [ -82.63767300000001, 42.680651 ], "pop": 3781, "state": "MI" }, { "_id": "48025", "city": "FRANKLIN", "loc": [ -83.251852, 42.521891 ], "pop": 13880, "state": "MI" }, { "_id": "48026", "city": "FRASER", "loc": [ -82.94696399999999, 42.542252 ], "pop": 20605, "state": "MI" }, { "_id": "48027", "city": "WALES", "loc": [ -82.621728, 43.000058 ], "pop": 3285, "state": "MI" }, { "_id": "48028", "city": "HARSENS ISLAND", "loc": [ -82.586049, 42.585043 ], "pop": 1091, "state": "MI" }, { "_id": "48030", "city": "HAZEL PARK", "loc": [ -83.09818199999999, 42.460768 ], "pop": 20218, "state": "MI" }, { "_id": "48032", "city": "GRANT TOWNSHIP", "loc": [ -82.554734, 43.134584 ], "pop": 1498, "state": "MI" }, { "_id": "48034", "city": "SOUTHFIELD", "loc": [ -83.28829500000001, 42.477676 ], "pop": 28647, "state": "MI" }, { "_id": "48039", "city": "COTTRELLVILLE", "loc": [ -82.514034, 42.721291 ], "pop": 10057, "state": "MI" }, { "_id": "48040", "city": "MARYSVILLE", "loc": [ -82.48134400000001, 42.913534 ], "pop": 8515, "state": "MI" }, { "_id": "48041", "city": "RILEY", "loc": [ -82.769623, 42.905955 ], "pop": 3328, "state": "MI" }, { "_id": "48043", "city": "MOUNT CLEMENS", "loc": [ -82.894052, 42.577562 ], "pop": 67489, "state": "MI" }, { "_id": "48044", "city": "MACOMB", "loc": [ -82.946845, 42.616456 ], "pop": 51044, "state": "MI" }, { "_id": "48045", "city": "SELFRIDGE A N G", "loc": [ -82.836395, 42.602743 ], "pop": 34104, "state": "MI" }, { "_id": "48047", "city": "CHESTERFIELD", "loc": [ -82.780102, 42.675344 ], "pop": 22480, "state": "MI" }, { "_id": "48048", "city": "LENOX", "loc": [ -82.82024800000001, 42.732958 ], "pop": 4800, "state": "MI" }, { "_id": "48049", "city": "RUBY", "loc": [ -82.538252, 43.026861 ], "pop": 2316, "state": "MI" }, { "_id": "48060", "city": "PORT HURON", "loc": [ -82.45993799999999, 42.995843 ], "pop": 58197, "state": "MI" }, { "_id": "48062", "city": "RICHMOND", "loc": [ -82.730052, 42.812743 ], "pop": 12587, "state": "MI" }, { "_id": "48065", "city": "BRUCE", "loc": [ -83.019204, 42.803513 ], "pop": 13552, "state": "MI" }, { "_id": "48066", "city": "ROSEVILLE", "loc": [ -82.93868000000001, 42.503423 ], "pop": 51539, "state": "MI" }, { "_id": "48067", "city": "ROYAL OAK", "loc": [ -83.136584, 42.490579 ], "pop": 27820, "state": "MI" }, { "_id": "48069", "city": "PLEASANT RIDGE", "loc": [ -83.143771, 42.47104 ], "pop": 2895, "state": "MI" }, { "_id": "48070", "city": "HUNTINGTON WOODS", "loc": [ -83.17490599999999, 42.482538 ], "pop": 9107, "state": "MI" }, { "_id": "48071", "city": "MADISON HEIGHTS", "loc": [ -83.102699, 42.501605 ], "pop": 32196, "state": "MI" }, { "_id": "48072", "city": "BERKLEY", "loc": [ -83.188683, 42.502755 ], "pop": 22323, "state": "MI" }, { "_id": "48073", "city": "ROYAL OAK", "loc": [ -83.157027, 42.519047 ], "pop": 32093, "state": "MI" }, { "_id": "48074", "city": "KIMBALL", "loc": [ -82.574516, 42.922072 ], "pop": 4496, "state": "MI" }, { "_id": "48075", "city": "SOUTHFIELD", "loc": [ -83.225539, 42.463831 ], "pop": 22758, "state": "MI" }, { "_id": "48076", "city": "LATHRUP VILLAGE", "loc": [ -83.22971, 42.499915 ], "pop": 29081, "state": "MI" }, { "_id": "48079", "city": "SAINT CLAIR", "loc": [ -82.513256, 42.825453 ], "pop": 11681, "state": "MI" }, { "_id": "48080", "city": "SAINT CLAIR SHOR", "loc": [ -82.900674, 42.463474 ], "pop": 25179, "state": "MI" }, { "_id": "48081", "city": "SAINT CLAIR SHOR", "loc": [ -82.89995399999999, 42.49538 ], "pop": 23479, "state": "MI" }, { "_id": "48082", "city": "SAINT CLAIR SHOR", "loc": [ -82.886538, 42.526627 ], "pop": 19975, "state": "MI" }, { "_id": "48083", "city": "TROY", "loc": [ -83.113771, 42.559668 ], "pop": 20459, "state": "MI" }, { "_id": "48084", "city": "TROY", "loc": [ -83.179947, 42.562696 ], "pop": 13010, "state": "MI" }, { "_id": "48089", "city": "WARREN", "loc": [ -82.99738499999999, 42.468494 ], "pop": 35861, "state": "MI" }, { "_id": "48091", "city": "WARREN", "loc": [ -83.059263, 42.466463 ], "pop": 33165, "state": "MI" }, { "_id": "48092", "city": "WARREN", "loc": [ -83.064278, 42.512459 ], "pop": 25781, "state": "MI" }, { "_id": "48093", "city": "WARREN", "loc": [ -82.996764, 42.514943 ], "pop": 50327, "state": "MI" }, { "_id": "48094", "city": "WASHINGTON", "loc": [ -83.026805, 42.726202 ], "pop": 10975, "state": "MI" }, { "_id": "48097", "city": "BROCKWAY", "loc": [ -82.797899, 43.122429 ], "pop": 5665, "state": "MI" }, { "_id": "48098", "city": "TROY", "loc": [ -83.14500099999999, 42.598118 ], "pop": 39379, "state": "MI" }, { "_id": "48101", "city": "ALLEN PARK", "loc": [ -83.212001, 42.25223 ], "pop": 31167, "state": "MI" }, { "_id": "48103", "city": "ANN ARBOR", "loc": [ -83.783998, 42.279379 ], "pop": 41263, "state": "MI" }, { "_id": "48104", "city": "ANN ARBOR", "loc": [ -83.728156, 42.26939 ], "pop": 47564, "state": "MI" }, { "_id": "48105", "city": "ANN ARBOR", "loc": [ -83.706756, 42.304247 ], "pop": 28543, "state": "MI" }, { "_id": "48108", "city": "ANN ARBOR", "loc": [ -83.701481, 42.232782 ], "pop": 17948, "state": "MI" }, { "_id": "48109", "city": "ANN ARBOR", "loc": [ -83.715363, 42.293 ], "pop": 0, "state": "MI" }, { "_id": "48111", "city": "BELLEVILLE", "loc": [ -83.48542500000001, 42.194858 ], "pop": 35436, "state": "MI" }, { "_id": "48116", "city": "BRIGHTON", "loc": [ -83.775628, 42.537069 ], "pop": 37205, "state": "MI" }, { "_id": "48117", "city": "CARLETON", "loc": [ -83.375502, 42.052941 ], "pop": 8144, "state": "MI" }, { "_id": "48118", "city": "CHELSEA", "loc": [ -84.03339200000001, 42.320692 ], "pop": 9504, "state": "MI" }, { "_id": "48120", "city": "DEARBORN", "loc": [ -83.160488, 42.305295 ], "pop": 6325, "state": "MI" }, { "_id": "48122", "city": "MELVINDALE", "loc": [ -83.182573, 42.281229 ], "pop": 11226, "state": "MI" }, { "_id": "48124", "city": "DEARBORN", "loc": [ -83.25356499999999, 42.294141 ], "pop": 34078, "state": "MI" }, { "_id": "48125", "city": "DEARBORN HEIGHTS", "loc": [ -83.260603, 42.276824 ], "pop": 24715, "state": "MI" }, { "_id": "48126", "city": "DEARBORN", "loc": [ -83.180065, 42.334882 ], "pop": 37807, "state": "MI" }, { "_id": "48127", "city": "DEARBORN HEIGHTS", "loc": [ -83.286383, 42.335317 ], "pop": 36123, "state": "MI" }, { "_id": "48128", "city": "DEARBORN", "loc": [ -83.27013100000001, 42.319981 ], "pop": 11076, "state": "MI" }, { "_id": "48130", "city": "DEXTER", "loc": [ -83.90002800000001, 42.35832 ], "pop": 8216, "state": "MI" }, { "_id": "48131", "city": "DUNDEE", "loc": [ -83.652165, 41.951435 ], "pop": 6521, "state": "MI" }, { "_id": "48133", "city": "ERIE", "loc": [ -83.495797, 41.782935 ], "pop": 5101, "state": "MI" }, { "_id": "48134", "city": "FLAT ROCK", "loc": [ -83.27952500000001, 42.105521 ], "pop": 11180, "state": "MI" }, { "_id": "48135", "city": "GARDEN CITY", "loc": [ -83.340236, 42.32415 ], "pop": 31846, "state": "MI" }, { "_id": "48137", "city": "GREGORY", "loc": [ -84.046588, 42.450671 ], "pop": 3323, "state": "MI" }, { "_id": "48138", "city": "GROSSE ILE", "loc": [ -83.153828, 42.13465 ], "pop": 9783, "state": "MI" }, { "_id": "48140", "city": "IDA", "loc": [ -83.591561, 41.854928 ], "pop": 2690, "state": "MI" }, { "_id": "48141", "city": "INKSTER", "loc": [ -83.31462999999999, 42.294041 ], "pop": 30772, "state": "MI" }, { "_id": "48144", "city": "LAMBERTVILLE", "loc": [ -83.625865, 41.753055 ], "pop": 7959, "state": "MI" }, { "_id": "48145", "city": "LA SALLE", "loc": [ -83.47148799999999, 41.858489 ], "pop": 3800, "state": "MI" }, { "_id": "48146", "city": "LINCOLN PARK", "loc": [ -83.180688, 42.242211 ], "pop": 41763, "state": "MI" }, { "_id": "48150", "city": "LIVONIA", "loc": [ -83.36494, 42.361503 ], "pop": 27644, "state": "MI" }, { "_id": "48152", "city": "LIVONIA", "loc": [ -83.363603, 42.425793 ], "pop": 30199, "state": "MI" }, { "_id": "48154", "city": "LIVONIA", "loc": [ -83.377157, 42.395796 ], "pop": 43007, "state": "MI" }, { "_id": "48157", "city": "LUNA PIER", "loc": [ -83.436165, 41.815368 ], "pop": 1758, "state": "MI" }, { "_id": "48158", "city": "MANCHESTER", "loc": [ -84.033247, 42.155545 ], "pop": 6163, "state": "MI" }, { "_id": "48159", "city": "MAYBEE", "loc": [ -83.51790200000001, 42.028822 ], "pop": 3822, "state": "MI" }, { "_id": "48160", "city": "MILAN", "loc": [ -83.67763600000001, 42.091373 ], "pop": 12411, "state": "MI" }, { "_id": "48161", "city": "DETROIT BEACH", "loc": [ -83.404848, 41.92751 ], "pop": 55630, "state": "MI" }, { "_id": "48164", "city": "NEW BOSTON", "loc": [ -83.35885500000001, 42.144899 ], "pop": 9809, "state": "MI" }, { "_id": "48165", "city": "NEW HUDSON", "loc": [ -83.63423299999999, 42.507647 ], "pop": 4233, "state": "MI" }, { "_id": "48166", "city": "NEWPORT", "loc": [ -83.280438, 41.976582 ], "pop": 5651, "state": "MI" }, { "_id": "48167", "city": "NORTHVILLE", "loc": [ -83.479355, 42.426245 ], "pop": 30177, "state": "MI" }, { "_id": "48169", "city": "PINCKNEY", "loc": [ -83.909918, 42.459579 ], "pop": 13071, "state": "MI" }, { "_id": "48170", "city": "PLYMOUTH", "loc": [ -83.479946, 42.36882 ], "pop": 35389, "state": "MI" }, { "_id": "48173", "city": "GIBRALTAR", "loc": [ -83.216196, 42.07918 ], "pop": 9594, "state": "MI" }, { "_id": "48174", "city": "ROMULUS", "loc": [ -83.358288, 42.220304 ], "pop": 23471, "state": "MI" }, { "_id": "48176", "city": "SALINE", "loc": [ -83.784936, 42.169844 ], "pop": 13356, "state": "MI" }, { "_id": "48178", "city": "SOUTH LYON", "loc": [ -83.658951, 42.456678 ], "pop": 15616, "state": "MI" }, { "_id": "48179", "city": "SOUTH ROCKWOOD", "loc": [ -83.266302, 42.062405 ], "pop": 3204, "state": "MI" }, { "_id": "48180", "city": "TAYLOR", "loc": [ -83.267269, 42.231738 ], "pop": 70811, "state": "MI" }, { "_id": "48182", "city": "TEMPERANCE", "loc": [ -83.579739, 41.768229 ], "pop": 15581, "state": "MI" }, { "_id": "48183", "city": "WOODHAVEN", "loc": [ -83.218142, 42.134304 ], "pop": 38874, "state": "MI" }, { "_id": "48184", "city": "WAYNE", "loc": [ -83.375812, 42.276805 ], "pop": 19911, "state": "MI" }, { "_id": "48185", "city": "WESTLAND", "loc": [ -83.374908, 42.318882 ], "pop": 84712, "state": "MI" }, { "_id": "48187", "city": "CANTON", "loc": [ -83.46952400000001, 42.332013 ], "pop": 39308, "state": "MI" }, { "_id": "48188", "city": "CANTON", "loc": [ -83.465007, 42.290997 ], "pop": 17741, "state": "MI" }, { "_id": "48189", "city": "WHITMORE LAKE", "loc": [ -83.78282, 42.428904 ], "pop": 11639, "state": "MI" }, { "_id": "48191", "city": "WILLIS", "loc": [ -83.568741, 42.129249 ], "pop": 2574, "state": "MI" }, { "_id": "48192", "city": "RIVERVIEW", "loc": [ -83.182112, 42.196065 ], "pop": 50509, "state": "MI" }, { "_id": "48195", "city": "SOUTHGATE", "loc": [ -83.19991899999999, 42.204434 ], "pop": 30771, "state": "MI" }, { "_id": "48197", "city": "YPSILANTI", "loc": [ -83.63362100000001, 42.232544 ], "pop": 46790, "state": "MI" }, { "_id": "48198", "city": "YPSILANTI", "loc": [ -83.582972, 42.24388 ], "pop": 39534, "state": "MI" }, { "_id": "48201", "city": "DETROIT", "loc": [ -83.06039800000001, 42.347429 ], "pop": 15920, "state": "MI" }, { "_id": "48202", "city": "DETROIT", "loc": [ -83.07961299999999, 42.377033 ], "pop": 24565, "state": "MI" }, { "_id": "48203", "city": "HIGHLAND PARK", "loc": [ -83.100909, 42.421155 ], "pop": 53352, "state": "MI" }, { "_id": "48204", "city": "DETROIT", "loc": [ -83.142151, 42.366098 ], "pop": 48856, "state": "MI" }, { "_id": "48205", "city": "DETROIT", "loc": [ -82.981279, 42.431259 ], "pop": 65127, "state": "MI" }, { "_id": "48206", "city": "DETROIT", "loc": [ -83.108695, 42.374893 ], "pop": 38035, "state": "MI" }, { "_id": "48207", "city": "DETROIT", "loc": [ -83.027101, 42.352373 ], "pop": 25703, "state": "MI" }, { "_id": "48208", "city": "DETROIT", "loc": [ -83.09271099999999, 42.34947 ], "pop": 14925, "state": "MI" }, { "_id": "48209", "city": "DETROIT", "loc": [ -83.115464, 42.309746 ], "pop": 38839, "state": "MI" }, { "_id": "48210", "city": "DETROIT", "loc": [ -83.130281, 42.337603 ], "pop": 39833, "state": "MI" }, { "_id": "48211", "city": "DETROIT", "loc": [ -83.04094499999999, 42.380922 ], "pop": 13911, "state": "MI" }, { "_id": "48212", "city": "HAMTRAMCK", "loc": [ -83.05826500000001, 42.408117 ], "pop": 42830, "state": "MI" }, { "_id": "48213", "city": "DETROIT", "loc": [ -82.99253, 42.39816 ], "pop": 52700, "state": "MI" }, { "_id": "48214", "city": "DETROIT", "loc": [ -82.993798, 42.366944 ], "pop": 39584, "state": "MI" }, { "_id": "48215", "city": "DETROIT", "loc": [ -82.951319, 42.377272 ], "pop": 24493, "state": "MI" }, { "_id": "48216", "city": "DETROIT", "loc": [ -83.082656, 42.327467 ], "pop": 8592, "state": "MI" }, { "_id": "48217", "city": "DETROIT", "loc": [ -83.154545, 42.271914 ], "pop": 11634, "state": "MI" }, { "_id": "48218", "city": "RIVER ROUGE", "loc": [ -83.136432, 42.269229 ], "pop": 11314, "state": "MI" }, { "_id": "48219", "city": "DETROIT", "loc": [ -83.249495, 42.426033 ], "pop": 63058, "state": "MI" }, { "_id": "48220", "city": "FERNDALE", "loc": [ -83.13625999999999, 42.458564 ], "pop": 28698, "state": "MI" }, { "_id": "48221", "city": "DETROIT", "loc": [ -83.149976, 42.425998 ], "pop": 48068, "state": "MI" }, { "_id": "48223", "city": "DETROIT", "loc": [ -83.245403, 42.394453 ], "pop": 39612, "state": "MI" }, { "_id": "48224", "city": "DETROIT", "loc": [ -82.944061, 42.409808 ], "pop": 52938, "state": "MI" }, { "_id": "48225", "city": "HARPER WOODS", "loc": [ -82.92888499999999, 42.437658 ], "pop": 14937, "state": "MI" }, { "_id": "48226", "city": "DETROIT", "loc": [ -83.04843200000001, 42.333346 ], "pop": 5502, "state": "MI" }, { "_id": "48227", "city": "DETROIT", "loc": [ -83.193732, 42.388303 ], "pop": 68390, "state": "MI" }, { "_id": "48228", "city": "DETROIT", "loc": [ -83.216753, 42.35473 ], "pop": 67215, "state": "MI" }, { "_id": "48229", "city": "ECORSE", "loc": [ -83.148943, 42.251881 ], "pop": 12164, "state": "MI" }, { "_id": "48230", "city": "GROSSE POINTE", "loc": [ -82.92439400000001, 42.384694 ], "pop": 19302, "state": "MI" }, { "_id": "48234", "city": "DETROIT", "loc": [ -83.04338300000001, 42.4337 ], "pop": 47768, "state": "MI" }, { "_id": "48235", "city": "DETROIT", "loc": [ -83.19512400000001, 42.426098 ], "pop": 57165, "state": "MI" }, { "_id": "48236", "city": "GROSSE POINTE", "loc": [ -82.900248, 42.427404 ], "pop": 32076, "state": "MI" }, { "_id": "48237", "city": "OAK PARK", "loc": [ -83.183993, 42.466151 ], "pop": 28884, "state": "MI" }, { "_id": "48238", "city": "DETROIT", "loc": [ -83.14114499999999, 42.395932 ], "pop": 50599, "state": "MI" }, { "_id": "48239", "city": "REDFORD", "loc": [ -83.28895, 42.375554 ], "pop": 39218, "state": "MI" }, { "_id": "48240", "city": "REDFORD", "loc": [ -83.30166, 42.426354 ], "pop": 20297, "state": "MI" }, { "_id": "48242", "city": "DETROIT", "loc": [ -83.377081, 42.220718 ], "pop": 211, "state": "MI" }, { "_id": "48301", "city": "BLOOMFIELD TOWNS", "loc": [ -83.2771, 42.545044 ], "pop": 15338, "state": "MI" }, { "_id": "48302", "city": "BLOOMFIELD TOWNS", "loc": [ -83.296271, 42.583237 ], "pop": 17017, "state": "MI" }, { "_id": "48304", "city": "BLOOMFIELD TOWNS", "loc": [ -83.234011, 42.593764 ], "pop": 16057, "state": "MI" }, { "_id": "48306", "city": "ROCHESTER HILLS", "loc": [ -83.164215, 42.710684 ], "pop": 15755, "state": "MI" }, { "_id": "48307", "city": "ROCHESTER HILLS", "loc": [ -83.129124, 42.660185 ], "pop": 31734, "state": "MI" }, { "_id": "48309", "city": "ROCHESTER HILLS", "loc": [ -83.181842, 42.666848 ], "pop": 27450, "state": "MI" }, { "_id": "48310", "city": "STERLING HEIGHTS", "loc": [ -83.07013499999999, 42.564782 ], "pop": 42255, "state": "MI" }, { "_id": "48312", "city": "STERLING HEIGHTS", "loc": [ -83.00289600000001, 42.559203 ], "pop": 33163, "state": "MI" }, { "_id": "48313", "city": "STERLING HEIGHTS", "loc": [ -82.99976599999999, 42.600498 ], "pop": 33890, "state": "MI" }, { "_id": "48314", "city": "STERLING HEIGHTS", "loc": [ -83.03445499999999, 42.612352 ], "pop": 8502, "state": "MI" }, { "_id": "48315", "city": "SHELBY TOWNSHIP", "loc": [ -82.99654700000001, 42.663694 ], "pop": 11783, "state": "MI" }, { "_id": "48316", "city": "SHELBY TOWNSHIP", "loc": [ -83.060928, 42.682668 ], "pop": 15039, "state": "MI" }, { "_id": "48317", "city": "SHELBY TOWNSHIP", "loc": [ -83.048109, 42.640462 ], "pop": 24775, "state": "MI" }, { "_id": "48320", "city": "SYLVAN LAKE", "loc": [ -83.339551, 42.610449 ], "pop": 4688, "state": "MI" }, { "_id": "48322", "city": "WEST BLOOMFIELD", "loc": [ -83.379313, 42.542366 ], "pop": 26119, "state": "MI" }, { "_id": "48323", "city": "ORCHARD LAKE", "loc": [ -83.369342, 42.570171 ], "pop": 15797, "state": "MI" }, { "_id": "48324", "city": "ORCHARD LAKE", "loc": [ -83.39553600000001, 42.598109 ], "pop": 13719, "state": "MI" }, { "_id": "48326", "city": "AUBURN HILLS", "loc": [ -83.237489, 42.658345 ], "pop": 16184, "state": "MI" }, { "_id": "48327", "city": "WATERFORD", "loc": [ -83.407602, 42.643751 ], "pop": 17213, "state": "MI" }, { "_id": "48328", "city": "WATERFORD", "loc": [ -83.354624, 42.642944 ], "pop": 24330, "state": "MI" }, { "_id": "48329", "city": "WATERFORD", "loc": [ -83.38786899999999, 42.687663 ], "pop": 25125, "state": "MI" }, { "_id": "48331", "city": "FARMINGTON HILLS", "loc": [ -83.405433, 42.510042 ], "pop": 19626, "state": "MI" }, { "_id": "48334", "city": "FARMINGTON HILLS", "loc": [ -83.35198, 42.506798 ], "pop": 17513, "state": "MI" }, { "_id": "48335", "city": "FARMINGTON HILLS", "loc": [ -83.40013399999999, 42.463055 ], "pop": 19715, "state": "MI" }, { "_id": "48336", "city": "FARMINGTON HILLS", "loc": [ -83.345465, 42.460938 ], "pop": 25680, "state": "MI" }, { "_id": "48340", "city": "PONTIAC", "loc": [ -83.28933499999999, 42.667955 ], "pop": 23663, "state": "MI" }, { "_id": "48341", "city": "PONTIAC", "loc": [ -83.304149, 42.629449 ], "pop": 22685, "state": "MI" }, { "_id": "48342", "city": "PONTIAC", "loc": [ -83.279236, 42.643856 ], "pop": 24663, "state": "MI" }, { "_id": "48346", "city": "INDEPENDENCE", "loc": [ -83.405658, 42.721637 ], "pop": 17459, "state": "MI" }, { "_id": "48348", "city": "INDEPENDENCE", "loc": [ -83.390568, 42.772414 ], "pop": 14635, "state": "MI" }, { "_id": "48350", "city": "SPRINGFIELD", "loc": [ -83.520022, 42.75413 ], "pop": 5949, "state": "MI" }, { "_id": "48353", "city": "HARTLAND", "loc": [ -83.714674, 42.63561 ], "pop": 4584, "state": "MI" }, { "_id": "48356", "city": "HIGHLAND", "loc": [ -83.58951, 42.669187 ], "pop": 8161, "state": "MI" }, { "_id": "48357", "city": "HIGHLAND", "loc": [ -83.637013, 42.659453 ], "pop": 7376, "state": "MI" }, { "_id": "48359", "city": "ORION", "loc": [ -83.291701, 42.720779 ], "pop": 5264, "state": "MI" }, { "_id": "48360", "city": "ORION", "loc": [ -83.282792, 42.742212 ], "pop": 6725, "state": "MI" }, { "_id": "48362", "city": "ORION", "loc": [ -83.253208, 42.780598 ], "pop": 11862, "state": "MI" }, { "_id": "48363", "city": "OAKLAND", "loc": [ -83.171116, 42.773179 ], "pop": 3716, "state": "MI" }, { "_id": "48367", "city": "ADDISON TOWNSHIP", "loc": [ -83.13808899999999, 42.836423 ], "pop": 3963, "state": "MI" }, { "_id": "48370", "city": "OXFORD", "loc": [ -83.20045500000001, 42.826451 ], "pop": 1267, "state": "MI" }, { "_id": "48371", "city": "OXFORD", "loc": [ -83.282892, 42.822272 ], "pop": 13306, "state": "MI" }, { "_id": "48374", "city": "NOVI", "loc": [ -83.522423, 42.473495 ], "pop": 5302, "state": "MI" }, { "_id": "48375", "city": "NOVI", "loc": [ -83.457741, 42.460354 ], "pop": 19067, "state": "MI" }, { "_id": "48377", "city": "NOVI", "loc": [ -83.472838, 42.513616 ], "pop": 6011, "state": "MI" }, { "_id": "48380", "city": "MILFORD", "loc": [ -83.650796, 42.601951 ], "pop": 4050, "state": "MI" }, { "_id": "48381", "city": "MILFORD", "loc": [ -83.592404, 42.575841 ], "pop": 10297, "state": "MI" }, { "_id": "48382", "city": "COMMERCE TOWNSHI", "loc": [ -83.49467, 42.589424 ], "pop": 16939, "state": "MI" }, { "_id": "48383", "city": "WHITE LAKE", "loc": [ -83.539838, 42.658004 ], "pop": 7528, "state": "MI" }, { "_id": "48386", "city": "WHITE LAKE", "loc": [ -83.473809, 42.641003 ], "pop": 14778, "state": "MI" }, { "_id": "48390", "city": "WOLVERINE LAKE", "loc": [ -83.479623, 42.550384 ], "pop": 15904, "state": "MI" }, { "_id": "48393", "city": "WIXOM", "loc": [ -83.528486, 42.534037 ], "pop": 9337, "state": "MI" }, { "_id": "48401", "city": "APPLEGATE", "loc": [ -82.647865, 43.361899 ], "pop": 1338, "state": "MI" }, { "_id": "48412", "city": "ATTICA", "loc": [ -83.166842, 43.054673 ], "pop": 5780, "state": "MI" }, { "_id": "48413", "city": "BAD AXE", "loc": [ -83.00537799999999, 43.806745 ], "pop": 7321, "state": "MI" }, { "_id": "48414", "city": "BANCROFT", "loc": [ -84.12072499999999, 42.881957 ], "pop": 7199, "state": "MI" }, { "_id": "48415", "city": "BIRCH RUN", "loc": [ -83.79028700000001, 43.264868 ], "pop": 7961, "state": "MI" }, { "_id": "48416", "city": "BROWN CITY", "loc": [ -82.99783600000001, 43.217073 ], "pop": 4646, "state": "MI" }, { "_id": "48417", "city": "BURT", "loc": [ -83.95107299999999, 43.24043 ], "pop": 5487, "state": "MI" }, { "_id": "48418", "city": "BYRON", "loc": [ -83.97297, 42.805928 ], "pop": 3085, "state": "MI" }, { "_id": "48419", "city": "CARSONVILLE", "loc": [ -82.602169, 43.425805 ], "pop": 2621, "state": "MI" }, { "_id": "48420", "city": "CLIO", "loc": [ -83.724949, 43.177885 ], "pop": 21345, "state": "MI" }, { "_id": "48421", "city": "COLUMBIAVILLE", "loc": [ -83.381055, 43.150334 ], "pop": 6499, "state": "MI" }, { "_id": "48422", "city": "CROSWELL", "loc": [ -82.63372099999999, 43.262245 ], "pop": 5931, "state": "MI" }, { "_id": "48423", "city": "DAVISON", "loc": [ -83.526771, 43.034777 ], "pop": 26713, "state": "MI" }, { "_id": "48426", "city": "DECKER", "loc": [ -83.06379099999999, 43.477532 ], "pop": 480, "state": "MI" }, { "_id": "48427", "city": "DECKERVILLE", "loc": [ -82.71911799999999, 43.515087 ], "pop": 4623, "state": "MI" }, { "_id": "48428", "city": "DRYDEN", "loc": [ -83.150066, 42.937772 ], "pop": 3095, "state": "MI" }, { "_id": "48429", "city": "DURAND", "loc": [ -83.987651, 42.91171 ], "pop": 7797, "state": "MI" }, { "_id": "48430", "city": "FENTON", "loc": [ -83.72935099999999, 42.785098 ], "pop": 25337, "state": "MI" }, { "_id": "48432", "city": "FILION", "loc": [ -82.982483, 43.901362 ], "pop": 988, "state": "MI" }, { "_id": "48433", "city": "FLUSHING", "loc": [ -83.84239100000001, 43.071954 ], "pop": 23082, "state": "MI" }, { "_id": "48435", "city": "FOSTORIA", "loc": [ -83.379593, 43.264504 ], "pop": 2242, "state": "MI" }, { "_id": "48436", "city": "GAINES", "loc": [ -83.885488, 42.881333 ], "pop": 2931, "state": "MI" }, { "_id": "48438", "city": "GOODRICH", "loc": [ -83.484459, 42.914734 ], "pop": 5184, "state": "MI" }, { "_id": "48439", "city": "GRAND BLANC", "loc": [ -83.626414, 42.928163 ], "pop": 30329, "state": "MI" }, { "_id": "48441", "city": "HARBOR BEACH", "loc": [ -82.688608, 43.831249 ], "pop": 4046, "state": "MI" }, { "_id": "48442", "city": "HOLLY", "loc": [ -83.612737, 42.790494 ], "pop": 15119, "state": "MI" }, { "_id": "48444", "city": "IMLAY CITY", "loc": [ -83.07079899999999, 43.042512 ], "pop": 6493, "state": "MI" }, { "_id": "48445", "city": "KINDE", "loc": [ -82.97552899999999, 43.948003 ], "pop": 1082, "state": "MI" }, { "_id": "48446", "city": "LAPEER", "loc": [ -83.333153, 43.057879 ], "pop": 27632, "state": "MI" }, { "_id": "48449", "city": "LENNON", "loc": [ -83.927908, 42.969323 ], "pop": 3778, "state": "MI" }, { "_id": "48450", "city": "LEXINGTON", "loc": [ -82.530103, 43.24348 ], "pop": 3815, "state": "MI" }, { "_id": "48451", "city": "LINDEN", "loc": [ -83.79928099999999, 42.810379 ], "pop": 10127, "state": "MI" }, { "_id": "48453", "city": "MARLETTE", "loc": [ -83.057253, 43.339882 ], "pop": 4869, "state": "MI" }, { "_id": "48454", "city": "MELVIN", "loc": [ -82.839277, 43.19304 ], "pop": 816, "state": "MI" }, { "_id": "48455", "city": "METAMORA", "loc": [ -83.318371, 42.942365 ], "pop": 6719, "state": "MI" }, { "_id": "48456", "city": "MINDEN CITY", "loc": [ -82.72986299999999, 43.681393 ], "pop": 1637, "state": "MI" }, { "_id": "48457", "city": "MONTROSE", "loc": [ -83.882411, 43.175381 ], "pop": 7181, "state": "MI" }, { "_id": "48458", "city": "MOUNT MORRIS", "loc": [ -83.68952299999999, 43.11601 ], "pop": 27347, "state": "MI" }, { "_id": "48460", "city": "NEW LOTHROP", "loc": [ -83.98514400000001, 43.138781 ], "pop": 3206, "state": "MI" }, { "_id": "48461", "city": "NORTH BRANCH", "loc": [ -83.226664, 43.206887 ], "pop": 6106, "state": "MI" }, { "_id": "48462", "city": "ORTONVILLE", "loc": [ -83.428811, 42.840943 ], "pop": 10315, "state": "MI" }, { "_id": "48463", "city": "OTISVILLE", "loc": [ -83.51718700000001, 43.170584 ], "pop": 4130, "state": "MI" }, { "_id": "48464", "city": "OTTER LAKE", "loc": [ -83.42421899999999, 43.218334 ], "pop": 2442, "state": "MI" }, { "_id": "48465", "city": "PALMS", "loc": [ -82.70173699999999, 43.625671 ], "pop": 611, "state": "MI" }, { "_id": "48466", "city": "PECK", "loc": [ -82.81929, 43.26938 ], "pop": 1658, "state": "MI" }, { "_id": "48467", "city": "PORT AUSTIN", "loc": [ -82.99842700000001, 44.022292 ], "pop": 2508, "state": "MI" }, { "_id": "48468", "city": "PORT HOPE", "loc": [ -82.752893, 43.927989 ], "pop": 1490, "state": "MI" }, { "_id": "48469", "city": "PORT SANILAC", "loc": [ -82.54679400000001, 43.43292 ], "pop": 254, "state": "MI" }, { "_id": "48470", "city": "RUTH", "loc": [ -82.74139599999999, 43.740436 ], "pop": 1162, "state": "MI" }, { "_id": "48471", "city": "SANDUSKY", "loc": [ -82.84093900000001, 43.405541 ], "pop": 4198, "state": "MI" }, { "_id": "48472", "city": "SNOVER", "loc": [ -82.930063, 43.488649 ], "pop": 2301, "state": "MI" }, { "_id": "48473", "city": "SWARTZ CREEK", "loc": [ -83.81700499999999, 42.946776 ], "pop": 18263, "state": "MI" }, { "_id": "48475", "city": "UBLY", "loc": [ -82.96401299999999, 43.689631 ], "pop": 2802, "state": "MI" }, { "_id": "48502", "city": "FLINT", "loc": [ -83.68776800000001, 43.012321 ], "pop": 1359, "state": "MI" }, { "_id": "48503", "city": "FLINT", "loc": [ -83.691429, 43.012836 ], "pop": 33451, "state": "MI" }, { "_id": "48504", "city": "NORTHWEST", "loc": [ -83.72990799999999, 43.04247 ], "pop": 40445, "state": "MI" }, { "_id": "48505", "city": "FLINT", "loc": [ -83.700093, 43.063369 ], "pop": 42423, "state": "MI" }, { "_id": "48506", "city": "NORTHEAST", "loc": [ -83.640192, 43.052596 ], "pop": 35154, "state": "MI" }, { "_id": "48507", "city": "FLINT", "loc": [ -83.688999, 42.97303 ], "pop": 37656, "state": "MI" }, { "_id": "48509", "city": "NORTHEAST", "loc": [ -83.606295, 43.024493 ], "pop": 9432, "state": "MI" }, { "_id": "48519", "city": "SOUTHEAST", "loc": [ -83.61042399999999, 42.993847 ], "pop": 6081, "state": "MI" }, { "_id": "48529", "city": "SOUTHEAST", "loc": [ -83.671064, 42.97268 ], "pop": 11092, "state": "MI" }, { "_id": "48532", "city": "NORTHWEST", "loc": [ -83.768576, 43.01021 ], "pop": 20367, "state": "MI" }, { "_id": "48601", "city": "SAGINAW", "loc": [ -83.915626, 43.404692 ], "pop": 55547, "state": "MI" }, { "_id": "48602", "city": "SAGINAW", "loc": [ -83.97445500000001, 43.424838 ], "pop": 34096, "state": "MI" }, { "_id": "48603", "city": "SAGINAW", "loc": [ -84.03028, 43.43251 ], "pop": 49303, "state": "MI" }, { "_id": "48604", "city": "SAGINAW", "loc": [ -83.951421, 43.473223 ], "pop": 11937, "state": "MI" }, { "_id": "48607", "city": "SAGINAW", "loc": [ -83.931872, 43.430141 ], "pop": 3436, "state": "MI" }, { "_id": "48610", "city": "ALGER", "loc": [ -84.18719, 44.139488 ], "pop": 2015, "state": "MI" }, { "_id": "48611", "city": "AUBURN", "loc": [ -84.10267, 43.607988 ], "pop": 6154, "state": "MI" }, { "_id": "48612", "city": "BEAVERTON", "loc": [ -84.424059, 43.886576 ], "pop": 9682, "state": "MI" }, { "_id": "48613", "city": "BENTLEY", "loc": [ -84.144738, 43.886028 ], "pop": 1022, "state": "MI" }, { "_id": "48614", "city": "BRANT", "loc": [ -84.297849, 43.25484 ], "pop": 1572, "state": "MI" }, { "_id": "48615", "city": "BRECKENRIDGE", "loc": [ -84.502319, 43.393463 ], "pop": 2266, "state": "MI" }, { "_id": "48616", "city": "CHESANING", "loc": [ -84.112156, 43.182387 ], "pop": 4567, "state": "MI" }, { "_id": "48617", "city": "CLARE", "loc": [ -84.763463, 43.822318 ], "pop": 6635, "state": "MI" }, { "_id": "48618", "city": "COLEMAN", "loc": [ -84.591058, 43.749397 ], "pop": 5866, "state": "MI" }, { "_id": "48619", "city": "COMINS", "loc": [ -84.026061, 44.826354 ], "pop": 515, "state": "MI" }, { "_id": "48620", "city": "EDENVILLE", "loc": [ -84.396227, 43.802757 ], "pop": 237, "state": "MI" }, { "_id": "48621", "city": "FAIRVIEW", "loc": [ -84.052532, 44.72046 ], "pop": 1785, "state": "MI" }, { "_id": "48622", "city": "FARWELL", "loc": [ -84.87540199999999, 43.834163 ], "pop": 4456, "state": "MI" }, { "_id": "48623", "city": "FREELAND", "loc": [ -84.18217300000001, 43.516134 ], "pop": 10892, "state": "MI" }, { "_id": "48624", "city": "GLADWIN", "loc": [ -84.496801, 44.029618 ], "pop": 11790, "state": "MI" }, { "_id": "48625", "city": "HARRISON", "loc": [ -84.77289, 44.028478 ], "pop": 9223, "state": "MI" }, { "_id": "48626", "city": "HEMLOCK", "loc": [ -84.226563, 43.409911 ], "pop": 5711, "state": "MI" }, { "_id": "48628", "city": "HOPE", "loc": [ -84.329605, 43.788167 ], "pop": 1339, "state": "MI" }, { "_id": "48629", "city": "HOUGHTON LAKE", "loc": [ -84.742175, 44.341327 ], "pop": 5625, "state": "MI" }, { "_id": "48631", "city": "KAWKAWLIN", "loc": [ -83.99265699999999, 43.679399 ], "pop": 3935, "state": "MI" }, { "_id": "48632", "city": "LAKE", "loc": [ -84.97859699999999, 43.850164 ], "pop": 7779, "state": "MI" }, { "_id": "48634", "city": "LINWOOD", "loc": [ -84.013341, 43.737448 ], "pop": 4719, "state": "MI" }, { "_id": "48635", "city": "LUPTON", "loc": [ -83.99047299999999, 44.397578 ], "pop": 1784, "state": "MI" }, { "_id": "48636", "city": "LUZERNE", "loc": [ -84.246742, 44.629594 ], "pop": 744, "state": "MI" }, { "_id": "48637", "city": "MERRILL", "loc": [ -84.33075700000001, 43.393892 ], "pop": 2702, "state": "MI" }, { "_id": "48640", "city": "MIDLAND", "loc": [ -84.26796, 43.637562 ], "pop": 26370, "state": "MI" }, { "_id": "48642", "city": "MIDLAND", "loc": [ -84.197941, 43.637488 ], "pop": 24643, "state": "MI" }, { "_id": "48647", "city": "MIO", "loc": [ -84.13526400000001, 44.666481 ], "pop": 3508, "state": "MI" }, { "_id": "48649", "city": "OAKLEY", "loc": [ -84.209379, 43.150533 ], "pop": 3506, "state": "MI" }, { "_id": "48650", "city": "PINCONNING", "loc": [ -84.008162, 43.849079 ], "pop": 8659, "state": "MI" }, { "_id": "48651", "city": "PRUDENVILLE", "loc": [ -84.662747, 44.297394 ], "pop": 4484, "state": "MI" }, { "_id": "48652", "city": "RHODES", "loc": [ -84.213402, 43.851745 ], "pop": 2034, "state": "MI" }, { "_id": "48653", "city": "ROSCOMMON", "loc": [ -84.66009200000001, 44.483908 ], "pop": 8311, "state": "MI" }, { "_id": "48654", "city": "ROSE CITY", "loc": [ -84.125562, 44.41672 ], "pop": 2962, "state": "MI" }, { "_id": "48655", "city": "SAINT CHARLES", "loc": [ -84.159785, 43.286271 ], "pop": 6272, "state": "MI" }, { "_id": "48656", "city": "SAINT HELEN", "loc": [ -84.42470400000001, 44.366489 ], "pop": 3686, "state": "MI" }, { "_id": "48657", "city": "SANFORD", "loc": [ -84.39544600000001, 43.720352 ], "pop": 5154, "state": "MI" }, { "_id": "48658", "city": "STANDISH", "loc": [ -83.943297, 43.973287 ], "pop": 5314, "state": "MI" }, { "_id": "48659", "city": "STERLING", "loc": [ -84.012567, 44.067837 ], "pop": 2855, "state": "MI" }, { "_id": "48661", "city": "WEST BRANCH", "loc": [ -84.228623, 44.279032 ], "pop": 7739, "state": "MI" }, { "_id": "48662", "city": "WHEELER", "loc": [ -84.424335, 43.396224 ], "pop": 2144, "state": "MI" }, { "_id": "48701", "city": "AKRON", "loc": [ -83.53926199999999, 43.584373 ], "pop": 1694, "state": "MI" }, { "_id": "48703", "city": "AU GRES", "loc": [ -83.70202399999999, 44.033802 ], "pop": 1568, "state": "MI" }, { "_id": "48705", "city": "BARTON CITY", "loc": [ -83.599372, 44.701956 ], "pop": 755, "state": "MI" }, { "_id": "48706", "city": "UNIVERSITY CENTE", "loc": [ -83.91988499999999, 43.612165 ], "pop": 41677, "state": "MI" }, { "_id": "48708", "city": "BAY CITY", "loc": [ -83.878073, 43.58205 ], "pop": 29918, "state": "MI" }, { "_id": "48720", "city": "BAY PORT", "loc": [ -83.35246100000001, 43.837744 ], "pop": 1693, "state": "MI" }, { "_id": "48721", "city": "BLACK RIVER", "loc": [ -83.34071, 44.813842 ], "pop": 373, "state": "MI" }, { "_id": "48722", "city": "BRIDGEPORT", "loc": [ -83.854906, 43.355309 ], "pop": 3792, "state": "MI" }, { "_id": "48723", "city": "CARO", "loc": [ -83.38346900000001, 43.483272 ], "pop": 11389, "state": "MI" }, { "_id": "48725", "city": "CASEVILLE", "loc": [ -83.265924, 43.94292 ], "pop": 2939, "state": "MI" }, { "_id": "48726", "city": "CASS CITY", "loc": [ -83.173264, 43.579677 ], "pop": 7414, "state": "MI" }, { "_id": "48727", "city": "CLIFFORD", "loc": [ -83.174105, 43.309953 ], "pop": 1444, "state": "MI" }, { "_id": "48728", "city": "CURRAN", "loc": [ -83.83198899999999, 44.733606 ], "pop": 188, "state": "MI" }, { "_id": "48729", "city": "DEFORD", "loc": [ -83.170244, 43.473482 ], "pop": 556, "state": "MI" }, { "_id": "48730", "city": "EAST TAWAS", "loc": [ -83.47762899999999, 44.300823 ], "pop": 5006, "state": "MI" }, { "_id": "48731", "city": "ELKTON", "loc": [ -83.178642, 43.834437 ], "pop": 2292, "state": "MI" }, { "_id": "48732", "city": "ESSEXVILLE", "loc": [ -83.821659, 43.606908 ], "pop": 12019, "state": "MI" }, { "_id": "48733", "city": "FAIRGROVE", "loc": [ -83.583534, 43.512574 ], "pop": 3175, "state": "MI" }, { "_id": "48734", "city": "FRANKENMUTH", "loc": [ -83.74748200000001, 43.340965 ], "pop": 6931, "state": "MI" }, { "_id": "48735", "city": "GAGETOWN", "loc": [ -83.262788, 43.654251 ], "pop": 759, "state": "MI" }, { "_id": "48737", "city": "GLENNIE", "loc": [ -83.689948, 44.558234 ], "pop": 1153, "state": "MI" }, { "_id": "48738", "city": "GREENBUSH", "loc": [ -83.326883, 44.548044 ], "pop": 1121, "state": "MI" }, { "_id": "48739", "city": "HALE", "loc": [ -83.83594100000001, 44.38189 ], "pop": 3317, "state": "MI" }, { "_id": "48740", "city": "HARRISVILLE", "loc": [ -83.34242999999999, 44.654595 ], "pop": 2250, "state": "MI" }, { "_id": "48741", "city": "KINGSTON", "loc": [ -83.184727, 43.398153 ], "pop": 2475, "state": "MI" }, { "_id": "48742", "city": "LINCOLN", "loc": [ -83.39466899999999, 44.711124 ], "pop": 1167, "state": "MI" }, { "_id": "48743", "city": "LONG LAKE", "loc": [ -83.817058, 44.448465 ], "pop": 349, "state": "MI" }, { "_id": "48744", "city": "MAYVILLE", "loc": [ -83.372529, 43.356156 ], "pop": 4271, "state": "MI" }, { "_id": "48745", "city": "MIKADO", "loc": [ -83.435518, 44.583275 ], "pop": 1392, "state": "MI" }, { "_id": "48746", "city": "MILLINGTON", "loc": [ -83.561944, 43.271772 ], "pop": 8752, "state": "MI" }, { "_id": "48747", "city": "MUNGER", "loc": [ -83.76722100000001, 43.528585 ], "pop": 1898, "state": "MI" }, { "_id": "48748", "city": "NATIONAL CITY", "loc": [ -83.683948, 44.313746 ], "pop": 1823, "state": "MI" }, { "_id": "48749", "city": "OMER", "loc": [ -83.842956, 44.049939 ], "pop": 965, "state": "MI" }, { "_id": "48750", "city": "OSCODA", "loc": [ -83.361908, 44.446485 ], "pop": 14188, "state": "MI" }, { "_id": "48754", "city": "OWENDALE", "loc": [ -83.23070300000001, 43.720648 ], "pop": 1833, "state": "MI" }, { "_id": "48755", "city": "PIGEON", "loc": [ -83.275508, 43.817909 ], "pop": 1891, "state": "MI" }, { "_id": "48756", "city": "PRESCOTT", "loc": [ -84.021197, 44.20999 ], "pop": 4816, "state": "MI" }, { "_id": "48757", "city": "REESE", "loc": [ -83.70152899999999, 43.453094 ], "pop": 2830, "state": "MI" }, { "_id": "48759", "city": "SEBEWAING", "loc": [ -83.436622, 43.728888 ], "pop": 3203, "state": "MI" }, { "_id": "48760", "city": "SILVERWOOD", "loc": [ -83.271974, 43.31413 ], "pop": 964, "state": "MI" }, { "_id": "48761", "city": "SOUTH BRANCH", "loc": [ -83.868574, 44.501403 ], "pop": 968, "state": "MI" }, { "_id": "48762", "city": "SPRUCE", "loc": [ -83.504391, 44.822443 ], "pop": 1531, "state": "MI" }, { "_id": "48763", "city": "TAWAS CITY", "loc": [ -83.544905, 44.267485 ], "pop": 3868, "state": "MI" }, { "_id": "48765", "city": "TURNER", "loc": [ -83.650679, 44.10543 ], "pop": 2664, "state": "MI" }, { "_id": "48766", "city": "TWINING", "loc": [ -83.849118, 44.12929 ], "pop": 934, "state": "MI" }, { "_id": "48767", "city": "UNIONVILLE", "loc": [ -83.469898, 43.647341 ], "pop": 2111, "state": "MI" }, { "_id": "48768", "city": "VASSAR", "loc": [ -83.58444900000001, 43.369052 ], "pop": 9979, "state": "MI" }, { "_id": "48770", "city": "WHITTEMORE", "loc": [ -83.806842, 44.232514 ], "pop": 1754, "state": "MI" }, { "_id": "48801", "city": "ALMA", "loc": [ -84.663484, 43.380877 ], "pop": 11018, "state": "MI" }, { "_id": "48806", "city": "ASHLEY", "loc": [ -84.48796, 43.189103 ], "pop": 2278, "state": "MI" }, { "_id": "48807", "city": "BANNISTER", "loc": [ -84.359679, 43.161537 ], "pop": 1499, "state": "MI" }, { "_id": "48808", "city": "BATH", "loc": [ -84.45454700000001, 42.820563 ], "pop": 3695, "state": "MI" }, { "_id": "48809", "city": "BELDING", "loc": [ -85.231272, 43.088546 ], "pop": 8995, "state": "MI" }, { "_id": "48811", "city": "CARSON CITY", "loc": [ -84.865334, 43.169496 ], "pop": 4190, "state": "MI" }, { "_id": "48813", "city": "CHARLOTTE", "loc": [ -84.83518100000001, 42.570169 ], "pop": 17424, "state": "MI" }, { "_id": "48815", "city": "CLARKSVILLE", "loc": [ -85.24938400000001, 42.830177 ], "pop": 2027, "state": "MI" }, { "_id": "48817", "city": "CORUNNA", "loc": [ -84.027618, 43.041402 ], "pop": 3906, "state": "MI" }, { "_id": "48818", "city": "CRYSTAL", "loc": [ -84.899328, 43.262382 ], "pop": 2279, "state": "MI" }, { "_id": "48819", "city": "DANSVILLE", "loc": [ -84.293932, 42.550485 ], "pop": 2338, "state": "MI" }, { "_id": "48820", "city": "DEWITT", "loc": [ -84.579654, 42.842784 ], "pop": 10811, "state": "MI" }, { "_id": "48821", "city": "DIMONDALE", "loc": [ -84.64859300000001, 42.650094 ], "pop": 5131, "state": "MI" }, { "_id": "48822", "city": "EAGLE", "loc": [ -84.758971, 42.826306 ], "pop": 1937, "state": "MI" }, { "_id": "48823", "city": "EAST LANSING", "loc": [ -84.476409, 42.738805 ], "pop": 61997, "state": "MI" }, { "_id": "48827", "city": "EATON RAPIDS", "loc": [ -84.65654499999999, 42.516624 ], "pop": 12987, "state": "MI" }, { "_id": "48829", "city": "EDMORE", "loc": [ -85.028003, 43.411578 ], "pop": 2515, "state": "MI" }, { "_id": "48831", "city": "CARLAND", "loc": [ -84.39096499999999, 43.086918 ], "pop": 2487, "state": "MI" }, { "_id": "48832", "city": "ELWELL", "loc": [ -84.763103, 43.410565 ], "pop": 1006, "state": "MI" }, { "_id": "48834", "city": "FENWICK", "loc": [ -85.06656599999999, 43.149682 ], "pop": 1440, "state": "MI" }, { "_id": "48835", "city": "FOWLER", "loc": [ -84.759969, 42.994144 ], "pop": 2253, "state": "MI" }, { "_id": "48836", "city": "FOWLERVILLE", "loc": [ -84.072085, 42.661438 ], "pop": 8519, "state": "MI" }, { "_id": "48837", "city": "GRAND LEDGE", "loc": [ -84.737314, 42.752924 ], "pop": 16000, "state": "MI" }, { "_id": "48838", "city": "GREENVILLE", "loc": [ -85.24970500000001, 43.17926 ], "pop": 12208, "state": "MI" }, { "_id": "48840", "city": "HASLETT", "loc": [ -84.398887, 42.753088 ], "pop": 10679, "state": "MI" }, { "_id": "48841", "city": "HENDERSON", "loc": [ -84.185777, 43.081708 ], "pop": 534, "state": "MI" }, { "_id": "48842", "city": "HOLT", "loc": [ -84.524232, 42.639401 ], "pop": 15960, "state": "MI" }, { "_id": "48843", "city": "HOWELL", "loc": [ -83.92480999999999, 42.615933 ], "pop": 28075, "state": "MI" }, { "_id": "48845", "city": "HUBBARDSTON", "loc": [ -84.81728200000001, 43.082776 ], "pop": 1407, "state": "MI" }, { "_id": "48846", "city": "IONIA", "loc": [ -85.07098499999999, 42.98592 ], "pop": 18602, "state": "MI" }, { "_id": "48847", "city": "ITHACA", "loc": [ -84.60883, 43.282808 ], "pop": 6418, "state": "MI" }, { "_id": "48848", "city": "LAINGSBURG", "loc": [ -84.352991, 42.86271 ], "pop": 8214, "state": "MI" }, { "_id": "48849", "city": "LAKE ODESSA", "loc": [ -85.135667, 42.786335 ], "pop": 5386, "state": "MI" }, { "_id": "48850", "city": "LAKEVIEW", "loc": [ -85.292421, 43.42694 ], "pop": 6000, "state": "MI" }, { "_id": "48851", "city": "LYONS", "loc": [ -84.92094299999999, 42.963429 ], "pop": 2488, "state": "MI" }, { "_id": "48854", "city": "MASON", "loc": [ -84.45609, 42.579588 ], "pop": 17286, "state": "MI" }, { "_id": "48856", "city": "MIDDLETON", "loc": [ -84.75522100000001, 43.168911 ], "pop": 1181, "state": "MI" }, { "_id": "48857", "city": "MORRICE", "loc": [ -84.176771, 42.83851 ], "pop": 718, "state": "MI" }, { "_id": "48858", "city": "MOUNT PLEASANT", "loc": [ -84.773571, 43.601295 ], "pop": 33732, "state": "MI" }, { "_id": "48860", "city": "MUIR", "loc": [ -84.93908999999999, 43.043864 ], "pop": 1885, "state": "MI" }, { "_id": "48861", "city": "MULLIKEN", "loc": [ -84.89791099999999, 42.737657 ], "pop": 1903, "state": "MI" }, { "_id": "48864", "city": "OKEMOS", "loc": [ -84.418696, 42.705341 ], "pop": 17587, "state": "MI" }, { "_id": "48865", "city": "ORLEANS", "loc": [ -85.116547, 43.089459 ], "pop": 1678, "state": "MI" }, { "_id": "48866", "city": "OVID", "loc": [ -84.36493900000001, 42.996927 ], "pop": 5004, "state": "MI" }, { "_id": "48867", "city": "OWOSSO", "loc": [ -84.159486, 42.993407 ], "pop": 29958, "state": "MI" }, { "_id": "48871", "city": "PERRINTON", "loc": [ -84.66598399999999, 43.16492 ], "pop": 1791, "state": "MI" }, { "_id": "48872", "city": "PERRY", "loc": [ -84.231346, 42.820012 ], "pop": 5746, "state": "MI" }, { "_id": "48873", "city": "PEWAMO", "loc": [ -84.849217, 43.000747 ], "pop": 654, "state": "MI" }, { "_id": "48875", "city": "PORTLAND", "loc": [ -84.913933, 42.862414 ], "pop": 8824, "state": "MI" }, { "_id": "48876", "city": "POTTERVILLE", "loc": [ -84.734589, 42.639779 ], "pop": 2795, "state": "MI" }, { "_id": "48877", "city": "RIVERDALE", "loc": [ -84.826607, 43.409817 ], "pop": 1211, "state": "MI" }, { "_id": "48878", "city": "ROSEBUSH", "loc": [ -84.783299, 43.68427 ], "pop": 2025, "state": "MI" }, { "_id": "48879", "city": "SAINT JOHNS", "loc": [ -84.571934, 43.005924 ], "pop": 16472, "state": "MI" }, { "_id": "48880", "city": "SAINT LOUIS", "loc": [ -84.59523900000001, 43.42777 ], "pop": 7552, "state": "MI" }, { "_id": "48881", "city": "SARANAC", "loc": [ -85.229938, 42.928534 ], "pop": 5911, "state": "MI" }, { "_id": "48883", "city": "SHEPHERD", "loc": [ -84.587317, 43.565668 ], "pop": 17397, "state": "MI" }, { "_id": "48884", "city": "SHERIDAN", "loc": [ -85.04683799999999, 43.212632 ], "pop": 3030, "state": "MI" }, { "_id": "48885", "city": "SIDNEY", "loc": [ -85.120671, 43.23579 ], "pop": 642, "state": "MI" }, { "_id": "48886", "city": "SIX LAKES", "loc": [ -85.141569, 43.433714 ], "pop": 2132, "state": "MI" }, { "_id": "48888", "city": "STANTON", "loc": [ -85.099548, 43.305841 ], "pop": 6997, "state": "MI" }, { "_id": "48889", "city": "SUMNER", "loc": [ -84.790662, 43.309144 ], "pop": 2771, "state": "MI" }, { "_id": "48890", "city": "SUNFIELD", "loc": [ -84.98130500000001, 42.769314 ], "pop": 2282, "state": "MI" }, { "_id": "48891", "city": "VESTABURG", "loc": [ -84.908168, 43.387025 ], "pop": 3540, "state": "MI" }, { "_id": "48892", "city": "WEBBERVILLE", "loc": [ -84.17013, 42.662981 ], "pop": 4561, "state": "MI" }, { "_id": "48893", "city": "WEIDMAN", "loc": [ -85.00456699999999, 43.645284 ], "pop": 708, "state": "MI" }, { "_id": "48894", "city": "WESTPHALIA", "loc": [ -84.785567, 42.912308 ], "pop": 2099, "state": "MI" }, { "_id": "48895", "city": "WILLIAMSTON", "loc": [ -84.292596, 42.696652 ], "pop": 9270, "state": "MI" }, { "_id": "48897", "city": "WOODLAND", "loc": [ -85.13261, 42.705654 ], "pop": 1405, "state": "MI" }, { "_id": "48906", "city": "LANSING", "loc": [ -84.558043, 42.763464 ], "pop": 28434, "state": "MI" }, { "_id": "48910", "city": "LANSING", "loc": [ -84.54900499999999, 42.700784 ], "pop": 37654, "state": "MI" }, { "_id": "48911", "city": "LANSING", "loc": [ -84.577168, 42.679727 ], "pop": 39930, "state": "MI" }, { "_id": "48912", "city": "LANSING", "loc": [ -84.52441399999999, 42.737115 ], "pop": 19898, "state": "MI" }, { "_id": "48915", "city": "LANSING", "loc": [ -84.570398, 42.739074 ], "pop": 11703, "state": "MI" }, { "_id": "48917", "city": "LANSING", "loc": [ -84.62439000000001, 42.737621 ], "pop": 28475, "state": "MI" }, { "_id": "48933", "city": "LANSING", "loc": [ -84.557142, 42.733429 ], "pop": 2780, "state": "MI" }, { "_id": "49001", "city": "KALAMAZOO", "loc": [ -85.545653, 42.273565 ], "pop": 45278, "state": "MI" }, { "_id": "49002", "city": "KALAMAZOO", "loc": [ -85.595691, 42.207482 ], "pop": 40439, "state": "MI" }, { "_id": "49004", "city": "PARCHMENT", "loc": [ -85.54195900000001, 42.326538 ], "pop": 15968, "state": "MI" }, { "_id": "49007", "city": "KALAMAZOO", "loc": [ -85.613722, 42.295688 ], "pop": 44854, "state": "MI" }, { "_id": "49008", "city": "KALAMAZOO", "loc": [ -85.609645, 42.262432 ], "pop": 19435, "state": "MI" }, { "_id": "49009", "city": "KALAMAZOO", "loc": [ -85.686333, 42.280947 ], "pop": 22218, "state": "MI" }, { "_id": "49010", "city": "ALLEGAN", "loc": [ -85.86608, 42.525609 ], "pop": 15532, "state": "MI" }, { "_id": "49011", "city": "ATHENS", "loc": [ -85.231742, 42.102962 ], "pop": 2436, "state": "MI" }, { "_id": "49012", "city": "AUGUSTA", "loc": [ -85.354012, 42.356313 ], "pop": 2896, "state": "MI" }, { "_id": "49013", "city": "BANGOR", "loc": [ -86.131096, 42.33122 ], "pop": 8743, "state": "MI" }, { "_id": "49015", "city": "BATTLE CREEK", "loc": [ -85.212825, 42.302806 ], "pop": 29828, "state": "MI" }, { "_id": "49017", "city": "BATTLE CREEK", "loc": [ -85.181106, 42.332218 ], "pop": 62035, "state": "MI" }, { "_id": "49021", "city": "BELLEVUE", "loc": [ -85.048867, 42.452474 ], "pop": 6911, "state": "MI" }, { "_id": "49022", "city": "BENTON HARBOR", "loc": [ -86.423417, 42.108594 ], "pop": 37550, "state": "MI" }, { "_id": "49026", "city": "BLOOMINGDALE", "loc": [ -85.956757, 42.384232 ], "pop": 1958, "state": "MI" }, { "_id": "49028", "city": "BRONSON", "loc": [ -85.183767, 41.864316 ], "pop": 7024, "state": "MI" }, { "_id": "49029", "city": "BURLINGTON", "loc": [ -85.105, 42.123859 ], "pop": 1898, "state": "MI" }, { "_id": "49030", "city": "BURR OAK", "loc": [ -85.334536, 41.845898 ], "pop": 3192, "state": "MI" }, { "_id": "49031", "city": "CASSOPOLIS", "loc": [ -85.992273, 41.896805 ], "pop": 6622, "state": "MI" }, { "_id": "49032", "city": "CENTREVILLE", "loc": [ -85.49629899999999, 41.921685 ], "pop": 3606, "state": "MI" }, { "_id": "49033", "city": "CERESCO", "loc": [ -85.11284999999999, 42.212741 ], "pop": 1128, "state": "MI" }, { "_id": "49034", "city": "CLIMAX", "loc": [ -85.323832, 42.233979 ], "pop": 983, "state": "MI" }, { "_id": "49036", "city": "COLDWATER", "loc": [ -85.00568199999999, 41.925464 ], "pop": 20278, "state": "MI" }, { "_id": "49038", "city": "COLOMA", "loc": [ -86.32247, 42.202952 ], "pop": 9987, "state": "MI" }, { "_id": "49040", "city": "COLON", "loc": [ -85.33058800000001, 41.957605 ], "pop": 2800, "state": "MI" }, { "_id": "49042", "city": "CONSTANTINE", "loc": [ -85.657094, 41.846029 ], "pop": 5737, "state": "MI" }, { "_id": "49043", "city": "COVERT", "loc": [ -86.274294, 42.291074 ], "pop": 2544, "state": "MI" }, { "_id": "49045", "city": "DECATUR", "loc": [ -86.03380799999999, 42.101219 ], "pop": 8320, "state": "MI" }, { "_id": "49046", "city": "DELTON", "loc": [ -85.406706, 42.514102 ], "pop": 7306, "state": "MI" }, { "_id": "49047", "city": "DOWAGIAC", "loc": [ -86.116766, 41.990965 ], "pop": 14921, "state": "MI" }, { "_id": "49050", "city": "DOWLING", "loc": [ -85.24945200000001, 42.501478 ], "pop": 909, "state": "MI" }, { "_id": "49051", "city": "EAST LEROY", "loc": [ -85.231083, 42.196125 ], "pop": 1915, "state": "MI" }, { "_id": "49052", "city": "FULTON", "loc": [ -85.322659, 42.139086 ], "pop": 720, "state": "MI" }, { "_id": "49053", "city": "GALESBURG", "loc": [ -85.423665, 42.294843 ], "pop": 4820, "state": "MI" }, { "_id": "49055", "city": "GOBLES", "loc": [ -85.853649, 42.370182 ], "pop": 4476, "state": "MI" }, { "_id": "49056", "city": "GRAND JUNCTION", "loc": [ -86.054052, 42.376081 ], "pop": 2100, "state": "MI" }, { "_id": "49057", "city": "HARTFORD", "loc": [ -86.16870299999999, 42.208807 ], "pop": 5826, "state": "MI" }, { "_id": "49058", "city": "HASTINGS", "loc": [ -85.29368700000001, 42.643007 ], "pop": 15043, "state": "MI" }, { "_id": "49060", "city": "HICKORY CORNERS", "loc": [ -85.399784, 42.423682 ], "pop": 1823, "state": "MI" }, { "_id": "49061", "city": "JONES", "loc": [ -85.83411099999999, 41.912903 ], "pop": 2121, "state": "MI" }, { "_id": "49064", "city": "LAWRENCE", "loc": [ -86.052543, 42.207635 ], "pop": 3030, "state": "MI" }, { "_id": "49065", "city": "LAWTON", "loc": [ -85.82896599999999, 42.154462 ], "pop": 5933, "state": "MI" }, { "_id": "49066", "city": "LEONIDAS", "loc": [ -85.349683, 42.029394 ], "pop": 765, "state": "MI" }, { "_id": "49067", "city": "MARCELLUS", "loc": [ -85.798776, 42.027461 ], "pop": 3481, "state": "MI" }, { "_id": "49068", "city": "MARSHALL", "loc": [ -84.95828, 42.272047 ], "pop": 14844, "state": "MI" }, { "_id": "49070", "city": "MARTIN", "loc": [ -85.610646, 42.548321 ], "pop": 2366, "state": "MI" }, { "_id": "49071", "city": "MATTAWAN", "loc": [ -85.794281, 42.245069 ], "pop": 6461, "state": "MI" }, { "_id": "49072", "city": "MENDON", "loc": [ -85.472697, 42.014262 ], "pop": 3598, "state": "MI" }, { "_id": "49073", "city": "NASHVILLE", "loc": [ -85.122029, 42.593721 ], "pop": 5517, "state": "MI" }, { "_id": "49076", "city": "OLIVET", "loc": [ -84.897312, 42.445947 ], "pop": 4084, "state": "MI" }, { "_id": "49078", "city": "OTSEGO", "loc": [ -85.703497, 42.472334 ], "pop": 10614, "state": "MI" }, { "_id": "49079", "city": "PAW PAW", "loc": [ -85.900488, 42.234931 ], "pop": 11455, "state": "MI" }, { "_id": "49080", "city": "PLAINWELL", "loc": [ -85.59936, 42.454379 ], "pop": 15308, "state": "MI" }, { "_id": "49082", "city": "QUINCY", "loc": [ -84.849295, 41.970694 ], "pop": 8671, "state": "MI" }, { "_id": "49083", "city": "RICHLAND", "loc": [ -85.44465099999999, 42.375689 ], "pop": 5676, "state": "MI" }, { "_id": "49085", "city": "SAINT JOSEPH", "loc": [ -86.478341, 42.063959 ], "pop": 22984, "state": "MI" }, { "_id": "49087", "city": "SCHOOLCRAFT", "loc": [ -85.663741, 42.132857 ], "pop": 5324, "state": "MI" }, { "_id": "49088", "city": "SCOTTS", "loc": [ -85.468492, 42.181892 ], "pop": 3249, "state": "MI" }, { "_id": "49089", "city": "SHERWOOD", "loc": [ -85.240797, 42.010736 ], "pop": 2310, "state": "MI" }, { "_id": "49090", "city": "SOUTH HAVEN", "loc": [ -86.25420699999999, 42.404096 ], "pop": 12604, "state": "MI" }, { "_id": "49091", "city": "STURGIS", "loc": [ -85.426357, 41.808934 ], "pop": 16597, "state": "MI" }, { "_id": "49092", "city": "TEKONSHA", "loc": [ -84.99260200000001, 42.086326 ], "pop": 2747, "state": "MI" }, { "_id": "49093", "city": "THREE RIVERS", "loc": [ -85.637125, 41.959598 ], "pop": 17021, "state": "MI" }, { "_id": "49094", "city": "UNION CITY", "loc": [ -85.135637, 42.055134 ], "pop": 3600, "state": "MI" }, { "_id": "49095", "city": "VANDALIA", "loc": [ -85.875546, 41.895506 ], "pop": 1839, "state": "MI" }, { "_id": "49096", "city": "VERMONTVILLE", "loc": [ -85.01098399999999, 42.63921 ], "pop": 2978, "state": "MI" }, { "_id": "49097", "city": "VICKSBURG", "loc": [ -85.502376, 42.120896 ], "pop": 8152, "state": "MI" }, { "_id": "49098", "city": "WATERVLIET", "loc": [ -86.26036999999999, 42.193804 ], "pop": 4793, "state": "MI" }, { "_id": "49099", "city": "WHITE PIGEON", "loc": [ -85.67501, 41.792891 ], "pop": 6161, "state": "MI" }, { "_id": "49101", "city": "BARODA", "loc": [ -86.491274, 41.948818 ], "pop": 3030, "state": "MI" }, { "_id": "49102", "city": "BERRIEN CENTER", "loc": [ -86.285039, 41.948439 ], "pop": 2324, "state": "MI" }, { "_id": "49103", "city": "BERRIEN SPRINGS", "loc": [ -86.35401299999999, 41.948002 ], "pop": 11600, "state": "MI" }, { "_id": "49106", "city": "BRIDGMAN", "loc": [ -86.554334, 41.936199 ], "pop": 4073, "state": "MI" }, { "_id": "49107", "city": "BUCHANAN", "loc": [ -86.37084400000001, 41.83269 ], "pop": 10342, "state": "MI" }, { "_id": "49111", "city": "EAU CLAIRE", "loc": [ -86.29715400000001, 42.015134 ], "pop": 4007, "state": "MI" }, { "_id": "49112", "city": "EDWARDSBURG", "loc": [ -86.026252, 41.791258 ], "pop": 8926, "state": "MI" }, { "_id": "49113", "city": "GALIEN", "loc": [ -86.50354400000001, 41.819758 ], "pop": 2775, "state": "MI" }, { "_id": "49116", "city": "LAKESIDE", "loc": [ -86.669354, 41.848459 ], "pop": 269, "state": "MI" }, { "_id": "49117", "city": "GRAND BEACH", "loc": [ -86.74663, 41.785591 ], "pop": 4389, "state": "MI" }, { "_id": "49120", "city": "NILES", "loc": [ -86.236789, 41.820168 ], "pop": 33750, "state": "MI" }, { "_id": "49125", "city": "SAWYER", "loc": [ -86.588508, 41.882866 ], "pop": 2704, "state": "MI" }, { "_id": "49126", "city": "SODUS", "loc": [ -86.3921, 42.052082 ], "pop": 1404, "state": "MI" }, { "_id": "49127", "city": "STEVENSVILLE", "loc": [ -86.51186199999999, 42.021968 ], "pop": 9354, "state": "MI" }, { "_id": "49128", "city": "THREE OAKS", "loc": [ -86.61541099999999, 41.814976 ], "pop": 3994, "state": "MI" }, { "_id": "49129", "city": "UNION PIER", "loc": [ -86.691146, 41.82555 ], "pop": 979, "state": "MI" }, { "_id": "49130", "city": "UNION", "loc": [ -85.85290500000001, 41.782678 ], "pop": 1617, "state": "MI" }, { "_id": "49201", "city": "JACKSON", "loc": [ -84.38747600000001, 42.254522 ], "pop": 42076, "state": "MI" }, { "_id": "49202", "city": "JACKSON", "loc": [ -84.408348, 42.263431 ], "pop": 20387, "state": "MI" }, { "_id": "49203", "city": "JACKSON", "loc": [ -84.41321000000001, 42.228963 ], "pop": 38466, "state": "MI" }, { "_id": "49220", "city": "ADDISON", "loc": [ -84.312229, 42.003604 ], "pop": 2506, "state": "MI" }, { "_id": "49221", "city": "ADRIAN", "loc": [ -84.044556, 41.900516 ], "pop": 33769, "state": "MI" }, { "_id": "49224", "city": "ALBION", "loc": [ -84.756052, 42.258073 ], "pop": 13514, "state": "MI" }, { "_id": "49227", "city": "ALLEN", "loc": [ -84.76078200000001, 41.926419 ], "pop": 1953, "state": "MI" }, { "_id": "49228", "city": "BLISSFIELD", "loc": [ -83.877257, 41.827636 ], "pop": 5635, "state": "MI" }, { "_id": "49229", "city": "BRITTON", "loc": [ -83.837722, 41.988713 ], "pop": 2553, "state": "MI" }, { "_id": "49230", "city": "BROOKLYN", "loc": [ -84.241353, 42.10436 ], "pop": 7155, "state": "MI" }, { "_id": "49232", "city": "CAMDEN", "loc": [ -84.724497, 41.736149 ], "pop": 1500, "state": "MI" }, { "_id": "49233", "city": "CEMENT CITY", "loc": [ -84.325423, 42.060395 ], "pop": 1313, "state": "MI" }, { "_id": "49234", "city": "CLARKLAKE", "loc": [ -84.352056, 42.123503 ], "pop": 2418, "state": "MI" }, { "_id": "49235", "city": "CLAYTON", "loc": [ -84.177519, 41.868648 ], "pop": 2000, "state": "MI" }, { "_id": "49236", "city": "CLINTON", "loc": [ -83.944152, 42.063886 ], "pop": 5222, "state": "MI" }, { "_id": "49237", "city": "CONCORD", "loc": [ -84.652928, 42.187501 ], "pop": 3375, "state": "MI" }, { "_id": "49238", "city": "DEERFIELD", "loc": [ -83.784739, 41.890912 ], "pop": 1427, "state": "MI" }, { "_id": "49240", "city": "GRASS LAKE", "loc": [ -84.194041, 42.271071 ], "pop": 6321, "state": "MI" }, { "_id": "49241", "city": "HANOVER", "loc": [ -84.58480900000001, 42.102521 ], "pop": 2809, "state": "MI" }, { "_id": "49242", "city": "HILLSDALE", "loc": [ -84.620812, 41.923954 ], "pop": 10382, "state": "MI" }, { "_id": "49245", "city": "HOMER", "loc": [ -84.81572, 42.141561 ], "pop": 4934, "state": "MI" }, { "_id": "49246", "city": "HORTON", "loc": [ -84.49759299999999, 42.119092 ], "pop": 3099, "state": "MI" }, { "_id": "49247", "city": "HUDSON", "loc": [ -84.338031, 41.858101 ], "pop": 5953, "state": "MI" }, { "_id": "49248", "city": "JASPER", "loc": [ -83.951549, 41.758956 ], "pop": 1240, "state": "MI" }, { "_id": "49249", "city": "JEROME", "loc": [ -84.445483, 42.048375 ], "pop": 2686, "state": "MI" }, { "_id": "49250", "city": "JONESVILLE", "loc": [ -84.645083, 41.979833 ], "pop": 5671, "state": "MI" }, { "_id": "49251", "city": "LESLIE", "loc": [ -84.420653, 42.460279 ], "pop": 5493, "state": "MI" }, { "_id": "49252", "city": "LITCHFIELD", "loc": [ -84.636095, 42.054039 ], "pop": 840, "state": "MI" }, { "_id": "49253", "city": "MANITOU BEACH", "loc": [ -84.276706, 41.967055 ], "pop": 2714, "state": "MI" }, { "_id": "49254", "city": "MICHIGAN CENTER", "loc": [ -84.321315, 42.226294 ], "pop": 4013, "state": "MI" }, { "_id": "49255", "city": "MONTGOMERY", "loc": [ -84.84964100000001, 41.792764 ], "pop": 2260, "state": "MI" }, { "_id": "49256", "city": "MORENCI", "loc": [ -84.219204, 41.738612 ], "pop": 4699, "state": "MI" }, { "_id": "49259", "city": "MUNITH", "loc": [ -84.248486, 42.370317 ], "pop": 3078, "state": "MI" }, { "_id": "49262", "city": "NORTH ADAMS", "loc": [ -84.520824, 41.971484 ], "pop": 750, "state": "MI" }, { "_id": "49264", "city": "ONONDAGA", "loc": [ -84.553501, 42.448726 ], "pop": 1358, "state": "MI" }, { "_id": "49265", "city": "ONSTED", "loc": [ -84.183892, 42.029533 ], "pop": 4601, "state": "MI" }, { "_id": "49266", "city": "OSSEO", "loc": [ -84.597388, 41.838413 ], "pop": 7025, "state": "MI" }, { "_id": "49267", "city": "OTTAWA LAKE", "loc": [ -83.685559, 41.768276 ], "pop": 4531, "state": "MI" }, { "_id": "49268", "city": "PALMYRA", "loc": [ -83.96567899999999, 41.872976 ], "pop": 2289, "state": "MI" }, { "_id": "49269", "city": "PARMA", "loc": [ -84.599886, 42.273879 ], "pop": 6185, "state": "MI" }, { "_id": "49270", "city": "PETERSBURG", "loc": [ -83.687673, 41.875655 ], "pop": 4832, "state": "MI" }, { "_id": "49271", "city": "PITTSFORD", "loc": [ -84.444016, 41.896262 ], "pop": 2552, "state": "MI" }, { "_id": "49272", "city": "PLEASANT LAKE", "loc": [ -84.34279100000001, 42.390343 ], "pop": 1685, "state": "MI" }, { "_id": "49274", "city": "READING", "loc": [ -84.76475000000001, 41.844194 ], "pop": 2253, "state": "MI" }, { "_id": "49275", "city": "RIDGEWAY", "loc": [ -83.778429, 42.010554 ], "pop": 23, "state": "MI" }, { "_id": "49276", "city": "RIGA", "loc": [ -83.80114399999999, 41.795309 ], "pop": 961, "state": "MI" }, { "_id": "49277", "city": "RIVES JUNCTION", "loc": [ -84.458868, 42.38871 ], "pop": 3676, "state": "MI" }, { "_id": "49279", "city": "SAND CREEK", "loc": [ -84.075502, 41.77928 ], "pop": 1197, "state": "MI" }, { "_id": "49281", "city": "SOMERSET", "loc": [ -84.39472000000001, 42.044732 ], "pop": 1556, "state": "MI" }, { "_id": "49283", "city": "SPRING ARBOR", "loc": [ -84.550127, 42.206861 ], "pop": 2852, "state": "MI" }, { "_id": "49284", "city": "SPRINGPORT", "loc": [ -84.70388800000001, 42.38055 ], "pop": 3153, "state": "MI" }, { "_id": "49285", "city": "STOCKBRIDGE", "loc": [ -84.175178, 42.460404 ], "pop": 6047, "state": "MI" }, { "_id": "49286", "city": "TECUMSEH", "loc": [ -83.955485, 41.995297 ], "pop": 12645, "state": "MI" }, { "_id": "49287", "city": "TIPTON", "loc": [ -84.07684, 42.036911 ], "pop": 2473, "state": "MI" }, { "_id": "49288", "city": "WALDRON", "loc": [ -84.449636, 41.738608 ], "pop": 2151, "state": "MI" }, { "_id": "49301", "city": "ADA", "loc": [ -85.480959, 42.95661 ], "pop": 9568, "state": "MI" }, { "_id": "49302", "city": "ALTO", "loc": [ -85.42555400000001, 42.824312 ], "pop": 5391, "state": "MI" }, { "_id": "49303", "city": "BAILEY", "loc": [ -85.831318, 43.276768 ], "pop": 670, "state": "MI" }, { "_id": "49304", "city": "BALDWIN", "loc": [ -85.881874, 43.889409 ], "pop": 3387, "state": "MI" }, { "_id": "49305", "city": "BARRYTON", "loc": [ -85.15465399999999, 43.750651 ], "pop": 1824, "state": "MI" }, { "_id": "49306", "city": "BELMONT", "loc": [ -85.586769, 43.077934 ], "pop": 6782, "state": "MI" }, { "_id": "49307", "city": "BIG RAPIDS", "loc": [ -85.479705, 43.689679 ], "pop": 18049, "state": "MI" }, { "_id": "49309", "city": "BITELY", "loc": [ -85.877799, 43.732132 ], "pop": 1828, "state": "MI" }, { "_id": "49310", "city": "BLANCHARD", "loc": [ -85.05885600000001, 43.522778 ], "pop": 2473, "state": "MI" }, { "_id": "49315", "city": "BYRON CENTER", "loc": [ -85.71360199999999, 42.801614 ], "pop": 6861, "state": "MI" }, { "_id": "49316", "city": "DUTTON", "loc": [ -85.562167, 42.796395 ], "pop": 8634, "state": "MI" }, { "_id": "49318", "city": "CASNOVIA", "loc": [ -85.825394, 43.23815 ], "pop": 1283, "state": "MI" }, { "_id": "49319", "city": "CEDAR SPRINGS", "loc": [ -85.545238, 43.22148 ], "pop": 9743, "state": "MI" }, { "_id": "49321", "city": "COMSTOCK PARK", "loc": [ -85.684468, 43.057813 ], "pop": 11913, "state": "MI" }, { "_id": "49322", "city": "CORAL", "loc": [ -85.379245, 43.364458 ], "pop": 895, "state": "MI" }, { "_id": "49323", "city": "DORR", "loc": [ -85.762798, 42.723113 ], "pop": 7782, "state": "MI" }, { "_id": "49325", "city": "FREEPORT", "loc": [ -85.279134, 42.729703 ], "pop": 1546, "state": "MI" }, { "_id": "49326", "city": "GOWEN", "loc": [ -85.315941, 43.223884 ], "pop": 6144, "state": "MI" }, { "_id": "49327", "city": "GRANT", "loc": [ -85.836827, 43.339197 ], "pop": 6898, "state": "MI" }, { "_id": "49328", "city": "HOPKINS", "loc": [ -85.732195, 42.64209 ], "pop": 2350, "state": "MI" }, { "_id": "49329", "city": "HOWARD CITY", "loc": [ -85.485609, 43.408326 ], "pop": 3028, "state": "MI" }, { "_id": "49330", "city": "KENT CITY", "loc": [ -85.739949, 43.236235 ], "pop": 3742, "state": "MI" }, { "_id": "49331", "city": "LOWELL", "loc": [ -85.36530500000001, 42.95497 ], "pop": 12732, "state": "MI" }, { "_id": "49332", "city": "MECOSTA", "loc": [ -85.22803399999999, 43.681317 ], "pop": 1939, "state": "MI" }, { "_id": "49333", "city": "MIDDLEVILLE", "loc": [ -85.47590099999999, 42.693247 ], "pop": 8596, "state": "MI" }, { "_id": "49336", "city": "MORLEY", "loc": [ -85.447318, 43.505951 ], "pop": 2875, "state": "MI" }, { "_id": "49337", "city": "NEWAYGO", "loc": [ -85.759381, 43.419799 ], "pop": 8091, "state": "MI" }, { "_id": "49338", "city": "PARIS", "loc": [ -85.521348, 43.767704 ], "pop": 3359, "state": "MI" }, { "_id": "49339", "city": "PIERSON", "loc": [ -85.51335899999999, 43.335514 ], "pop": 2177, "state": "MI" }, { "_id": "49340", "city": "REMUS", "loc": [ -85.157365, 43.603249 ], "pop": 4990, "state": "MI" }, { "_id": "49341", "city": "ROCKFORD", "loc": [ -85.513606, 43.115217 ], "pop": 19778, "state": "MI" }, { "_id": "49342", "city": "RODNEY", "loc": [ -85.321884, 43.73791 ], "pop": 1202, "state": "MI" }, { "_id": "49343", "city": "SAND LAKE", "loc": [ -85.536655, 43.298109 ], "pop": 4951, "state": "MI" }, { "_id": "49344", "city": "SHELBYVILLE", "loc": [ -85.62823899999999, 42.593581 ], "pop": 259, "state": "MI" }, { "_id": "49345", "city": "SPARTA", "loc": [ -85.687668, 43.161867 ], "pop": 11522, "state": "MI" }, { "_id": "49346", "city": "STANWOOD", "loc": [ -85.444607, 43.601728 ], "pop": 3068, "state": "MI" }, { "_id": "49347", "city": "TRUFANT", "loc": [ -85.368489, 43.315611 ], "pop": 1002, "state": "MI" }, { "_id": "49348", "city": "WAYLAND", "loc": [ -85.619112, 42.664268 ], "pop": 6756, "state": "MI" }, { "_id": "49349", "city": "WHITE CLOUD", "loc": [ -85.75864, 43.539803 ], "pop": 8668, "state": "MI" }, { "_id": "49401", "city": "ALLENDALE", "loc": [ -85.924913, 42.971066 ], "pop": 7311, "state": "MI" }, { "_id": "49402", "city": "BRANCH", "loc": [ -86.13136900000001, 43.923296 ], "pop": 1741, "state": "MI" }, { "_id": "49403", "city": "CONKLIN", "loc": [ -85.853753, 43.149399 ], "pop": 2720, "state": "MI" }, { "_id": "49404", "city": "COOPERSVILLE", "loc": [ -85.951722, 43.06013 ], "pop": 5962, "state": "MI" }, { "_id": "49405", "city": "CUSTER", "loc": [ -86.220437, 43.94424 ], "pop": 1002, "state": "MI" }, { "_id": "49408", "city": "FENNVILLE", "loc": [ -86.124876, 42.577669 ], "pop": 6486, "state": "MI" }, { "_id": "49410", "city": "FOUNTAIN", "loc": [ -86.21686099999999, 44.036342 ], "pop": 1030, "state": "MI" }, { "_id": "49411", "city": "FREE SOIL", "loc": [ -86.265158, 44.112036 ], "pop": 903, "state": "MI" }, { "_id": "49412", "city": "FREMONT", "loc": [ -85.962554, 43.465196 ], "pop": 7946, "state": "MI" }, { "_id": "49415", "city": "FRUITPORT", "loc": [ -86.13883199999999, 43.144282 ], "pop": 4183, "state": "MI" }, { "_id": "49417", "city": "GRAND HAVEN", "loc": [ -86.191227, 43.037838 ], "pop": 24103, "state": "MI" }, { "_id": "49418", "city": "GRANDVILLE", "loc": [ -85.76187400000001, 42.89387 ], "pop": 19467, "state": "MI" }, { "_id": "49419", "city": "HAMILTON", "loc": [ -85.97473100000001, 42.688097 ], "pop": 4586, "state": "MI" }, { "_id": "49420", "city": "HART", "loc": [ -86.31415200000001, 43.70676 ], "pop": 5548, "state": "MI" }, { "_id": "49421", "city": "HESPERIA", "loc": [ -86.060739, 43.596513 ], "pop": 5102, "state": "MI" }, { "_id": "49423", "city": "HOLLAND", "loc": [ -86.116362, 42.769211 ], "pop": 40325, "state": "MI" }, { "_id": "49424", "city": "HOLLAND", "loc": [ -86.14263099999999, 42.813514 ], "pop": 25798, "state": "MI" }, { "_id": "49425", "city": "HOLTON", "loc": [ -86.150853, 43.441454 ], "pop": 4251, "state": "MI" }, { "_id": "49426", "city": "HUDSONVILLE", "loc": [ -85.8751, 42.874805 ], "pop": 20122, "state": "MI" }, { "_id": "49428", "city": "JENISON", "loc": [ -85.827603, 42.910423 ], "pop": 23358, "state": "MI" }, { "_id": "49431", "city": "LUDINGTON", "loc": [ -86.440253, 43.968823 ], "pop": 13169, "state": "MI" }, { "_id": "49435", "city": "MARNE", "loc": [ -85.84195800000001, 43.053185 ], "pop": 2715, "state": "MI" }, { "_id": "49436", "city": "MEARS", "loc": [ -86.453307, 43.682494 ], "pop": 1302, "state": "MI" }, { "_id": "49437", "city": "MONTAGUE", "loc": [ -86.373992, 43.424163 ], "pop": 4953, "state": "MI" }, { "_id": "49440", "city": "MUSKEGON", "loc": [ -86.249191, 43.232589 ], "pop": 1033, "state": "MI" }, { "_id": "49441", "city": "MUSKEGON", "loc": [ -86.273819, 43.196184 ], "pop": 36169, "state": "MI" }, { "_id": "49442", "city": "MUSKEGON", "loc": [ -86.188467, 43.232876 ], "pop": 39272, "state": "MI" }, { "_id": "49444", "city": "MUSKEGON HEIGHTS", "loc": [ -86.21620799999999, 43.195046 ], "pop": 29295, "state": "MI" }, { "_id": "49445", "city": "NORTH MUSKEGON", "loc": [ -86.273297, 43.282873 ], "pop": 18797, "state": "MI" }, { "_id": "49446", "city": "NEW ERA", "loc": [ -86.344803, 43.555578 ], "pop": 2539, "state": "MI" }, { "_id": "49447", "city": "NEW RICHMOND", "loc": [ -86.03798500000001, 42.662383 ], "pop": 438, "state": "MI" }, { "_id": "49448", "city": "NUNICA", "loc": [ -86.102768, 43.088306 ], "pop": 3795, "state": "MI" }, { "_id": "49449", "city": "PENTWATER", "loc": [ -86.38681800000001, 43.823713 ], "pop": 3915, "state": "MI" }, { "_id": "49450", "city": "PULLMAN", "loc": [ -86.079909, 42.465131 ], "pop": 2672, "state": "MI" }, { "_id": "49451", "city": "RAVENNA", "loc": [ -85.964816, 43.209128 ], "pop": 5106, "state": "MI" }, { "_id": "49452", "city": "ROTHBURY", "loc": [ -86.34464, 43.511633 ], "pop": 1618, "state": "MI" }, { "_id": "49453", "city": "SAUGATUCK", "loc": [ -86.194093, 42.642562 ], "pop": 3870, "state": "MI" }, { "_id": "49454", "city": "SCOTTVILLE", "loc": [ -86.31561499999999, 43.976692 ], "pop": 4229, "state": "MI" }, { "_id": "49455", "city": "SHELBY", "loc": [ -86.361503, 43.607942 ], "pop": 4420, "state": "MI" }, { "_id": "49456", "city": "SPRING LAKE", "loc": [ -86.19150999999999, 43.088741 ], "pop": 14602, "state": "MI" }, { "_id": "49457", "city": "TWIN LAKE", "loc": [ -86.16331599999999, 43.341378 ], "pop": 7212, "state": "MI" }, { "_id": "49459", "city": "WALKERVILLE", "loc": [ -86.08299100000001, 43.762559 ], "pop": 309, "state": "MI" }, { "_id": "49460", "city": "WEST OLIVE", "loc": [ -86.131726, 42.909912 ], "pop": 6722, "state": "MI" }, { "_id": "49461", "city": "WHITEHALL", "loc": [ -86.331453, 43.390358 ], "pop": 6925, "state": "MI" }, { "_id": "49464", "city": "ZEELAND", "loc": [ -86.010408, 42.825586 ], "pop": 15649, "state": "MI" }, { "_id": "49503", "city": "GRAND RAPIDS", "loc": [ -85.65273000000001, 42.965879 ], "pop": 32876, "state": "MI" }, { "_id": "49504", "city": "WALKER", "loc": [ -85.725543, 42.98392 ], "pop": 63454, "state": "MI" }, { "_id": "49505", "city": "GRAND RAPIDS", "loc": [ -85.630931, 43.012025 ], "pop": 52883, "state": "MI" }, { "_id": "49506", "city": "GRAND RAPIDS", "loc": [ -85.621317, 42.943978 ], "pop": 36668, "state": "MI" }, { "_id": "49507", "city": "GRAND RAPIDS", "loc": [ -85.65416999999999, 42.931788 ], "pop": 37681, "state": "MI" }, { "_id": "49508", "city": "KENTWOOD", "loc": [ -85.624179, 42.875653 ], "pop": 32830, "state": "MI" }, { "_id": "49509", "city": "WYOMING", "loc": [ -85.705775, 42.900867 ], "pop": 57419, "state": "MI" }, { "_id": "49512", "city": "KENTWOOD", "loc": [ -85.57815600000001, 42.89269 ], "pop": 7823, "state": "MI" }, { "_id": "49546", "city": "GRAND RAPIDS", "loc": [ -85.548346, 42.928029 ], "pop": 25471, "state": "MI" }, { "_id": "49548", "city": "KENTWOOD", "loc": [ -85.66076700000001, 42.867048 ], "pop": 32054, "state": "MI" }, { "_id": "49601", "city": "CADILLAC", "loc": [ -85.430046, 44.250447 ], "pop": 18182, "state": "MI" }, { "_id": "49612", "city": "ALDEN", "loc": [ -85.22410000000001, 44.877887 ], "pop": 1536, "state": "MI" }, { "_id": "49613", "city": "ARCADIA", "loc": [ -86.206057, 44.523157 ], "pop": 937, "state": "MI" }, { "_id": "49614", "city": "BEAR LAKE", "loc": [ -86.14249700000001, 44.431125 ], "pop": 1965, "state": "MI" }, { "_id": "49615", "city": "BELLAIRE", "loc": [ -85.226495, 44.976469 ], "pop": 2031, "state": "MI" }, { "_id": "49616", "city": "BENZONIA", "loc": [ -86.096091, 44.595502 ], "pop": 1833, "state": "MI" }, { "_id": "49617", "city": "BEULAH", "loc": [ -86.038346, 44.646002 ], "pop": 2617, "state": "MI" }, { "_id": "49618", "city": "BOON", "loc": [ -85.614383, 44.291555 ], "pop": 388, "state": "MI" }, { "_id": "49619", "city": "BRETHREN", "loc": [ -85.996396, 44.296596 ], "pop": 966, "state": "MI" }, { "_id": "49620", "city": "BUCKLEY", "loc": [ -85.693541, 44.519856 ], "pop": 1788, "state": "MI" }, { "_id": "49621", "city": "CEDAR", "loc": [ -85.745344, 44.836953 ], "pop": 2853, "state": "MI" }, { "_id": "49622", "city": "CENTRAL LAKE", "loc": [ -85.267285, 45.074796 ], "pop": 1970, "state": "MI" }, { "_id": "49623", "city": "CHASE", "loc": [ -85.61963900000001, 43.868172 ], "pop": 1016, "state": "MI" }, { "_id": "49625", "city": "COPEMISH", "loc": [ -85.88785900000001, 44.450276 ], "pop": 927, "state": "MI" }, { "_id": "49629", "city": "ELK RAPIDS", "loc": [ -85.408226, 44.895473 ], "pop": 1493, "state": "MI" }, { "_id": "49630", "city": "EMPIRE", "loc": [ -85.99253299999999, 44.84106 ], "pop": 609, "state": "MI" }, { "_id": "49631", "city": "EVART", "loc": [ -85.26493499999999, 43.888772 ], "pop": 4253, "state": "MI" }, { "_id": "49632", "city": "FALMOUTH", "loc": [ -85.01700200000001, 44.252861 ], "pop": 1891, "state": "MI" }, { "_id": "49633", "city": "FIFE LAKE", "loc": [ -85.253122, 44.572064 ], "pop": 2566, "state": "MI" }, { "_id": "49635", "city": "FRANKFORT", "loc": [ -86.22120099999999, 44.631122 ], "pop": 3168, "state": "MI" }, { "_id": "49636", "city": "GLEN ARBOR", "loc": [ -86.03533899999999, 44.842927 ], "pop": 641, "state": "MI" }, { "_id": "49637", "city": "GRAWN", "loc": [ -85.71129000000001, 44.642779 ], "pop": 1869, "state": "MI" }, { "_id": "49638", "city": "HARRIETTA", "loc": [ -85.73957299999999, 44.297163 ], "pop": 651, "state": "MI" }, { "_id": "49639", "city": "HERSEY", "loc": [ -85.40592599999999, 43.84806 ], "pop": 1915, "state": "MI" }, { "_id": "49640", "city": "HONOR", "loc": [ -86.037582, 44.69539 ], "pop": 945, "state": "MI" }, { "_id": "49642", "city": "IDLEWILD", "loc": [ -85.716036, 43.912621 ], "pop": 1132, "state": "MI" }, { "_id": "49643", "city": "INTERLOCHEN", "loc": [ -85.802156, 44.651769 ], "pop": 3429, "state": "MI" }, { "_id": "49644", "city": "IRONS", "loc": [ -85.939008, 44.096638 ], "pop": 1245, "state": "MI" }, { "_id": "49645", "city": "KALEVA", "loc": [ -86.04673699999999, 44.369168 ], "pop": 1533, "state": "MI" }, { "_id": "49646", "city": "KALKASKA", "loc": [ -85.120655, 44.73546 ], "pop": 7387, "state": "MI" }, { "_id": "49647", "city": "KARLIN", "loc": [ -85.79406, 44.569128 ], "pop": 80, "state": "MI" }, { "_id": "49648", "city": "KEWADIN", "loc": [ -85.35394100000001, 45.012574 ], "pop": 1303, "state": "MI" }, { "_id": "49649", "city": "KINGSLEY", "loc": [ -85.526235, 44.575644 ], "pop": 3823, "state": "MI" }, { "_id": "49650", "city": "LAKE ANN", "loc": [ -85.85284, 44.731736 ], "pop": 1448, "state": "MI" }, { "_id": "49651", "city": "MOORESTOWN", "loc": [ -85.207352, 44.361932 ], "pop": 6225, "state": "MI" }, { "_id": "49653", "city": "LAKE LEELANAU", "loc": [ -85.732866, 44.985602 ], "pop": 2053, "state": "MI" }, { "_id": "49654", "city": "LELAND", "loc": [ -86.092924, 45.010215 ], "pop": 0, "state": "MI" }, { "_id": "49655", "city": "LEROY", "loc": [ -85.430001, 44.045656 ], "pop": 3386, "state": "MI" }, { "_id": "49656", "city": "LUTHER", "loc": [ -85.682631, 44.054494 ], "pop": 1540, "state": "MI" }, { "_id": "49657", "city": "MC BAIN", "loc": [ -85.228252, 44.21718 ], "pop": 3431, "state": "MI" }, { "_id": "49659", "city": "MANCELONA", "loc": [ -85.063399, 44.911596 ], "pop": 5447, "state": "MI" }, { "_id": "49660", "city": "STRONACH", "loc": [ -86.28503000000001, 44.228323 ], "pop": 14319, "state": "MI" }, { "_id": "49663", "city": "MANTON", "loc": [ -85.42017, 44.415222 ], "pop": 3516, "state": "MI" }, { "_id": "49664", "city": "MAPLE CITY", "loc": [ -85.88139200000001, 44.859035 ], "pop": 1917, "state": "MI" }, { "_id": "49665", "city": "MARION", "loc": [ -85.15503099999999, 44.046314 ], "pop": 5710, "state": "MI" }, { "_id": "49667", "city": "MERRITT", "loc": [ -85.015508, 44.36843 ], "pop": 600, "state": "MI" }, { "_id": "49668", "city": "MESICK", "loc": [ -85.70612199999999, 44.407451 ], "pop": 2864, "state": "MI" }, { "_id": "49670", "city": "NORTHPORT", "loc": [ -85.617287, 45.115699 ], "pop": 1663, "state": "MI" }, { "_id": "49675", "city": "ONEKAMA", "loc": [ -86.209959, 44.364576 ], "pop": 1089, "state": "MI" }, { "_id": "49676", "city": "RAPID CITY", "loc": [ -85.294318, 44.844863 ], "pop": 2741, "state": "MI" }, { "_id": "49677", "city": "REED CITY", "loc": [ -85.51302800000001, 43.886808 ], "pop": 5056, "state": "MI" }, { "_id": "49679", "city": "SEARS", "loc": [ -85.18824600000001, 43.901747 ], "pop": 150, "state": "MI" }, { "_id": "49680", "city": "SOUTH BOARDMAN", "loc": [ -85.24720000000001, 44.640143 ], "pop": 1427, "state": "MI" }, { "_id": "49682", "city": "SUTTONS BAY", "loc": [ -85.642264, 44.965613 ], "pop": 3422, "state": "MI" }, { "_id": "49683", "city": "THOMPSONVILLE", "loc": [ -85.945973, 44.519833 ], "pop": 1231, "state": "MI" }, { "_id": "49684", "city": "TRAVERSE CITY", "loc": [ -85.618869, 44.74365 ], "pop": 53415, "state": "MI" }, { "_id": "49688", "city": "TUSTIN", "loc": [ -85.490143, 44.107181 ], "pop": 1213, "state": "MI" }, { "_id": "49689", "city": "WELLSTON", "loc": [ -85.95547500000001, 44.213266 ], "pop": 1043, "state": "MI" }, { "_id": "49690", "city": "WILLIAMSBURG", "loc": [ -85.434732, 44.801952 ], "pop": 4987, "state": "MI" }, { "_id": "49705", "city": "AFTON", "loc": [ -84.469453, 45.363684 ], "pop": 605, "state": "MI" }, { "_id": "49706", "city": "ALANSON", "loc": [ -84.792421, 45.440545 ], "pop": 3681, "state": "MI" }, { "_id": "49707", "city": "ALPENA", "loc": [ -83.4602, 45.079018 ], "pop": 23530, "state": "MI" }, { "_id": "49709", "city": "ATLANTA", "loc": [ -84.147982, 44.992371 ], "pop": 2299, "state": "MI" }, { "_id": "49710", "city": "BARBEAU", "loc": [ -84.217332, 46.284753 ], "pop": 368, "state": "MI" }, { "_id": "49712", "city": "BOYNE CITY", "loc": [ -85.018294, 45.205203 ], "pop": 7244, "state": "MI" }, { "_id": "49713", "city": "BOYNE FALLS", "loc": [ -84.89158399999999, 45.211563 ], "pop": 2009, "state": "MI" }, { "_id": "49715", "city": "RACO", "loc": [ -84.563841, 46.411117 ], "pop": 871, "state": "MI" }, { "_id": "49716", "city": "BRUTUS", "loc": [ -84.74669299999999, 45.506785 ], "pop": 586, "state": "MI" }, { "_id": "49718", "city": "CARP LAKE", "loc": [ -84.773453, 45.742364 ], "pop": 1049, "state": "MI" }, { "_id": "49719", "city": "CEDARVILLE", "loc": [ -84.348823, 46.002449 ], "pop": 1615, "state": "MI" }, { "_id": "49720", "city": "CHARLEVOIX", "loc": [ -85.24529800000001, 45.29934 ], "pop": 7690, "state": "MI" }, { "_id": "49721", "city": "CHEBOYGAN", "loc": [ -84.48672000000001, 45.608038 ], "pop": 13854, "state": "MI" }, { "_id": "49724", "city": "DAFTER", "loc": [ -84.39967900000001, 46.349196 ], "pop": 2040, "state": "MI" }, { "_id": "49725", "city": "DE TOUR VILLAGE", "loc": [ -83.939628, 45.993852 ], "pop": 719, "state": "MI" }, { "_id": "49726", "city": "DRUMMOND ISLAND", "loc": [ -83.736706, 46.005521 ], "pop": 835, "state": "MI" }, { "_id": "49727", "city": "EAST JORDAN", "loc": [ -85.138655, 45.153858 ], "pop": 5532, "state": "MI" }, { "_id": "49728", "city": "ECKERMAN", "loc": [ -85.162606, 46.346638 ], "pop": 208, "state": "MI" }, { "_id": "49729", "city": "ELLSWORTH", "loc": [ -85.26329200000001, 45.159929 ], "pop": 1223, "state": "MI" }, { "_id": "49730", "city": "ELMIRA", "loc": [ -84.830321, 45.034582 ], "pop": 2807, "state": "MI" }, { "_id": "49733", "city": "FREDERIC", "loc": [ -84.68241, 44.838217 ], "pop": 3967, "state": "MI" }, { "_id": "49735", "city": "GAYLORD", "loc": [ -84.67228, 45.012523 ], "pop": 11598, "state": "MI" }, { "_id": "49736", "city": "GOETZVILLE", "loc": [ -84.059271, 46.100976 ], "pop": 123, "state": "MI" }, { "_id": "49738", "city": "GRAYLING", "loc": [ -84.691321, 44.670959 ], "pop": 7591, "state": "MI" }, { "_id": "49740", "city": "HARBOR POINT", "loc": [ -84.98030300000001, 45.464535 ], "pop": 5473, "state": "MI" }, { "_id": "49743", "city": "HAWKS", "loc": [ -83.854219, 45.297467 ], "pop": 876, "state": "MI" }, { "_id": "49744", "city": "HERRON", "loc": [ -83.65348, 45.012367 ], "pop": 978, "state": "MI" }, { "_id": "49746", "city": "HILLMAN", "loc": [ -83.946781, 45.069104 ], "pop": 3902, "state": "MI" }, { "_id": "49747", "city": "HUBBARD LAKE", "loc": [ -83.60590500000001, 44.89467 ], "pop": 1359, "state": "MI" }, { "_id": "49749", "city": "INDIAN RIVER", "loc": [ -84.595578, 45.426984 ], "pop": 2965, "state": "MI" }, { "_id": "49751", "city": "JOHANNESBURG", "loc": [ -84.38570799999999, 45.015207 ], "pop": 2062, "state": "MI" }, { "_id": "49752", "city": "KINROSS", "loc": [ -84.751122, 46.416612 ], "pop": 1070, "state": "MI" }, { "_id": "49753", "city": "LACHINE", "loc": [ -83.749071, 45.042946 ], "pop": 1764, "state": "MI" }, { "_id": "49755", "city": "LEVERING", "loc": [ -84.798597, 45.637711 ], "pop": 1251, "state": "MI" }, { "_id": "49756", "city": "LEWISTON", "loc": [ -84.297281, 44.853758 ], "pop": 3327, "state": "MI" }, { "_id": "49757", "city": "MACKINAC ISLAND", "loc": [ -84.624527, 45.857837 ], "pop": 469, "state": "MI" }, { "_id": "49759", "city": "MILLERSBURG", "loc": [ -84.122246, 45.402164 ], "pop": 2048, "state": "MI" }, { "_id": "49760", "city": "MORAN", "loc": [ -85.007835, 46.044106 ], "pop": 113, "state": "MI" }, { "_id": "49762", "city": "NAUBINWAY", "loc": [ -85.44619, 46.126021 ], "pop": 1297, "state": "MI" }, { "_id": "49765", "city": "ONAWAY", "loc": [ -84.212272, 45.33654 ], "pop": 1926, "state": "MI" }, { "_id": "49766", "city": "OSSINEKE", "loc": [ -83.459186, 44.91038 ], "pop": 2294, "state": "MI" }, { "_id": "49768", "city": "PARADISE", "loc": [ -85.056247, 46.598321 ], "pop": 515, "state": "MI" }, { "_id": "49769", "city": "PELLSTON", "loc": [ -84.842502, 45.570285 ], "pop": 1360, "state": "MI" }, { "_id": "49770", "city": "BAY VIEW", "loc": [ -84.940263, 45.361268 ], "pop": 12806, "state": "MI" }, { "_id": "49774", "city": "PICKFORD", "loc": [ -84.36631199999999, 46.155858 ], "pop": 624, "state": "MI" }, { "_id": "49775", "city": "POINTE AUX PINS", "loc": [ -84.447035, 45.754888 ], "pop": 59, "state": "MI" }, { "_id": "49776", "city": "POSEN", "loc": [ -83.63927099999999, 45.223335 ], "pop": 3830, "state": "MI" }, { "_id": "49779", "city": "ROGERS CITY", "loc": [ -83.835483, 45.412306 ], "pop": 5463, "state": "MI" }, { "_id": "49780", "city": "FIBRE", "loc": [ -84.54934299999999, 46.200568 ], "pop": 3242, "state": "MI" }, { "_id": "49781", "city": "SAINT IGNACE", "loc": [ -84.70940899999999, 45.921527 ], "pop": 5411, "state": "MI" }, { "_id": "49782", "city": "SAINT JAMES", "loc": [ -85.531581, 45.722061 ], "pop": 404, "state": "MI" }, { "_id": "49783", "city": "SAULT SAINTE MAR", "loc": [ -84.346746, 46.473932 ], "pop": 17974, "state": "MI" }, { "_id": "49788", "city": "KINCHELOE", "loc": [ -84.46258400000001, 46.26271 ], "pop": 6046, "state": "MI" }, { "_id": "49789", "city": "STALWART", "loc": [ -84.155861, 46.138876 ], "pop": 214, "state": "MI" }, { "_id": "49792", "city": "TOWER", "loc": [ -84.303496, 45.341619 ], "pop": 929, "state": "MI" }, { "_id": "49795", "city": "VANDERBILT", "loc": [ -84.651134, 45.153247 ], "pop": 1541, "state": "MI" }, { "_id": "49799", "city": "WOLVERINE", "loc": [ -84.606477, 45.286148 ], "pop": 1857, "state": "MI" }, { "_id": "49801", "city": "IRON MOUNTAIN", "loc": [ -88.068257, 45.821894 ], "pop": 18423, "state": "MI" }, { "_id": "49806", "city": "AU TRAIN", "loc": [ -86.77932699999999, 46.428231 ], "pop": 796, "state": "MI" }, { "_id": "49807", "city": "HARDWOOD", "loc": [ -87.240522, 45.705411 ], "pop": 4037, "state": "MI" }, { "_id": "49812", "city": "CARNEY", "loc": [ -87.543896, 45.591738 ], "pop": 1014, "state": "MI" }, { "_id": "49813", "city": "CEDAR RIVER", "loc": [ -87.365994, 45.448475 ], "pop": 185, "state": "MI" }, { "_id": "49814", "city": "CHAMPION", "loc": [ -87.83058699999999, 46.468497 ], "pop": 2774, "state": "MI" }, { "_id": "49815", "city": "CHANNING", "loc": [ -88.07722099999999, 46.154562 ], "pop": 522, "state": "MI" }, { "_id": "49816", "city": "LIMESTONE", "loc": [ -86.758934, 46.294821 ], "pop": 251, "state": "MI" }, { "_id": "49817", "city": "COOKS", "loc": [ -86.53071799999999, 45.899665 ], "pop": 2, "state": "MI" }, { "_id": "49818", "city": "CORNELL", "loc": [ -87.223702, 45.910373 ], "pop": 671, "state": "MI" }, { "_id": "49820", "city": "CURTIS", "loc": [ -85.786466, 46.204763 ], "pop": 523, "state": "MI" }, { "_id": "49821", "city": "DAGGETT", "loc": [ -87.60785799999999, 45.488738 ], "pop": 1184, "state": "MI" }, { "_id": "49822", "city": "DEERTON", "loc": [ -87.04064, 46.483979 ], "pop": 290, "state": "MI" }, { "_id": "49825", "city": "EBEN JUNCTION", "loc": [ -87.032799, 46.351726 ], "pop": 456, "state": "MI" }, { "_id": "49826", "city": "RUMELY", "loc": [ -86.935068, 46.341867 ], "pop": 823, "state": "MI" }, { "_id": "49827", "city": "ENGADINE", "loc": [ -85.60046800000001, 46.204009 ], "pop": 327, "state": "MI" }, { "_id": "49829", "city": "ESCANABA", "loc": [ -87.08898499999999, 45.76587 ], "pop": 21065, "state": "MI" }, { "_id": "49833", "city": "LITTLE LAKE", "loc": [ -87.41144799999999, 46.053711 ], "pop": 437, "state": "MI" }, { "_id": "49834", "city": "FOSTER CITY", "loc": [ -87.804768, 46.004769 ], "pop": 1249, "state": "MI" }, { "_id": "49835", "city": "GARDEN", "loc": [ -86.57757599999999, 45.754867 ], "pop": 934, "state": "MI" }, { "_id": "49836", "city": "GERMFASK", "loc": [ -85.91589, 46.236261 ], "pop": 542, "state": "MI" }, { "_id": "49837", "city": "BRAMPTON", "loc": [ -87.02728399999999, 45.856402 ], "pop": 5707, "state": "MI" }, { "_id": "49838", "city": "GOULD CITY", "loc": [ -85.725889, 46.134544 ], "pop": 615, "state": "MI" }, { "_id": "49839", "city": "GRAND MARAIS", "loc": [ -85.983633, 46.652916 ], "pop": 508, "state": "MI" }, { "_id": "49840", "city": "GULLIVER", "loc": [ -86.021433, 46.011491 ], "pop": 822, "state": "MI" }, { "_id": "49841", "city": "PRINCETON", "loc": [ -87.43016, 46.291938 ], "pop": 5377, "state": "MI" }, { "_id": "49843", "city": "K I SAWYER A F B", "loc": [ -87.37593, 46.330811 ], "pop": 5613, "state": "MI" }, { "_id": "49847", "city": "HERMANSVILLE", "loc": [ -87.622659, 45.714902 ], "pop": 1090, "state": "MI" }, { "_id": "49848", "city": "INGALLS", "loc": [ -87.62060700000001, 45.374774 ], "pop": 340, "state": "MI" }, { "_id": "49849", "city": "NORTH LAKE", "loc": [ -87.682638, 46.490165 ], "pop": 11725, "state": "MI" }, { "_id": "49853", "city": "MC MILLAN", "loc": [ -85.730715, 46.297027 ], "pop": 897, "state": "MI" }, { "_id": "49854", "city": "THOMPSON", "loc": [ -86.275513, 45.982978 ], "pop": 6753, "state": "MI" }, { "_id": "49855", "city": "BEAVER GROVE", "loc": [ -87.389443, 46.53124 ], "pop": 32361, "state": "MI" }, { "_id": "49858", "city": "MENOMINEE", "loc": [ -87.621475, 45.13427 ], "pop": 13149, "state": "MI" }, { "_id": "49861", "city": "MICHIGAMME", "loc": [ -87.892386, 46.668143 ], "pop": 1230, "state": "MI" }, { "_id": "49862", "city": "CHRISTMAS", "loc": [ -86.626846, 46.413863 ], "pop": 3762, "state": "MI" }, { "_id": "49866", "city": "NEGAUNEE", "loc": [ -87.582915, 46.500662 ], "pop": 8204, "state": "MI" }, { "_id": "49868", "city": "NEWBERRY", "loc": [ -85.514951, 46.343763 ], "pop": 4866, "state": "MI" }, { "_id": "49870", "city": "NORWAY", "loc": [ -87.90469299999999, 45.786186 ], "pop": 3300, "state": "MI" }, { "_id": "49873", "city": "PERRONVILLE", "loc": [ -87.398903, 45.826409 ], "pop": 360, "state": "MI" }, { "_id": "49874", "city": "POWERS", "loc": [ -87.531853, 45.679238 ], "pop": 559, "state": "MI" }, { "_id": "49876", "city": "QUINNESEC", "loc": [ -87.99215100000001, 45.799866 ], "pop": 1313, "state": "MI" }, { "_id": "49878", "city": "RAPID RIVER", "loc": [ -86.88449, 45.910662 ], "pop": 3345, "state": "MI" }, { "_id": "49879", "city": "REPUBLIC", "loc": [ -87.99382300000001, 46.368046 ], "pop": 1192, "state": "MI" }, { "_id": "49880", "city": "ROCK", "loc": [ -87.13306799999999, 46.050262 ], "pop": 1601, "state": "MI" }, { "_id": "49881", "city": "SAGOLA", "loc": [ -88.067644, 46.081274 ], "pop": 392, "state": "MI" }, { "_id": "49883", "city": "SENEY", "loc": [ -85.97084700000001, 46.387989 ], "pop": 185, "state": "MI" }, { "_id": "49884", "city": "SHINGLETON", "loc": [ -86.48226099999999, 46.351202 ], "pop": 589, "state": "MI" }, { "_id": "49885", "city": "SKANDIA", "loc": [ -87.24809399999999, 46.349049 ], "pop": 1975, "state": "MI" }, { "_id": "49886", "city": "SPALDING", "loc": [ -87.49639999999999, 45.695747 ], "pop": 922, "state": "MI" }, { "_id": "49887", "city": "STEPHENSON", "loc": [ -87.62578999999999, 45.416594 ], "pop": 2202, "state": "MI" }, { "_id": "49890", "city": "TRAUNIK", "loc": [ -86.988891, 46.258534 ], "pop": 334, "state": "MI" }, { "_id": "49891", "city": "TRENARY", "loc": [ -86.950183, 46.194738 ], "pop": 563, "state": "MI" }, { "_id": "49892", "city": "VULCAN", "loc": [ -87.816811, 45.762257 ], "pop": 1841, "state": "MI" }, { "_id": "49893", "city": "WALLACE", "loc": [ -87.580457, 45.301657 ], "pop": 2103, "state": "MI" }, { "_id": "49894", "city": "WELLS", "loc": [ -87.073443, 45.784866 ], "pop": 1093, "state": "MI" }, { "_id": "49895", "city": "WETMORE", "loc": [ -86.63453699999999, 46.353518 ], "pop": 646, "state": "MI" }, { "_id": "49896", "city": "WILSON", "loc": [ -87.399734, 45.664855 ], "pop": 1112, "state": "MI" }, { "_id": "49905", "city": "ATLANTIC MINE", "loc": [ -88.66131799999999, 47.093663 ], "pop": 3379, "state": "MI" }, { "_id": "49908", "city": "KEWEENAW BAY", "loc": [ -88.49548900000001, 46.790213 ], "pop": 1759, "state": "MI" }, { "_id": "49910", "city": "BERGLAND", "loc": [ -89.597296, 46.588124 ], "pop": 618, "state": "MI" }, { "_id": "49911", "city": "BESSEMER", "loc": [ -90.05154400000001, 46.480188 ], "pop": 3603, "state": "MI" }, { "_id": "49912", "city": "BRUCE CROSSING", "loc": [ -89.16802800000001, 46.527956 ], "pop": 1089, "state": "MI" }, { "_id": "49913", "city": "LAURIUM", "loc": [ -88.44271999999999, 47.242721 ], "pop": 7656, "state": "MI" }, { "_id": "49916", "city": "CHASSELL", "loc": [ -88.554554, 47.002038 ], "pop": 3096, "state": "MI" }, { "_id": "49919", "city": "COVINGTON", "loc": [ -88.524452, 46.557194 ], "pop": 260, "state": "MI" }, { "_id": "49920", "city": "CRYSTAL FALLS", "loc": [ -88.350517, 46.109255 ], "pop": 4804, "state": "MI" }, { "_id": "49921", "city": "DODGEVILLE", "loc": [ -88.58087399999999, 47.091443 ], "pop": 390, "state": "MI" }, { "_id": "49925", "city": "EWEN", "loc": [ -89.314494, 46.540412 ], "pop": 772, "state": "MI" }, { "_id": "49927", "city": "GAASTRA", "loc": [ -88.591728, 46.052638 ], "pop": 489, "state": "MI" }, { "_id": "49930", "city": "HANCOCK", "loc": [ -88.56538500000001, 47.136731 ], "pop": 7683, "state": "MI" }, { "_id": "49931", "city": "HOUGHTON", "loc": [ -88.558024, 47.115801 ], "pop": 8639, "state": "MI" }, { "_id": "49935", "city": "IRON RIVER", "loc": [ -88.645974, 46.093017 ], "pop": 7882, "state": "MI" }, { "_id": "49938", "city": "IRONWOOD", "loc": [ -90.158844, 46.463793 ], "pop": 9402, "state": "MI" }, { "_id": "49943", "city": "KENTON", "loc": [ -88.812933, 46.491565 ], "pop": 304, "state": "MI" }, { "_id": "49945", "city": "GAY", "loc": [ -88.411829, 47.171387 ], "pop": 3365, "state": "MI" }, { "_id": "49946", "city": "LANSE", "loc": [ -88.420959, 46.770407 ], "pop": 3929, "state": "MI" }, { "_id": "49947", "city": "MARENISCO", "loc": [ -89.67742200000001, 46.355107 ], "pop": 956, "state": "MI" }, { "_id": "49948", "city": "MASS CITY", "loc": [ -89.064864, 46.747447 ], "pop": 805, "state": "MI" }, { "_id": "49950", "city": "EAGLE HARBOR", "loc": [ -88.332572, 47.320067 ], "pop": 1701, "state": "MI" }, { "_id": "49952", "city": "NISULA", "loc": [ -88.83396999999999, 46.76952 ], "pop": 73, "state": "MI" }, { "_id": "49953", "city": "ONTONAGON", "loc": [ -89.348474, 46.827484 ], "pop": 5090, "state": "MI" }, { "_id": "49958", "city": "PELKIE", "loc": [ -88.625083, 46.794932 ], "pop": 1583, "state": "MI" }, { "_id": "49962", "city": "SKANEE", "loc": [ -88.17318899999999, 46.874732 ], "pop": 310, "state": "MI" }, { "_id": "49965", "city": "TOIVOLA", "loc": [ -88.860657, 46.985447 ], "pop": 352, "state": "MI" }, { "_id": "49967", "city": "TROUT CREEK", "loc": [ -89.026962, 46.486426 ], "pop": 480, "state": "MI" }, { "_id": "49968", "city": "WAKEFIELD", "loc": [ -89.942446, 46.475184 ], "pop": 3043, "state": "MI" }, { "_id": "49969", "city": "WATERSMEET", "loc": [ -89.210836, 46.25416 ], "pop": 1048, "state": "MI" }, { "_id": "49970", "city": "WATTON", "loc": [ -88.599298, 46.513698 ], "pop": 391, "state": "MI" }, { "_id": "50001", "city": "ACKWORTH", "loc": [ -93.37671899999999, 41.37372 ], "pop": 491, "state": "IA" }, { "_id": "50002", "city": "ADAIR", "loc": [ -94.644363, 41.513687 ], "pop": 1748, "state": "IA" }, { "_id": "50003", "city": "ADEL", "loc": [ -94.037965, 41.62214 ], "pop": 4884, "state": "IA" }, { "_id": "50005", "city": "ALBION", "loc": [ -92.98821, 42.11427 ], "pop": 773, "state": "IA" }, { "_id": "50006", "city": "ALDEN", "loc": [ -93.384123, 42.51789 ], "pop": 1374, "state": "IA" }, { "_id": "50007", "city": "ALLEMAN", "loc": [ -93.60630500000001, 41.815886 ], "pop": 449, "state": "IA" }, { "_id": "50008", "city": "ALLERTON", "loc": [ -93.37239, 40.702301 ], "pop": 805, "state": "IA" }, { "_id": "50009", "city": "ALTOONA", "loc": [ -93.472415, 41.647549 ], "pop": 7546, "state": "IA" }, { "_id": "50010", "city": "AMES", "loc": [ -93.639398, 42.029859 ], "pop": 52105, "state": "IA" }, { "_id": "50020", "city": "ANITA", "loc": [ -94.77940099999999, 41.449973 ], "pop": 1529, "state": "IA" }, { "_id": "50021", "city": "ANKENY", "loc": [ -93.602175, 41.72755 ], "pop": 20465, "state": "IA" }, { "_id": "50022", "city": "ATLANTIC", "loc": [ -95.01012299999999, 41.400279 ], "pop": 8468, "state": "IA" }, { "_id": "50025", "city": "AUDUBON", "loc": [ -94.91641199999999, 41.730032 ], "pop": 4034, "state": "IA" }, { "_id": "50026", "city": "BAGLEY", "loc": [ -94.441535, 41.834053 ], "pop": 568, "state": "IA" }, { "_id": "50027", "city": "BARNES CITY", "loc": [ -92.470338, 41.488269 ], "pop": 355, "state": "IA" }, { "_id": "50028", "city": "BAXTER", "loc": [ -93.158332, 41.820369 ], "pop": 1381, "state": "IA" }, { "_id": "50029", "city": "BAYARD", "loc": [ -94.591533, 41.838599 ], "pop": 971, "state": "IA" }, { "_id": "50030", "city": "BEACONSFIELD", "loc": [ -94.075126, 40.778431 ], "pop": 195, "state": "IA" }, { "_id": "50031", "city": "BEAVER", "loc": [ -94.103309, 42.039936 ], "pop": 501, "state": "IA" }, { "_id": "50033", "city": "BEVINGTON", "loc": [ -93.812865, 41.371763 ], "pop": 273, "state": "IA" }, { "_id": "50034", "city": "BLAIRSBURG", "loc": [ -93.65944399999999, 42.493725 ], "pop": 458, "state": "IA" }, { "_id": "50035", "city": "BONDURANT", "loc": [ -93.45268900000001, 41.70166 ], "pop": 2666, "state": "IA" }, { "_id": "50036", "city": "BOONE", "loc": [ -93.878083, 42.069354 ], "pop": 14773, "state": "IA" }, { "_id": "50038", "city": "BOONEVILLE", "loc": [ -93.88135699999999, 41.533987 ], "pop": 100, "state": "IA" }, { "_id": "50039", "city": "BOUTON", "loc": [ -93.996286, 41.828432 ], "pop": 552, "state": "IA" }, { "_id": "50040", "city": "BOXHOLM", "loc": [ -94.10524599999999, 42.170567 ], "pop": 437, "state": "IA" }, { "_id": "50041", "city": "BRADFORD", "loc": [ -93.218068, 42.610434 ], "pop": 406, "state": "IA" }, { "_id": "50042", "city": "BRAYTON", "loc": [ -94.974017, 41.55236 ], "pop": 416, "state": "IA" }, { "_id": "50044", "city": "BUSSEY", "loc": [ -92.896252, 41.209422 ], "pop": 707, "state": "IA" }, { "_id": "50046", "city": "CAMBRIDGE", "loc": [ -93.53053800000001, 41.90251 ], "pop": 1103, "state": "IA" }, { "_id": "50047", "city": "CARLISLE", "loc": [ -93.49214000000001, 41.481384 ], "pop": 5109, "state": "IA" }, { "_id": "50048", "city": "CASEY", "loc": [ -94.414475, 41.496116 ], "pop": 1822, "state": "IA" }, { "_id": "50049", "city": "CHARITON", "loc": [ -93.30419000000001, 41.022638 ], "pop": 6836, "state": "IA" }, { "_id": "50050", "city": "CHURDAN", "loc": [ -94.493346, 42.161402 ], "pop": 797, "state": "IA" }, { "_id": "50051", "city": "CLEMONS", "loc": [ -93.16878, 42.090041 ], "pop": 557, "state": "IA" }, { "_id": "50052", "city": "CLIO", "loc": [ -93.48644299999999, 40.680261 ], "pop": 125, "state": "IA" }, { "_id": "50054", "city": "COLFAX", "loc": [ -93.258816, 41.678785 ], "pop": 3475, "state": "IA" }, { "_id": "50055", "city": "COLLINS", "loc": [ -93.300808, 41.903226 ], "pop": 764, "state": "IA" }, { "_id": "50056", "city": "COLO", "loc": [ -93.307114, 42.013102 ], "pop": 1293, "state": "IA" }, { "_id": "50057", "city": "COLUMBIA", "loc": [ -93.15821699999999, 41.183814 ], "pop": 304, "state": "IA" }, { "_id": "50058", "city": "COON RAPIDS", "loc": [ -94.679979, 41.893957 ], "pop": 1802, "state": "IA" }, { "_id": "50059", "city": "COOPER", "loc": [ -94.339073, 41.903433 ], "pop": 170, "state": "IA" }, { "_id": "50060", "city": "SEWAL", "loc": [ -93.322549, 40.76131 ], "pop": 2617, "state": "IA" }, { "_id": "50061", "city": "CUMMING", "loc": [ -93.75386, 41.484876 ], "pop": 635, "state": "IA" }, { "_id": "50062", "city": "DALLAS", "loc": [ -93.253525, 41.221332 ], "pop": 996, "state": "IA" }, { "_id": "50063", "city": "DALLAS CENTER", "loc": [ -93.970657, 41.686248 ], "pop": 1838, "state": "IA" }, { "_id": "50064", "city": "DANA", "loc": [ -94.232212, 42.10634 ], "pop": 131, "state": "IA" }, { "_id": "50065", "city": "PLEASANTON", "loc": [ -93.807022, 40.632075 ], "pop": 762, "state": "IA" }, { "_id": "50066", "city": "DAWSON", "loc": [ -94.217127, 41.832396 ], "pop": 434, "state": "IA" }, { "_id": "50067", "city": "DECATUR", "loc": [ -93.832598, 40.755258 ], "pop": 394, "state": "IA" }, { "_id": "50068", "city": "DERBY", "loc": [ -93.47959, 40.935476 ], "pop": 339, "state": "IA" }, { "_id": "50069", "city": "DE SOTO", "loc": [ -94.027582, 41.533285 ], "pop": 1535, "state": "IA" }, { "_id": "50070", "city": "DEXTER", "loc": [ -94.2145, 41.519806 ], "pop": 824, "state": "IA" }, { "_id": "50071", "city": "DOWS", "loc": [ -93.50580100000001, 42.661026 ], "pop": 1373, "state": "IA" }, { "_id": "50072", "city": "EARLHAM", "loc": [ -94.12944299999999, 41.470916 ], "pop": 2010, "state": "IA" }, { "_id": "50073", "city": "ELKHART", "loc": [ -93.48545799999999, 41.811384 ], "pop": 1374, "state": "IA" }, { "_id": "50074", "city": "ELLSTON", "loc": [ -94.08411599999999, 40.850485 ], "pop": 286, "state": "IA" }, { "_id": "50075", "city": "ELLSWORTH", "loc": [ -93.548979, 42.30086 ], "pop": 1129, "state": "IA" }, { "_id": "50076", "city": "EXIRA", "loc": [ -94.857145, 41.576771 ], "pop": 1590, "state": "IA" }, { "_id": "50101", "city": "GALT", "loc": [ -93.60351199999999, 42.691187 ], "pop": 57, "state": "IA" }, { "_id": "50102", "city": "GARDEN CITY", "loc": [ -93.403068, 42.25266 ], "pop": 422, "state": "IA" }, { "_id": "50103", "city": "GARDEN GROVE", "loc": [ -93.61166900000001, 40.771078 ], "pop": 603, "state": "IA" }, { "_id": "50104", "city": "GIBSON", "loc": [ -92.353121, 41.464206 ], "pop": 458, "state": "IA" }, { "_id": "50106", "city": "GILMAN", "loc": [ -92.810067, 41.901236 ], "pop": 1221, "state": "IA" }, { "_id": "50107", "city": "GRAND JUNCTION", "loc": [ -94.23362899999999, 42.029578 ], "pop": 1055, "state": "IA" }, { "_id": "50108", "city": "GRAND RIVER", "loc": [ -93.95437200000001, 40.813704 ], "pop": 454, "state": "IA" }, { "_id": "50109", "city": "GRANGER", "loc": [ -93.841002, 41.752355 ], "pop": 1324, "state": "IA" }, { "_id": "50110", "city": "GRAY", "loc": [ -95.02272000000001, 41.82663 ], "pop": 344, "state": "IA" }, { "_id": "50111", "city": "GRIMES", "loc": [ -93.78210900000001, 41.701838 ], "pop": 4205, "state": "IA" }, { "_id": "50112", "city": "GRINNELL", "loc": [ -92.734432, 41.742081 ], "pop": 11530, "state": "IA" }, { "_id": "50115", "city": "GUTHRIE CENTER", "loc": [ -94.48644400000001, 41.683671 ], "pop": 3398, "state": "IA" }, { "_id": "50116", "city": "HAMILTON", "loc": [ -92.92434900000001, 41.175543 ], "pop": 314, "state": "IA" }, { "_id": "50117", "city": "HAMLIN", "loc": [ -94.915745, 41.650571 ], "pop": 336, "state": "IA" }, { "_id": "50118", "city": "HARTFORD", "loc": [ -93.402213, 41.459629 ], "pop": 1201, "state": "IA" }, { "_id": "50119", "city": "HARVEY", "loc": [ -92.931843, 41.302972 ], "pop": 683, "state": "IA" }, { "_id": "50120", "city": "HAVERHILL", "loc": [ -92.945857, 41.93196 ], "pop": 419, "state": "IA" }, { "_id": "50122", "city": "HUBBARD", "loc": [ -93.29392799999999, 42.302208 ], "pop": 1356, "state": "IA" }, { "_id": "50123", "city": "HUMESTON", "loc": [ -93.51011699999999, 40.846922 ], "pop": 981, "state": "IA" }, { "_id": "50124", "city": "HUXLEY", "loc": [ -93.60238099999999, 41.899434 ], "pop": 2417, "state": "IA" }, { "_id": "50125", "city": "SPRING HILL", "loc": [ -93.571502, 41.35617 ], "pop": 13920, "state": "IA" }, { "_id": "50126", "city": "IOWA FALLS", "loc": [ -93.270943, 42.513756 ], "pop": 7714, "state": "IA" }, { "_id": "50127", "city": "IRA", "loc": [ -93.16443599999999, 41.731759 ], "pop": 378, "state": "IA" }, { "_id": "50128", "city": "JAMAICA", "loc": [ -94.320367, 41.841931 ], "pop": 423, "state": "IA" }, { "_id": "50129", "city": "JEFFERSON", "loc": [ -94.388768, 42.009325 ], "pop": 5663, "state": "IA" }, { "_id": "50130", "city": "JEWELL", "loc": [ -93.642821, 42.313912 ], "pop": 1348, "state": "IA" }, { "_id": "50131", "city": "JOHNSTON", "loc": [ -93.702792, 41.673017 ], "pop": 4945, "state": "IA" }, { "_id": "50132", "city": "KAMRAR", "loc": [ -93.727941, 42.394517 ], "pop": 246, "state": "IA" }, { "_id": "50133", "city": "KELLERTON", "loc": [ -94.060693, 40.686127 ], "pop": 601, "state": "IA" }, { "_id": "50134", "city": "KELLEY", "loc": [ -93.664354, 41.948773 ], "pop": 314, "state": "IA" }, { "_id": "50135", "city": "KELLOGG", "loc": [ -92.911404, 41.718371 ], "pop": 913, "state": "IA" }, { "_id": "50136", "city": "KESWICK", "loc": [ -92.239547, 41.461251 ], "pop": 497, "state": "IA" }, { "_id": "50138", "city": "KNOXVILLE", "loc": [ -93.095427, 41.316446 ], "pop": 11205, "state": "IA" }, { "_id": "50139", "city": "LACONA", "loc": [ -93.38380100000001, 41.198832 ], "pop": 700, "state": "IA" }, { "_id": "50140", "city": "LAMONI", "loc": [ -93.934899, 40.622852 ], "pop": 2638, "state": "IA" }, { "_id": "50141", "city": "LAUREL", "loc": [ -92.926294, 41.882904 ], "pop": 457, "state": "IA" }, { "_id": "50143", "city": "LEIGHTON", "loc": [ -92.808125, 41.364677 ], "pop": 594, "state": "IA" }, { "_id": "50144", "city": "LEON", "loc": [ -93.742903, 40.737334 ], "pop": 2556, "state": "IA" }, { "_id": "50145", "city": "LIBERTY CENTER", "loc": [ -93.49739099999999, 41.207668 ], "pop": 468, "state": "IA" }, { "_id": "50146", "city": "LINDEN", "loc": [ -94.24057999999999, 41.64225 ], "pop": 585, "state": "IA" }, { "_id": "50147", "city": "LINEVILLE", "loc": [ -93.48620699999999, 40.600373 ], "pop": 586, "state": "IA" }, { "_id": "50148", "city": "LISCOMB", "loc": [ -92.983279, 42.184 ], "pop": 512, "state": "IA" }, { "_id": "50149", "city": "LORIMOR", "loc": [ -94.063885, 41.1233 ], "pop": 619, "state": "IA" }, { "_id": "50150", "city": "LOVILIA", "loc": [ -92.929272, 41.12719 ], "pop": 1053, "state": "IA" }, { "_id": "50151", "city": "LUCAS", "loc": [ -93.483614, 41.058451 ], "pop": 617, "state": "IA" }, { "_id": "50152", "city": "LUTHER", "loc": [ -93.855394, 41.991934 ], "pop": 529, "state": "IA" }, { "_id": "50153", "city": "LYNNVILLE", "loc": [ -92.78771500000001, 41.569766 ], "pop": 630, "state": "IA" }, { "_id": "50154", "city": "MC CALLSBURG", "loc": [ -93.397757, 42.166475 ], "pop": 533, "state": "IA" }, { "_id": "50155", "city": "MACKSBURG", "loc": [ -94.18567299999999, 41.202792 ], "pop": 310, "state": "IA" }, { "_id": "50156", "city": "MADRID", "loc": [ -93.844815, 41.884083 ], "pop": 4367, "state": "IA" }, { "_id": "50157", "city": "MALCOM", "loc": [ -92.535426, 41.769502 ], "pop": 1595, "state": "IA" }, { "_id": "50158", "city": "MARSHALLTOWN", "loc": [ -92.91269, 42.040482 ], "pop": 30857, "state": "IA" }, { "_id": "50161", "city": "MAXWELL", "loc": [ -93.400125, 41.89673 ], "pop": 1268, "state": "IA" }, { "_id": "50162", "city": "MELBOURNE", "loc": [ -93.085627, 41.932348 ], "pop": 970, "state": "IA" }, { "_id": "50163", "city": "MELCHER-DALLAS", "loc": [ -93.219404, 41.222912 ], "pop": 924, "state": "IA" }, { "_id": "50164", "city": "MENLO", "loc": [ -94.409002, 41.534797 ], "pop": 650, "state": "IA" }, { "_id": "50165", "city": "MILLERTON", "loc": [ -93.27958599999999, 40.854889 ], "pop": 258, "state": "IA" }, { "_id": "50166", "city": "MILO", "loc": [ -93.445356, 41.29042 ], "pop": 1705, "state": "IA" }, { "_id": "50167", "city": "MINBURN", "loc": [ -94.01501, 41.756206 ], "pop": 517, "state": "IA" }, { "_id": "50168", "city": "MINGO", "loc": [ -93.288015, 41.789843 ], "pop": 725, "state": "IA" }, { "_id": "50169", "city": "MITCHELLVILLE", "loc": [ -93.36995, 41.66089 ], "pop": 2363, "state": "IA" }, { "_id": "50170", "city": "MONROE", "loc": [ -93.072551, 41.535619 ], "pop": 2868, "state": "IA" }, { "_id": "50171", "city": "MONTEZUMA", "loc": [ -92.527582, 41.592845 ], "pop": 3570, "state": "IA" }, { "_id": "50172", "city": "GUERNSEY", "loc": [ -92.333549, 41.662496 ], "pop": 128, "state": "IA" }, { "_id": "50173", "city": "MONTOUR", "loc": [ -92.700575, 41.970876 ], "pop": 1137, "state": "IA" }, { "_id": "50174", "city": "MURRAY", "loc": [ -93.952975, 41.037644 ], "pop": 1357, "state": "IA" }, { "_id": "50201", "city": "NEVADA", "loc": [ -93.446219, 42.018983 ], "pop": 7381, "state": "IA" }, { "_id": "50206", "city": "NEW PROVIDENCE", "loc": [ -93.175262, 42.269261 ], "pop": 445, "state": "IA" }, { "_id": "50207", "city": "NEW SHARON", "loc": [ -92.684815, 41.463976 ], "pop": 2426, "state": "IA" }, { "_id": "50208", "city": "NEWTON", "loc": [ -93.045456, 41.699173 ], "pop": 19721, "state": "IA" }, { "_id": "50210", "city": "NEW VIRGINIA", "loc": [ -93.71131200000001, 41.160063 ], "pop": 1593, "state": "IA" }, { "_id": "50211", "city": "NORWALK", "loc": [ -93.657332, 41.486055 ], "pop": 9512, "state": "IA" }, { "_id": "50212", "city": "OGDEN", "loc": [ -94.006333, 42.035106 ], "pop": 3115, "state": "IA" }, { "_id": "50213", "city": "OSCEOLA", "loc": [ -93.771236, 41.029503 ], "pop": 5528, "state": "IA" }, { "_id": "50214", "city": "OTLEY", "loc": [ -93.034778, 41.451806 ], "pop": 676, "state": "IA" }, { "_id": "50216", "city": "PANORA", "loc": [ -94.360613, 41.696684 ], "pop": 1847, "state": "IA" }, { "_id": "50217", "city": "PATON", "loc": [ -94.273038, 42.165841 ], "pop": 621, "state": "IA" }, { "_id": "50218", "city": "PATTERSON", "loc": [ -93.878174, 41.353912 ], "pop": 258, "state": "IA" }, { "_id": "50219", "city": "PELLA", "loc": [ -92.917207, 41.408175 ], "pop": 10771, "state": "IA" }, { "_id": "50220", "city": "PERRY", "loc": [ -94.10216699999999, 41.839695 ], "pop": 7918, "state": "IA" }, { "_id": "50222", "city": "PERU", "loc": [ -93.943729, 41.21454 ], "pop": 442, "state": "IA" }, { "_id": "50223", "city": "PILOT MOUND", "loc": [ -94.010184, 42.160395 ], "pop": 380, "state": "IA" }, { "_id": "50225", "city": "PLEASANTVILLE", "loc": [ -93.27120600000001, 41.373836 ], "pop": 2474, "state": "IA" }, { "_id": "50226", "city": "POLK CITY", "loc": [ -93.689346, 41.754905 ], "pop": 4203, "state": "IA" }, { "_id": "50227", "city": "POPEJOY", "loc": [ -93.43086700000001, 42.595628 ], "pop": 298, "state": "IA" }, { "_id": "50228", "city": "PRAIRIE CITY", "loc": [ -93.24098600000001, 41.585425 ], "pop": 1941, "state": "IA" }, { "_id": "50229", "city": "PROLE", "loc": [ -93.734357, 41.382973 ], "pop": 1488, "state": "IA" }, { "_id": "50230", "city": "RADCLIFFE", "loc": [ -93.42336400000001, 42.324064 ], "pop": 804, "state": "IA" }, { "_id": "50231", "city": "RANDALL", "loc": [ -93.62109, 42.247463 ], "pop": 508, "state": "IA" }, { "_id": "50232", "city": "REASNOR", "loc": [ -93.01982700000001, 41.579802 ], "pop": 245, "state": "IA" }, { "_id": "50233", "city": "REDFIELD", "loc": [ -94.189733, 41.587349 ], "pop": 1236, "state": "IA" }, { "_id": "50234", "city": "RHODES", "loc": [ -93.179586, 41.917717 ], "pop": 564, "state": "IA" }, { "_id": "50235", "city": "RIPPEY", "loc": [ -94.213202, 41.92574 ], "pop": 563, "state": "IA" }, { "_id": "50236", "city": "ROLAND", "loc": [ -93.50631300000001, 42.164585 ], "pop": 1452, "state": "IA" }, { "_id": "50237", "city": "RUNNELLS", "loc": [ -93.42025, 41.551549 ], "pop": 2309, "state": "IA" }, { "_id": "50238", "city": "RUSSELL", "loc": [ -93.178371, 40.945557 ], "pop": 1018, "state": "IA" }, { "_id": "50239", "city": "SAINT ANTHONY", "loc": [ -93.18243099999999, 42.151974 ], "pop": 328, "state": "IA" }, { "_id": "50240", "city": "SAINT CHARLES", "loc": [ -93.824195, 41.292443 ], "pop": 1169, "state": "IA" }, { "_id": "50241", "city": "SAINT MARYS", "loc": [ -93.736107, 41.297826 ], "pop": 632, "state": "IA" }, { "_id": "50242", "city": "SEARSBORO", "loc": [ -92.69873699999999, 41.56561 ], "pop": 464, "state": "IA" }, { "_id": "50244", "city": "SLATER", "loc": [ -93.681155, 41.876511 ], "pop": 2083, "state": "IA" }, { "_id": "50246", "city": "STANHOPE", "loc": [ -93.775081, 42.290407 ], "pop": 1001, "state": "IA" }, { "_id": "50247", "city": "STATE CENTER", "loc": [ -93.167283, 42.010911 ], "pop": 1618, "state": "IA" }, { "_id": "50248", "city": "STORY CITY", "loc": [ -93.598811, 42.183487 ], "pop": 3501, "state": "IA" }, { "_id": "50249", "city": "STRATFORD", "loc": [ -93.90294, 42.284673 ], "pop": 1215, "state": "IA" }, { "_id": "50250", "city": "STUART", "loc": [ -94.304563, 41.518643 ], "pop": 1463, "state": "IA" }, { "_id": "50251", "city": "SULLY", "loc": [ -92.845085, 41.573969 ], "pop": 1096, "state": "IA" }, { "_id": "50252", "city": "SWAN", "loc": [ -93.234165, 41.4717 ], "pop": 691, "state": "IA" }, { "_id": "50254", "city": "THAYER", "loc": [ -94.068639, 41.00293 ], "pop": 453, "state": "IA" }, { "_id": "50256", "city": "TRACY", "loc": [ -92.875337, 41.275564 ], "pop": 256, "state": "IA" }, { "_id": "50257", "city": "TRURO", "loc": [ -93.84097800000001, 41.207622 ], "pop": 767, "state": "IA" }, { "_id": "50258", "city": "UNION", "loc": [ -93.056192, 42.252074 ], "pop": 937, "state": "IA" }, { "_id": "50261", "city": "VAN METER", "loc": [ -93.95303, 41.539415 ], "pop": 1780, "state": "IA" }, { "_id": "50262", "city": "VAN WERT", "loc": [ -93.80732999999999, 40.864451 ], "pop": 431, "state": "IA" }, { "_id": "50263", "city": "WAUKEE", "loc": [ -93.85916, 41.592959 ], "pop": 4933, "state": "IA" }, { "_id": "50264", "city": "WELDON", "loc": [ -93.738743, 40.873906 ], "pop": 388, "state": "IA" }, { "_id": "50265", "city": "WEST DES MOINES", "loc": [ -93.744711, 41.580512 ], "pop": 31896, "state": "IA" }, { "_id": "50268", "city": "WHAT CHEER", "loc": [ -92.354789, 41.395276 ], "pop": 1108, "state": "IA" }, { "_id": "50271", "city": "WILLIAMS", "loc": [ -93.56774, 42.461376 ], "pop": 1036, "state": "IA" }, { "_id": "50272", "city": "WILLIAMSON", "loc": [ -93.26593, 41.102026 ], "pop": 505, "state": "IA" }, { "_id": "50273", "city": "WINTERSET", "loc": [ -94.008763, 41.339077 ], "pop": 7254, "state": "IA" }, { "_id": "50274", "city": "WIOTA", "loc": [ -94.840515, 41.384552 ], "pop": 596, "state": "IA" }, { "_id": "50275", "city": "WOODBURN", "loc": [ -93.608282, 41.00001 ], "pop": 677, "state": "IA" }, { "_id": "50276", "city": "WOODWARD", "loc": [ -93.90561700000001, 41.845219 ], "pop": 1749, "state": "IA" }, { "_id": "50277", "city": "YALE", "loc": [ -94.35026000000001, 41.775309 ], "pop": 414, "state": "IA" }, { "_id": "50278", "city": "ZEARING", "loc": [ -93.292766, 42.15349 ], "pop": 1032, "state": "IA" }, { "_id": "50309", "city": "DES MOINES", "loc": [ -93.62117499999999, 41.588743 ], "pop": 4879, "state": "IA" }, { "_id": "50310", "city": "DES MOINES", "loc": [ -93.67361099999999, 41.625475 ], "pop": 30498, "state": "IA" }, { "_id": "50311", "city": "WINDSOR HEIGHTS", "loc": [ -93.67437099999999, 41.601562 ], "pop": 19816, "state": "IA" }, { "_id": "50312", "city": "DES MOINES", "loc": [ -93.671908, 41.585453 ], "pop": 16424, "state": "IA" }, { "_id": "50313", "city": "DES MOINES", "loc": [ -93.620305, 41.638085 ], "pop": 16175, "state": "IA" }, { "_id": "50314", "city": "DES MOINES", "loc": [ -93.632993, 41.603003 ], "pop": 11709, "state": "IA" }, { "_id": "50315", "city": "DES MOINES", "loc": [ -93.619226, 41.544394 ], "pop": 36434, "state": "IA" }, { "_id": "50316", "city": "DES MOINES", "loc": [ -93.59996599999999, 41.609228 ], "pop": 16359, "state": "IA" }, { "_id": "50317", "city": "PLEASANT HILL", "loc": [ -93.549446, 41.612499 ], "pop": 39883, "state": "IA" }, { "_id": "50320", "city": "DES MOINES", "loc": [ -93.582674, 41.548693 ], "pop": 8444, "state": "IA" }, { "_id": "50321", "city": "DES MOINES", "loc": [ -93.661846, 41.547628 ], "pop": 7233, "state": "IA" }, { "_id": "50322", "city": "URBANDALE", "loc": [ -93.72304200000001, 41.629479 ], "pop": 28512, "state": "IA" }, { "_id": "50325", "city": "CLIVE", "loc": [ -93.745749, 41.606729 ], "pop": 7293, "state": "IA" }, { "_id": "50401", "city": "MASON CITY", "loc": [ -93.195379, 43.149869 ], "pop": 31168, "state": "IA" }, { "_id": "50420", "city": "ALEXANDER", "loc": [ -93.44499999999999, 42.811395 ], "pop": 664, "state": "IA" }, { "_id": "50421", "city": "BELMOND", "loc": [ -93.620012, 42.851137 ], "pop": 3306, "state": "IA" }, { "_id": "50423", "city": "BRITT", "loc": [ -93.775175, 43.100582 ], "pop": 3988, "state": "IA" }, { "_id": "50424", "city": "BUFFALO CENTER", "loc": [ -93.937557, 43.373204 ], "pop": 1566, "state": "IA" }, { "_id": "50428", "city": "CLEAR LAKE", "loc": [ -93.384978, 43.140607 ], "pop": 10056, "state": "IA" }, { "_id": "50430", "city": "CORWITH", "loc": [ -93.932303, 42.992736 ], "pop": 737, "state": "IA" }, { "_id": "50432", "city": "CRYSTAL LAKE", "loc": [ -93.794166, 43.218692 ], "pop": 543, "state": "IA" }, { "_id": "50433", "city": "DOUGHERTY", "loc": [ -93.068586, 42.941633 ], "pop": 308, "state": "IA" }, { "_id": "50434", "city": "FERTILE", "loc": [ -93.434485, 43.279514 ], "pop": 766, "state": "IA" }, { "_id": "50435", "city": "FLOYD", "loc": [ -92.72398800000001, 43.143049 ], "pop": 1273, "state": "IA" }, { "_id": "50436", "city": "FOREST CITY", "loc": [ -93.635595, 43.269184 ], "pop": 6010, "state": "IA" }, { "_id": "50438", "city": "GARNER", "loc": [ -93.59439399999999, 43.114395 ], "pop": 3756, "state": "IA" }, { "_id": "50439", "city": "GOODELL", "loc": [ -93.582426, 42.938298 ], "pop": 452, "state": "IA" }, { "_id": "50440", "city": "GRAFTON", "loc": [ -93.079718, 43.311016 ], "pop": 630, "state": "IA" }, { "_id": "50441", "city": "HAMPTON", "loc": [ -93.210954, 42.740531 ], "pop": 5313, "state": "IA" }, { "_id": "50444", "city": "HANLONTOWN", "loc": [ -93.335065, 43.307234 ], "pop": 605, "state": "IA" }, { "_id": "50446", "city": "JOICE", "loc": [ -93.44535399999999, 43.376105 ], "pop": 522, "state": "IA" }, { "_id": "50447", "city": "KANAWHA", "loc": [ -93.772801, 42.94338 ], "pop": 1181, "state": "IA" }, { "_id": "50448", "city": "KENSETT", "loc": [ -93.172805, 43.37391 ], "pop": 729, "state": "IA" }, { "_id": "50449", "city": "KLEMME", "loc": [ -93.58794399999999, 43.013643 ], "pop": 849, "state": "IA" }, { "_id": "50450", "city": "LAKE MILLS", "loc": [ -93.53362799999999, 43.416696 ], "pop": 2801, "state": "IA" }, { "_id": "50451", "city": "LAKOTA", "loc": [ -94.07055, 43.395283 ], "pop": 789, "state": "IA" }, { "_id": "50452", "city": "LATIMER", "loc": [ -93.351798, 42.759783 ], "pop": 966, "state": "IA" }, { "_id": "50453", "city": "LELAND", "loc": [ -93.751496, 43.307043 ], "pop": 333, "state": "IA" }, { "_id": "50454", "city": "LITTLE CEDAR", "loc": [ -92.734376, 43.391861 ], "pop": 248, "state": "IA" }, { "_id": "50455", "city": "MC INTIRE", "loc": [ -92.60485, 43.44999 ], "pop": 382, "state": "IA" }, { "_id": "50456", "city": "MANLY", "loc": [ -93.201802, 43.289116 ], "pop": 1757, "state": "IA" }, { "_id": "50457", "city": "MESERVEY", "loc": [ -93.477298, 42.913696 ], "pop": 298, "state": "IA" }, { "_id": "50458", "city": "NORA SPRINGS", "loc": [ -93.000221, 43.147858 ], "pop": 1849, "state": "IA" }, { "_id": "50459", "city": "NORTHWOOD", "loc": [ -93.24194300000001, 43.450604 ], "pop": 2982, "state": "IA" }, { "_id": "50460", "city": "ORCHARD", "loc": [ -92.719979, 43.235459 ], "pop": 442, "state": "IA" }, { "_id": "50461", "city": "OSAGE", "loc": [ -92.814356, 43.28722 ], "pop": 5790, "state": "IA" }, { "_id": "50464", "city": "PLYMOUTH", "loc": [ -93.12262800000001, 43.246046 ], "pop": 453, "state": "IA" }, { "_id": "50465", "city": "RAKE", "loc": [ -93.91712800000001, 43.476655 ], "pop": 435, "state": "IA" }, { "_id": "50466", "city": "RICEVILLE", "loc": [ -92.55537200000001, 43.371899 ], "pop": 1546, "state": "IA" }, { "_id": "50467", "city": "ROCK FALLS", "loc": [ -93.076402, 43.198014 ], "pop": 306, "state": "IA" }, { "_id": "50468", "city": "ROCKFORD", "loc": [ -92.952034, 43.057331 ], "pop": 1258, "state": "IA" }, { "_id": "50469", "city": "ROCKWELL", "loc": [ -93.21673699999999, 43.003167 ], "pop": 2009, "state": "IA" }, { "_id": "50470", "city": "ROWAN", "loc": [ -93.556966, 42.759644 ], "pop": 405, "state": "IA" }, { "_id": "50471", "city": "RUDD", "loc": [ -92.88854600000001, 43.141958 ], "pop": 688, "state": "IA" }, { "_id": "50472", "city": "SAINT ANSGAR", "loc": [ -92.923523, 43.406107 ], "pop": 2401, "state": "IA" }, { "_id": "50473", "city": "SCARVILLE", "loc": [ -93.64233, 43.467286 ], "pop": 420, "state": "IA" }, { "_id": "50475", "city": "SHEFFIELD", "loc": [ -93.215583, 42.877881 ], "pop": 1988, "state": "IA" }, { "_id": "50476", "city": "STACYVILLE", "loc": [ -92.761031, 43.445687 ], "pop": 798, "state": "IA" }, { "_id": "50477", "city": "SWALEDALE", "loc": [ -93.31152899999999, 42.962167 ], "pop": 414, "state": "IA" }, { "_id": "50478", "city": "THOMPSON", "loc": [ -93.751671, 43.387497 ], "pop": 1178, "state": "IA" }, { "_id": "50479", "city": "THORNTON", "loc": [ -93.408787, 42.968405 ], "pop": 905, "state": "IA" }, { "_id": "50480", "city": "TITONKA", "loc": [ -94.03665599999999, 43.245606 ], "pop": 1159, "state": "IA" }, { "_id": "50482", "city": "VENTURA", "loc": [ -93.4706, 43.126178 ], "pop": 816, "state": "IA" }, { "_id": "50483", "city": "WESLEY", "loc": [ -94.003776, 43.09765 ], "pop": 647, "state": "IA" }, { "_id": "50484", "city": "WODEN", "loc": [ -93.91092500000001, 43.222564 ], "pop": 511, "state": "IA" }, { "_id": "50501", "city": "FORT DODGE", "loc": [ -94.18073699999999, 42.508817 ], "pop": 27632, "state": "IA" }, { "_id": "50510", "city": "ALBERT CITY", "loc": [ -94.98238000000001, 42.778403 ], "pop": 1293, "state": "IA" }, { "_id": "50511", "city": "ALGONA", "loc": [ -94.230638, 43.065976 ], "pop": 7829, "state": "IA" }, { "_id": "50514", "city": "ARMSTRONG", "loc": [ -94.485305, 43.402423 ], "pop": 1464, "state": "IA" }, { "_id": "50515", "city": "AYRSHIRE", "loc": [ -94.847804, 43.037001 ], "pop": 413, "state": "IA" }, { "_id": "50516", "city": "BADGER", "loc": [ -94.162988, 42.599595 ], "pop": 1270, "state": "IA" }, { "_id": "50517", "city": "BANCROFT", "loc": [ -94.210778, 43.293485 ], "pop": 1346, "state": "IA" }, { "_id": "50518", "city": "BARNUM", "loc": [ -94.370327, 42.515867 ], "pop": 481, "state": "IA" }, { "_id": "50519", "city": "BODE", "loc": [ -94.27805499999999, 42.866078 ], "pop": 555, "state": "IA" }, { "_id": "50520", "city": "BRADGATE", "loc": [ -94.400239, 42.779425 ], "pop": 359, "state": "IA" }, { "_id": "50521", "city": "BURNSIDE", "loc": [ -94.11425300000001, 42.341318 ], "pop": 355, "state": "IA" }, { "_id": "50522", "city": "BURT", "loc": [ -94.21223000000001, 43.206167 ], "pop": 1069, "state": "IA" }, { "_id": "50523", "city": "CALLENDER", "loc": [ -94.281963, 42.349372 ], "pop": 1009, "state": "IA" }, { "_id": "50524", "city": "CLARE", "loc": [ -94.30802799999999, 42.595397 ], "pop": 821, "state": "IA" }, { "_id": "50525", "city": "CLARION", "loc": [ -93.727715, 42.727149 ], "pop": 3849, "state": "IA" }, { "_id": "50527", "city": "CURLEW", "loc": [ -94.797528, 42.963321 ], "pop": 278, "state": "IA" }, { "_id": "50528", "city": "CYLINDER", "loc": [ -94.510672, 43.150716 ], "pop": 536, "state": "IA" }, { "_id": "50530", "city": "DAYTON", "loc": [ -94.06104999999999, 42.259438 ], "pop": 1366, "state": "IA" }, { "_id": "50531", "city": "DOLLIVER", "loc": [ -94.624236, 43.466382 ], "pop": 260, "state": "IA" }, { "_id": "50532", "city": "DUNCOMBE", "loc": [ -94.059212, 42.449303 ], "pop": 1561, "state": "IA" }, { "_id": "50533", "city": "EAGLE GROVE", "loc": [ -93.904872, 42.660867 ], "pop": 4109, "state": "IA" }, { "_id": "50535", "city": "EARLY", "loc": [ -95.172569, 42.448258 ], "pop": 1195, "state": "IA" }, { "_id": "50536", "city": "EMMETSBURG", "loc": [ -94.682545, 43.108249 ], "pop": 4794, "state": "IA" }, { "_id": "50538", "city": "FARNHAMVILLE", "loc": [ -94.422623, 42.269234 ], "pop": 631, "state": "IA" }, { "_id": "50539", "city": "FENTON", "loc": [ -94.404366, 43.242047 ], "pop": 779, "state": "IA" }, { "_id": "50540", "city": "FONDA", "loc": [ -94.82974, 42.605148 ], "pop": 1438, "state": "IA" }, { "_id": "50541", "city": "GILMORE CITY", "loc": [ -94.41082400000001, 42.706691 ], "pop": 604, "state": "IA" }, { "_id": "50542", "city": "GOLDFIELD", "loc": [ -93.91943499999999, 42.758055 ], "pop": 1148, "state": "IA" }, { "_id": "50543", "city": "GOWRIE", "loc": [ -94.298669, 42.276712 ], "pop": 1225, "state": "IA" }, { "_id": "50544", "city": "HARCOURT", "loc": [ -94.196095, 42.253052 ], "pop": 631, "state": "IA" }, { "_id": "50545", "city": "HARDY", "loc": [ -94.030852, 42.782247 ], "pop": 262, "state": "IA" }, { "_id": "50546", "city": "HAVELOCK", "loc": [ -94.725233, 42.84109 ], "pop": 586, "state": "IA" }, { "_id": "50548", "city": "HUMBOLDT", "loc": [ -94.213184, 42.719574 ], "pop": 6493, "state": "IA" }, { "_id": "50551", "city": "JOLLEY", "loc": [ -94.742338, 42.507785 ], "pop": 296, "state": "IA" }, { "_id": "50552", "city": "KNIERIM", "loc": [ -94.453153, 42.431944 ], "pop": 295, "state": "IA" }, { "_id": "50553", "city": "KNOKE", "loc": [ -94.85437, 42.520515 ], "pop": 192, "state": "IA" }, { "_id": "50554", "city": "LAURENS", "loc": [ -94.85081599999999, 42.840938 ], "pop": 2055, "state": "IA" }, { "_id": "50556", "city": "LEDYARD", "loc": [ -94.15028100000001, 43.434569 ], "pop": 384, "state": "IA" }, { "_id": "50557", "city": "LEHIGH", "loc": [ -94.03415800000001, 42.352645 ], "pop": 821, "state": "IA" }, { "_id": "50558", "city": "LIVERMORE", "loc": [ -94.174716, 42.866601 ], "pop": 645, "state": "IA" }, { "_id": "50559", "city": "LONE ROCK", "loc": [ -94.35857799999999, 43.166645 ], "pop": 560, "state": "IA" }, { "_id": "50560", "city": "LU VERNE", "loc": [ -94.095912, 42.98684 ], "pop": 1337, "state": "IA" }, { "_id": "50561", "city": "LYTTON", "loc": [ -94.813991, 42.430375 ], "pop": 235, "state": "IA" }, { "_id": "50562", "city": "MALLARD", "loc": [ -94.67460800000001, 42.94167 ], "pop": 721, "state": "IA" }, { "_id": "50563", "city": "MANSON", "loc": [ -94.53038599999999, 42.528503 ], "pop": 2131, "state": "IA" }, { "_id": "50565", "city": "MARATHON", "loc": [ -94.98355100000001, 42.861233 ], "pop": 564, "state": "IA" }, { "_id": "50566", "city": "MOORLAND", "loc": [ -94.319886, 42.434005 ], "pop": 541, "state": "IA" }, { "_id": "50567", "city": "NEMAHA", "loc": [ -95.093914, 42.518027 ], "pop": 356, "state": "IA" }, { "_id": "50568", "city": "NEWELL", "loc": [ -94.994591, 42.615699 ], "pop": 1668, "state": "IA" }, { "_id": "50569", "city": "OTHO", "loc": [ -94.170776, 42.432825 ], "pop": 1910, "state": "IA" }, { "_id": "50570", "city": "OTTOSEN", "loc": [ -94.378648, 42.876443 ], "pop": 301, "state": "IA" }, { "_id": "50571", "city": "PALMER", "loc": [ -94.543155, 42.641871 ], "pop": 1119, "state": "IA" }, { "_id": "50573", "city": "PLOVER", "loc": [ -94.622507, 42.869107 ], "pop": 275, "state": "IA" }, { "_id": "50574", "city": "POCAHONTAS", "loc": [ -94.673675, 42.729602 ], "pop": 2802, "state": "IA" }, { "_id": "50575", "city": "POMEROY", "loc": [ -94.663758, 42.532565 ], "pop": 1197, "state": "IA" }, { "_id": "50576", "city": "REMBRANDT", "loc": [ -95.165178, 42.826034 ], "pop": 236, "state": "IA" }, { "_id": "50577", "city": "RENWICK", "loc": [ -94.007437, 42.849132 ], "pop": 545, "state": "IA" }, { "_id": "50578", "city": "RINGSTED", "loc": [ -94.52913700000001, 43.297654 ], "pop": 860, "state": "IA" }, { "_id": "50579", "city": "ROCKWELL CITY", "loc": [ -94.62921900000001, 42.396126 ], "pop": 2952, "state": "IA" }, { "_id": "50580", "city": "RODMAN", "loc": [ -94.49924300000001, 43.035233 ], "pop": 286, "state": "IA" }, { "_id": "50581", "city": "ROLFE", "loc": [ -94.516593, 42.808233 ], "pop": 1250, "state": "IA" }, { "_id": "50582", "city": "RUTLAND", "loc": [ -94.27188200000001, 42.763486 ], "pop": 529, "state": "IA" }, { "_id": "50583", "city": "SAC CITY", "loc": [ -94.979552, 42.426212 ], "pop": 3531, "state": "IA" }, { "_id": "50585", "city": "SIOUX RAPIDS", "loc": [ -95.138836, 42.906472 ], "pop": 1542, "state": "IA" }, { "_id": "50586", "city": "SOMERS", "loc": [ -94.44638999999999, 42.356065 ], "pop": 425, "state": "IA" }, { "_id": "50588", "city": "STORM LAKE", "loc": [ -95.196079, 42.64738 ], "pop": 11663, "state": "IA" }, { "_id": "50590", "city": "SWEA CITY", "loc": [ -94.319322, 43.402225 ], "pop": 1440, "state": "IA" }, { "_id": "50591", "city": "THOR", "loc": [ -94.03895799999999, 42.688923 ], "pop": 463, "state": "IA" }, { "_id": "50594", "city": "VINCENT", "loc": [ -94.033534, 42.562292 ], "pop": 719, "state": "IA" }, { "_id": "50595", "city": "WEBSTER CITY", "loc": [ -93.826216, 42.465682 ], "pop": 9130, "state": "IA" }, { "_id": "50597", "city": "WEST BEND", "loc": [ -94.456402, 42.957415 ], "pop": 1099, "state": "IA" }, { "_id": "50598", "city": "WHITTEMORE", "loc": [ -94.406395, 43.02608 ], "pop": 1252, "state": "IA" }, { "_id": "50599", "city": "WOOLSTOCK", "loc": [ -93.82161000000001, 42.584439 ], "pop": 394, "state": "IA" }, { "_id": "50601", "city": "ACKLEY", "loc": [ -93.060835, 42.552722 ], "pop": 2316, "state": "IA" }, { "_id": "50602", "city": "ALLISON", "loc": [ -92.78295199999999, 42.761465 ], "pop": 1458, "state": "IA" }, { "_id": "50603", "city": "ALTA VISTA", "loc": [ -92.423682, 43.148159 ], "pop": 1356, "state": "IA" }, { "_id": "50604", "city": "APLINGTON", "loc": [ -92.875141, 42.587039 ], "pop": 1436, "state": "IA" }, { "_id": "50605", "city": "AREDALE", "loc": [ -92.97687999999999, 42.854852 ], "pop": 317, "state": "IA" }, { "_id": "50606", "city": "ARLINGTON", "loc": [ -91.666814, 42.733827 ], "pop": 1124, "state": "IA" }, { "_id": "50607", "city": "AURORA", "loc": [ -91.733469, 42.620317 ], "pop": 344, "state": "IA" }, { "_id": "50608", "city": "AUSTINVILLE", "loc": [ -92.959422, 42.596245 ], "pop": 363, "state": "IA" }, { "_id": "50609", "city": "BEAMAN", "loc": [ -92.816215, 42.236707 ], "pop": 395, "state": "IA" }, { "_id": "50611", "city": "BRISTOW", "loc": [ -92.88642400000001, 42.774106 ], "pop": 465, "state": "IA" }, { "_id": "50612", "city": "BUCKINGHAM", "loc": [ -92.40978800000001, 42.255211 ], "pop": 694, "state": "IA" }, { "_id": "50613", "city": "CEDAR FALLS", "loc": [ -92.449725, 42.524071 ], "pop": 36084, "state": "IA" }, { "_id": "50616", "city": "CHARLES CITY", "loc": [ -92.676062, 43.068327 ], "pop": 10110, "state": "IA" }, { "_id": "50619", "city": "CLARKSVILLE", "loc": [ -92.658833, 42.804079 ], "pop": 2757, "state": "IA" }, { "_id": "50621", "city": "CONRAD", "loc": [ -92.88652500000001, 42.234188 ], "pop": 1346, "state": "IA" }, { "_id": "50622", "city": "DENVER", "loc": [ -92.341701, 42.673137 ], "pop": 2543, "state": "IA" }, { "_id": "50624", "city": "DIKE", "loc": [ -92.612154, 42.47301 ], "pop": 1860, "state": "IA" }, { "_id": "50625", "city": "DUMONT", "loc": [ -92.967347, 42.736773 ], "pop": 1302, "state": "IA" }, { "_id": "50626", "city": "DUNKERTON", "loc": [ -92.158826, 42.578028 ], "pop": 1676, "state": "IA" }, { "_id": "50627", "city": "ELDORA", "loc": [ -93.10369900000001, 42.357158 ], "pop": 3689, "state": "IA" }, { "_id": "50628", "city": "ELMA", "loc": [ -92.398066, 43.27855 ], "pop": 2102, "state": "IA" }, { "_id": "50629", "city": "FAIRBANK", "loc": [ -92.032589, 42.616235 ], "pop": 1770, "state": "IA" }, { "_id": "50630", "city": "FREDERICKSBURG", "loc": [ -92.198334, 42.959299 ], "pop": 1830, "state": "IA" }, { "_id": "50632", "city": "GARWIN", "loc": [ -92.68935, 42.087228 ], "pop": 869, "state": "IA" }, { "_id": "50633", "city": "GENEVA", "loc": [ -93.103793, 42.68044 ], "pop": 382, "state": "IA" }, { "_id": "50635", "city": "GLADBROOK", "loc": [ -92.714112, 42.177432 ], "pop": 1268, "state": "IA" }, { "_id": "50636", "city": "GREENE", "loc": [ -92.758324, 42.91604 ], "pop": 2480, "state": "IA" }, { "_id": "50638", "city": "GRUNDY CENTER", "loc": [ -92.777344, 42.3672 ], "pop": 4130, "state": "IA" }, { "_id": "50640", "city": "HANSELL", "loc": [ -93.090036, 42.771195 ], "pop": 362, "state": "IA" }, { "_id": "50641", "city": "HAZLETON", "loc": [ -91.910462, 42.607561 ], "pop": 1480, "state": "IA" }, { "_id": "50642", "city": "HOLLAND", "loc": [ -92.79988400000001, 42.40114 ], "pop": 222, "state": "IA" }, { "_id": "50643", "city": "HUDSON", "loc": [ -92.45487199999999, 42.390497 ], "pop": 2641, "state": "IA" }, { "_id": "50644", "city": "INDEPENDENCE", "loc": [ -91.880343, 42.46744 ], "pop": 8466, "state": "IA" }, { "_id": "50645", "city": "IONIA", "loc": [ -92.486521, 43.040253 ], "pop": 869, "state": "IA" }, { "_id": "50647", "city": "JANESVILLE", "loc": [ -92.479096, 42.646515 ], "pop": 2008, "state": "IA" }, { "_id": "50648", "city": "JESUP", "loc": [ -92.045625, 42.482329 ], "pop": 3505, "state": "IA" }, { "_id": "50649", "city": "KESLEY", "loc": [ -92.853455, 42.685717 ], "pop": 301, "state": "IA" }, { "_id": "50650", "city": "LAMONT", "loc": [ -91.670078, 42.594552 ], "pop": 830, "state": "IA" }, { "_id": "50651", "city": "LA PORTE CITY", "loc": [ -92.186155, 42.341618 ], "pop": 3990, "state": "IA" }, { "_id": "50652", "city": "LINCOLN", "loc": [ -92.70469300000001, 42.256056 ], "pop": 433, "state": "IA" }, { "_id": "50653", "city": "MARBLE ROCK", "loc": [ -92.89168100000001, 42.964547 ], "pop": 940, "state": "IA" }, { "_id": "50654", "city": "MASONVILLE", "loc": [ -91.55057600000001, 42.50461 ], "pop": 557, "state": "IA" }, { "_id": "50655", "city": "MAYNARD", "loc": [ -91.890773, 42.775156 ], "pop": 899, "state": "IA" }, { "_id": "50658", "city": "NASHUA", "loc": [ -92.529839, 42.952848 ], "pop": 2007, "state": "IA" }, { "_id": "50659", "city": "NEW HAMPTON", "loc": [ -92.313136, 43.056015 ], "pop": 5783, "state": "IA" }, { "_id": "50660", "city": "NEW HARTFORD", "loc": [ -92.616359, 42.583128 ], "pop": 1362, "state": "IA" }, { "_id": "50662", "city": "OELWEIN", "loc": [ -91.913084, 42.681095 ], "pop": 8426, "state": "IA" }, { "_id": "50665", "city": "PARKERSBURG", "loc": [ -92.76876300000001, 42.571377 ], "pop": 3544, "state": "IA" }, { "_id": "50666", "city": "PLAINFIELD", "loc": [ -92.51155799999999, 42.850267 ], "pop": 1030, "state": "IA" }, { "_id": "50667", "city": "RAYMOND", "loc": [ -92.216247, 42.467169 ], "pop": 367, "state": "IA" }, { "_id": "50668", "city": "READLYN", "loc": [ -92.21543200000001, 42.692869 ], "pop": 1858, "state": "IA" }, { "_id": "50669", "city": "REINBECK", "loc": [ -92.59483899999999, 42.313078 ], "pop": 2099, "state": "IA" }, { "_id": "50670", "city": "SHELL ROCK", "loc": [ -92.58878, 42.70611 ], "pop": 1834, "state": "IA" }, { "_id": "50671", "city": "STANLEY", "loc": [ -91.812673, 42.635623 ], "pop": 175, "state": "IA" }, { "_id": "50672", "city": "STEAMBOAT ROCK", "loc": [ -93.06291, 42.417841 ], "pop": 650, "state": "IA" }, { "_id": "50674", "city": "SUMNER", "loc": [ -92.118562, 42.841935 ], "pop": 3187, "state": "IA" }, { "_id": "50675", "city": "TRAER", "loc": [ -92.482681, 42.184685 ], "pop": 2064, "state": "IA" }, { "_id": "50676", "city": "TRIPOLI", "loc": [ -92.265934, 42.810538 ], "pop": 1993, "state": "IA" }, { "_id": "50677", "city": "BREMER", "loc": [ -92.466199, 42.737307 ], "pop": 10879, "state": "IA" }, { "_id": "50680", "city": "WELLSBURG", "loc": [ -92.939763, 42.449418 ], "pop": 1353, "state": "IA" }, { "_id": "50681", "city": "WESTGATE", "loc": [ -92.018299, 42.805453 ], "pop": 1044, "state": "IA" }, { "_id": "50682", "city": "WINTHROP", "loc": [ -91.73146699999999, 42.491163 ], "pop": 1330, "state": "IA" }, { "_id": "50701", "city": "WATERLOO", "loc": [ -92.36609900000001, 42.477784 ], "pop": 29194, "state": "IA" }, { "_id": "50702", "city": "WATERLOO", "loc": [ -92.33648599999999, 42.473112 ], "pop": 18939, "state": "IA" }, { "_id": "50703", "city": "WATERLOO", "loc": [ -92.326919, 42.514875 ], "pop": 21256, "state": "IA" }, { "_id": "50706", "city": "WASHBURN", "loc": [ -92.2676, 42.407605 ], "pop": 1010, "state": "IA" }, { "_id": "50707", "city": "EVANSDALE", "loc": [ -92.281158, 42.475453 ], "pop": 7954, "state": "IA" }, { "_id": "50801", "city": "NEVINVILLE", "loc": [ -94.369151, 41.062384 ], "pop": 9548, "state": "IA" }, { "_id": "50830", "city": "AFTON", "loc": [ -94.19404400000001, 41.040146 ], "pop": 1450, "state": "IA" }, { "_id": "50833", "city": "BEDFORD", "loc": [ -94.73244800000001, 40.66829 ], "pop": 2608, "state": "IA" }, { "_id": "50835", "city": "BENTON", "loc": [ -94.39310399999999, 40.725836 ], "pop": 203, "state": "IA" }, { "_id": "50836", "city": "BLOCKTON", "loc": [ -94.504901, 40.624242 ], "pop": 476, "state": "IA" }, { "_id": "50837", "city": "BRIDGEWATER", "loc": [ -94.64101100000001, 41.157084 ], "pop": 1383, "state": "IA" }, { "_id": "50840", "city": "CLEARFIELD", "loc": [ -94.494439, 40.793534 ], "pop": 593, "state": "IA" }, { "_id": "50841", "city": "CORNING", "loc": [ -94.735789, 40.987121 ], "pop": 2660, "state": "IA" }, { "_id": "50843", "city": "CUMBERLAND", "loc": [ -94.87100599999999, 41.263165 ], "pop": 695, "state": "IA" }, { "_id": "50844", "city": "DELPHOS", "loc": [ -94.316188, 40.661959 ], "pop": 100, "state": "IA" }, { "_id": "50845", "city": "DIAGONAL", "loc": [ -94.35515599999999, 40.822644 ], "pop": 793, "state": "IA" }, { "_id": "50846", "city": "FONTANELLE", "loc": [ -94.541904, 41.289568 ], "pop": 1534, "state": "IA" }, { "_id": "50847", "city": "GRANT", "loc": [ -94.984554, 41.125799 ], "pop": 315, "state": "IA" }, { "_id": "50848", "city": "GRAVITY", "loc": [ -94.750595, 40.790914 ], "pop": 617, "state": "IA" }, { "_id": "50849", "city": "GREENFIELD", "loc": [ -94.440757, 41.313311 ], "pop": 2772, "state": "IA" }, { "_id": "50850", "city": "KENT", "loc": [ -94.421718, 40.944856 ], "pop": 309, "state": "IA" }, { "_id": "50851", "city": "LENOX", "loc": [ -94.56117, 40.884096 ], "pop": 1973, "state": "IA" }, { "_id": "50852", "city": "MALOY", "loc": [ -94.40764, 40.673648 ], "pop": 81, "state": "IA" }, { "_id": "50853", "city": "MASSENA", "loc": [ -94.764872, 41.249867 ], "pop": 794, "state": "IA" }, { "_id": "50854", "city": "MOUNT AYR", "loc": [ -94.232146, 40.7142 ], "pop": 2487, "state": "IA" }, { "_id": "50857", "city": "NODAWAY", "loc": [ -94.87309, 40.954034 ], "pop": 706, "state": "IA" }, { "_id": "50858", "city": "ORIENT", "loc": [ -94.370496, 41.219191 ], "pop": 1042, "state": "IA" }, { "_id": "50859", "city": "PRESCOTT", "loc": [ -94.524901, 41.024848 ], "pop": 205, "state": "IA" }, { "_id": "50860", "city": "REDDING", "loc": [ -94.35945100000001, 40.605312 ], "pop": 327, "state": "IA" }, { "_id": "50861", "city": "SHANNON CITY", "loc": [ -94.250106, 40.936636 ], "pop": 586, "state": "IA" }, { "_id": "50862", "city": "SHARPSBURG", "loc": [ -94.641633, 40.795042 ], "pop": 199, "state": "IA" }, { "_id": "50863", "city": "TINGLEY", "loc": [ -94.19082299999999, 40.851597 ], "pop": 347, "state": "IA" }, { "_id": "50864", "city": "VILLISCA", "loc": [ -94.97958800000001, 40.943718 ], "pop": 1794, "state": "IA" }, { "_id": "51001", "city": "AKRON", "loc": [ -96.52245000000001, 42.835392 ], "pop": 2068, "state": "IA" }, { "_id": "51002", "city": "ALTA", "loc": [ -95.3129, 42.677118 ], "pop": 2757, "state": "IA" }, { "_id": "51003", "city": "ALTON", "loc": [ -96.017268, 42.978175 ], "pop": 1371, "state": "IA" }, { "_id": "51004", "city": "ANTHON", "loc": [ -95.89476500000001, 42.386967 ], "pop": 1550, "state": "IA" }, { "_id": "51005", "city": "AURELIA", "loc": [ -95.438086, 42.69122 ], "pop": 1543, "state": "IA" }, { "_id": "51006", "city": "BATTLE CREEK", "loc": [ -95.604517, 42.332662 ], "pop": 1552, "state": "IA" }, { "_id": "51007", "city": "BRONSON", "loc": [ -96.19859099999999, 42.429181 ], "pop": 796, "state": "IA" }, { "_id": "51009", "city": "CALUMET", "loc": [ -95.55487100000001, 42.953272 ], "pop": 431, "state": "IA" }, { "_id": "51010", "city": "CASTANA", "loc": [ -95.943121, 42.105404 ], "pop": 533, "state": "IA" }, { "_id": "51012", "city": "CHEROKEE", "loc": [ -95.556842, 42.748187 ], "pop": 8339, "state": "IA" }, { "_id": "51014", "city": "CLEGHORN", "loc": [ -95.712436, 42.808593 ], "pop": 541, "state": "IA" }, { "_id": "51016", "city": "CORRECTIONVILLE", "loc": [ -95.780382, 42.474322 ], "pop": 1432, "state": "IA" }, { "_id": "51018", "city": "CUSHING", "loc": [ -95.67748, 42.464182 ], "pop": 261, "state": "IA" }, { "_id": "51019", "city": "DANBURY", "loc": [ -95.726259, 42.269337 ], "pop": 906, "state": "IA" }, { "_id": "51020", "city": "GALVA", "loc": [ -95.429838, 42.510508 ], "pop": 626, "state": "IA" }, { "_id": "51022", "city": "GRANVILLE", "loc": [ -95.897167, 42.969252 ], "pop": 592, "state": "IA" }, { "_id": "51023", "city": "HAWARDEN", "loc": [ -96.472992, 43.001333 ], "pop": 3097, "state": "IA" }, { "_id": "51024", "city": "HINTON", "loc": [ -96.30503299999999, 42.604046 ], "pop": 2449, "state": "IA" }, { "_id": "51025", "city": "HOLSTEIN", "loc": [ -95.564971, 42.494779 ], "pop": 1977, "state": "IA" }, { "_id": "51026", "city": "HORNICK", "loc": [ -96.079553, 42.289741 ], "pop": 894, "state": "IA" }, { "_id": "51027", "city": "IRETON", "loc": [ -96.32322600000001, 42.966566 ], "pop": 1154, "state": "IA" }, { "_id": "51028", "city": "KINGSLEY", "loc": [ -95.976151, 42.619057 ], "pop": 2138, "state": "IA" }, { "_id": "51029", "city": "LARRABEE", "loc": [ -95.581228, 42.862758 ], "pop": 607, "state": "IA" }, { "_id": "51030", "city": "LAWTON", "loc": [ -96.21893, 42.504748 ], "pop": 1481, "state": "IA" }, { "_id": "51031", "city": "LE MARS", "loc": [ -96.17038599999999, 42.79623 ], "pop": 11576, "state": "IA" }, { "_id": "51033", "city": "LINN GROVE", "loc": [ -95.251249, 42.874229 ], "pop": 722, "state": "IA" }, { "_id": "51034", "city": "MAPLETON", "loc": [ -95.79093399999999, 42.158524 ], "pop": 2038, "state": "IA" }, { "_id": "51035", "city": "MARCUS", "loc": [ -95.803431, 42.819959 ], "pop": 1654, "state": "IA" }, { "_id": "51036", "city": "MAURICE", "loc": [ -96.165531, 42.962647 ], "pop": 625, "state": "IA" }, { "_id": "51037", "city": "MERIDEN", "loc": [ -95.64079700000001, 42.787416 ], "pop": 333, "state": "IA" }, { "_id": "51038", "city": "MERRILL", "loc": [ -96.228324, 42.704737 ], "pop": 1468, "state": "IA" }, { "_id": "51039", "city": "MOVILLE", "loc": [ -96.065583, 42.481924 ], "pop": 2064, "state": "IA" }, { "_id": "51040", "city": "ONAWA", "loc": [ -96.107213, 42.036967 ], "pop": 3867, "state": "IA" }, { "_id": "51041", "city": "ORANGE CITY", "loc": [ -96.05646400000001, 43.01849 ], "pop": 6126, "state": "IA" }, { "_id": "51044", "city": "OTO", "loc": [ -95.861575, 42.264592 ], "pop": 340, "state": "IA" }, { "_id": "51046", "city": "PAULLINA", "loc": [ -95.708322, 42.970277 ], "pop": 1760, "state": "IA" }, { "_id": "51047", "city": "PETERSON", "loc": [ -95.337658, 42.932794 ], "pop": 640, "state": "IA" }, { "_id": "51048", "city": "PIERSON", "loc": [ -95.89219300000001, 42.533493 ], "pop": 642, "state": "IA" }, { "_id": "51049", "city": "QUIMBY", "loc": [ -95.681175, 42.628711 ], "pop": 562, "state": "IA" }, { "_id": "51050", "city": "REMSEN", "loc": [ -95.95437800000001, 42.8149 ], "pop": 2254, "state": "IA" }, { "_id": "51051", "city": "RODNEY", "loc": [ -95.953456, 42.201541 ], "pop": 120, "state": "IA" }, { "_id": "51052", "city": "SALIX", "loc": [ -96.28791200000001, 42.330554 ], "pop": 1210, "state": "IA" }, { "_id": "51053", "city": "SCHALLER", "loc": [ -95.284587, 42.505501 ], "pop": 1311, "state": "IA" }, { "_id": "51054", "city": "SERGEANT BLUFF", "loc": [ -96.353392, 42.401895 ], "pop": 2853, "state": "IA" }, { "_id": "51055", "city": "SLOAN", "loc": [ -96.23063399999999, 42.242726 ], "pop": 1303, "state": "IA" }, { "_id": "51056", "city": "SMITHLAND", "loc": [ -95.94864699999999, 42.24079 ], "pop": 495, "state": "IA" }, { "_id": "51058", "city": "SUTHERLAND", "loc": [ -95.480665, 42.982623 ], "pop": 1096, "state": "IA" }, { "_id": "51059", "city": "TURIN", "loc": [ -95.95182800000001, 41.973189 ], "pop": 387, "state": "IA" }, { "_id": "51060", "city": "UTE", "loc": [ -95.712542, 42.058085 ], "pop": 567, "state": "IA" }, { "_id": "51061", "city": "WASHTA", "loc": [ -95.72953699999999, 42.578108 ], "pop": 519, "state": "IA" }, { "_id": "51062", "city": "WESTFIELD", "loc": [ -96.49198699999999, 42.695329 ], "pop": 1435, "state": "IA" }, { "_id": "51063", "city": "WHITING", "loc": [ -96.182247, 42.15216 ], "pop": 895, "state": "IA" }, { "_id": "51101", "city": "SIOUX CITY", "loc": [ -96.40291999999999, 42.497223 ], "pop": 765, "state": "IA" }, { "_id": "51103", "city": "SIOUX CITY", "loc": [ -96.42950999999999, 42.506793 ], "pop": 16831, "state": "IA" }, { "_id": "51104", "city": "SIOUX CITY", "loc": [ -96.400453, 42.52536 ], "pop": 20441, "state": "IA" }, { "_id": "51105", "city": "SIOUX CITY", "loc": [ -96.38285500000001, 42.503224 ], "pop": 10372, "state": "IA" }, { "_id": "51106", "city": "SIOUX CITY", "loc": [ -96.352755, 42.467057 ], "pop": 25974, "state": "IA" }, { "_id": "51107", "city": "SIOUX CITY", "loc": [ -96.376064, 42.490266 ], "pop": 258, "state": "IA" }, { "_id": "51108", "city": "SIOUX CITY", "loc": [ -96.361695, 42.546891 ], "pop": 4615, "state": "IA" }, { "_id": "51109", "city": "SIOUX CITY", "loc": [ -96.480304, 42.517287 ], "pop": 2592, "state": "IA" }, { "_id": "51110", "city": "SIOUX CITY", "loc": [ -96.372559, 42.400921 ], "pop": 189, "state": "IA" }, { "_id": "51111", "city": "SIOUX CITY", "loc": [ -96.37129400000001, 42.408912 ], "pop": 12, "state": "IA" }, { "_id": "51201", "city": "SHELDON", "loc": [ -95.840141, 43.180797 ], "pop": 5585, "state": "IA" }, { "_id": "51230", "city": "ALVORD", "loc": [ -96.290994, 43.320109 ], "pop": 494, "state": "IA" }, { "_id": "51231", "city": "ARCHER", "loc": [ -95.74165600000001, 43.117917 ], "pop": 194, "state": "IA" }, { "_id": "51232", "city": "ASHTON", "loc": [ -95.76550899999999, 43.305259 ], "pop": 1090, "state": "IA" }, { "_id": "51234", "city": "BOYDEN", "loc": [ -95.982309, 43.20343 ], "pop": 1652, "state": "IA" }, { "_id": "51235", "city": "DOON", "loc": [ -96.201987, 43.287183 ], "pop": 957, "state": "IA" }, { "_id": "51237", "city": "GEORGE", "loc": [ -95.989383, 43.343903 ], "pop": 2326, "state": "IA" }, { "_id": "51238", "city": "HOSPERS", "loc": [ -95.91417199999999, 43.079337 ], "pop": 1491, "state": "IA" }, { "_id": "51239", "city": "HULL", "loc": [ -96.13924799999999, 43.195201 ], "pop": 2283, "state": "IA" }, { "_id": "51240", "city": "INWOOD", "loc": [ -96.43629300000001, 43.304747 ], "pop": 1434, "state": "IA" }, { "_id": "51241", "city": "LARCHWOOD", "loc": [ -96.42522, 43.438673 ], "pop": 2097, "state": "IA" }, { "_id": "51243", "city": "LITTLE ROCK", "loc": [ -95.892622, 43.449571 ], "pop": 688, "state": "IA" }, { "_id": "51245", "city": "PRIMGHAR", "loc": [ -95.65330400000001, 43.075892 ], "pop": 2167, "state": "IA" }, { "_id": "51246", "city": "ROCK RAPIDS", "loc": [ -96.178055, 43.427192 ], "pop": 3956, "state": "IA" }, { "_id": "51247", "city": "ROCK VALLEY", "loc": [ -96.31034200000001, 43.201356 ], "pop": 4100, "state": "IA" }, { "_id": "51248", "city": "SANBORN", "loc": [ -95.662227, 43.189002 ], "pop": 1632, "state": "IA" }, { "_id": "51249", "city": "SIBLEY", "loc": [ -95.7424, 43.406929 ], "pop": 3853, "state": "IA" }, { "_id": "51250", "city": "SIOUX CENTER", "loc": [ -96.179952, 43.081416 ], "pop": 7417, "state": "IA" }, { "_id": "51301", "city": "SPENCER", "loc": [ -95.14569, 43.145107 ], "pop": 12101, "state": "IA" }, { "_id": "51331", "city": "ARNOLDS PARK", "loc": [ -95.13126099999999, 43.36358 ], "pop": 1109, "state": "IA" }, { "_id": "51333", "city": "DICKENS", "loc": [ -94.985383, 43.154836 ], "pop": 732, "state": "IA" }, { "_id": "51334", "city": "ESTHERVILLE", "loc": [ -94.818001, 43.401709 ], "pop": 8614, "state": "IA" }, { "_id": "51338", "city": "EVERLY", "loc": [ -95.322777, 43.160917 ], "pop": 1153, "state": "IA" }, { "_id": "51340", "city": "FOSTORIA", "loc": [ -95.185042, 43.225857 ], "pop": 471, "state": "IA" }, { "_id": "51342", "city": "GRAETTINGER", "loc": [ -94.733401, 43.227731 ], "pop": 1259, "state": "IA" }, { "_id": "51343", "city": "GREENVILLE", "loc": [ -95.058184, 43.033348 ], "pop": 630, "state": "IA" }, { "_id": "51345", "city": "HARRIS", "loc": [ -95.44260300000001, 43.456793 ], "pop": 333, "state": "IA" }, { "_id": "51346", "city": "HARTLEY", "loc": [ -95.481696, 43.179984 ], "pop": 2574, "state": "IA" }, { "_id": "51347", "city": "LAKE PARK", "loc": [ -95.321601, 43.445239 ], "pop": 1320, "state": "IA" }, { "_id": "51350", "city": "MELVIN", "loc": [ -95.592951, 43.284496 ], "pop": 395, "state": "IA" }, { "_id": "51351", "city": "MILFORD", "loc": [ -95.161534, 43.31964 ], "pop": 2964, "state": "IA" }, { "_id": "51354", "city": "OCHEYEDAN", "loc": [ -95.520366, 43.39105 ], "pop": 1596, "state": "IA" }, { "_id": "51355", "city": "OKOBOJI", "loc": [ -95.153026, 43.37938 ], "pop": 1637, "state": "IA" }, { "_id": "51357", "city": "ROYAL", "loc": [ -95.26785599999999, 43.048751 ], "pop": 1035, "state": "IA" }, { "_id": "51358", "city": "RUTHVEN", "loc": [ -94.884214, 43.144845 ], "pop": 1283, "state": "IA" }, { "_id": "51360", "city": "SPIRIT LAKE", "loc": [ -95.112336, 43.426211 ], "pop": 6683, "state": "IA" }, { "_id": "51363", "city": "SUPERIOR", "loc": [ -94.964935, 43.450317 ], "pop": 333, "state": "IA" }, { "_id": "51364", "city": "TERRIL", "loc": [ -94.973725, 43.324073 ], "pop": 863, "state": "IA" }, { "_id": "51365", "city": "WALLINGFORD", "loc": [ -94.82057, 43.312158 ], "pop": 371, "state": "IA" }, { "_id": "51366", "city": "WEBB", "loc": [ -94.995124, 42.950189 ], "pop": 343, "state": "IA" }, { "_id": "51401", "city": "CARROLL", "loc": [ -94.866664, 42.071972 ], "pop": 11456, "state": "IA" }, { "_id": "51430", "city": "ARCADIA", "loc": [ -95.03713999999999, 42.057279 ], "pop": 1183, "state": "IA" }, { "_id": "51431", "city": "ARTHUR", "loc": [ -95.367519, 42.336283 ], "pop": 577, "state": "IA" }, { "_id": "51432", "city": "ASPINWALL", "loc": [ -95.149936, 41.908252 ], "pop": 367, "state": "IA" }, { "_id": "51433", "city": "YETTER", "loc": [ -94.903447, 42.280895 ], "pop": 882, "state": "IA" }, { "_id": "51436", "city": "BREDA", "loc": [ -95.00067900000001, 42.175835 ], "pop": 773, "state": "IA" }, { "_id": "51439", "city": "CHARTER OAK", "loc": [ -95.59924100000001, 42.070735 ], "pop": 797, "state": "IA" }, { "_id": "51440", "city": "DEDHAM", "loc": [ -94.814896, 41.905539 ], "pop": 562, "state": "IA" }, { "_id": "51441", "city": "DELOIT", "loc": [ -95.286338, 42.085899 ], "pop": 618, "state": "IA" }, { "_id": "51442", "city": "DENISON", "loc": [ -95.363572, 42.019626 ], "pop": 8507, "state": "IA" }, { "_id": "51443", "city": "GLIDDEN", "loc": [ -94.714777, 42.061816 ], "pop": 1518, "state": "IA" }, { "_id": "51444", "city": "HALBUR", "loc": [ -94.93586000000001, 41.997357 ], "pop": 720, "state": "IA" }, { "_id": "51445", "city": "IDA GROVE", "loc": [ -95.464488, 42.340026 ], "pop": 3633, "state": "IA" }, { "_id": "51446", "city": "IRWIN", "loc": [ -95.195842, 41.794094 ], "pop": 1120, "state": "IA" }, { "_id": "51447", "city": "KIRKMAN", "loc": [ -95.267083, 41.73076 ], "pop": 395, "state": "IA" }, { "_id": "51448", "city": "KIRON", "loc": [ -95.31146, 42.179359 ], "pop": 753, "state": "IA" }, { "_id": "51449", "city": "LAKE CITY", "loc": [ -94.74578700000001, 42.270494 ], "pop": 2539, "state": "IA" }, { "_id": "51450", "city": "LAKE VIEW", "loc": [ -95.048562, 42.315367 ], "pop": 1792, "state": "IA" }, { "_id": "51451", "city": "LANESBORO", "loc": [ -94.690274, 42.174687 ], "pop": 396, "state": "IA" }, { "_id": "51452", "city": "LIDDERDALE", "loc": [ -94.79535300000001, 42.152815 ], "pop": 525, "state": "IA" }, { "_id": "51453", "city": "LOHRVILLE", "loc": [ -94.556605, 42.261923 ], "pop": 615, "state": "IA" }, { "_id": "51454", "city": "MANILLA", "loc": [ -95.239126, 41.892233 ], "pop": 1185, "state": "IA" }, { "_id": "51455", "city": "MANNING", "loc": [ -95.055622, 41.907248 ], "pop": 1807, "state": "IA" }, { "_id": "51458", "city": "ODEBOLT", "loc": [ -95.25005, 42.309514 ], "pop": 1776, "state": "IA" }, { "_id": "51459", "city": "RALSTON", "loc": [ -94.569779, 42.075655 ], "pop": 231, "state": "IA" }, { "_id": "51460", "city": "RICKETTS", "loc": [ -95.599547, 42.15406 ], "pop": 346, "state": "IA" }, { "_id": "51461", "city": "SCHLESWIG", "loc": [ -95.444309, 42.164586 ], "pop": 1191, "state": "IA" }, { "_id": "51462", "city": "SCRANTON", "loc": [ -94.55176400000001, 42.012381 ], "pop": 814, "state": "IA" }, { "_id": "51463", "city": "TEMPLETON", "loc": [ -94.93200899999999, 41.912077 ], "pop": 681, "state": "IA" }, { "_id": "51465", "city": "VAIL", "loc": [ -95.17776600000001, 42.033772 ], "pop": 790, "state": "IA" }, { "_id": "51466", "city": "WALL LAKE", "loc": [ -95.085156, 42.265252 ], "pop": 1481, "state": "IA" }, { "_id": "51467", "city": "WESTSIDE", "loc": [ -95.12730000000001, 42.10844 ], "pop": 714, "state": "IA" }, { "_id": "51501", "city": "MANAWA", "loc": [ -95.88099200000001, 41.252954 ], "pop": 31614, "state": "IA" }, { "_id": "51503", "city": "COUNCIL BLUFFS", "loc": [ -95.82508300000001, 41.261584 ], "pop": 30513, "state": "IA" }, { "_id": "51510", "city": "CARTER LAKE", "loc": [ -95.91406000000001, 41.292524 ], "pop": 3200, "state": "IA" }, { "_id": "51520", "city": "ARION", "loc": [ -95.46232999999999, 41.950406 ], "pop": 194, "state": "IA" }, { "_id": "51521", "city": "AVOCA", "loc": [ -95.350872, 41.476834 ], "pop": 2032, "state": "IA" }, { "_id": "51523", "city": "BLENCOE", "loc": [ -96.082663, 41.923662 ], "pop": 373, "state": "IA" }, { "_id": "51525", "city": "CARSON", "loc": [ -95.36808600000001, 41.225276 ], "pop": 1398, "state": "IA" }, { "_id": "51526", "city": "CRESCENT", "loc": [ -95.827648, 41.364378 ], "pop": 1967, "state": "IA" }, { "_id": "51527", "city": "EARLING", "loc": [ -95.340293, 41.827063 ], "pop": 375, "state": "IA" }, { "_id": "51528", "city": "DOW CITY", "loc": [ -95.4862, 41.913429 ], "pop": 1313, "state": "IA" }, { "_id": "51529", "city": "EARLING", "loc": [ -95.615709, 41.842301 ], "pop": 1836, "state": "IA" }, { "_id": "51530", "city": "EARLING", "loc": [ -95.42104500000001, 41.792483 ], "pop": 1068, "state": "IA" }, { "_id": "51531", "city": "ELK HORN", "loc": [ -95.070015, 41.582871 ], "pop": 990, "state": "IA" }, { "_id": "51532", "city": "ELLIOTT", "loc": [ -95.160237, 41.130617 ], "pop": 879, "state": "IA" }, { "_id": "51533", "city": "EMERSON", "loc": [ -95.410624, 41.028439 ], "pop": 1529, "state": "IA" }, { "_id": "51534", "city": "GLENWOOD", "loc": [ -95.73891999999999, 41.047009 ], "pop": 6392, "state": "IA" }, { "_id": "51535", "city": "GRISWOLD", "loc": [ -95.098989, 41.223842 ], "pop": 1678, "state": "IA" }, { "_id": "51536", "city": "HANCOCK", "loc": [ -95.344528, 41.383238 ], "pop": 427, "state": "IA" }, { "_id": "51537", "city": "HARLAN", "loc": [ -95.31110099999999, 41.64375 ], "pop": 6934, "state": "IA" }, { "_id": "51540", "city": "HASTINGS", "loc": [ -95.55309699999999, 40.960514 ], "pop": 267, "state": "IA" }, { "_id": "51541", "city": "HENDERSON", "loc": [ -95.458629, 41.125426 ], "pop": 564, "state": "IA" }, { "_id": "51542", "city": "HONEY CREEK", "loc": [ -95.8802, 41.463045 ], "pop": 656, "state": "IA" }, { "_id": "51543", "city": "KIMBALLTON", "loc": [ -95.055324, 41.635214 ], "pop": 614, "state": "IA" }, { "_id": "51544", "city": "LEWIS", "loc": [ -95.06202399999999, 41.296289 ], "pop": 980, "state": "IA" }, { "_id": "51545", "city": "LITTLE SIOUX", "loc": [ -96.031357, 41.808267 ], "pop": 402, "state": "IA" }, { "_id": "51546", "city": "LOGAN", "loc": [ -95.752478, 41.624345 ], "pop": 2764, "state": "IA" }, { "_id": "51548", "city": "MC CLELLAND", "loc": [ -95.68127800000001, 41.293168 ], "pop": 714, "state": "IA" }, { "_id": "51549", "city": "MACEDONIA", "loc": [ -95.431386, 41.191627 ], "pop": 475, "state": "IA" }, { "_id": "51550", "city": "MAGNOLIA", "loc": [ -95.854955, 41.708177 ], "pop": 631, "state": "IA" }, { "_id": "51551", "city": "MALVERN", "loc": [ -95.58398800000001, 41.007378 ], "pop": 1409, "state": "IA" }, { "_id": "51552", "city": "MARNE", "loc": [ -95.097308, 41.454681 ], "pop": 388, "state": "IA" }, { "_id": "51553", "city": "MINDEN", "loc": [ -95.55188699999999, 41.465355 ], "pop": 917, "state": "IA" }, { "_id": "51554", "city": "MINEOLA", "loc": [ -95.75569900000001, 41.110171 ], "pop": 1276, "state": "IA" }, { "_id": "51555", "city": "MISSOURI VALLEY", "loc": [ -95.891346, 41.564399 ], "pop": 4330, "state": "IA" }, { "_id": "51556", "city": "MODALE", "loc": [ -95.985225, 41.637143 ], "pop": 505, "state": "IA" }, { "_id": "51557", "city": "MONDAMIN", "loc": [ -96.007204, 41.708876 ], "pop": 793, "state": "IA" }, { "_id": "51558", "city": "MOORHEAD", "loc": [ -95.829031, 41.918601 ], "pop": 589, "state": "IA" }, { "_id": "51559", "city": "NEOLA", "loc": [ -95.67935799999999, 41.456383 ], "pop": 1766, "state": "IA" }, { "_id": "51560", "city": "OAKLAND", "loc": [ -95.379034, 41.311964 ], "pop": 2385, "state": "IA" }, { "_id": "51561", "city": "PACIFIC JUNCTION", "loc": [ -95.80464499999999, 41.027123 ], "pop": 1228, "state": "IA" }, { "_id": "51562", "city": "PANAMA", "loc": [ -95.48704600000001, 41.728813 ], "pop": 511, "state": "IA" }, { "_id": "51563", "city": "PERSIA", "loc": [ -95.56577, 41.56473 ], "pop": 691, "state": "IA" }, { "_id": "51564", "city": "PISGAH", "loc": [ -95.919172, 41.821376 ], "pop": 673, "state": "IA" }, { "_id": "51565", "city": "PORTSMOUTH", "loc": [ -95.510751, 41.648385 ], "pop": 476, "state": "IA" }, { "_id": "51566", "city": "RED OAK", "loc": [ -95.226924, 41.007949 ], "pop": 7395, "state": "IA" }, { "_id": "51570", "city": "SHELBY", "loc": [ -95.446888, 41.533898 ], "pop": 941, "state": "IA" }, { "_id": "51571", "city": "SILVER CITY", "loc": [ -95.626912, 41.113024 ], "pop": 483, "state": "IA" }, { "_id": "51572", "city": "SOLDIER", "loc": [ -95.78253100000001, 41.994188 ], "pop": 665, "state": "IA" }, { "_id": "51573", "city": "STANTON", "loc": [ -95.09876, 40.985924 ], "pop": 1315, "state": "IA" }, { "_id": "51575", "city": "TREYNOR", "loc": [ -95.617041, 41.220679 ], "pop": 1619, "state": "IA" }, { "_id": "51576", "city": "UNDERWOOD", "loc": [ -95.626997, 41.360294 ], "pop": 1652, "state": "IA" }, { "_id": "51577", "city": "WALNUT", "loc": [ -95.217973, 41.462329 ], "pop": 1293, "state": "IA" }, { "_id": "51578", "city": "WESTPHALIA", "loc": [ -95.386978, 41.718014 ], "pop": 420, "state": "IA" }, { "_id": "51579", "city": "WOODBINE", "loc": [ -95.700785, 41.737267 ], "pop": 2105, "state": "IA" }, { "_id": "51601", "city": "SHENANDOAH", "loc": [ -95.36479799999999, 40.758087 ], "pop": 6226, "state": "IA" }, { "_id": "51630", "city": "BLANCHARD", "loc": [ -95.205377, 40.612156 ], "pop": 284, "state": "IA" }, { "_id": "51631", "city": "BRADDYVILLE", "loc": [ -94.99557799999999, 40.599081 ], "pop": 351, "state": "IA" }, { "_id": "51632", "city": "CLARINDA", "loc": [ -95.037976, 40.749084 ], "pop": 6652, "state": "IA" }, { "_id": "51636", "city": "COIN", "loc": [ -95.221653, 40.668591 ], "pop": 387, "state": "IA" }, { "_id": "51637", "city": "COLLEGE SPRINGS", "loc": [ -95.099717, 40.617109 ], "pop": 537, "state": "IA" }, { "_id": "51638", "city": "ESSEX", "loc": [ -95.288777, 40.840359 ], "pop": 1433, "state": "IA" }, { "_id": "51639", "city": "FARRAGUT", "loc": [ -95.45549800000001, 40.729971 ], "pop": 1055, "state": "IA" }, { "_id": "51640", "city": "HAMBURG", "loc": [ -95.625789, 40.614902 ], "pop": 1997, "state": "IA" }, { "_id": "51645", "city": "IMOGENE", "loc": [ -95.435804, 40.863144 ], "pop": 318, "state": "IA" }, { "_id": "51646", "city": "NEW MARKET", "loc": [ -94.891662, 40.742174 ], "pop": 702, "state": "IA" }, { "_id": "51647", "city": "NORTHBORO", "loc": [ -95.30959199999999, 40.612737 ], "pop": 287, "state": "IA" }, { "_id": "51648", "city": "PERCIVAL", "loc": [ -95.809307, 40.740148 ], "pop": 327, "state": "IA" }, { "_id": "51649", "city": "RANDOLPH", "loc": [ -95.562386, 40.870353 ], "pop": 419, "state": "IA" }, { "_id": "51650", "city": "RIVERTON", "loc": [ -95.55780300000001, 40.686968 ], "pop": 447, "state": "IA" }, { "_id": "51651", "city": "SHAMBAUGH", "loc": [ -95.063591, 40.675735 ], "pop": 456, "state": "IA" }, { "_id": "51652", "city": "SIDNEY", "loc": [ -95.64027, 40.750671 ], "pop": 1948, "state": "IA" }, { "_id": "51653", "city": "TABOR", "loc": [ -95.672892, 40.900448 ], "pop": 1626, "state": "IA" }, { "_id": "51654", "city": "THURMAN", "loc": [ -95.760535, 40.84241 ], "pop": 521, "state": "IA" }, { "_id": "51656", "city": "YORKTOWN", "loc": [ -95.216335, 40.769244 ], "pop": 257, "state": "IA" }, { "_id": "52001", "city": "DUBUQUE", "loc": [ -90.68191400000001, 42.514977 ], "pop": 41934, "state": "IA" }, { "_id": "52002", "city": "DUBUQUE", "loc": [ -90.738372, 42.512191 ], "pop": 12734, "state": "IA" }, { "_id": "52003", "city": "DUBUQUE", "loc": [ -90.682884, 42.464916 ], "pop": 13104, "state": "IA" }, { "_id": "52030", "city": "ANDREW", "loc": [ -90.60035000000001, 42.158496 ], "pop": 741, "state": "IA" }, { "_id": "52031", "city": "BELLEVUE", "loc": [ -90.435603, 42.25825 ], "pop": 2884, "state": "IA" }, { "_id": "52032", "city": "BERNARD", "loc": [ -90.863032, 42.33207 ], "pop": 861, "state": "IA" }, { "_id": "52033", "city": "CASCADE", "loc": [ -91.01439499999999, 42.286959 ], "pop": 3155, "state": "IA" }, { "_id": "52035", "city": "COLESBURG", "loc": [ -91.19628, 42.638346 ], "pop": 1401, "state": "IA" }, { "_id": "52036", "city": "DELAWARE", "loc": [ -91.347176, 42.477713 ], "pop": 262, "state": "IA" }, { "_id": "52037", "city": "DELMAR", "loc": [ -90.608712, 41.996065 ], "pop": 927, "state": "IA" }, { "_id": "52038", "city": "DUNDEE", "loc": [ -91.547697, 42.593979 ], "pop": 618, "state": "IA" }, { "_id": "52039", "city": "DURANGO", "loc": [ -90.860794, 42.552564 ], "pop": 874, "state": "IA" }, { "_id": "52040", "city": "DYERSVILLE", "loc": [ -91.11826499999999, 42.483332 ], "pop": 4709, "state": "IA" }, { "_id": "52041", "city": "EARLVILLE", "loc": [ -91.259658, 42.500101 ], "pop": 1566, "state": "IA" }, { "_id": "52042", "city": "EDGEWOOD", "loc": [ -91.39495100000001, 42.654098 ], "pop": 2095, "state": "IA" }, { "_id": "52043", "city": "ELKADER", "loc": [ -91.41430800000001, 42.849627 ], "pop": 2887, "state": "IA" }, { "_id": "52044", "city": "ELKPORT", "loc": [ -91.283934, 42.739892 ], "pop": 129, "state": "IA" }, { "_id": "52045", "city": "EPWORTH", "loc": [ -90.931331, 42.443928 ], "pop": 1931, "state": "IA" }, { "_id": "52046", "city": "FARLEY", "loc": [ -91.00826600000001, 42.445059 ], "pop": 2120, "state": "IA" }, { "_id": "52047", "city": "FARMERSBURG", "loc": [ -91.338984, 42.952205 ], "pop": 638, "state": "IA" }, { "_id": "52048", "city": "GARBER", "loc": [ -91.259275, 42.74528 ], "pop": 191, "state": "IA" }, { "_id": "52049", "city": "GARNAVILLO", "loc": [ -91.215609, 42.876188 ], "pop": 1408, "state": "IA" }, { "_id": "52050", "city": "GREELEY", "loc": [ -91.32331600000001, 42.59389 ], "pop": 679, "state": "IA" }, { "_id": "52052", "city": "GUTTENBERG", "loc": [ -91.119015, 42.759443 ], "pop": 4113, "state": "IA" }, { "_id": "52053", "city": "HOLY CROSS", "loc": [ -90.97298600000001, 42.580778 ], "pop": 1139, "state": "IA" }, { "_id": "52054", "city": "LA MOTTE", "loc": [ -90.617673, 42.304448 ], "pop": 1132, "state": "IA" }, { "_id": "52057", "city": "MANCHESTER", "loc": [ -91.449001, 42.483418 ], "pop": 7823, "state": "IA" }, { "_id": "52060", "city": "MAQUOKETA", "loc": [ -90.677075, 42.07782 ], "pop": 8374, "state": "IA" }, { "_id": "52064", "city": "MILES", "loc": [ -90.336716, 42.100587 ], "pop": 1083, "state": "IA" }, { "_id": "52065", "city": "NEW VIENNA", "loc": [ -91.09763700000001, 42.567829 ], "pop": 835, "state": "IA" }, { "_id": "52066", "city": "NORTH BUENA VIST", "loc": [ -90.958772, 42.671103 ], "pop": 404, "state": "IA" }, { "_id": "52068", "city": "PEOSTA", "loc": [ -90.809372, 42.443535 ], "pop": 1565, "state": "IA" }, { "_id": "52069", "city": "PRESTON", "loc": [ -90.395382, 42.053854 ], "pop": 1376, "state": "IA" }, { "_id": "52070", "city": "SABULA", "loc": [ -90.19553000000001, 42.073668 ], "pop": 1174, "state": "IA" }, { "_id": "52071", "city": "SAINT DONATUS", "loc": [ -90.484514, 42.33119 ], "pop": 757, "state": "IA" }, { "_id": "52072", "city": "SAINT OLAF", "loc": [ -91.41754899999999, 42.948179 ], "pop": 466, "state": "IA" }, { "_id": "52073", "city": "SHERRILL", "loc": [ -90.811486, 42.617078 ], "pop": 1381, "state": "IA" }, { "_id": "52074", "city": "SPRAGUEVILLE", "loc": [ -90.473044, 42.072742 ], "pop": 492, "state": "IA" }, { "_id": "52075", "city": "SPRINGBROOK", "loc": [ -90.48463700000001, 42.167401 ], "pop": 497, "state": "IA" }, { "_id": "52076", "city": "STRAWBERRY POINT", "loc": [ -91.540926, 42.683225 ], "pop": 1825, "state": "IA" }, { "_id": "52077", "city": "VOLGA", "loc": [ -91.542891, 42.790389 ], "pop": 562, "state": "IA" }, { "_id": "52078", "city": "WORTHINGTON", "loc": [ -91.106919, 42.393001 ], "pop": 797, "state": "IA" }, { "_id": "52079", "city": "ZWINGLE", "loc": [ -90.750666, 42.277486 ], "pop": 1320, "state": "IA" }, { "_id": "52101", "city": "DECORAH", "loc": [ -91.793947, 43.322711 ], "pop": 13593, "state": "IA" }, { "_id": "52131", "city": "BURR OAK", "loc": [ -91.89207399999999, 43.463912 ], "pop": 484, "state": "IA" }, { "_id": "52132", "city": "CALMAR", "loc": [ -91.91257899999999, 43.197402 ], "pop": 2218, "state": "IA" }, { "_id": "52133", "city": "CASTALIA", "loc": [ -91.662904, 43.161179 ], "pop": 1103, "state": "IA" }, { "_id": "52134", "city": "CHESTER", "loc": [ -92.41552799999999, 43.473021 ], "pop": 571, "state": "IA" }, { "_id": "52135", "city": "CLERMONT", "loc": [ -91.65518400000001, 43.01298 ], "pop": 817, "state": "IA" }, { "_id": "52136", "city": "CRESCO", "loc": [ -92.12595399999999, 43.363007 ], "pop": 5785, "state": "IA" }, { "_id": "52140", "city": "DORCHESTER", "loc": [ -91.50765, 43.442136 ], "pop": 757, "state": "IA" }, { "_id": "52141", "city": "ELGIN", "loc": [ -91.645375, 42.954845 ], "pop": 963, "state": "IA" }, { "_id": "52142", "city": "FAYETTE", "loc": [ -91.81388699999999, 42.84941 ], "pop": 1939, "state": "IA" }, { "_id": "52144", "city": "FORT ATKINSON", "loc": [ -91.91336, 43.133932 ], "pop": 1095, "state": "IA" }, { "_id": "52146", "city": "HARPERS FERRY", "loc": [ -91.218822, 43.16977 ], "pop": 915, "state": "IA" }, { "_id": "52147", "city": "HAWKEYE", "loc": [ -91.957764, 42.948702 ], "pop": 1205, "state": "IA" }, { "_id": "52150", "city": "JACKSON JUNCTION", "loc": [ -92.01844699999999, 43.121369 ], "pop": 369, "state": "IA" }, { "_id": "52151", "city": "LANSING", "loc": [ -91.265979, 43.366126 ], "pop": 1717, "state": "IA" }, { "_id": "52154", "city": "LAWLER", "loc": [ -92.143974, 43.093247 ], "pop": 1450, "state": "IA" }, { "_id": "52155", "city": "LIME SPRINGS", "loc": [ -92.273324, 43.45563 ], "pop": 672, "state": "IA" }, { "_id": "52156", "city": "LUANA", "loc": [ -91.458275, 43.049281 ], "pop": 388, "state": "IA" }, { "_id": "52157", "city": "MC GREGOR", "loc": [ -91.18872399999999, 43.023719 ], "pop": 1344, "state": "IA" }, { "_id": "52158", "city": "MARQUETTE", "loc": [ -91.19214100000001, 43.050457 ], "pop": 276, "state": "IA" }, { "_id": "52159", "city": "MONONA", "loc": [ -91.45867699999999, 43.073485 ], "pop": 4670, "state": "IA" }, { "_id": "52160", "city": "NEW ALBIN", "loc": [ -91.294166, 43.489877 ], "pop": 749, "state": "IA" }, { "_id": "52161", "city": "OSSIAN", "loc": [ -91.773431, 43.137858 ], "pop": 1349, "state": "IA" }, { "_id": "52162", "city": "POSTVILLE", "loc": [ -91.547809, 43.003619 ], "pop": 885, "state": "IA" }, { "_id": "52164", "city": "RANDALIA", "loc": [ -91.88462800000001, 42.862551 ], "pop": 159, "state": "IA" }, { "_id": "52165", "city": "RIDGEWAY", "loc": [ -92.00341299999999, 43.297853 ], "pop": 636, "state": "IA" }, { "_id": "52166", "city": "SAINT LUCAS", "loc": [ -91.91156100000001, 43.047703 ], "pop": 638, "state": "IA" }, { "_id": "52169", "city": "WADENA", "loc": [ -91.663865, 42.854956 ], "pop": 551, "state": "IA" }, { "_id": "52170", "city": "WATERVILLE", "loc": [ -91.26304500000001, 43.263608 ], "pop": 1204, "state": "IA" }, { "_id": "52171", "city": "WAUCOMA", "loc": [ -92.03022, 43.043329 ], "pop": 727, "state": "IA" }, { "_id": "52172", "city": "WAUKON", "loc": [ -91.479994, 43.263951 ], "pop": 6134, "state": "IA" }, { "_id": "52175", "city": "ELDORADO", "loc": [ -91.803602, 42.973232 ], "pop": 3353, "state": "IA" }, { "_id": "52201", "city": "AINSWORTH", "loc": [ -91.547173, 41.320226 ], "pop": 1265, "state": "IA" }, { "_id": "52202", "city": "ALBURNETT", "loc": [ -91.639245, 42.158322 ], "pop": 1038, "state": "IA" }, { "_id": "52203", "city": "AMANA", "loc": [ -91.88545000000001, 41.831284 ], "pop": 450, "state": "IA" }, { "_id": "52205", "city": "ANAMOSA", "loc": [ -91.285115, 42.107763 ], "pop": 7264, "state": "IA" }, { "_id": "52206", "city": "ATKINS", "loc": [ -91.87596600000001, 41.988103 ], "pop": 1347, "state": "IA" }, { "_id": "52207", "city": "BALDWIN", "loc": [ -90.819968, 42.073188 ], "pop": 362, "state": "IA" }, { "_id": "52208", "city": "BELLE PLAINE", "loc": [ -92.257381, 41.899159 ], "pop": 3562, "state": "IA" }, { "_id": "52209", "city": "BLAIRSTOWN", "loc": [ -92.08286099999999, 41.906338 ], "pop": 672, "state": "IA" }, { "_id": "52210", "city": "BRANDON", "loc": [ -92.005892, 42.330912 ], "pop": 717, "state": "IA" }, { "_id": "52211", "city": "BROOKLYN", "loc": [ -92.428462, 41.732147 ], "pop": 2196, "state": "IA" }, { "_id": "52212", "city": "CENTER JUNCTION", "loc": [ -91.067013, 42.092585 ], "pop": 647, "state": "IA" }, { "_id": "52213", "city": "CENTER POINT", "loc": [ -91.775764, 42.189844 ], "pop": 2462, "state": "IA" }, { "_id": "52214", "city": "CENTRAL CITY", "loc": [ -91.491399, 42.198234 ], "pop": 3478, "state": "IA" }, { "_id": "52215", "city": "CHELSEA", "loc": [ -92.407815, 41.913132 ], "pop": 906, "state": "IA" }, { "_id": "52216", "city": "CLARENCE", "loc": [ -91.060457, 41.88958 ], "pop": 1219, "state": "IA" }, { "_id": "52217", "city": "CLUTIER", "loc": [ -92.376347, 42.078892 ], "pop": 497, "state": "IA" }, { "_id": "52218", "city": "COGGON", "loc": [ -91.541285, 42.279158 ], "pop": 1053, "state": "IA" }, { "_id": "52220", "city": "CONROY", "loc": [ -91.96947900000001, 41.74255 ], "pop": 21, "state": "IA" }, { "_id": "52222", "city": "DEEP RIVER", "loc": [ -92.364513, 41.571713 ], "pop": 596, "state": "IA" }, { "_id": "52223", "city": "DELHI", "loc": [ -91.27022599999999, 42.427082 ], "pop": 1530, "state": "IA" }, { "_id": "52224", "city": "DYSART", "loc": [ -92.318731, 42.169017 ], "pop": 1513, "state": "IA" }, { "_id": "52225", "city": "ELBERON", "loc": [ -92.331447, 42.008769 ], "pop": 337, "state": "IA" }, { "_id": "52226", "city": "ELWOOD", "loc": [ -90.724609, 41.99083 ], "pop": 413, "state": "IA" }, { "_id": "52227", "city": "ELY", "loc": [ -91.573767, 41.894275 ], "pop": 1091, "state": "IA" }, { "_id": "52228", "city": "FAIRFAX", "loc": [ -91.780102, 41.915304 ], "pop": 1392, "state": "IA" }, { "_id": "52229", "city": "GARRISON", "loc": [ -92.16440900000001, 42.158827 ], "pop": 872, "state": "IA" }, { "_id": "52231", "city": "HARPER", "loc": [ -92.038758, 41.37283 ], "pop": 324, "state": "IA" }, { "_id": "52232", "city": "HARTWICK", "loc": [ -92.35384500000001, 41.808019 ], "pop": 376, "state": "IA" }, { "_id": "52233", "city": "HIAWATHA", "loc": [ -91.67695999999999, 42.042455 ], "pop": 4966, "state": "IA" }, { "_id": "52236", "city": "HOMESTEAD", "loc": [ -91.879471, 41.733858 ], "pop": 557, "state": "IA" }, { "_id": "52237", "city": "HOPKINTON", "loc": [ -91.24605099999999, 42.342164 ], "pop": 1547, "state": "IA" }, { "_id": "52240", "city": "IOWA CITY", "loc": [ -91.51119199999999, 41.654899 ], "pop": 25049, "state": "IA" }, { "_id": "52241", "city": "CORALVILLE", "loc": [ -91.590608, 41.693666 ], "pop": 12646, "state": "IA" }, { "_id": "52245", "city": "IOWA CITY", "loc": [ -91.51506999999999, 41.664916 ], "pop": 21140, "state": "IA" }, { "_id": "52246", "city": "IOWA CITY", "loc": [ -91.56688200000001, 41.643813 ], "pop": 22869, "state": "IA" }, { "_id": "52247", "city": "KALONA", "loc": [ -91.70567800000001, 41.482299 ], "pop": 3058, "state": "IA" }, { "_id": "52248", "city": "KEOTA", "loc": [ -91.96406399999999, 41.350429 ], "pop": 1439, "state": "IA" }, { "_id": "52249", "city": "KEYSTONE", "loc": [ -92.217944, 42.015636 ], "pop": 1110, "state": "IA" }, { "_id": "52250", "city": "KINROSS", "loc": [ -92.001007, 41.460998 ], "pop": 374, "state": "IA" }, { "_id": "52251", "city": "LADORA", "loc": [ -92.187281, 41.756353 ], "pop": 304, "state": "IA" }, { "_id": "52253", "city": "LISBON", "loc": [ -91.38613700000001, 41.921169 ], "pop": 1581, "state": "IA" }, { "_id": "52254", "city": "LOST NATION", "loc": [ -90.82653999999999, 41.974503 ], "pop": 768, "state": "IA" }, { "_id": "52255", "city": "LOWDEN", "loc": [ -90.93822, 41.859393 ], "pop": 1488, "state": "IA" }, { "_id": "52257", "city": "LUZERNE", "loc": [ -92.179334, 41.90614 ], "pop": 110, "state": "IA" }, { "_id": "52301", "city": "MARENGO", "loc": [ -92.07204900000001, 41.786286 ], "pop": 4856, "state": "IA" }, { "_id": "52302", "city": "MARION", "loc": [ -91.59413499999999, 42.041095 ], "pop": 23227, "state": "IA" }, { "_id": "52305", "city": "MARTELLE", "loc": [ -91.321703, 42.003512 ], "pop": 716, "state": "IA" }, { "_id": "52306", "city": "MECHANICSVILLE", "loc": [ -91.27637, 41.903906 ], "pop": 1516, "state": "IA" }, { "_id": "52307", "city": "MIDDLE AMANA", "loc": [ -91.882696, 41.799737 ], "pop": 902, "state": "IA" }, { "_id": "52308", "city": "MILLERSBURG", "loc": [ -92.160843, 41.575099 ], "pop": 223, "state": "IA" }, { "_id": "52309", "city": "MONMOUTH", "loc": [ -90.878551, 42.07716 ], "pop": 304, "state": "IA" }, { "_id": "52310", "city": "MONTICELLO", "loc": [ -91.19890100000001, 42.232591 ], "pop": 5549, "state": "IA" }, { "_id": "52313", "city": "MOUNT AUBURN", "loc": [ -92.159485, 42.255395 ], "pop": 784, "state": "IA" }, { "_id": "52314", "city": "MOUNT VERNON", "loc": [ -91.42737099999999, 41.928741 ], "pop": 4874, "state": "IA" }, { "_id": "52315", "city": "NEWHALL", "loc": [ -91.97788799999999, 41.992685 ], "pop": 1216, "state": "IA" }, { "_id": "52316", "city": "NORTH ENGLISH", "loc": [ -92.089291, 41.524128 ], "pop": 1287, "state": "IA" }, { "_id": "52317", "city": "NORTH LIBERTY", "loc": [ -91.60612, 41.744318 ], "pop": 3241, "state": "IA" }, { "_id": "52318", "city": "NORWAY", "loc": [ -91.89197, 41.899176 ], "pop": 1317, "state": "IA" }, { "_id": "52320", "city": "OLIN", "loc": [ -91.14092599999999, 41.995423 ], "pop": 1427, "state": "IA" }, { "_id": "52321", "city": "ONSLOW", "loc": [ -90.97305, 42.123509 ], "pop": 322, "state": "IA" }, { "_id": "52322", "city": "OXFORD", "loc": [ -91.772418, 41.650687 ], "pop": 3141, "state": "IA" }, { "_id": "52323", "city": "OXFORD JUNCTION", "loc": [ -90.954341, 41.985382 ], "pop": 909, "state": "IA" }, { "_id": "52324", "city": "PALO", "loc": [ -91.78770299999999, 42.036496 ], "pop": 1528, "state": "IA" }, { "_id": "52325", "city": "PARNELL", "loc": [ -92.00515900000001, 41.570161 ], "pop": 499, "state": "IA" }, { "_id": "52326", "city": "QUASQUETON", "loc": [ -91.76795, 42.395551 ], "pop": 834, "state": "IA" }, { "_id": "52327", "city": "RIVERSIDE", "loc": [ -91.57414, 41.475792 ], "pop": 1514, "state": "IA" }, { "_id": "52328", "city": "ROBINS", "loc": [ -91.664841, 42.073092 ], "pop": 877, "state": "IA" }, { "_id": "52329", "city": "ROWLEY", "loc": [ -91.787543, 42.343449 ], "pop": 1393, "state": "IA" }, { "_id": "52330", "city": "RYAN", "loc": [ -91.484838, 42.343643 ], "pop": 1201, "state": "IA" }, { "_id": "52331", "city": "SCOTCH GROVE", "loc": [ -91.083682, 42.164441 ], "pop": 447, "state": "IA" }, { "_id": "52332", "city": "SHELLSBURG", "loc": [ -91.874568, 42.084829 ], "pop": 1463, "state": "IA" }, { "_id": "52333", "city": "SOLON", "loc": [ -91.50860900000001, 41.809913 ], "pop": 2894, "state": "IA" }, { "_id": "52334", "city": "SOUTH AMANA", "loc": [ -91.92626, 41.757609 ], "pop": 45, "state": "IA" }, { "_id": "52335", "city": "SOUTH ENGLISH", "loc": [ -92.102557, 41.46214 ], "pop": 502, "state": "IA" }, { "_id": "52336", "city": "SPRINGVILLE", "loc": [ -91.43935, 42.060741 ], "pop": 2011, "state": "IA" }, { "_id": "52337", "city": "STANWOOD", "loc": [ -91.166202, 41.896318 ], "pop": 970, "state": "IA" }, { "_id": "52338", "city": "SWISHER", "loc": [ -91.67391600000001, 41.826843 ], "pop": 3101, "state": "IA" }, { "_id": "52339", "city": "TAMA", "loc": [ -92.580049, 41.961642 ], "pop": 3242, "state": "IA" }, { "_id": "52341", "city": "TODDVILLE", "loc": [ -91.728981, 42.103932 ], "pop": 1337, "state": "IA" }, { "_id": "52342", "city": "TOLEDO", "loc": [ -92.56620599999999, 42.007696 ], "pop": 3891, "state": "IA" }, { "_id": "52343", "city": "TORONTO", "loc": [ -90.79388899999999, 41.89709 ], "pop": 660, "state": "IA" }, { "_id": "52346", "city": "VAN HORNE", "loc": [ -92.104617, 42.019394 ], "pop": 1215, "state": "IA" }, { "_id": "52347", "city": "VICTOR", "loc": [ -92.284172, 41.729004 ], "pop": 1092, "state": "IA" }, { "_id": "52348", "city": "VINING", "loc": [ -92.369687, 41.979881 ], "pop": 244, "state": "IA" }, { "_id": "52349", "city": "VINTON", "loc": [ -91.989154, 42.174284 ], "pop": 8276, "state": "IA" }, { "_id": "52352", "city": "WALKER", "loc": [ -91.73017900000001, 42.272024 ], "pop": 1706, "state": "IA" }, { "_id": "52353", "city": "WASHINGTON", "loc": [ -91.698671, 41.301453 ], "pop": 9381, "state": "IA" }, { "_id": "52354", "city": "WATKINS", "loc": [ -91.99646799999999, 41.903993 ], "pop": 485, "state": "IA" }, { "_id": "52355", "city": "WEBSTER", "loc": [ -92.176525, 41.436408 ], "pop": 154, "state": "IA" }, { "_id": "52356", "city": "WELLMAN", "loc": [ -91.83995299999999, 41.470032 ], "pop": 1904, "state": "IA" }, { "_id": "52357", "city": "WEST AMANA", "loc": [ -91.933566, 41.802996 ], "pop": 90, "state": "IA" }, { "_id": "52358", "city": "WEST BRANCH", "loc": [ -91.3141, 41.672622 ], "pop": 3533, "state": "IA" }, { "_id": "52359", "city": "WEST CHESTER", "loc": [ -91.861858, 41.361019 ], "pop": 500, "state": "IA" }, { "_id": "52361", "city": "WILLIAMSBURG", "loc": [ -92.024011, 41.639308 ], "pop": 4304, "state": "IA" }, { "_id": "52362", "city": "WYOMING", "loc": [ -90.994024, 42.060352 ], "pop": 884, "state": "IA" }, { "_id": "52401", "city": "CEDAR RAPIDS", "loc": [ -91.655382, 41.9743 ], "pop": 1924, "state": "IA" }, { "_id": "52402", "city": "CEDAR RAPIDS", "loc": [ -91.661222, 42.018778 ], "pop": 37211, "state": "IA" }, { "_id": "52403", "city": "CEDAR RAPIDS", "loc": [ -91.625919, 41.984312 ], "pop": 25064, "state": "IA" }, { "_id": "52404", "city": "CEDAR RAPIDS", "loc": [ -91.685286, 41.952108 ], "pop": 28262, "state": "IA" }, { "_id": "52405", "city": "CEDAR RAPIDS", "loc": [ -91.709816, 41.980422 ], "pop": 23685, "state": "IA" }, { "_id": "52501", "city": "HIGHLAND CENTER", "loc": [ -92.413428, 41.015099 ], "pop": 29462, "state": "IA" }, { "_id": "52530", "city": "AGENCY", "loc": [ -92.316231, 40.995693 ], "pop": 1233, "state": "IA" }, { "_id": "52531", "city": "ALBIA", "loc": [ -92.794619, 41.028718 ], "pop": 6397, "state": "IA" }, { "_id": "52533", "city": "BATAVIA", "loc": [ -92.14305899999999, 40.99048 ], "pop": 1164, "state": "IA" }, { "_id": "52534", "city": "BEACON", "loc": [ -92.72843, 41.287133 ], "pop": 1559, "state": "IA" }, { "_id": "52535", "city": "BIRMINGHAM", "loc": [ -91.95343099999999, 40.862605 ], "pop": 1023, "state": "IA" }, { "_id": "52536", "city": "BLAKESBURG", "loc": [ -92.594037, 40.984763 ], "pop": 1337, "state": "IA" }, { "_id": "52537", "city": "BLOOMFIELD", "loc": [ -92.398712, 40.732368 ], "pop": 4788, "state": "IA" }, { "_id": "52538", "city": "WEST GROVE", "loc": [ -92.54984899999999, 40.719646 ], "pop": 419, "state": "IA" }, { "_id": "52540", "city": "BRIGHTON", "loc": [ -91.828351, 41.154331 ], "pop": 1686, "state": "IA" }, { "_id": "52542", "city": "CANTRIL", "loc": [ -92.046521, 40.654598 ], "pop": 490, "state": "IA" }, { "_id": "52543", "city": "CEDAR", "loc": [ -92.509021, 41.212054 ], "pop": 242, "state": "IA" }, { "_id": "52544", "city": "CENTERVILLE", "loc": [ -92.872826, 40.73259 ], "pop": 7725, "state": "IA" }, { "_id": "52548", "city": "CHILLICOTHE", "loc": [ -92.53276200000001, 41.077041 ], "pop": 249, "state": "IA" }, { "_id": "52549", "city": "CINCINNATI", "loc": [ -92.921898, 40.634384 ], "pop": 793, "state": "IA" }, { "_id": "52550", "city": "DELTA", "loc": [ -92.33591199999999, 41.316682 ], "pop": 614, "state": "IA" }, { "_id": "52551", "city": "DOUDS", "loc": [ -92.045222, 40.803931 ], "pop": 15, "state": "IA" }, { "_id": "52552", "city": "DRAKESVILLE", "loc": [ -92.505109, 40.825332 ], "pop": 1576, "state": "IA" }, { "_id": "52553", "city": "EDDYVILLE", "loc": [ -92.622052, 41.153266 ], "pop": 1474, "state": "IA" }, { "_id": "52554", "city": "ELDON", "loc": [ -92.226754, 40.92613 ], "pop": 1603, "state": "IA" }, { "_id": "52555", "city": "EXLINE", "loc": [ -92.826999, 40.641399 ], "pop": 432, "state": "IA" }, { "_id": "52556", "city": "FAIRFIELD", "loc": [ -91.957611, 41.003943 ], "pop": 12147, "state": "IA" }, { "_id": "52560", "city": "FLORIS", "loc": [ -92.324715, 40.859071 ], "pop": 1087, "state": "IA" }, { "_id": "52561", "city": "FREMONT", "loc": [ -92.43618600000001, 41.211739 ], "pop": 835, "state": "IA" }, { "_id": "52563", "city": "HEDRICK", "loc": [ -92.309725, 41.182578 ], "pop": 1304, "state": "IA" }, { "_id": "52565", "city": "KEOSAUQUA", "loc": [ -91.970434, 40.74235 ], "pop": 2022, "state": "IA" }, { "_id": "52566", "city": "KIRKVILLE", "loc": [ -92.46989499999999, 41.117927 ], "pop": 670, "state": "IA" }, { "_id": "52567", "city": "LIBERTYVILLE", "loc": [ -92.024951, 40.949863 ], "pop": 658, "state": "IA" }, { "_id": "52569", "city": "MELROSE", "loc": [ -93.01451400000001, 40.966466 ], "pop": 664, "state": "IA" }, { "_id": "52570", "city": "MILTON", "loc": [ -92.143793, 40.672143 ], "pop": 851, "state": "IA" }, { "_id": "52571", "city": "MORAVIA", "loc": [ -92.853358, 40.882522 ], "pop": 1143, "state": "IA" }, { "_id": "52572", "city": "MOULTON", "loc": [ -92.683252, 40.686617 ], "pop": 1073, "state": "IA" }, { "_id": "52573", "city": "MOUNT STERLING", "loc": [ -91.902663, 40.645765 ], "pop": 249, "state": "IA" }, { "_id": "52574", "city": "MYSTIC", "loc": [ -92.928437, 40.788268 ], "pop": 1002, "state": "IA" }, { "_id": "52575", "city": "NUMA", "loc": [ -93.013233, 40.674147 ], "pop": 563, "state": "IA" }, { "_id": "52576", "city": "OLLIE", "loc": [ -92.135366, 41.200134 ], "pop": 631, "state": "IA" }, { "_id": "52577", "city": "OSKALOOSA", "loc": [ -92.64393, 41.294205 ], "pop": 14376, "state": "IA" }, { "_id": "52580", "city": "PACKWOOD", "loc": [ -92.066389, 41.122781 ], "pop": 862, "state": "IA" }, { "_id": "52581", "city": "PLANO", "loc": [ -93.038554, 40.775109 ], "pop": 414, "state": "IA" }, { "_id": "52583", "city": "PROMISE CITY", "loc": [ -93.152654, 40.758477 ], "pop": 370, "state": "IA" }, { "_id": "52584", "city": "PULASKI", "loc": [ -92.25797300000001, 40.694081 ], "pop": 442, "state": "IA" }, { "_id": "52585", "city": "RICHLAND", "loc": [ -91.973921, 41.193905 ], "pop": 1082, "state": "IA" }, { "_id": "52586", "city": "ROSE HILL", "loc": [ -92.471958, 41.330918 ], "pop": 795, "state": "IA" }, { "_id": "52588", "city": "SELMA", "loc": [ -92.11067199999999, 40.851936 ], "pop": 659, "state": "IA" }, { "_id": "52590", "city": "SEYMOUR", "loc": [ -93.136826, 40.672416 ], "pop": 1192, "state": "IA" }, { "_id": "52591", "city": "SIGOURNEY", "loc": [ -92.201888, 41.330071 ], "pop": 3402, "state": "IA" }, { "_id": "52593", "city": "UDELL", "loc": [ -92.718512, 40.783573 ], "pop": 195, "state": "IA" }, { "_id": "52594", "city": "UNIONVILLE", "loc": [ -92.69345199999999, 40.841637 ], "pop": 403, "state": "IA" }, { "_id": "52601", "city": "BURLINGTON", "loc": [ -91.116972, 40.808665 ], "pop": 30564, "state": "IA" }, { "_id": "52619", "city": "ARGYLE", "loc": [ -91.563896, 40.565658 ], "pop": 1899, "state": "IA" }, { "_id": "52620", "city": "BONAPARTE", "loc": [ -91.789734, 40.714825 ], "pop": 903, "state": "IA" }, { "_id": "52621", "city": "CRAWFORDSVILLE", "loc": [ -91.541444, 41.209257 ], "pop": 603, "state": "IA" }, { "_id": "52623", "city": "DANVILLE", "loc": [ -91.314027, 40.854046 ], "pop": 1694, "state": "IA" }, { "_id": "52624", "city": "DENMARK", "loc": [ -91.326593, 40.748693 ], "pop": 869, "state": "IA" }, { "_id": "52625", "city": "DONNELLSON", "loc": [ -91.574547, 40.661171 ], "pop": 1823, "state": "IA" }, { "_id": "52626", "city": "FARMINGTON", "loc": [ -91.744719, 40.639715 ], "pop": 961, "state": "IA" }, { "_id": "52627", "city": "FORT MADISON", "loc": [ -91.33982899999999, 40.633008 ], "pop": 14472, "state": "IA" }, { "_id": "52630", "city": "HILLSBORO", "loc": [ -91.711938, 40.837211 ], "pop": 213, "state": "IA" }, { "_id": "52631", "city": "HOUGHTON", "loc": [ -91.63930000000001, 40.775001 ], "pop": 448, "state": "IA" }, { "_id": "52632", "city": "KEOKUK", "loc": [ -91.398234, 40.409434 ], "pop": 13995, "state": "IA" }, { "_id": "52635", "city": "LOCKRIDGE", "loc": [ -91.76454, 41.011867 ], "pop": 693, "state": "IA" }, { "_id": "52637", "city": "MEDIAPOLIS", "loc": [ -91.132142, 41.005932 ], "pop": 3044, "state": "IA" }, { "_id": "52638", "city": "MIDDLETOWN", "loc": [ -91.26310599999999, 40.82963 ], "pop": 440, "state": "IA" }, { "_id": "52639", "city": "MONTROSE", "loc": [ -91.423985, 40.513915 ], "pop": 1857, "state": "IA" }, { "_id": "52640", "city": "MORNING SUN", "loc": [ -91.258146, 41.098424 ], "pop": 1165, "state": "IA" }, { "_id": "52641", "city": "MOUNT PLEASANT", "loc": [ -91.56142699999999, 40.964573 ], "pop": 11113, "state": "IA" }, { "_id": "52644", "city": "MOUNT UNION", "loc": [ -91.413831, 41.03735 ], "pop": 446, "state": "IA" }, { "_id": "52645", "city": "NEW LONDON", "loc": [ -91.39858700000001, 40.916055 ], "pop": 3627, "state": "IA" }, { "_id": "52646", "city": "OAKVILLE", "loc": [ -91.04392199999999, 41.100326 ], "pop": 709, "state": "IA" }, { "_id": "52647", "city": "OLDS", "loc": [ -91.548413, 41.12065 ], "pop": 711, "state": "IA" }, { "_id": "52649", "city": "SALEM", "loc": [ -91.63362100000001, 40.856804 ], "pop": 786, "state": "IA" }, { "_id": "52650", "city": "SPERRY", "loc": [ -91.185047, 40.941939 ], "pop": 700, "state": "IA" }, { "_id": "52651", "city": "STOCKPORT", "loc": [ -91.80349699999999, 40.858933 ], "pop": 503, "state": "IA" }, { "_id": "52653", "city": "WAPELLO", "loc": [ -91.171921, 41.206982 ], "pop": 4379, "state": "IA" }, { "_id": "52654", "city": "WAYLAND", "loc": [ -91.658946, 41.144919 ], "pop": 1626, "state": "IA" }, { "_id": "52655", "city": "WEST BURLINGTON", "loc": [ -91.179894, 40.832081 ], "pop": 5420, "state": "IA" }, { "_id": "52656", "city": "WEST POINT", "loc": [ -91.439733, 40.714986 ], "pop": 2144, "state": "IA" }, { "_id": "52657", "city": "SAINT PAUL", "loc": [ -91.53754000000001, 40.769306 ], "pop": 623, "state": "IA" }, { "_id": "52658", "city": "WEVER", "loc": [ -91.226767, 40.706652 ], "pop": 546, "state": "IA" }, { "_id": "52659", "city": "WINFIELD", "loc": [ -91.43789200000001, 41.125693 ], "pop": 1349, "state": "IA" }, { "_id": "52660", "city": "YARMOUTH", "loc": [ -91.317548, 41.029687 ], "pop": 339, "state": "IA" }, { "_id": "52701", "city": "ANDOVER", "loc": [ -90.238584, 41.992552 ], "pop": 856, "state": "IA" }, { "_id": "52720", "city": "ATALISSA", "loc": [ -91.174764, 41.561443 ], "pop": 721, "state": "IA" }, { "_id": "52721", "city": "BENNETT", "loc": [ -90.965613, 41.735267 ], "pop": 824, "state": "IA" }, { "_id": "52722", "city": "BETTENDORF", "loc": [ -90.494201, 41.550865 ], "pop": 29785, "state": "IA" }, { "_id": "52726", "city": "BLUE GRASS", "loc": [ -90.738015, 41.511168 ], "pop": 7536, "state": "IA" }, { "_id": "52727", "city": "BRYANT", "loc": [ -90.338767, 41.962932 ], "pop": 252, "state": "IA" }, { "_id": "52729", "city": "CALAMUS", "loc": [ -90.741553, 41.811122 ], "pop": 790, "state": "IA" }, { "_id": "52730", "city": "CAMANCHE", "loc": [ -90.270855, 41.788636 ], "pop": 5013, "state": "IA" }, { "_id": "52731", "city": "CHARLOTTE", "loc": [ -90.47822600000001, 41.977859 ], "pop": 756, "state": "IA" }, { "_id": "52732", "city": "CLINTON", "loc": [ -90.207784, 41.851684 ], "pop": 30723, "state": "IA" }, { "_id": "52738", "city": "COLUMBUS JUNCTIO", "loc": [ -91.37419800000001, 41.279911 ], "pop": 3945, "state": "IA" }, { "_id": "52739", "city": "CONESVILLE", "loc": [ -91.346498, 41.380454 ], "pop": 497, "state": "IA" }, { "_id": "52742", "city": "DE WITT", "loc": [ -90.523735, 41.826726 ], "pop": 6560, "state": "IA" }, { "_id": "52745", "city": "BIG ROCK", "loc": [ -90.77833200000001, 41.735013 ], "pop": 596, "state": "IA" }, { "_id": "52746", "city": "DONAHUE", "loc": [ -90.682908, 41.709316 ], "pop": 685, "state": "IA" }, { "_id": "52747", "city": "DURANT", "loc": [ -90.909988, 41.614513 ], "pop": 2416, "state": "IA" }, { "_id": "52748", "city": "ELDRIDGE", "loc": [ -90.563379, 41.663532 ], "pop": 6947, "state": "IA" }, { "_id": "52750", "city": "GOOSE LAKE", "loc": [ -90.381855, 41.979898 ], "pop": 542, "state": "IA" }, { "_id": "52751", "city": "GRAND MOUND", "loc": [ -90.63287800000001, 41.823559 ], "pop": 1149, "state": "IA" }, { "_id": "52753", "city": "LE CLAIRE", "loc": [ -90.36278799999999, 41.608234 ], "pop": 4176, "state": "IA" }, { "_id": "52754", "city": "LETTS", "loc": [ -91.20399, 41.293027 ], "pop": 1394, "state": "IA" }, { "_id": "52755", "city": "LONE TREE", "loc": [ -91.436262, 41.498804 ], "pop": 2038, "state": "IA" }, { "_id": "52756", "city": "LONG GROVE", "loc": [ -90.55343999999999, 41.721327 ], "pop": 2326, "state": "IA" }, { "_id": "52760", "city": "MOSCOW", "loc": [ -91.085888, 41.564558 ], "pop": 752, "state": "IA" }, { "_id": "52761", "city": "MUSCATINE", "loc": [ -91.050928, 41.430378 ], "pop": 29779, "state": "IA" }, { "_id": "52765", "city": "NEW LIBERTY", "loc": [ -90.859922, 41.713229 ], "pop": 615, "state": "IA" }, { "_id": "52766", "city": "NICHOLS", "loc": [ -91.293116, 41.476634 ], "pop": 797, "state": "IA" }, { "_id": "52768", "city": "PRINCETON", "loc": [ -90.370574, 41.685753 ], "pop": 1529, "state": "IA" }, { "_id": "52769", "city": "STOCKTON", "loc": [ -90.84733199999999, 41.558327 ], "pop": 777, "state": "IA" }, { "_id": "52772", "city": "TIPTON", "loc": [ -91.136163, 41.756276 ], "pop": 5751, "state": "IA" }, { "_id": "52773", "city": "WALCOTT", "loc": [ -90.72560300000001, 41.645309 ], "pop": 705, "state": "IA" }, { "_id": "52774", "city": "WELTON", "loc": [ -90.606785, 41.907472 ], "pop": 539, "state": "IA" }, { "_id": "52776", "city": "WEST LIBERTY", "loc": [ -91.266847, 41.570055 ], "pop": 3552, "state": "IA" }, { "_id": "52777", "city": "WHEATLAND", "loc": [ -90.84015100000001, 41.82585 ], "pop": 1092, "state": "IA" }, { "_id": "52778", "city": "WILTON", "loc": [ -91.009958, 41.585801 ], "pop": 3032, "state": "IA" }, { "_id": "52802", "city": "DAVENPORT", "loc": [ -90.61409, 41.516358 ], "pop": 12547, "state": "IA" }, { "_id": "52803", "city": "DAVENPORT", "loc": [ -90.561348, 41.538509 ], "pop": 25514, "state": "IA" }, { "_id": "52804", "city": "DAVENPORT", "loc": [ -90.61147, 41.538603 ], "pop": 23671, "state": "IA" }, { "_id": "52806", "city": "DAVENPORT", "loc": [ -90.60384500000001, 41.573271 ], "pop": 25480, "state": "IA" }, { "_id": "52807", "city": "DAVENPORT", "loc": [ -90.540262, 41.561822 ], "pop": 8531, "state": "IA" }, { "_id": "53001", "city": "ADELL", "loc": [ -88.02539400000001, 43.615071 ], "pop": 1221, "state": "WI" }, { "_id": "53002", "city": "ALLENTON", "loc": [ -88.35390099999999, 43.468065 ], "pop": 1449, "state": "WI" }, { "_id": "53004", "city": "BELGIUM", "loc": [ -87.850908, 43.499465 ], "pop": 2333, "state": "WI" }, { "_id": "53005", "city": "BROOKFIELD", "loc": [ -88.098, 43.062173 ], "pop": 19793, "state": "WI" }, { "_id": "53006", "city": "SOUTH BYRON", "loc": [ -88.50972899999999, 43.610934 ], "pop": 1842, "state": "WI" }, { "_id": "53007", "city": "BUTLER", "loc": [ -88.071043, 43.105405 ], "pop": 2079, "state": "WI" }, { "_id": "53010", "city": "CAMPBELLSPORT", "loc": [ -88.27285500000001, 43.604183 ], "pop": 6057, "state": "WI" }, { "_id": "53011", "city": "CASCADE", "loc": [ -88.094658, 43.659106 ], "pop": 632, "state": "WI" }, { "_id": "53012", "city": "CEDARBURG", "loc": [ -88.00286699999999, 43.303413 ], "pop": 17552, "state": "WI" }, { "_id": "53013", "city": "CEDAR GROVE", "loc": [ -87.840108, 43.575076 ], "pop": 2656, "state": "WI" }, { "_id": "53014", "city": "CHILTON", "loc": [ -88.182689, 44.024242 ], "pop": 7495, "state": "WI" }, { "_id": "53015", "city": "CLEVELAND", "loc": [ -87.767314, 43.921732 ], "pop": 2490, "state": "WI" }, { "_id": "53017", "city": "COLGATE", "loc": [ -88.24061399999999, 43.199767 ], "pop": 4155, "state": "WI" }, { "_id": "53018", "city": "DELAFIELD", "loc": [ -88.397248, 43.050019 ], "pop": 4837, "state": "WI" }, { "_id": "53019", "city": "EDEN", "loc": [ -88.326607, 43.695878 ], "pop": 1874, "state": "WI" }, { "_id": "53020", "city": "ELKHART LAKE", "loc": [ -87.97667, 43.843553 ], "pop": 4665, "state": "WI" }, { "_id": "53021", "city": "WAUBEKA", "loc": [ -87.982243, 43.484319 ], "pop": 3942, "state": "WI" }, { "_id": "53022", "city": "GERMANTOWN", "loc": [ -88.116508, 43.218871 ], "pop": 13053, "state": "WI" }, { "_id": "53023", "city": "GLENBEULAH", "loc": [ -88.10488599999999, 43.766611 ], "pop": 1965, "state": "WI" }, { "_id": "53024", "city": "GRAFTON", "loc": [ -87.95208700000001, 43.323146 ], "pop": 12526, "state": "WI" }, { "_id": "53027", "city": "HARTFORD", "loc": [ -88.370727, 43.315749 ], "pop": 15889, "state": "WI" }, { "_id": "53029", "city": "HARTLAND", "loc": [ -88.344572, 43.117153 ], "pop": 14530, "state": "WI" }, { "_id": "53032", "city": "HORICON", "loc": [ -88.631049, 43.446859 ], "pop": 4724, "state": "WI" }, { "_id": "53033", "city": "HUBERTUS", "loc": [ -88.23114700000001, 43.234269 ], "pop": 4823, "state": "WI" }, { "_id": "53035", "city": "IRON RIDGE", "loc": [ -88.544072, 43.393415 ], "pop": 2504, "state": "WI" }, { "_id": "53036", "city": "IXONIA", "loc": [ -88.580567, 43.170667 ], "pop": 2454, "state": "WI" }, { "_id": "53037", "city": "JACKSON", "loc": [ -88.162592, 43.325243 ], "pop": 3999, "state": "WI" }, { "_id": "53038", "city": "JOHNSON CREEK", "loc": [ -88.783602, 43.075051 ], "pop": 2469, "state": "WI" }, { "_id": "53039", "city": "JUNEAU", "loc": [ -88.684517, 43.379199 ], "pop": 5857, "state": "WI" }, { "_id": "53040", "city": "KEWASKUM", "loc": [ -88.19253, 43.521446 ], "pop": 6394, "state": "WI" }, { "_id": "53042", "city": "KIEL", "loc": [ -87.995644, 43.934105 ], "pop": 5345, "state": "WI" }, { "_id": "53044", "city": "KOHLER", "loc": [ -87.78673000000001, 43.738096 ], "pop": 1900, "state": "WI" }, { "_id": "53045", "city": "BROOKFIELD", "loc": [ -88.146946, 43.066791 ], "pop": 15412, "state": "WI" }, { "_id": "53046", "city": "LANNON", "loc": [ -88.16386300000001, 43.149651 ], "pop": 924, "state": "WI" }, { "_id": "53048", "city": "KNOWLES", "loc": [ -88.441309, 43.588489 ], "pop": 2101, "state": "WI" }, { "_id": "53049", "city": "MALONE", "loc": [ -88.307289, 43.869002 ], "pop": 3453, "state": "WI" }, { "_id": "53050", "city": "MAYVILLE", "loc": [ -88.545084, 43.504496 ], "pop": 6394, "state": "WI" }, { "_id": "53051", "city": "MENOMONEE FALLS", "loc": [ -88.112774, 43.160174 ], "pop": 26840, "state": "WI" }, { "_id": "53057", "city": "MOUNT CALVARY", "loc": [ -88.23992200000001, 43.814211 ], "pop": 1403, "state": "WI" }, { "_id": "53058", "city": "NASHOTAH", "loc": [ -88.408913, 43.111791 ], "pop": 2996, "state": "WI" }, { "_id": "53059", "city": "NEOSHO", "loc": [ -88.520482, 43.297841 ], "pop": 2051, "state": "WI" }, { "_id": "53061", "city": "NEW HOLSTEIN", "loc": [ -88.091083, 43.944639 ], "pop": 5536, "state": "WI" }, { "_id": "53063", "city": "NEWTON", "loc": [ -87.784764, 43.983621 ], "pop": 1394, "state": "WI" }, { "_id": "53065", "city": "OAKFIELD", "loc": [ -88.55691899999999, 43.686371 ], "pop": 2377, "state": "WI" }, { "_id": "53066", "city": "OCONOMOWOC", "loc": [ -88.48622899999999, 43.109497 ], "pop": 24795, "state": "WI" }, { "_id": "53069", "city": "OKAUCHEE", "loc": [ -88.432287, 43.113011 ], "pop": 848, "state": "WI" }, { "_id": "53070", "city": "OOSTBURG", "loc": [ -87.796955, 43.622939 ], "pop": 3916, "state": "WI" }, { "_id": "53072", "city": "PEWAUKEE", "loc": [ -88.27292199999999, 43.078777 ], "pop": 13337, "state": "WI" }, { "_id": "53073", "city": "PLYMOUTH", "loc": [ -87.977906, 43.75258 ], "pop": 11811, "state": "WI" }, { "_id": "53074", "city": "PORT WASHINGTON", "loc": [ -87.879659, 43.395463 ], "pop": 10829, "state": "WI" }, { "_id": "53075", "city": "RANDOM LAKE", "loc": [ -87.98155300000001, 43.567206 ], "pop": 3299, "state": "WI" }, { "_id": "53076", "city": "RICHFIELD", "loc": [ -88.215467, 43.273925 ], "pop": 2810, "state": "WI" }, { "_id": "53078", "city": "RUBICON", "loc": [ -88.452793, 43.312144 ], "pop": 1023, "state": "WI" }, { "_id": "53079", "city": "SAINT CLOUD", "loc": [ -88.184482, 43.807431 ], "pop": 1524, "state": "WI" }, { "_id": "53080", "city": "SAUKVILLE", "loc": [ -87.956765, 43.391265 ], "pop": 5460, "state": "WI" }, { "_id": "53081", "city": "SHEBOYGAN", "loc": [ -87.724667, 43.740981 ], "pop": 42246, "state": "WI" }, { "_id": "53083", "city": "HOWARDS GROVE", "loc": [ -87.748552, 43.788609 ], "pop": 17004, "state": "WI" }, { "_id": "53085", "city": "SHEBOYGAN FALLS", "loc": [ -87.82422800000001, 43.726598 ], "pop": 9457, "state": "WI" }, { "_id": "53086", "city": "SLINGER", "loc": [ -88.282377, 43.332211 ], "pop": 4671, "state": "WI" }, { "_id": "53089", "city": "SUSSEX", "loc": [ -88.227064, 43.144059 ], "pop": 11913, "state": "WI" }, { "_id": "53091", "city": "THERESA", "loc": [ -88.447766, 43.504477 ], "pop": 1555, "state": "WI" }, { "_id": "53092", "city": "MEQUON", "loc": [ -87.959357, 43.225145 ], "pop": 22294, "state": "WI" }, { "_id": "53093", "city": "WALDO", "loc": [ -87.97217000000001, 43.657087 ], "pop": 2471, "state": "WI" }, { "_id": "53094", "city": "WATERTOWN", "loc": [ -88.71850999999999, 43.192971 ], "pop": 25240, "state": "WI" }, { "_id": "53095", "city": "WEST BEND", "loc": [ -88.184549, 43.422444 ], "pop": 38743, "state": "WI" }, { "_id": "53103", "city": "BIG BEND", "loc": [ -88.212182, 42.888463 ], "pop": 4274, "state": "WI" }, { "_id": "53104", "city": "BRISTOL", "loc": [ -88.04777900000001, 42.532525 ], "pop": 4514, "state": "WI" }, { "_id": "53105", "city": "BURLINGTON", "loc": [ -88.274886, 42.666034 ], "pop": 23978, "state": "WI" }, { "_id": "53108", "city": "CALEDONIA", "loc": [ -87.92278, 42.829473 ], "pop": 2453, "state": "WI" }, { "_id": "53110", "city": "CUDAHY", "loc": [ -87.861983, 42.948976 ], "pop": 18659, "state": "WI" }, { "_id": "53114", "city": "DARIEN", "loc": [ -88.714217, 42.6435 ], "pop": 3954, "state": "WI" }, { "_id": "53115", "city": "DELAVAN", "loc": [ -88.627717, 42.622715 ], "pop": 9967, "state": "WI" }, { "_id": "53118", "city": "DOUSMAN", "loc": [ -88.456754, 42.98506 ], "pop": 5699, "state": "WI" }, { "_id": "53119", "city": "EAGLE", "loc": [ -88.46742, 42.880942 ], "pop": 3129, "state": "WI" }, { "_id": "53120", "city": "EAST TROY", "loc": [ -88.409215, 42.803531 ], "pop": 8712, "state": "WI" }, { "_id": "53121", "city": "ELKHORN", "loc": [ -88.546209, 42.700928 ], "pop": 11680, "state": "WI" }, { "_id": "53122", "city": "ELM GROVE", "loc": [ -88.085374, 43.047943 ], "pop": 6394, "state": "WI" }, { "_id": "53125", "city": "FONTANA", "loc": [ -88.56842399999999, 42.542928 ], "pop": 1697, "state": "WI" }, { "_id": "53126", "city": "FRANKSVILLE", "loc": [ -87.987273, 42.785892 ], "pop": 6685, "state": "WI" }, { "_id": "53128", "city": "GENOA CITY", "loc": [ -88.348456, 42.532276 ], "pop": 5027, "state": "WI" }, { "_id": "53129", "city": "GREENDALE", "loc": [ -87.994277, 42.937293 ], "pop": 15109, "state": "WI" }, { "_id": "53130", "city": "HALES CORNERS", "loc": [ -88.05029999999999, 42.941034 ], "pop": 7643, "state": "WI" }, { "_id": "53132", "city": "FRANKLIN", "loc": [ -88.008582, 42.901728 ], "pop": 21840, "state": "WI" }, { "_id": "53137", "city": "HELENVILLE", "loc": [ -88.726887, 43.01007 ], "pop": 1440, "state": "WI" }, { "_id": "53139", "city": "KANSASVILLE", "loc": [ -88.118037, 42.701246 ], "pop": 2911, "state": "WI" }, { "_id": "53140", "city": "KENOSHA", "loc": [ -87.829945, 42.605228 ], "pop": 28062, "state": "WI" }, { "_id": "53142", "city": "KENOSHA", "loc": [ -87.870526, 42.556038 ], "pop": 28495, "state": "WI" }, { "_id": "53143", "city": "KENOSHA", "loc": [ -87.83005300000001, 42.561726 ], "pop": 26551, "state": "WI" }, { "_id": "53144", "city": "KENOSHA", "loc": [ -87.876171, 42.605788 ], "pop": 18824, "state": "WI" }, { "_id": "53146", "city": "NEW BERLIN", "loc": [ -88.15527400000001, 42.97397 ], "pop": 8149, "state": "WI" }, { "_id": "53147", "city": "LAKE GENEVA", "loc": [ -88.45537899999999, 42.588111 ], "pop": 11183, "state": "WI" }, { "_id": "53149", "city": "MUKWONAGO", "loc": [ -88.345116, 42.882054 ], "pop": 12846, "state": "WI" }, { "_id": "53150", "city": "MUSKEGO", "loc": [ -88.12141099999999, 42.904651 ], "pop": 17098, "state": "WI" }, { "_id": "53151", "city": "NEW BERLIN", "loc": [ -88.09464199999999, 42.982151 ], "pop": 25731, "state": "WI" }, { "_id": "53153", "city": "NORTH PRAIRIE", "loc": [ -88.394988, 42.938501 ], "pop": 1732, "state": "WI" }, { "_id": "53154", "city": "OAK CREEK", "loc": [ -87.90266099999999, 42.88916 ], "pop": 19513, "state": "WI" }, { "_id": "53156", "city": "PALMYRA", "loc": [ -88.590255, 42.879263 ], "pop": 2748, "state": "WI" }, { "_id": "53168", "city": "SALEM", "loc": [ -88.128731, 42.570922 ], "pop": 8746, "state": "WI" }, { "_id": "53172", "city": "SOUTH MILWAUKEE", "loc": [ -87.864626, 42.910468 ], "pop": 20958, "state": "WI" }, { "_id": "53177", "city": "STURTEVANT", "loc": [ -87.903082, 42.69673 ], "pop": 4774, "state": "WI" }, { "_id": "53178", "city": "SULLIVAN", "loc": [ -88.602569, 42.99825 ], "pop": 3381, "state": "WI" }, { "_id": "53179", "city": "TREVOR", "loc": [ -88.13869, 42.520112 ], "pop": 3527, "state": "WI" }, { "_id": "53181", "city": "TWIN LAKES", "loc": [ -88.257318, 42.523173 ], "pop": 6103, "state": "WI" }, { "_id": "53182", "city": "UNION GROVE", "loc": [ -88.03900400000001, 42.689643 ], "pop": 6233, "state": "WI" }, { "_id": "53183", "city": "WALES", "loc": [ -88.378742, 43.008787 ], "pop": 3171, "state": "WI" }, { "_id": "53184", "city": "WALWORTH", "loc": [ -88.602738, 42.535005 ], "pop": 2831, "state": "WI" }, { "_id": "53185", "city": "WIND LAKE", "loc": [ -88.19335, 42.796882 ], "pop": 11362, "state": "WI" }, { "_id": "53186", "city": "WAUKESHA", "loc": [ -88.219559, 42.999304 ], "pop": 46445, "state": "WI" }, { "_id": "53188", "city": "WAUKESHA", "loc": [ -88.27048000000001, 43.012848 ], "pop": 33794, "state": "WI" }, { "_id": "53190", "city": "WHITEWATER", "loc": [ -88.742864, 42.827174 ], "pop": 16723, "state": "WI" }, { "_id": "53191", "city": "WILLIAMS BAY", "loc": [ -88.54308899999999, 42.576678 ], "pop": 2208, "state": "WI" }, { "_id": "53202", "city": "MILWAUKEE", "loc": [ -87.896792, 43.050601 ], "pop": 20178, "state": "WI" }, { "_id": "53203", "city": "MILWAUKEE", "loc": [ -87.915375, 43.040299 ], "pop": 456, "state": "WI" }, { "_id": "53204", "city": "MILWAUKEE", "loc": [ -87.931685, 43.015778 ], "pop": 41978, "state": "WI" }, { "_id": "53205", "city": "MILWAUKEE", "loc": [ -87.935332, 43.052841 ], "pop": 14708, "state": "WI" }, { "_id": "53206", "city": "MILWAUKEE", "loc": [ -87.934714, 43.075324 ], "pop": 42009, "state": "WI" }, { "_id": "53207", "city": "BAY VIEW", "loc": [ -87.894598, 42.981405 ], "pop": 49199, "state": "WI" }, { "_id": "53208", "city": "MILWAUKEE", "loc": [ -87.96245399999999, 43.048775 ], "pop": 42238, "state": "WI" }, { "_id": "53209", "city": "MILWAUKEE", "loc": [ -87.947834, 43.118765 ], "pop": 51008, "state": "WI" }, { "_id": "53210", "city": "MILWAUKEE", "loc": [ -87.97146600000001, 43.068545 ], "pop": 32111, "state": "WI" }, { "_id": "53211", "city": "SHOREWOOD", "loc": [ -87.88507799999999, 43.080517 ], "pop": 37036, "state": "WI" }, { "_id": "53212", "city": "MILWAUKEE", "loc": [ -87.90841500000001, 43.071195 ], "pop": 37237, "state": "WI" }, { "_id": "53213", "city": "WAUWATOSA", "loc": [ -88.00075699999999, 43.051316 ], "pop": 27606, "state": "WI" }, { "_id": "53214", "city": "WEST ALLIS", "loc": [ -88.010757, 43.019113 ], "pop": 38491, "state": "WI" }, { "_id": "53215", "city": "WEST MILWAUKEE", "loc": [ -87.94174, 43.000411 ], "pop": 48228, "state": "WI" }, { "_id": "53216", "city": "MILWAUKEE", "loc": [ -87.97421799999999, 43.085868 ], "pop": 34881, "state": "WI" }, { "_id": "53217", "city": "MILWAUKEE", "loc": [ -87.90726100000001, 43.14086 ], "pop": 30065, "state": "WI" }, { "_id": "53218", "city": "MILWAUKEE", "loc": [ -87.993161, 43.11218 ], "pop": 40443, "state": "WI" }, { "_id": "53219", "city": "MILWAUKEE", "loc": [ -87.99436799999999, 42.995909 ], "pop": 35271, "state": "WI" }, { "_id": "53220", "city": "GREENFIELD", "loc": [ -87.992209, 42.968186 ], "pop": 25819, "state": "WI" }, { "_id": "53221", "city": "MILWAUKEE", "loc": [ -87.944734, 42.954864 ], "pop": 35767, "state": "WI" }, { "_id": "53222", "city": "MILWAUKEE", "loc": [ -88.02687, 43.08283 ], "pop": 25406, "state": "WI" }, { "_id": "53223", "city": "MILWAUKEE", "loc": [ -87.989818, 43.162374 ], "pop": 30272, "state": "WI" }, { "_id": "53224", "city": "MILWAUKEE", "loc": [ -88.03274399999999, 43.159415 ], "pop": 18182, "state": "WI" }, { "_id": "53225", "city": "MILWAUKEE", "loc": [ -88.03464, 43.115416 ], "pop": 25395, "state": "WI" }, { "_id": "53226", "city": "WAUWATOSA", "loc": [ -88.041386, 43.050006 ], "pop": 19216, "state": "WI" }, { "_id": "53227", "city": "MILWAUKEE", "loc": [ -88.036384, 42.994919 ], "pop": 23150, "state": "WI" }, { "_id": "53228", "city": "GREENFIELD", "loc": [ -88.034638, 42.970251 ], "pop": 12634, "state": "WI" }, { "_id": "53233", "city": "MILWAUKEE", "loc": [ -87.93566, 43.040738 ], "pop": 16569, "state": "WI" }, { "_id": "53402", "city": "RACINE", "loc": [ -87.795985, 42.772596 ], "pop": 31959, "state": "WI" }, { "_id": "53403", "city": "RACINE", "loc": [ -87.80137499999999, 42.706015 ], "pop": 26329, "state": "WI" }, { "_id": "53404", "city": "RACINE", "loc": [ -87.8053, 42.743348 ], "pop": 17129, "state": "WI" }, { "_id": "53405", "city": "RACINE", "loc": [ -87.823329, 42.716112 ], "pop": 26652, "state": "WI" }, { "_id": "53406", "city": "RACINE", "loc": [ -87.855104, 42.724162 ], "pop": 20925, "state": "WI" }, { "_id": "53502", "city": "ALBANY", "loc": [ -89.435695, 42.715535 ], "pop": 1886, "state": "WI" }, { "_id": "53503", "city": "ARENA", "loc": [ -89.938614, 43.152111 ], "pop": 1554, "state": "WI" }, { "_id": "53504", "city": "ARGYLE", "loc": [ -89.85983400000001, 42.695532 ], "pop": 2048, "state": "WI" }, { "_id": "53505", "city": "AVALON", "loc": [ -88.837142, 42.65979 ], "pop": 373, "state": "WI" }, { "_id": "53506", "city": "AVOCA", "loc": [ -90.288859, 43.157137 ], "pop": 1072, "state": "WI" }, { "_id": "53507", "city": "BARNEVELD", "loc": [ -89.904229, 43.015797 ], "pop": 1301, "state": "WI" }, { "_id": "53508", "city": "BELLEVILLE", "loc": [ -89.53773, 42.866906 ], "pop": 3500, "state": "WI" }, { "_id": "53510", "city": "BELMONT", "loc": [ -90.335881, 42.730784 ], "pop": 1477, "state": "WI" }, { "_id": "53511", "city": "SHOPIERE", "loc": [ -89.039897, 42.522871 ], "pop": 46738, "state": "WI" }, { "_id": "53515", "city": "BLACK EARTH", "loc": [ -89.738974, 43.132213 ], "pop": 1824, "state": "WI" }, { "_id": "53516", "city": "BLANCHARDVILLE", "loc": [ -89.85551100000001, 42.806186 ], "pop": 1810, "state": "WI" }, { "_id": "53517", "city": "BLUE MOUNDS", "loc": [ -89.83445500000001, 43.004964 ], "pop": 639, "state": "WI" }, { "_id": "53518", "city": "BLUE RIVER", "loc": [ -90.587312, 43.236567 ], "pop": 1520, "state": "WI" }, { "_id": "53520", "city": "BRODHEAD", "loc": [ -89.371409, 42.611074 ], "pop": 5825, "state": "WI" }, { "_id": "53521", "city": "BROOKLYN", "loc": [ -89.38181400000001, 42.842327 ], "pop": 2329, "state": "WI" }, { "_id": "53522", "city": "BROWNTOWN", "loc": [ -89.78158000000001, 42.557872 ], "pop": 1146, "state": "WI" }, { "_id": "53523", "city": "CAMBRIDGE", "loc": [ -89.02090099999999, 42.99176 ], "pop": 4102, "state": "WI" }, { "_id": "53525", "city": "CLINTON", "loc": [ -88.87047699999999, 42.553481 ], "pop": 3627, "state": "WI" }, { "_id": "53526", "city": "COBB", "loc": [ -90.332408, 42.966009 ], "pop": 542, "state": "WI" }, { "_id": "53527", "city": "COTTAGE GROVE", "loc": [ -89.20169199999999, 43.078405 ], "pop": 4349, "state": "WI" }, { "_id": "53528", "city": "CROSS PLAINS", "loc": [ -89.63966499999999, 43.113214 ], "pop": 3622, "state": "WI" }, { "_id": "53529", "city": "DANE", "loc": [ -89.51174, 43.242414 ], "pop": 1572, "state": "WI" }, { "_id": "53530", "city": "DARLINGTON", "loc": [ -90.110648, 42.687816 ], "pop": 4224, "state": "WI" }, { "_id": "53531", "city": "DEERFIELD", "loc": [ -89.08619899999999, 43.057106 ], "pop": 2668, "state": "WI" }, { "_id": "53532", "city": "DE FOREST", "loc": [ -89.329652, 43.235748 ], "pop": 9321, "state": "WI" }, { "_id": "53533", "city": "DODGEVILLE", "loc": [ -90.140433, 42.969779 ], "pop": 5663, "state": "WI" }, { "_id": "53534", "city": "EDGERTON", "loc": [ -89.06415699999999, 42.838605 ], "pop": 9749, "state": "WI" }, { "_id": "53536", "city": "EVANSVILLE", "loc": [ -89.287712, 42.773216 ], "pop": 5986, "state": "WI" }, { "_id": "53538", "city": "FORT ATKINSON", "loc": [ -88.846689, 42.922902 ], "pop": 15624, "state": "WI" }, { "_id": "53541", "city": "GRATIOT", "loc": [ -90.024344, 42.575852 ], "pop": 1129, "state": "WI" }, { "_id": "53543", "city": "HIGHLAND", "loc": [ -90.36501, 43.052368 ], "pop": 1586, "state": "WI" }, { "_id": "53544", "city": "HOLLANDALE", "loc": [ -89.91297299999999, 42.877321 ], "pop": 591, "state": "WI" }, { "_id": "53545", "city": "JANESVILLE", "loc": [ -89.033124, 42.691542 ], "pop": 40339, "state": "WI" }, { "_id": "53546", "city": "JANESVILLE", "loc": [ -89.002534, 42.668254 ], "pop": 22324, "state": "WI" }, { "_id": "53549", "city": "JEFFERSON", "loc": [ -88.807765, 43.000557 ], "pop": 8540, "state": "WI" }, { "_id": "53550", "city": "JUDA", "loc": [ -89.502608, 42.567874 ], "pop": 1177, "state": "WI" }, { "_id": "53551", "city": "LAKE MILLS", "loc": [ -88.913335, 43.081576 ], "pop": 6196, "state": "WI" }, { "_id": "53553", "city": "LINDEN", "loc": [ -90.279726, 42.918419 ], "pop": 522, "state": "WI" }, { "_id": "53554", "city": "LIVINGSTON", "loc": [ -90.441986, 42.904432 ], "pop": 964, "state": "WI" }, { "_id": "53555", "city": "LODI", "loc": [ -89.555421, 43.326964 ], "pop": 5765, "state": "WI" }, { "_id": "53556", "city": "LONE ROCK", "loc": [ -90.235229, 43.220773 ], "pop": 2367, "state": "WI" }, { "_id": "53557", "city": "LOWELL", "loc": [ -88.787263, 43.342018 ], "pop": 231, "state": "WI" }, { "_id": "53558", "city": "MC FARLAND", "loc": [ -89.29477300000001, 43.010651 ], "pop": 8040, "state": "WI" }, { "_id": "53559", "city": "MARSHALL", "loc": [ -89.07533100000001, 43.163639 ], "pop": 4175, "state": "WI" }, { "_id": "53560", "city": "MAZOMANIE", "loc": [ -89.763616, 43.184746 ], "pop": 3176, "state": "WI" }, { "_id": "53561", "city": "MERRIMAC", "loc": [ -89.632254, 43.385527 ], "pop": 1366, "state": "WI" }, { "_id": "53562", "city": "MIDDLETON", "loc": [ -89.50725799999999, 43.105196 ], "pop": 16575, "state": "WI" }, { "_id": "53563", "city": "MILTON", "loc": [ -88.953087, 42.779087 ], "pop": 7309, "state": "WI" }, { "_id": "53565", "city": "MINERAL POINT", "loc": [ -90.164556, 42.854696 ], "pop": 4566, "state": "WI" }, { "_id": "53566", "city": "MONROE", "loc": [ -89.6403, 42.599076 ], "pop": 13720, "state": "WI" }, { "_id": "53569", "city": "MONTFORT", "loc": [ -90.44473000000001, 42.975745 ], "pop": 1129, "state": "WI" }, { "_id": "53570", "city": "MONTICELLO", "loc": [ -89.608069, 42.741482 ], "pop": 2315, "state": "WI" }, { "_id": "53572", "city": "MOUNT HOREB", "loc": [ -89.74144800000001, 43.002022 ], "pop": 7193, "state": "WI" }, { "_id": "53573", "city": "MUSCODA", "loc": [ -90.456998, 43.207375 ], "pop": 3774, "state": "WI" }, { "_id": "53574", "city": "NEW GLARUS", "loc": [ -89.643666, 42.814344 ], "pop": 2540, "state": "WI" }, { "_id": "53575", "city": "OREGON", "loc": [ -89.387002, 42.929485 ], "pop": 9719, "state": "WI" }, { "_id": "53576", "city": "ORFORDVILLE", "loc": [ -89.253292, 42.627766 ], "pop": 1923, "state": "WI" }, { "_id": "53577", "city": "PLAIN", "loc": [ -90.055825, 43.292693 ], "pop": 1292, "state": "WI" }, { "_id": "53578", "city": "PRAIRIE DU SAC", "loc": [ -89.745233, 43.295631 ], "pop": 4060, "state": "WI" }, { "_id": "53579", "city": "REESEVILLE", "loc": [ -88.857117, 43.301278 ], "pop": 2027, "state": "WI" }, { "_id": "53580", "city": "REWEY", "loc": [ -90.38036099999999, 42.859393 ], "pop": 601, "state": "WI" }, { "_id": "53581", "city": "GILLINGHAM", "loc": [ -90.391378, 43.362714 ], "pop": 10306, "state": "WI" }, { "_id": "53582", "city": "RIDGEWAY", "loc": [ -89.988946, 43.007654 ], "pop": 924, "state": "WI" }, { "_id": "53583", "city": "SAUK CITY", "loc": [ -89.741777, 43.268558 ], "pop": 5186, "state": "WI" }, { "_id": "53585", "city": "SHARON", "loc": [ -88.726522, 42.519367 ], "pop": 2297, "state": "WI" }, { "_id": "53586", "city": "SHULLSBURG", "loc": [ -90.226619, 42.57856 ], "pop": 2124, "state": "WI" }, { "_id": "53587", "city": "SOUTH WAYNE", "loc": [ -89.88884400000001, 42.582199 ], "pop": 1444, "state": "WI" }, { "_id": "53588", "city": "SPRING GREEN", "loc": [ -90.06760800000001, 43.18835 ], "pop": 3439, "state": "WI" }, { "_id": "53589", "city": "STOUGHTON", "loc": [ -89.223989, 42.929007 ], "pop": 15469, "state": "WI" }, { "_id": "53590", "city": "SUN PRAIRIE", "loc": [ -89.222662, 43.186901 ], "pop": 18776, "state": "WI" }, { "_id": "53593", "city": "VERONA", "loc": [ -89.55224699999999, 42.999913 ], "pop": 9932, "state": "WI" }, { "_id": "53594", "city": "WATERLOO", "loc": [ -88.983835, 43.183171 ], "pop": 4106, "state": "WI" }, { "_id": "53597", "city": "WAUNAKEE", "loc": [ -89.45317, 43.181828 ], "pop": 9691, "state": "WI" }, { "_id": "53598", "city": "WINDSOR", "loc": [ -89.341469, 43.214121 ], "pop": 1825, "state": "WI" }, { "_id": "53703", "city": "MADISON", "loc": [ -89.38306799999999, 43.077535 ], "pop": 25721, "state": "WI" }, { "_id": "53704", "city": "MADISON", "loc": [ -89.352295, 43.120526 ], "pop": 40639, "state": "WI" }, { "_id": "53705", "city": "MADISON", "loc": [ -89.452823, 43.072999 ], "pop": 29114, "state": "WI" }, { "_id": "53706", "city": "MADISON", "loc": [ -89.409362, 43.076929 ], "pop": 3587, "state": "WI" }, { "_id": "53711", "city": "MADISON", "loc": [ -89.452558, 43.035644 ], "pop": 42198, "state": "WI" }, { "_id": "53713", "city": "FITCHBURG", "loc": [ -89.39000799999999, 43.037381 ], "pop": 18082, "state": "WI" }, { "_id": "53714", "city": "MADISON", "loc": [ -89.311758, 43.097735 ], "pop": 17978, "state": "WI" }, { "_id": "53715", "city": "MADISON", "loc": [ -89.40004500000001, 43.065287 ], "pop": 13545, "state": "WI" }, { "_id": "53716", "city": "MONONA", "loc": [ -89.315921, 43.067413 ], "pop": 20296, "state": "WI" }, { "_id": "53717", "city": "MADISON", "loc": [ -89.50798399999999, 43.073587 ], "pop": 7675, "state": "WI" }, { "_id": "53718", "city": "MADISON", "loc": [ -89.40733899999999, 43.152143 ], "pop": 63, "state": "WI" }, { "_id": "53719", "city": "MADISON", "loc": [ -89.499324, 43.03207 ], "pop": 9669, "state": "WI" }, { "_id": "53801", "city": "BAGLEY", "loc": [ -91.068502, 42.920734 ], "pop": 879, "state": "WI" }, { "_id": "53803", "city": "BENTON", "loc": [ -90.33804499999999, 42.534901 ], "pop": 153, "state": "WI" }, { "_id": "53804", "city": "BLOOMINGTON", "loc": [ -90.90990499999999, 42.872598 ], "pop": 1485, "state": "WI" }, { "_id": "53805", "city": "BOSCOBEL", "loc": [ -90.706101, 43.139327 ], "pop": 4755, "state": "WI" }, { "_id": "53806", "city": "CASSVILLE", "loc": [ -90.960751, 42.728791 ], "pop": 2134, "state": "WI" }, { "_id": "53807", "city": "CUBA CITY", "loc": [ -90.474907, 42.599073 ], "pop": 6856, "state": "WI" }, { "_id": "53809", "city": "FENNIMORE", "loc": [ -90.65500900000001, 42.988558 ], "pop": 3668, "state": "WI" }, { "_id": "53810", "city": "GLEN HAVEN", "loc": [ -91.000451, 42.820372 ], "pop": 614, "state": "WI" }, { "_id": "53811", "city": "HAZEL GREEN", "loc": [ -90.511782, 42.535913 ], "pop": 3228, "state": "WI" }, { "_id": "53813", "city": "LANCASTER", "loc": [ -90.71090599999999, 42.844469 ], "pop": 6537, "state": "WI" }, { "_id": "53816", "city": "MOUNT HOPE", "loc": [ -90.86648, 42.968862 ], "pop": 737, "state": "WI" }, { "_id": "53818", "city": "PLATTEVILLE", "loc": [ -90.485406, 42.73932 ], "pop": 13067, "state": "WI" }, { "_id": "53820", "city": "POTOSI", "loc": [ -90.700153, 42.6884 ], "pop": 2845, "state": "WI" }, { "_id": "53821", "city": "PRAIRIE DU CHIEN", "loc": [ -91.119305, 43.042649 ], "pop": 7950, "state": "WI" }, { "_id": "53825", "city": "STITZER", "loc": [ -90.607924, 42.92142 ], "pop": 469, "state": "WI" }, { "_id": "53826", "city": "WAUZEKA", "loc": [ -90.923885, 43.114264 ], "pop": 1455, "state": "WI" }, { "_id": "53827", "city": "WOODMAN", "loc": [ -90.824539, 43.057697 ], "pop": 412, "state": "WI" }, { "_id": "53901", "city": "PORTAGE", "loc": [ -89.47139, 43.550145 ], "pop": 11280, "state": "WI" }, { "_id": "53910", "city": "ADAMS", "loc": [ -89.82186900000001, 43.896688 ], "pop": 2342, "state": "WI" }, { "_id": "53911", "city": "ARLINGTON", "loc": [ -89.36308200000001, 43.326868 ], "pop": 1329, "state": "WI" }, { "_id": "53913", "city": "BARABOO", "loc": [ -89.746168, 43.482531 ], "pop": 14955, "state": "WI" }, { "_id": "53916", "city": "BEAVER DAM", "loc": [ -88.840681, 43.461574 ], "pop": 19539, "state": "WI" }, { "_id": "53919", "city": "BRANDON", "loc": [ -88.784099, 43.72579 ], "pop": 2953, "state": "WI" }, { "_id": "53920", "city": "BRIGGSVILLE", "loc": [ -89.580259, 43.675865 ], "pop": 951, "state": "WI" }, { "_id": "53922", "city": "BURNETT", "loc": [ -88.717606, 43.511609 ], "pop": 909, "state": "WI" }, { "_id": "53923", "city": "CAMBRIA", "loc": [ -89.11561399999999, 43.57239 ], "pop": 2566, "state": "WI" }, { "_id": "53924", "city": "CAZENOVIA", "loc": [ -90.279572, 43.498715 ], "pop": 717, "state": "WI" }, { "_id": "53925", "city": "COLUMBUS", "loc": [ -89.027089, 43.331494 ], "pop": 6847, "state": "WI" }, { "_id": "53926", "city": "DALTON", "loc": [ -89.191768, 43.67178 ], "pop": 685, "state": "WI" }, { "_id": "53929", "city": "ELROY", "loc": [ -90.28885699999999, 43.751616 ], "pop": 3270, "state": "WI" }, { "_id": "53930", "city": "ENDEAVOR", "loc": [ -89.461699, 43.696305 ], "pop": 773, "state": "WI" }, { "_id": "53932", "city": "FALL RIVER", "loc": [ -89.062513, 43.400838 ], "pop": 1996, "state": "WI" }, { "_id": "53933", "city": "FOX LAKE", "loc": [ -88.90408100000001, 43.581507 ], "pop": 3233, "state": "WI" }, { "_id": "53934", "city": "FRIENDSHIP", "loc": [ -89.814875, 43.989629 ], "pop": 4859, "state": "WI" }, { "_id": "53936", "city": "GRAND MARSH", "loc": [ -89.655663, 43.856789 ], "pop": 1907, "state": "WI" }, { "_id": "53937", "city": "HILLPOINT", "loc": [ -90.15879200000001, 43.395129 ], "pop": 980, "state": "WI" }, { "_id": "53939", "city": "KINGSTON", "loc": [ -89.131997, 43.69236 ], "pop": 346, "state": "WI" }, { "_id": "53941", "city": "LA VALLE", "loc": [ -90.127966, 43.569874 ], "pop": 2383, "state": "WI" }, { "_id": "53943", "city": "LOGANVILLE", "loc": [ -90.033688, 43.405046 ], "pop": 877, "state": "WI" }, { "_id": "53944", "city": "LYNDON STATION", "loc": [ -89.891543, 43.689875 ], "pop": 2010, "state": "WI" }, { "_id": "53946", "city": "MARKESAN", "loc": [ -89.00697099999999, 43.714015 ], "pop": 4015, "state": "WI" }, { "_id": "53947", "city": "MARQUETTE", "loc": [ -89.13965399999999, 43.745886 ], "pop": 183, "state": "WI" }, { "_id": "53948", "city": "MAUSTON", "loc": [ -90.06408500000001, 43.793383 ], "pop": 7325, "state": "WI" }, { "_id": "53949", "city": "MONTELLO", "loc": [ -89.35864100000001, 43.768984 ], "pop": 4392, "state": "WI" }, { "_id": "53950", "city": "NEW LISBON", "loc": [ -90.152407, 43.88775 ], "pop": 3320, "state": "WI" }, { "_id": "53951", "city": "NORTH FREEDOM", "loc": [ -89.849019, 43.410562 ], "pop": 1858, "state": "WI" }, { "_id": "53952", "city": "OXFORD", "loc": [ -89.563175, 43.779914 ], "pop": 1217, "state": "WI" }, { "_id": "53954", "city": "PARDEEVILLE", "loc": [ -89.326514, 43.533975 ], "pop": 6321, "state": "WI" }, { "_id": "53955", "city": "POYNETTE", "loc": [ -89.418857, 43.401342 ], "pop": 4264, "state": "WI" }, { "_id": "53956", "city": "RANDOLPH", "loc": [ -89.00299200000001, 43.539696 ], "pop": 3206, "state": "WI" }, { "_id": "53959", "city": "REEDSBURG", "loc": [ -89.995948, 43.531581 ], "pop": 9118, "state": "WI" }, { "_id": "53960", "city": "RIO", "loc": [ -89.23536199999999, 43.423053 ], "pop": 2766, "state": "WI" }, { "_id": "53961", "city": "ROCK SPRINGS", "loc": [ -89.921834, 43.468098 ], "pop": 735, "state": "WI" }, { "_id": "53963", "city": "WAUPUN", "loc": [ -88.737253, 43.632441 ], "pop": 11222, "state": "WI" }, { "_id": "53964", "city": "WESTFIELD", "loc": [ -89.502015, 43.896788 ], "pop": 3309, "state": "WI" }, { "_id": "53965", "city": "WISCONSIN DELLS", "loc": [ -89.76652, 43.650789 ], "pop": 7650, "state": "WI" }, { "_id": "53968", "city": "WONEWOC", "loc": [ -90.239357, 43.62848 ], "pop": 3180, "state": "WI" }, { "_id": "54001", "city": "DERONDA", "loc": [ -92.361527, 45.325238 ], "pop": 4929, "state": "WI" }, { "_id": "54002", "city": "BALDWIN", "loc": [ -92.365498, 44.9657 ], "pop": 4214, "state": "WI" }, { "_id": "54003", "city": "BELDENVILLE", "loc": [ -92.437202, 44.7721 ], "pop": 1442, "state": "WI" }, { "_id": "54004", "city": "CLAYTON", "loc": [ -92.13946199999999, 45.306297 ], "pop": 2414, "state": "WI" }, { "_id": "54005", "city": "CLEAR LAKE", "loc": [ -92.27488, 45.236481 ], "pop": 3254, "state": "WI" }, { "_id": "54006", "city": "CUSHING", "loc": [ -92.62413599999999, 45.560359 ], "pop": 2750, "state": "WI" }, { "_id": "54007", "city": "DEER PARK", "loc": [ -92.358464, 45.169046 ], "pop": 876, "state": "WI" }, { "_id": "54009", "city": "DRESSER", "loc": [ -92.56229999999999, 45.354585 ], "pop": 4019, "state": "WI" }, { "_id": "54011", "city": "ELLSWORTH", "loc": [ -92.48903799999999, 44.730191 ], "pop": 4293, "state": "WI" }, { "_id": "54012", "city": "EMERALD", "loc": [ -92.312786, 45.078578 ], "pop": 630, "state": "WI" }, { "_id": "54013", "city": "GLENWOOD CITY", "loc": [ -92.181588, 45.062339 ], "pop": 1835, "state": "WI" }, { "_id": "54014", "city": "HAGER CITY", "loc": [ -92.550146, 44.626969 ], "pop": 2075, "state": "WI" }, { "_id": "54015", "city": "HAMMOND", "loc": [ -92.447215, 44.967004 ], "pop": 1921, "state": "WI" }, { "_id": "54016", "city": "HUDSON", "loc": [ -92.727062, 44.984187 ], "pop": 16136, "state": "WI" }, { "_id": "54017", "city": "NEW RICHMOND", "loc": [ -92.551333, 45.159819 ], "pop": 14190, "state": "WI" }, { "_id": "54020", "city": "OSCEOLA", "loc": [ -92.697108, 45.321757 ], "pop": 2062, "state": "WI" }, { "_id": "54021", "city": "PRESCOTT", "loc": [ -92.753528, 44.747648 ], "pop": 4807, "state": "WI" }, { "_id": "54022", "city": "RIVER FALLS", "loc": [ -92.631275, 44.85501 ], "pop": 16037, "state": "WI" }, { "_id": "54023", "city": "ROBERTS", "loc": [ -92.55977300000001, 44.987356 ], "pop": 2063, "state": "WI" }, { "_id": "54024", "city": "SAINT CROIX FALL", "loc": [ -92.63837100000001, 45.413215 ], "pop": 1640, "state": "WI" }, { "_id": "54025", "city": "SOMERSET", "loc": [ -92.686466, 45.133064 ], "pop": 2937, "state": "WI" }, { "_id": "54026", "city": "STAR PRAIRIE", "loc": [ -92.55135300000001, 45.2013 ], "pop": 40, "state": "WI" }, { "_id": "54027", "city": "WILSON", "loc": [ -92.196538, 44.94658 ], "pop": 1415, "state": "WI" }, { "_id": "54028", "city": "WOODVILLE", "loc": [ -92.284803, 44.940806 ], "pop": 1326, "state": "WI" }, { "_id": "54082", "city": "SAINT JOSEPH", "loc": [ -92.760803, 45.070123 ], "pop": 987, "state": "WI" }, { "_id": "54101", "city": "ABRAMS", "loc": [ -88.057101, 44.78693 ], "pop": 1712, "state": "WI" }, { "_id": "54102", "city": "AMBERG", "loc": [ -87.96425600000001, 45.498878 ], "pop": 917, "state": "WI" }, { "_id": "54103", "city": "ARMSTRONG CREEK", "loc": [ -88.490847, 45.67261 ], "pop": 460, "state": "WI" }, { "_id": "54104", "city": "ATHELSTANE", "loc": [ -88.175282, 45.422819 ], "pop": 696, "state": "WI" }, { "_id": "54106", "city": "CENTER VALLEY", "loc": [ -88.444776, 44.485595 ], "pop": 4859, "state": "WI" }, { "_id": "54107", "city": "NAVARINO", "loc": [ -88.439026, 44.73794 ], "pop": 2148, "state": "WI" }, { "_id": "54110", "city": "BRILLION", "loc": [ -88.083337, 44.17792 ], "pop": 4618, "state": "WI" }, { "_id": "54111", "city": "CECIL", "loc": [ -88.41825300000001, 44.811027 ], "pop": 2966, "state": "WI" }, { "_id": "54112", "city": "COLEMAN", "loc": [ -88.058667, 45.072157 ], "pop": 2828, "state": "WI" }, { "_id": "54113", "city": "COMBINED LOCKS", "loc": [ -88.313271, 44.266581 ], "pop": 2190, "state": "WI" }, { "_id": "54114", "city": "BEAVER", "loc": [ -88.06126500000001, 45.254053 ], "pop": 3395, "state": "WI" }, { "_id": "54115", "city": "DE PERE", "loc": [ -88.080613, 44.438779 ], "pop": 22430, "state": "WI" }, { "_id": "54119", "city": "DUNBAR", "loc": [ -88.106669, 45.600944 ], "pop": 838, "state": "WI" }, { "_id": "54120", "city": "FENCE", "loc": [ -88.364873, 45.759652 ], "pop": 362, "state": "WI" }, { "_id": "54121", "city": "FLORENCE", "loc": [ -88.228921, 45.902724 ], "pop": 2616, "state": "WI" }, { "_id": "54123", "city": "FOREST JUNCTION", "loc": [ -88.15171599999999, 44.20613 ], "pop": 395, "state": "WI" }, { "_id": "54124", "city": "GILLETT", "loc": [ -88.32422099999999, 44.901753 ], "pop": 3317, "state": "WI" }, { "_id": "54125", "city": "GOODMAN", "loc": [ -88.36290099999999, 45.646895 ], "pop": 758, "state": "WI" }, { "_id": "54126", "city": "GREENLEAF", "loc": [ -88.027519, 44.29373 ], "pop": 3443, "state": "WI" }, { "_id": "54128", "city": "GRESHAM", "loc": [ -88.78873, 44.852963 ], "pop": 1689, "state": "WI" }, { "_id": "54129", "city": "HILBERT", "loc": [ -88.20696100000001, 44.127129 ], "pop": 3938, "state": "WI" }, { "_id": "54130", "city": "KAUKAUNA", "loc": [ -88.271692, 44.29561 ], "pop": 19823, "state": "WI" }, { "_id": "54135", "city": "KESHENA", "loc": [ -88.63568600000001, 44.914635 ], "pop": 3588, "state": "WI" }, { "_id": "54136", "city": "KIMBERLY", "loc": [ -88.338374, 44.27008 ], "pop": 5406, "state": "WI" }, { "_id": "54137", "city": "KRAKOW", "loc": [ -88.25933000000001, 44.763457 ], "pop": 883, "state": "WI" }, { "_id": "54138", "city": "LAKEWOOD", "loc": [ -88.50318900000001, 45.316285 ], "pop": 626, "state": "WI" }, { "_id": "54139", "city": "STILES", "loc": [ -88.05430800000001, 44.940494 ], "pop": 2684, "state": "WI" }, { "_id": "54140", "city": "LITTLE CHUTE", "loc": [ -88.311989, 44.284248 ], "pop": 7769, "state": "WI" }, { "_id": "54141", "city": "LITTLE SUAMICO", "loc": [ -88.02724499999999, 44.67751 ], "pop": 3506, "state": "WI" }, { "_id": "54143", "city": "MARINETTE", "loc": [ -87.669684, 45.087403 ], "pop": 16297, "state": "WI" }, { "_id": "54149", "city": "MOUNTAIN", "loc": [ -88.45828, 45.199127 ], "pop": 1261, "state": "WI" }, { "_id": "54150", "city": "NEOPIT", "loc": [ -88.861116, 44.987323 ], "pop": 14, "state": "WI" }, { "_id": "54151", "city": "NIAGARA", "loc": [ -88.03092700000001, 45.765343 ], "pop": 4123, "state": "WI" }, { "_id": "54153", "city": "OCONTO", "loc": [ -87.891728, 44.891359 ], "pop": 6710, "state": "WI" }, { "_id": "54154", "city": "OCONTO FALLS", "loc": [ -88.155528, 44.875499 ], "pop": 4481, "state": "WI" }, { "_id": "54155", "city": "ONEIDA", "loc": [ -88.185851, 44.516641 ], "pop": 3674, "state": "WI" }, { "_id": "54156", "city": "PEMBINE", "loc": [ -87.97036300000001, 45.607398 ], "pop": 1443, "state": "WI" }, { "_id": "54157", "city": "PESHTIGO", "loc": [ -87.729795, 45.045778 ], "pop": 4956, "state": "WI" }, { "_id": "54159", "city": "PORTERFIELD", "loc": [ -87.80624299999999, 45.193399 ], "pop": 1974, "state": "WI" }, { "_id": "54161", "city": "POUND", "loc": [ -88.13962100000001, 45.127317 ], "pop": 2084, "state": "WI" }, { "_id": "54162", "city": "PULASKI", "loc": [ -88.263447, 44.66112 ], "pop": 6933, "state": "WI" }, { "_id": "54165", "city": "SEYMOUR", "loc": [ -88.317243, 44.509096 ], "pop": 5744, "state": "WI" }, { "_id": "54166", "city": "SHAWANO", "loc": [ -88.603599, 44.785133 ], "pop": 13367, "state": "WI" }, { "_id": "54170", "city": "SHIOCTON", "loc": [ -88.556236, 44.497202 ], "pop": 3708, "state": "WI" }, { "_id": "54171", "city": "SOBIESKI", "loc": [ -88.10760500000001, 44.710495 ], "pop": 1644, "state": "WI" }, { "_id": "54174", "city": "SURING", "loc": [ -88.36276700000001, 45.018551 ], "pop": 2591, "state": "WI" }, { "_id": "54175", "city": "TOWNSEND", "loc": [ -88.610743, 45.314819 ], "pop": 729, "state": "WI" }, { "_id": "54176", "city": "UNDERHILL", "loc": [ -88.168898, 44.731836 ], "pop": 69, "state": "WI" }, { "_id": "54177", "city": "WAUSAUKEE", "loc": [ -87.90987699999999, 45.349507 ], "pop": 2875, "state": "WI" }, { "_id": "54180", "city": "WRIGHTSTOWN", "loc": [ -88.121769, 44.338377 ], "pop": 2359, "state": "WI" }, { "_id": "54201", "city": "ALGOMA", "loc": [ -87.457792, 44.610051 ], "pop": 5387, "state": "WI" }, { "_id": "54202", "city": "BAILEYS HARBOR", "loc": [ -87.167626, 45.056549 ], "pop": 1167, "state": "WI" }, { "_id": "54204", "city": "BRUSSELS", "loc": [ -87.62251999999999, 44.747558 ], "pop": 1785, "state": "WI" }, { "_id": "54205", "city": "CASCO", "loc": [ -87.623122, 44.58328 ], "pop": 2066, "state": "WI" }, { "_id": "54206", "city": "CATO", "loc": [ -87.864688, 44.148521 ], "pop": 1097, "state": "WI" }, { "_id": "54208", "city": "DENMARK", "loc": [ -87.82703600000001, 44.359392 ], "pop": 3968, "state": "WI" }, { "_id": "54209", "city": "EGG HARBOR", "loc": [ -87.28052099999999, 45.010039 ], "pop": 738, "state": "WI" }, { "_id": "54210", "city": "ELLISON BAY", "loc": [ -87.051209, 45.257206 ], "pop": 804, "state": "WI" }, { "_id": "54212", "city": "FISH CREEK", "loc": [ -87.20643200000001, 45.11554 ], "pop": 1200, "state": "WI" }, { "_id": "54213", "city": "FORESTVILLE", "loc": [ -87.49283200000001, 44.696863 ], "pop": 1680, "state": "WI" }, { "_id": "54214", "city": "FRANCIS CREEK", "loc": [ -87.720007, 44.199964 ], "pop": 562, "state": "WI" }, { "_id": "54215", "city": "KELLNERSVILLE", "loc": [ -87.803596, 44.22493 ], "pop": 350, "state": "WI" }, { "_id": "54216", "city": "KEWAUNEE", "loc": [ -87.559442, 44.440143 ], "pop": 6262, "state": "WI" }, { "_id": "54217", "city": "LUXEMBURG", "loc": [ -87.71560599999999, 44.550612 ], "pop": 5188, "state": "WI" }, { "_id": "54220", "city": "MANITOWOC", "loc": [ -87.682303, 44.097122 ], "pop": 39178, "state": "WI" }, { "_id": "54227", "city": "MARIBEL", "loc": [ -87.805482, 44.285151 ], "pop": 2251, "state": "WI" }, { "_id": "54228", "city": "MISHICOT", "loc": [ -87.64470300000001, 44.260942 ], "pop": 3245, "state": "WI" }, { "_id": "54229", "city": "NEW FRANKEN", "loc": [ -87.823482, 44.559193 ], "pop": 2640, "state": "WI" }, { "_id": "54230", "city": "REEDSVILLE", "loc": [ -87.96602799999999, 44.157566 ], "pop": 3073, "state": "WI" }, { "_id": "54232", "city": "SAINT NAZIANZ", "loc": [ -87.922906, 44.006425 ], "pop": 680, "state": "WI" }, { "_id": "54234", "city": "SISTER BAY", "loc": [ -87.113865, 45.187544 ], "pop": 1376, "state": "WI" }, { "_id": "54235", "city": "STURGEON BAY", "loc": [ -87.375311, 44.84384 ], "pop": 16149, "state": "WI" }, { "_id": "54241", "city": "TWO RIVERS", "loc": [ -87.585504, 44.166008 ], "pop": 16768, "state": "WI" }, { "_id": "54245", "city": "VALDERS", "loc": [ -87.88118299999999, 44.041977 ], "pop": 2056, "state": "WI" }, { "_id": "54246", "city": "WASHINGTON ISLAN", "loc": [ -86.913664, 45.374042 ], "pop": 623, "state": "WI" }, { "_id": "54247", "city": "WHITELAW", "loc": [ -87.82669799999999, 44.157269 ], "pop": 1402, "state": "WI" }, { "_id": "54301", "city": "ALLOUEZ", "loc": [ -88.016868, 44.485313 ], "pop": 25108, "state": "WI" }, { "_id": "54302", "city": "GREEN BAY", "loc": [ -87.977136, 44.502508 ], "pop": 27273, "state": "WI" }, { "_id": "54303", "city": "HOWARD", "loc": [ -88.04526199999999, 44.530146 ], "pop": 27046, "state": "WI" }, { "_id": "54304", "city": "ASHWAUBENON", "loc": [ -88.066799, 44.505525 ], "pop": 31339, "state": "WI" }, { "_id": "54311", "city": "GREEN BAY", "loc": [ -87.92668500000001, 44.491405 ], "pop": 19373, "state": "WI" }, { "_id": "54313", "city": "GREEN BAY", "loc": [ -88.102054, 44.546289 ], "pop": 23360, "state": "WI" }, { "_id": "54401", "city": "WAUSAU", "loc": [ -89.633955, 44.963433 ], "pop": 51083, "state": "WI" }, { "_id": "54405", "city": "ABBOTSFORD", "loc": [ -90.29943799999999, 44.964057 ], "pop": 2480, "state": "WI" }, { "_id": "54406", "city": "AMHERST", "loc": [ -89.303482, 44.423052 ], "pop": 2885, "state": "WI" }, { "_id": "54407", "city": "AMHERST JUNCTION", "loc": [ -89.303754, 44.506458 ], "pop": 1448, "state": "WI" }, { "_id": "54408", "city": "ANIWA", "loc": [ -89.268254, 45.01039 ], "pop": 1510, "state": "WI" }, { "_id": "54409", "city": "ANTIGO", "loc": [ -89.14187099999999, 45.131362 ], "pop": 13087, "state": "WI" }, { "_id": "54410", "city": "ARPIN", "loc": [ -90.037049, 44.54194 ], "pop": 2301, "state": "WI" }, { "_id": "54411", "city": "HAMBURG", "loc": [ -90.062612, 45.032037 ], "pop": 4263, "state": "WI" }, { "_id": "54412", "city": "AUBURNDALE", "loc": [ -90.013577, 44.637836 ], "pop": 1667, "state": "WI" }, { "_id": "54413", "city": "BABCOCK", "loc": [ -90.098574, 44.303064 ], "pop": 409, "state": "WI" }, { "_id": "54414", "city": "BIRNAMWOOD", "loc": [ -89.212433, 44.926896 ], "pop": 2464, "state": "WI" }, { "_id": "54416", "city": "BOWLER", "loc": [ -88.976071, 44.933667 ], "pop": 2777, "state": "WI" }, { "_id": "54418", "city": "BRYANT", "loc": [ -88.99832499999999, 45.202962 ], "pop": 1029, "state": "WI" }, { "_id": "54419", "city": "CHELSEA", "loc": [ -90.303685, 45.288166 ], "pop": 122, "state": "WI" }, { "_id": "54420", "city": "CHILI", "loc": [ -90.35995200000001, 44.630135 ], "pop": 728, "state": "WI" }, { "_id": "54421", "city": "COLBY", "loc": [ -90.314432, 44.911651 ], "pop": 3621, "state": "WI" }, { "_id": "54422", "city": "CURTISS", "loc": [ -90.45922299999999, 44.960186 ], "pop": 1111, "state": "WI" }, { "_id": "54423", "city": "CUSTER", "loc": [ -89.41527499999999, 44.56622 ], "pop": 2010, "state": "WI" }, { "_id": "54424", "city": "DEERBROOK", "loc": [ -89.187257, 45.236791 ], "pop": 902, "state": "WI" }, { "_id": "54425", "city": "DORCHESTER", "loc": [ -90.35964800000001, 45.004192 ], "pop": 1860, "state": "WI" }, { "_id": "54426", "city": "FENWOOD", "loc": [ -89.998029, 44.903831 ], "pop": 3810, "state": "WI" }, { "_id": "54427", "city": "ELAND", "loc": [ -89.246117, 44.830888 ], "pop": 1278, "state": "WI" }, { "_id": "54428", "city": "ELCHO", "loc": [ -89.15157000000001, 45.440906 ], "pop": 988, "state": "WI" }, { "_id": "54430", "city": "ELTON", "loc": [ -88.883743, 45.156216 ], "pop": 135, "state": "WI" }, { "_id": "54433", "city": "GILMAN", "loc": [ -90.825672, 45.18906 ], "pop": 1780, "state": "WI" }, { "_id": "54435", "city": "GLEASON", "loc": [ -89.475264, 45.338428 ], "pop": 2347, "state": "WI" }, { "_id": "54436", "city": "GRANTON", "loc": [ -90.44838300000001, 44.560558 ], "pop": 2072, "state": "WI" }, { "_id": "54437", "city": "GREENWOOD", "loc": [ -90.622913, 44.740373 ], "pop": 3029, "state": "WI" }, { "_id": "54440", "city": "HATLEY", "loc": [ -89.377728, 44.825638 ], "pop": 2129, "state": "WI" }, { "_id": "54441", "city": "HEWITT", "loc": [ -90.103054, 44.643651 ], "pop": 595, "state": "WI" }, { "_id": "54442", "city": "IRMA", "loc": [ -89.66113799999999, 45.348483 ], "pop": 1006, "state": "WI" }, { "_id": "54443", "city": "JUNCTION CITY", "loc": [ -89.743758, 44.59634 ], "pop": 2396, "state": "WI" }, { "_id": "54445", "city": "LILY", "loc": [ -88.83845100000001, 45.318723 ], "pop": 196, "state": "WI" }, { "_id": "54446", "city": "LOYAL", "loc": [ -90.492238, 44.727243 ], "pop": 3809, "state": "WI" }, { "_id": "54447", "city": "LUBLIN", "loc": [ -90.733678, 45.073933 ], "pop": 564, "state": "WI" }, { "_id": "54448", "city": "MARATHON", "loc": [ -89.829948, 44.965664 ], "pop": 5202, "state": "WI" }, { "_id": "54449", "city": "MARSHFIELD", "loc": [ -90.17845, 44.661453 ], "pop": 25791, "state": "WI" }, { "_id": "54451", "city": "MEDFORD", "loc": [ -90.350306, 45.151185 ], "pop": 10388, "state": "WI" }, { "_id": "54452", "city": "MERRILL", "loc": [ -89.690696, 45.180924 ], "pop": 17891, "state": "WI" }, { "_id": "54454", "city": "MILLADORE", "loc": [ -89.88753199999999, 44.604416 ], "pop": 1347, "state": "WI" }, { "_id": "54455", "city": "MOSINEE", "loc": [ -89.68449099999999, 44.799736 ], "pop": 13664, "state": "WI" }, { "_id": "54456", "city": "NEILLSVILLE", "loc": [ -90.611197, 44.549429 ], "pop": 4904, "state": "WI" }, { "_id": "54457", "city": "NEKOOSA", "loc": [ -89.881394, 44.281979 ], "pop": 7312, "state": "WI" }, { "_id": "54459", "city": "OGEMA", "loc": [ -90.256513, 45.439187 ], "pop": 1459, "state": "WI" }, { "_id": "54460", "city": "OWEN", "loc": [ -90.54689999999999, 44.957817 ], "pop": 1759, "state": "WI" }, { "_id": "54462", "city": "PEARSON", "loc": [ -89.075824, 45.388119 ], "pop": 679, "state": "WI" }, { "_id": "54463", "city": "PELICAN LAKE", "loc": [ -89.181707, 45.504886 ], "pop": 635, "state": "WI" }, { "_id": "54465", "city": "PICKEREL", "loc": [ -88.91365, 45.356658 ], "pop": 269, "state": "WI" }, { "_id": "54466", "city": "PITTSVILLE", "loc": [ -90.18917399999999, 44.43747 ], "pop": 2754, "state": "WI" }, { "_id": "54467", "city": "PLOVER", "loc": [ -89.542805, 44.450673 ], "pop": 6142, "state": "WI" }, { "_id": "54469", "city": "PORT EDWARDS", "loc": [ -89.865246, 44.349705 ], "pop": 1828, "state": "WI" }, { "_id": "54470", "city": "RIB LAKE", "loc": [ -90.176322, 45.298376 ], "pop": 2002, "state": "WI" }, { "_id": "54471", "city": "RINGLE", "loc": [ -89.432845, 44.92383 ], "pop": 1370, "state": "WI" }, { "_id": "54473", "city": "ROSHOLT", "loc": [ -89.33563700000001, 44.662224 ], "pop": 3147, "state": "WI" }, { "_id": "54474", "city": "ROTHSCHILD", "loc": [ -89.61926200000001, 44.88429 ], "pop": 3867, "state": "WI" }, { "_id": "54475", "city": "RUDOLPH", "loc": [ -89.800252, 44.474061 ], "pop": 1648, "state": "WI" }, { "_id": "54476", "city": "SCHOFIELD", "loc": [ -89.581789, 44.906407 ], "pop": 12583, "state": "WI" }, { "_id": "54479", "city": "SPENCER", "loc": [ -90.31140600000001, 44.739148 ], "pop": 2997, "state": "WI" }, { "_id": "54480", "city": "STETSONVILLE", "loc": [ -90.282931, 45.07923 ], "pop": 1241, "state": "WI" }, { "_id": "54481", "city": "STEVENS POINT", "loc": [ -89.558764, 44.521221 ], "pop": 38950, "state": "WI" }, { "_id": "54484", "city": "STRATFORD", "loc": [ -90.058317, 44.789878 ], "pop": 4201, "state": "WI" }, { "_id": "54485", "city": "SUMMIT LAKE", "loc": [ -89.18074300000001, 45.320414 ], "pop": 616, "state": "WI" }, { "_id": "54486", "city": "TIGERTON", "loc": [ -89.056893, 44.729938 ], "pop": 3310, "state": "WI" }, { "_id": "54487", "city": "TOMAHAWK", "loc": [ -89.72726900000001, 45.496308 ], "pop": 8130, "state": "WI" }, { "_id": "54488", "city": "UNITY", "loc": [ -90.322074, 44.822676 ], "pop": 1797, "state": "WI" }, { "_id": "54489", "city": "VESPER", "loc": [ -89.982553, 44.467656 ], "pop": 1616, "state": "WI" }, { "_id": "54490", "city": "WESTBORO", "loc": [ -90.307194, 45.344539 ], "pop": 766, "state": "WI" }, { "_id": "54491", "city": "WHITE LAKE", "loc": [ -88.755489, 45.171465 ], "pop": 1324, "state": "WI" }, { "_id": "54493", "city": "WILLARD", "loc": [ -90.749897, 44.727378 ], "pop": 682, "state": "WI" }, { "_id": "54494", "city": "WISCONSIN RAPIDS", "loc": [ -89.806229, 44.375803 ], "pop": 33296, "state": "WI" }, { "_id": "54498", "city": "WITHEE", "loc": [ -90.604862, 44.975726 ], "pop": 2286, "state": "WI" }, { "_id": "54499", "city": "WITTENBERG", "loc": [ -89.166479, 44.823247 ], "pop": 1850, "state": "WI" }, { "_id": "54501", "city": "MONICO", "loc": [ -89.409285, 45.646718 ], "pop": 19039, "state": "WI" }, { "_id": "54511", "city": "CAVOUR", "loc": [ -88.888566, 45.658309 ], "pop": 1533, "state": "WI" }, { "_id": "54512", "city": "BOULDER JUNCTION", "loc": [ -89.632454, 46.111183 ], "pop": 563, "state": "WI" }, { "_id": "54513", "city": "BRANTWOOD", "loc": [ -90.11595199999999, 45.551413 ], "pop": 540, "state": "WI" }, { "_id": "54514", "city": "BUTTERNUT", "loc": [ -90.482114, 46.018358 ], "pop": 2054, "state": "WI" }, { "_id": "54515", "city": "CATAWBA", "loc": [ -90.51456399999999, 45.508123 ], "pop": 616, "state": "WI" }, { "_id": "54517", "city": "CLAM LAKE", "loc": [ -90.884107, 46.245675 ], "pop": 2, "state": "WI" }, { "_id": "54519", "city": "CONOVER", "loc": [ -89.238919, 46.043968 ], "pop": 1039, "state": "WI" }, { "_id": "54520", "city": "CRANDON", "loc": [ -88.911619, 45.541553 ], "pop": 3419, "state": "WI" }, { "_id": "54521", "city": "EAGLE RIVER", "loc": [ -89.253058, 45.916084 ], "pop": 6726, "state": "WI" }, { "_id": "54524", "city": "FIFIELD", "loc": [ -90.4246, 45.862148 ], "pop": 496, "state": "WI" }, { "_id": "54526", "city": "INGRAM", "loc": [ -90.855183, 45.488807 ], "pop": 949, "state": "WI" }, { "_id": "54527", "city": "GLIDDEN", "loc": [ -90.58885600000001, 46.133668 ], "pop": 1061, "state": "WI" }, { "_id": "54529", "city": "HARSHAW", "loc": [ -89.650346, 45.676244 ], "pop": 854, "state": "WI" }, { "_id": "54530", "city": "HAWKINS", "loc": [ -90.71137299999999, 45.524129 ], "pop": 747, "state": "WI" }, { "_id": "54531", "city": "HAZELHURST", "loc": [ -89.74783600000001, 45.77446 ], "pop": 1057, "state": "WI" }, { "_id": "54534", "city": "HURLEY", "loc": [ -90.19750000000001, 46.44482 ], "pop": 2658, "state": "WI" }, { "_id": "54536", "city": "IRON BELT", "loc": [ -90.324528, 46.395545 ], "pop": 265, "state": "WI" }, { "_id": "54537", "city": "KENNAN", "loc": [ -90.590987, 45.53497 ], "pop": 628, "state": "WI" }, { "_id": "54538", "city": "LAC DU FLAMBEAU", "loc": [ -89.890078, 45.97175 ], "pop": 2085, "state": "WI" }, { "_id": "54539", "city": "LAKE TOMAHAWK", "loc": [ -89.58560900000001, 45.803455 ], "pop": 1223, "state": "WI" }, { "_id": "54540", "city": "LAND O LAKES", "loc": [ -89.321787, 46.156305 ], "pop": 742, "state": "WI" }, { "_id": "54541", "city": "LAONA", "loc": [ -88.671525, 45.553416 ], "pop": 1823, "state": "WI" }, { "_id": "54542", "city": "ALVIN", "loc": [ -88.695308, 45.921841 ], "pop": 550, "state": "WI" }, { "_id": "54545", "city": "MANITOWISH WATER", "loc": [ -89.83076699999999, 46.123909 ], "pop": 901, "state": "WI" }, { "_id": "54546", "city": "MELLEN", "loc": [ -90.655233, 46.300659 ], "pop": 1752, "state": "WI" }, { "_id": "54547", "city": "MERCER", "loc": [ -90.067914, 46.169594 ], "pop": 1321, "state": "WI" }, { "_id": "54548", "city": "MINOCQUA", "loc": [ -89.757954, 45.871909 ], "pop": 3793, "state": "WI" }, { "_id": "54550", "city": "PENCE", "loc": [ -90.244195, 46.425736 ], "pop": 1019, "state": "WI" }, { "_id": "54552", "city": "PARK FALLS", "loc": [ -90.424648, 45.936345 ], "pop": 5316, "state": "WI" }, { "_id": "54554", "city": "PHELPS", "loc": [ -89.081547, 46.064481 ], "pop": 1183, "state": "WI" }, { "_id": "54555", "city": "PHILLIPS", "loc": [ -90.40413100000001, 45.697463 ], "pop": 5155, "state": "WI" }, { "_id": "54556", "city": "PRENTICE", "loc": [ -90.294217, 45.548201 ], "pop": 1177, "state": "WI" }, { "_id": "54557", "city": "WINCHESTER", "loc": [ -89.772795, 46.221735 ], "pop": 735, "state": "WI" }, { "_id": "54558", "city": "SAINT GERMAIN", "loc": [ -89.48655599999999, 45.918315 ], "pop": 1201, "state": "WI" }, { "_id": "54559", "city": "SAXON", "loc": [ -90.438273, 46.495855 ], "pop": 478, "state": "WI" }, { "_id": "54560", "city": "SAYNER", "loc": [ -89.519437, 45.986664 ], "pop": 559, "state": "WI" }, { "_id": "54562", "city": "THREE LAKES", "loc": [ -89.13279199999999, 45.804633 ], "pop": 1755, "state": "WI" }, { "_id": "54563", "city": "TONY", "loc": [ -90.98693799999999, 45.474082 ], "pop": 814, "state": "WI" }, { "_id": "54564", "city": "TRIPOLI", "loc": [ -89.985218, 45.581387 ], "pop": 374, "state": "WI" }, { "_id": "54565", "city": "UPSON", "loc": [ -90.405135, 46.376124 ], "pop": 69, "state": "WI" }, { "_id": "54566", "city": "WABENO", "loc": [ -88.66245600000001, 45.433172 ], "pop": 1308, "state": "WI" }, { "_id": "54568", "city": "WOODRUFF", "loc": [ -89.69544999999999, 45.918583 ], "pop": 4088, "state": "WI" }, { "_id": "54601", "city": "LA CROSSE", "loc": [ -91.217494, 43.798938 ], "pop": 48348, "state": "WI" }, { "_id": "54603", "city": "LA CROSSE", "loc": [ -91.248439, 43.848675 ], "pop": 15292, "state": "WI" }, { "_id": "54610", "city": "ALMA", "loc": [ -91.807931, 44.429437 ], "pop": 3824, "state": "WI" }, { "_id": "54611", "city": "ALMA CENTER", "loc": [ -90.935602, 44.445218 ], "pop": 989, "state": "WI" }, { "_id": "54612", "city": "ARCADIA", "loc": [ -91.480453, 44.253937 ], "pop": 4707, "state": "WI" }, { "_id": "54613", "city": "ARKDALE", "loc": [ -89.896215, 44.052886 ], "pop": 1582, "state": "WI" }, { "_id": "54614", "city": "BANGOR", "loc": [ -90.98088799999999, 43.868697 ], "pop": 1952, "state": "WI" }, { "_id": "54615", "city": "BLACK RIVER FALL", "loc": [ -90.84795200000001, 44.292101 ], "pop": 8248, "state": "WI" }, { "_id": "54616", "city": "BLAIR", "loc": [ -91.223501, 44.296843 ], "pop": 2347, "state": "WI" }, { "_id": "54617", "city": "BLOOM CITY", "loc": [ -90.66645800000001, 43.509034 ], "pop": 437, "state": "WI" }, { "_id": "54618", "city": "CUTLER", "loc": [ -90.268861, 43.936705 ], "pop": 1613, "state": "WI" }, { "_id": "54619", "city": "CASHTON", "loc": [ -90.761197, 43.745649 ], "pop": 1547, "state": "WI" }, { "_id": "54621", "city": "CHASEBURG", "loc": [ -91.07993399999999, 43.679372 ], "pop": 550, "state": "WI" }, { "_id": "54622", "city": "WAUMANDEE", "loc": [ -91.858677, 44.251591 ], "pop": 2271, "state": "WI" }, { "_id": "54623", "city": "COON VALLEY", "loc": [ -91.014338, 43.721783 ], "pop": 1402, "state": "WI" }, { "_id": "54624", "city": "VICTORY", "loc": [ -91.193015, 43.494707 ], "pop": 1422, "state": "WI" }, { "_id": "54625", "city": "DODGE", "loc": [ -91.52434100000001, 44.12886 ], "pop": 397, "state": "WI" }, { "_id": "54626", "city": "EASTMAN", "loc": [ -91.01927000000001, 43.19592 ], "pop": 1064, "state": "WI" }, { "_id": "54627", "city": "ETTRICK", "loc": [ -91.26354600000001, 44.172428 ], "pop": 1644, "state": "WI" }, { "_id": "54628", "city": "FERRYVILLE", "loc": [ -91.044578, 43.395857 ], "pop": 1411, "state": "WI" }, { "_id": "54629", "city": "FOUNTAIN CITY", "loc": [ -91.67786099999999, 44.136436 ], "pop": 2481, "state": "WI" }, { "_id": "54630", "city": "GALESVILLE", "loc": [ -91.358789, 44.088848 ], "pop": 3111, "state": "WI" }, { "_id": "54631", "city": "GAYS MILLS", "loc": [ -90.867636, 43.293639 ], "pop": 2577, "state": "WI" }, { "_id": "54632", "city": "GENOA", "loc": [ -91.13499899999999, 43.605134 ], "pop": 1432, "state": "WI" }, { "_id": "54634", "city": "YUBA", "loc": [ -90.37059499999999, 43.635009 ], "pop": 2309, "state": "WI" }, { "_id": "54635", "city": "NORTHFIELD", "loc": [ -91.039086, 44.397778 ], "pop": 1513, "state": "WI" }, { "_id": "54636", "city": "HOLMEN", "loc": [ -91.2497, 43.976125 ], "pop": 7098, "state": "WI" }, { "_id": "54638", "city": "KENDALL", "loc": [ -90.410691, 43.81614 ], "pop": 1848, "state": "WI" }, { "_id": "54639", "city": "WEST LIMA", "loc": [ -90.648257, 43.616955 ], "pop": 3280, "state": "WI" }, { "_id": "54641", "city": "MATHER", "loc": [ -90.295264, 44.147706 ], "pop": 57, "state": "WI" }, { "_id": "54642", "city": "MELROSE", "loc": [ -91.04446299999999, 44.138156 ], "pop": 1806, "state": "WI" }, { "_id": "54644", "city": "MINDORO", "loc": [ -91.064181, 44.02873 ], "pop": 1157, "state": "WI" }, { "_id": "54646", "city": "NECEDAH", "loc": [ -90.05997600000001, 44.034481 ], "pop": 2741, "state": "WI" }, { "_id": "54648", "city": "NORWALK", "loc": [ -90.680134, 43.812823 ], "pop": 2360, "state": "WI" }, { "_id": "54650", "city": "ONALASKA", "loc": [ -91.231419, 43.897392 ], "pop": 16435, "state": "WI" }, { "_id": "54651", "city": "ONTARIO", "loc": [ -90.62053400000001, 43.717197 ], "pop": 1032, "state": "WI" }, { "_id": "54652", "city": "READSTOWN", "loc": [ -90.75787200000001, 43.450791 ], "pop": 736, "state": "WI" }, { "_id": "54653", "city": "ROCKLAND", "loc": [ -90.948846, 43.938159 ], "pop": 1486, "state": "WI" }, { "_id": "54655", "city": "SOLDIERS GROVE", "loc": [ -90.766293, 43.391857 ], "pop": 1621, "state": "WI" }, { "_id": "54656", "city": "SPARTA", "loc": [ -90.814566, 43.954045 ], "pop": 14151, "state": "WI" }, { "_id": "54657", "city": "STEUBEN", "loc": [ -90.860878, 43.195464 ], "pop": 63, "state": "WI" }, { "_id": "54658", "city": "STODDARD", "loc": [ -91.19188, 43.691227 ], "pop": 2116, "state": "WI" }, { "_id": "54659", "city": "TAYLOR", "loc": [ -91.112752, 44.289855 ], "pop": 1205, "state": "WI" }, { "_id": "54660", "city": "WYEVILLE", "loc": [ -90.491704, 43.994833 ], "pop": 14294, "state": "WI" }, { "_id": "54661", "city": "TREMPEALEAU", "loc": [ -91.4282, 44.021843 ], "pop": 2370, "state": "WI" }, { "_id": "54664", "city": "VIOLA", "loc": [ -90.655416, 43.504758 ], "pop": 718, "state": "WI" }, { "_id": "54665", "city": "VIROQUA", "loc": [ -90.89386500000001, 43.54419 ], "pop": 7071, "state": "WI" }, { "_id": "54666", "city": "WARRENS", "loc": [ -90.496692, 44.15697 ], "pop": 1089, "state": "WI" }, { "_id": "54667", "city": "WESTBY", "loc": [ -90.87403, 43.663123 ], "pop": 4290, "state": "WI" }, { "_id": "54669", "city": "WEST SALEM", "loc": [ -91.089311, 43.906253 ], "pop": 5244, "state": "WI" }, { "_id": "54670", "city": "WILTON", "loc": [ -90.51618499999999, 43.832209 ], "pop": 1188, "state": "WI" }, { "_id": "54701", "city": "EAU CLAIRE", "loc": [ -91.487686, 44.783972 ], "pop": 31593, "state": "WI" }, { "_id": "54703", "city": "EAU CLAIRE", "loc": [ -91.499701, 44.827122 ], "pop": 38400, "state": "WI" }, { "_id": "54720", "city": "ALTOONA", "loc": [ -91.43825, 44.802142 ], "pop": 6065, "state": "WI" }, { "_id": "54721", "city": "ARKANSAW", "loc": [ -92.056646, 44.626659 ], "pop": 1099, "state": "WI" }, { "_id": "54722", "city": "AUGUSTA", "loc": [ -91.123154, 44.694737 ], "pop": 3402, "state": "WI" }, { "_id": "54723", "city": "BAY CITY", "loc": [ -92.446889, 44.6166 ], "pop": 1540, "state": "WI" }, { "_id": "54724", "city": "BLOOMER", "loc": [ -91.489974, 45.102477 ], "pop": 6410, "state": "WI" }, { "_id": "54725", "city": "BOYCEVILLE", "loc": [ -92.02480300000001, 45.064238 ], "pop": 2520, "state": "WI" }, { "_id": "54726", "city": "BOYD", "loc": [ -91.029355, 44.943737 ], "pop": 2549, "state": "WI" }, { "_id": "54727", "city": "CADOTT", "loc": [ -91.169884, 44.963014 ], "pop": 4397, "state": "WI" }, { "_id": "54728", "city": "CHETEK", "loc": [ -91.65415400000001, 45.317046 ], "pop": 5453, "state": "WI" }, { "_id": "54729", "city": "CHIPPEWA FALLS", "loc": [ -91.384376, 44.932202 ], "pop": 25627, "state": "WI" }, { "_id": "54730", "city": "COLFAX", "loc": [ -91.735737, 44.999326 ], "pop": 4073, "state": "WI" }, { "_id": "54731", "city": "CONRATH", "loc": [ -91.06213200000001, 45.353281 ], "pop": 758, "state": "WI" }, { "_id": "54732", "city": "CORNELL", "loc": [ -91.17325200000001, 45.16191 ], "pop": 2799, "state": "WI" }, { "_id": "54733", "city": "DALLAS", "loc": [ -91.836844, 45.254883 ], "pop": 973, "state": "WI" }, { "_id": "54734", "city": "DOWNING", "loc": [ -92.113384, 45.103032 ], "pop": 1029, "state": "WI" }, { "_id": "54736", "city": "DURAND", "loc": [ -91.92947599999999, 44.630042 ], "pop": 3746, "state": "WI" }, { "_id": "54737", "city": "EAU GALLE", "loc": [ -92.04081600000001, 44.721433 ], "pop": 921, "state": "WI" }, { "_id": "54738", "city": "ELEVA", "loc": [ -91.48036999999999, 44.598493 ], "pop": 2291, "state": "WI" }, { "_id": "54739", "city": "ELK MOUND", "loc": [ -91.675229, 44.866973 ], "pop": 3539, "state": "WI" }, { "_id": "54740", "city": "ELMWOOD", "loc": [ -92.202195, 44.756088 ], "pop": 1759, "state": "WI" }, { "_id": "54741", "city": "FAIRCHILD", "loc": [ -90.990568, 44.596253 ], "pop": 1319, "state": "WI" }, { "_id": "54742", "city": "FALL CREEK", "loc": [ -91.285631, 44.768385 ], "pop": 3814, "state": "WI" }, { "_id": "54744", "city": "HILLSDALE", "loc": [ -91.85985700000001, 45.32136 ], "pop": 560, "state": "WI" }, { "_id": "54745", "city": "HOLCOMBE", "loc": [ -91.132955, 45.251263 ], "pop": 1752, "state": "WI" }, { "_id": "54746", "city": "HUMBIRD", "loc": [ -90.888257, 44.536676 ], "pop": 633, "state": "WI" }, { "_id": "54747", "city": "INDEPENDENCE", "loc": [ -91.45351100000001, 44.395926 ], "pop": 2826, "state": "WI" }, { "_id": "54748", "city": "JIM FALLS", "loc": [ -91.264909, 45.064439 ], "pop": 974, "state": "WI" }, { "_id": "54749", "city": "KNAPP", "loc": [ -92.07520100000001, 44.954495 ], "pop": 935, "state": "WI" }, { "_id": "54750", "city": "MAIDEN ROCK", "loc": [ -92.278212, 44.608599 ], "pop": 1503, "state": "WI" }, { "_id": "54751", "city": "MENOMONIE", "loc": [ -91.92650999999999, 44.87182 ], "pop": 21211, "state": "WI" }, { "_id": "54754", "city": "MERRILLAN", "loc": [ -90.810496, 44.436938 ], "pop": 1317, "state": "WI" }, { "_id": "54755", "city": "MODENA", "loc": [ -91.66957600000001, 44.609853 ], "pop": 4907, "state": "WI" }, { "_id": "54756", "city": "NELSON", "loc": [ -92.000742, 44.42947 ], "pop": 652, "state": "WI" }, { "_id": "54757", "city": "NEW AUBURN", "loc": [ -91.519747, 45.23562 ], "pop": 2101, "state": "WI" }, { "_id": "54758", "city": "OSSEO", "loc": [ -91.219148, 44.559923 ], "pop": 4347, "state": "WI" }, { "_id": "54759", "city": "PEPIN", "loc": [ -92.139353, 44.458687 ], "pop": 1504, "state": "WI" }, { "_id": "54761", "city": "PLUM CITY", "loc": [ -92.183725, 44.635979 ], "pop": 1050, "state": "WI" }, { "_id": "54762", "city": "PRAIRIE FARM", "loc": [ -91.974205, 45.246183 ], "pop": 1061, "state": "WI" }, { "_id": "54763", "city": "RIDGELAND", "loc": [ -91.879024, 45.186773 ], "pop": 863, "state": "WI" }, { "_id": "54765", "city": "SAND CREEK", "loc": [ -91.701446, 45.170513 ], "pop": 501, "state": "WI" }, { "_id": "54766", "city": "SHELDON", "loc": [ -90.914148, 45.318171 ], "pop": 1711, "state": "WI" }, { "_id": "54767", "city": "SPRING VALLEY", "loc": [ -92.290599, 44.835569 ], "pop": 2746, "state": "WI" }, { "_id": "54768", "city": "STANLEY", "loc": [ -90.938935, 44.968872 ], "pop": 3157, "state": "WI" }, { "_id": "54769", "city": "STOCKHOLM", "loc": [ -92.22842900000001, 44.500441 ], "pop": 434, "state": "WI" }, { "_id": "54770", "city": "STRUM", "loc": [ -91.38327099999999, 44.567356 ], "pop": 1560, "state": "WI" }, { "_id": "54771", "city": "THORP", "loc": [ -90.80286099999999, 44.957319 ], "pop": 4803, "state": "WI" }, { "_id": "54772", "city": "WHEELER", "loc": [ -91.887055, 45.071856 ], "pop": 1094, "state": "WI" }, { "_id": "54773", "city": "WHITEHALL", "loc": [ -91.302953, 44.382683 ], "pop": 3330, "state": "WI" }, { "_id": "54801", "city": "SPOONER", "loc": [ -91.91555, 45.850468 ], "pop": 5384, "state": "WI" }, { "_id": "54805", "city": "ALMENA", "loc": [ -92.002691, 45.419507 ], "pop": 3180, "state": "WI" }, { "_id": "54806", "city": "MOQUAH", "loc": [ -90.876712, 46.577948 ], "pop": 12254, "state": "WI" }, { "_id": "54810", "city": "BALSAM LAKE", "loc": [ -92.41495399999999, 45.458845 ], "pop": 1765, "state": "WI" }, { "_id": "54812", "city": "BARRON", "loc": [ -91.84996, 45.400535 ], "pop": 4049, "state": "WI" }, { "_id": "54813", "city": "BARRONETT", "loc": [ -92.019595, 45.618995 ], "pop": 804, "state": "WI" }, { "_id": "54814", "city": "BAYFIELD", "loc": [ -90.821681, 46.835359 ], "pop": 2375, "state": "WI" }, { "_id": "54817", "city": "BIRCHWOOD", "loc": [ -91.577564, 45.640296 ], "pop": 1962, "state": "WI" }, { "_id": "54819", "city": "BRUCE", "loc": [ -91.290622, 45.447923 ], "pop": 2654, "state": "WI" }, { "_id": "54820", "city": "BRULE", "loc": [ -91.553862, 46.576318 ], "pop": 902, "state": "WI" }, { "_id": "54821", "city": "CABLE", "loc": [ -91.22443800000001, 46.217155 ], "pop": 1311, "state": "WI" }, { "_id": "54822", "city": "CAMERON", "loc": [ -91.730992, 45.403836 ], "pop": 3314, "state": "WI" }, { "_id": "54824", "city": "CENTURIA", "loc": [ -92.547741, 45.448369 ], "pop": 1791, "state": "WI" }, { "_id": "54826", "city": "COMSTOCK", "loc": [ -92.085961, 45.491114 ], "pop": 473, "state": "WI" }, { "_id": "54827", "city": "CORNUCOPIA", "loc": [ -91.097421, 46.837171 ], "pop": 242, "state": "WI" }, { "_id": "54828", "city": "NEW POST", "loc": [ -91.327825, 45.809664 ], "pop": 377, "state": "WI" }, { "_id": "54829", "city": "CUMBERLAND", "loc": [ -92.029709, 45.5403 ], "pop": 4229, "state": "WI" }, { "_id": "54830", "city": "DAIRYLAND", "loc": [ -92.265995, 46.029681 ], "pop": 1855, "state": "WI" }, { "_id": "54832", "city": "DRUMMOND", "loc": [ -91.285569, 46.311896 ], "pop": 329, "state": "WI" }, { "_id": "54835", "city": "EXELAND", "loc": [ -91.22381900000001, 45.675298 ], "pop": 939, "state": "WI" }, { "_id": "54836", "city": "FOXBORO", "loc": [ -92.149254, 46.487511 ], "pop": 1528, "state": "WI" }, { "_id": "54837", "city": "CLAM FALLS", "loc": [ -92.42648199999999, 45.665314 ], "pop": 4011, "state": "WI" }, { "_id": "54838", "city": "GORDON", "loc": [ -91.803301, 46.233603 ], "pop": 1088, "state": "WI" }, { "_id": "54839", "city": "GRAND VIEW", "loc": [ -91.107465, 46.357682 ], "pop": 280, "state": "WI" }, { "_id": "54840", "city": "EVERGREEN", "loc": [ -92.662685, 45.761312 ], "pop": 4008, "state": "WI" }, { "_id": "54843", "city": "NORTH WOODS BEAC", "loc": [ -91.397659, 46.001404 ], "pop": 9339, "state": "WI" }, { "_id": "54844", "city": "HERBSTER", "loc": [ -91.233193, 46.82128 ], "pop": 230, "state": "WI" }, { "_id": "54845", "city": "HERTEL", "loc": [ -92.14041899999999, 45.807561 ], "pop": 110, "state": "WI" }, { "_id": "54846", "city": "HIGH BRIDGE", "loc": [ -90.73826, 46.379613 ], "pop": 536, "state": "WI" }, { "_id": "54847", "city": "IRON RIVER", "loc": [ -91.42105599999999, 46.578984 ], "pop": 1777, "state": "WI" }, { "_id": "54848", "city": "LADYSMITH", "loc": [ -91.10880400000001, 45.471941 ], "pop": 6737, "state": "WI" }, { "_id": "54849", "city": "LAKE NEBAGAMON", "loc": [ -91.74024300000001, 46.502347 ], "pop": 1824, "state": "WI" }, { "_id": "54850", "city": "LA POINTE", "loc": [ -90.603622, 46.846675 ], "pop": 17, "state": "WI" }, { "_id": "54853", "city": "LUCK", "loc": [ -92.416391, 45.556799 ], "pop": 2131, "state": "WI" }, { "_id": "54854", "city": "MAPLE", "loc": [ -91.702015, 46.620591 ], "pop": 891, "state": "WI" }, { "_id": "54855", "city": "MARENGO", "loc": [ -90.839991, 46.407112 ], "pop": 592, "state": "WI" }, { "_id": "54856", "city": "DELTA", "loc": [ -91.05751100000001, 46.457285 ], "pop": 1519, "state": "WI" }, { "_id": "54858", "city": "MILLTOWN", "loc": [ -92.501739, 45.527082 ], "pop": 1570, "state": "WI" }, { "_id": "54859", "city": "MINONG", "loc": [ -91.850628, 46.10445 ], "pop": 1451, "state": "WI" }, { "_id": "54862", "city": "OJIBWA", "loc": [ -91.110922, 45.785351 ], "pop": 401, "state": "WI" }, { "_id": "54864", "city": "POPLAR", "loc": [ -91.825345, 46.57708 ], "pop": 1064, "state": "WI" }, { "_id": "54865", "city": "PORT WING", "loc": [ -91.392016, 46.76204 ], "pop": 544, "state": "WI" }, { "_id": "54867", "city": "RADISSON", "loc": [ -91.22615, 45.773359 ], "pop": 509, "state": "WI" }, { "_id": "54868", "city": "CANTON", "loc": [ -91.73354399999999, 45.510466 ], "pop": 13996, "state": "WI" }, { "_id": "54870", "city": "SARONA", "loc": [ -91.762103, 45.708532 ], "pop": 1201, "state": "WI" }, { "_id": "54871", "city": "SHELL LAKE", "loc": [ -91.960606, 45.753598 ], "pop": 3450, "state": "WI" }, { "_id": "54872", "city": "SIREN", "loc": [ -92.389151, 45.78214 ], "pop": 2495, "state": "WI" }, { "_id": "54873", "city": "BARNES", "loc": [ -91.77015400000001, 46.388821 ], "pop": 2443, "state": "WI" }, { "_id": "54874", "city": "WENTWORTH", "loc": [ -91.94580499999999, 46.588659 ], "pop": 3029, "state": "WI" }, { "_id": "54875", "city": "EARL", "loc": [ -91.677734, 45.960384 ], "pop": 970, "state": "WI" }, { "_id": "54876", "city": "STONE LAKE", "loc": [ -91.509291, 45.833733 ], "pop": 1662, "state": "WI" }, { "_id": "54880", "city": "SUPERIOR", "loc": [ -92.091174, 46.701552 ], "pop": 29513, "state": "WI" }, { "_id": "54888", "city": "TREGO", "loc": [ -91.858051, 45.951556 ], "pop": 1037, "state": "WI" }, { "_id": "54889", "city": "TURTLE LAKE", "loc": [ -92.17814199999999, 45.421349 ], "pop": 2048, "state": "WI" }, { "_id": "54891", "city": "WASHBURN", "loc": [ -90.909516, 46.680595 ], "pop": 3177, "state": "WI" }, { "_id": "54893", "city": "WEBSTER", "loc": [ -92.322722, 45.874001 ], "pop": 3012, "state": "WI" }, { "_id": "54895", "city": "WEYERHAEUSER", "loc": [ -91.428944, 45.426347 ], "pop": 858, "state": "WI" }, { "_id": "54896", "city": "LORETTA", "loc": [ -90.949591, 45.841419 ], "pop": 1385, "state": "WI" }, { "_id": "54901", "city": "OSHKOSH", "loc": [ -88.54363499999999, 44.021962 ], "pop": 57187, "state": "WI" }, { "_id": "54904", "city": "OSHKOSH", "loc": [ -88.607015, 44.030356 ], "pop": 12608, "state": "WI" }, { "_id": "54909", "city": "ALMOND", "loc": [ -89.35836399999999, 44.289832 ], "pop": 2002, "state": "WI" }, { "_id": "54911", "city": "APPLETON", "loc": [ -88.397649, 44.277325 ], "pop": 25970, "state": "WI" }, { "_id": "54914", "city": "APPLETON", "loc": [ -88.432608, 44.270992 ], "pop": 23028, "state": "WI" }, { "_id": "54915", "city": "APPLETON", "loc": [ -88.399902, 44.26351 ], "pop": 42119, "state": "WI" }, { "_id": "54921", "city": "BANCROFT", "loc": [ -89.530438, 44.30648 ], "pop": 1368, "state": "WI" }, { "_id": "54922", "city": "BEAR CREEK", "loc": [ -88.740375, 44.5348 ], "pop": 1488, "state": "WI" }, { "_id": "54923", "city": "BERLIN", "loc": [ -88.949009, 43.976936 ], "pop": 8132, "state": "WI" }, { "_id": "54928", "city": "CAROLINE", "loc": [ -88.888749, 44.727574 ], "pop": 293, "state": "WI" }, { "_id": "54929", "city": "CLINTONVILLE", "loc": [ -88.742999, 44.636442 ], "pop": 8902, "state": "WI" }, { "_id": "54930", "city": "COLOMA", "loc": [ -89.494332, 44.027462 ], "pop": 1364, "state": "WI" }, { "_id": "54932", "city": "ELDORADO", "loc": [ -88.63882700000001, 43.841471 ], "pop": 765, "state": "WI" }, { "_id": "54935", "city": "TAYCHEEDAH", "loc": [ -88.429149, 43.770446 ], "pop": 37093, "state": "WI" }, { "_id": "54937", "city": "NORTH FOND DU LA", "loc": [ -88.481264, 43.792633 ], "pop": 14665, "state": "WI" }, { "_id": "54940", "city": "FREMONT", "loc": [ -88.844852, 44.237884 ], "pop": 3211, "state": "WI" }, { "_id": "54941", "city": "GREEN LAKE", "loc": [ -88.96847, 43.844383 ], "pop": 2504, "state": "WI" }, { "_id": "54942", "city": "GREENVILLE", "loc": [ -88.569579, 44.299747 ], "pop": 1722, "state": "WI" }, { "_id": "54943", "city": "HANCOCK", "loc": [ -89.534448, 44.129743 ], "pop": 1214, "state": "WI" }, { "_id": "54944", "city": "HORTONVILLE", "loc": [ -88.62813, 44.327306 ], "pop": 5602, "state": "WI" }, { "_id": "54945", "city": "IOLA", "loc": [ -89.137311, 44.532183 ], "pop": 2589, "state": "WI" }, { "_id": "54946", "city": "KING", "loc": [ -89.113739, 44.267332 ], "pop": 661, "state": "WI" }, { "_id": "54947", "city": "LARSEN", "loc": [ -88.696305, 44.198421 ], "pop": 1863, "state": "WI" }, { "_id": "54948", "city": "LEOPOLIS", "loc": [ -88.87222300000001, 44.781188 ], "pop": 403, "state": "WI" }, { "_id": "54949", "city": "MANAWA", "loc": [ -88.916444, 44.470148 ], "pop": 2749, "state": "WI" }, { "_id": "54950", "city": "MARION", "loc": [ -88.876706, 44.679414 ], "pop": 3071, "state": "WI" }, { "_id": "54952", "city": "MENASHA", "loc": [ -88.417536, 44.211164 ], "pop": 22505, "state": "WI" }, { "_id": "54956", "city": "NEENAH", "loc": [ -88.479201, 44.181094 ], "pop": 34261, "state": "WI" }, { "_id": "54960", "city": "NESHKORO", "loc": [ -89.233572, 43.898943 ], "pop": 2210, "state": "WI" }, { "_id": "54961", "city": "NEW LONDON", "loc": [ -88.75542799999999, 44.392847 ], "pop": 13037, "state": "WI" }, { "_id": "54962", "city": "OGDENSBURG", "loc": [ -89.01185099999999, 44.467803 ], "pop": 1509, "state": "WI" }, { "_id": "54963", "city": "OMRO", "loc": [ -88.75193299999999, 44.035678 ], "pop": 5678, "state": "WI" }, { "_id": "54964", "city": "PICKETT", "loc": [ -88.71345700000001, 43.900917 ], "pop": 518, "state": "WI" }, { "_id": "54965", "city": "PINE RIVER", "loc": [ -89.040415, 44.160393 ], "pop": 2148, "state": "WI" }, { "_id": "54966", "city": "PLAINFIELD", "loc": [ -89.455896, 44.209079 ], "pop": 2336, "state": "WI" }, { "_id": "54967", "city": "POY SIPPI", "loc": [ -88.926835, 44.110069 ], "pop": 232, "state": "WI" }, { "_id": "54968", "city": "PRINCETON", "loc": [ -89.12491300000001, 43.843827 ], "pop": 3101, "state": "WI" }, { "_id": "54970", "city": "REDGRANITE", "loc": [ -89.098125, 44.04381 ], "pop": 2093, "state": "WI" }, { "_id": "54971", "city": "RIPON", "loc": [ -88.842433, 43.845402 ], "pop": 10694, "state": "WI" }, { "_id": "54974", "city": "ROSENDALE", "loc": [ -88.641704, 43.788903 ], "pop": 2012, "state": "WI" }, { "_id": "54977", "city": "SCANDINAVIA", "loc": [ -89.165042, 44.460436 ], "pop": 1097, "state": "WI" }, { "_id": "54978", "city": "TILLEDA", "loc": [ -88.907498, 44.811812 ], "pop": 58, "state": "WI" }, { "_id": "54979", "city": "VAN DYNE", "loc": [ -88.510008, 43.873399 ], "pop": 1403, "state": "WI" }, { "_id": "54981", "city": "WAUPACA", "loc": [ -89.11014299999999, 44.348101 ], "pop": 11716, "state": "WI" }, { "_id": "54982", "city": "WAUTOMA", "loc": [ -89.26655100000001, 44.065576 ], "pop": 6318, "state": "WI" }, { "_id": "54983", "city": "WEYAUWEGA", "loc": [ -88.941047, 44.320973 ], "pop": 3886, "state": "WI" }, { "_id": "54984", "city": "WILD ROSE", "loc": [ -89.195252, 44.183433 ], "pop": 2127, "state": "WI" }, { "_id": "54986", "city": "WINNECONNE", "loc": [ -88.721384, 44.118704 ], "pop": 3887, "state": "WI" }, { "_id": "55001", "city": "AFTON", "loc": [ -92.823358, 44.86965 ], "pop": 4357, "state": "MN" }, { "_id": "55003", "city": "BAYPORT", "loc": [ -92.784375, 45.021405 ], "pop": 3200, "state": "MN" }, { "_id": "55005", "city": "EAST BETHEL", "loc": [ -93.233088, 45.394114 ], "pop": 2821, "state": "MN" }, { "_id": "55006", "city": "BRAHAM", "loc": [ -93.203695, 45.717547 ], "pop": 1944, "state": "MN" }, { "_id": "55007", "city": "QUAMBA", "loc": [ -92.98347, 45.938694 ], "pop": 1222, "state": "MN" }, { "_id": "55008", "city": "CAMBRIDGE", "loc": [ -93.288935, 45.557591 ], "pop": 14444, "state": "MN" }, { "_id": "55009", "city": "CANNON FALLS", "loc": [ -92.863995, 44.495985 ], "pop": 7590, "state": "MN" }, { "_id": "55010", "city": "CASTLE ROCK", "loc": [ -93.109241, 44.594216 ], "pop": 1480, "state": "MN" }, { "_id": "55011", "city": "CEDAR EAST BETHE", "loc": [ -93.265834, 45.336494 ], "pop": 6874, "state": "MN" }, { "_id": "55013", "city": "CHISAGO CITY", "loc": [ -92.892134, 45.361144 ], "pop": 2905, "state": "MN" }, { "_id": "55014", "city": "CIRCLE PINES", "loc": [ -93.143984, 45.152841 ], "pop": 19791, "state": "MN" }, { "_id": "55016", "city": "COTTAGE GROVE", "loc": [ -92.939283, 44.830824 ], "pop": 22265, "state": "MN" }, { "_id": "55017", "city": "DALBO", "loc": [ -93.441918, 45.678735 ], "pop": 616, "state": "MN" }, { "_id": "55018", "city": "STANTON", "loc": [ -92.974779, 44.423884 ], "pop": 2009, "state": "MN" }, { "_id": "55019", "city": "DUNDAS", "loc": [ -93.20368999999999, 44.395537 ], "pop": 803, "state": "MN" }, { "_id": "55020", "city": "ELKO", "loc": [ -93.383555, 44.58945 ], "pop": 4146, "state": "MN" }, { "_id": "55021", "city": "FARIBAULT", "loc": [ -93.28179, 44.294457 ], "pop": 21450, "state": "MN" }, { "_id": "55024", "city": "FARMINGTON", "loc": [ -93.153891, 44.662799 ], "pop": 10145, "state": "MN" }, { "_id": "55025", "city": "FOREST LAKE", "loc": [ -92.97489400000001, 45.268499 ], "pop": 14749, "state": "MN" }, { "_id": "55026", "city": "FRONTENAC", "loc": [ -92.328103, 44.487176 ], "pop": 1698, "state": "MN" }, { "_id": "55027", "city": "GOODHUE", "loc": [ -92.571743, 44.402178 ], "pop": 1928, "state": "MN" }, { "_id": "55030", "city": "GRASSTON", "loc": [ -93.196226, 45.772926 ], "pop": 1007, "state": "MN" }, { "_id": "55031", "city": "HAMPTON", "loc": [ -92.946673, 44.602848 ], "pop": 1780, "state": "MN" }, { "_id": "55032", "city": "HARRIS", "loc": [ -93.039545, 45.596205 ], "pop": 2026, "state": "MN" }, { "_id": "55033", "city": "WELCH", "loc": [ -92.862566, 44.718932 ], "pop": 20769, "state": "MN" }, { "_id": "55037", "city": "HINCKLEY", "loc": [ -92.899333, 46.018876 ], "pop": 2611, "state": "MN" }, { "_id": "55038", "city": "CENTERVILLE", "loc": [ -93.00349300000001, 45.1628 ], "pop": 6520, "state": "MN" }, { "_id": "55040", "city": "ISANTI", "loc": [ -93.22656499999999, 45.468212 ], "pop": 8004, "state": "MN" }, { "_id": "55041", "city": "LAKE CITY", "loc": [ -92.283778, 44.430493 ], "pop": 5154, "state": "MN" }, { "_id": "55042", "city": "LAKE ELMO", "loc": [ -92.90564999999999, 44.994609 ], "pop": 5903, "state": "MN" }, { "_id": "55043", "city": "LAKELAND", "loc": [ -92.771592, 44.939384 ], "pop": 3792, "state": "MN" }, { "_id": "55044", "city": "LAKEVILLE", "loc": [ -93.257802, 44.674865 ], "pop": 17741, "state": "MN" }, { "_id": "55045", "city": "LINDSTROM", "loc": [ -92.84207600000001, 45.387265 ], "pop": 5991, "state": "MN" }, { "_id": "55046", "city": "VESELI", "loc": [ -93.42359399999999, 44.462888 ], "pop": 4020, "state": "MN" }, { "_id": "55047", "city": "MARINE ON SAINT", "loc": [ -92.822952, 45.183119 ], "pop": 4310, "state": "MN" }, { "_id": "55049", "city": "MEDFORD", "loc": [ -93.24372099999999, 44.17415 ], "pop": 1305, "state": "MN" }, { "_id": "55051", "city": "MORA", "loc": [ -93.294234, 45.895786 ], "pop": 10652, "state": "MN" }, { "_id": "55052", "city": "MORRISTOWN", "loc": [ -93.452512, 44.234183 ], "pop": 1425, "state": "MN" }, { "_id": "55053", "city": "NERSTRAND", "loc": [ -93.0855, 44.353769 ], "pop": 687, "state": "MN" }, { "_id": "55055", "city": "NEWPORT", "loc": [ -92.998603, 44.872522 ], "pop": 3720, "state": "MN" }, { "_id": "55056", "city": "NORTH BRANCH", "loc": [ -92.93709699999999, 45.516479 ], "pop": 6024, "state": "MN" }, { "_id": "55057", "city": "NORTHFIELD", "loc": [ -93.166826, 44.458724 ], "pop": 17995, "state": "MN" }, { "_id": "55060", "city": "OWATONNA", "loc": [ -93.21914, 44.080478 ], "pop": 23860, "state": "MN" }, { "_id": "55063", "city": "BEROUN", "loc": [ -92.98260399999999, 45.832273 ], "pop": 6858, "state": "MN" }, { "_id": "55065", "city": "RANDOLPH", "loc": [ -93.01961900000001, 44.527386 ], "pop": 370, "state": "MN" }, { "_id": "55066", "city": "RED WING", "loc": [ -92.548559, 44.552779 ], "pop": 17033, "state": "MN" }, { "_id": "55067", "city": "ROCK CREEK", "loc": [ -92.930826, 45.762404 ], "pop": 1040, "state": "MN" }, { "_id": "55068", "city": "ROSEMOUNT", "loc": [ -93.158844, 44.728919 ], "pop": 14747, "state": "MN" }, { "_id": "55069", "city": "RUSH CITY", "loc": [ -92.99787600000001, 45.684496 ], "pop": 3566, "state": "MN" }, { "_id": "55070", "city": "SAINT FRANCIS", "loc": [ -93.359832, 45.390284 ], "pop": 2789, "state": "MN" }, { "_id": "55071", "city": "SAINT PAUL PARK", "loc": [ -92.987331, 44.834404 ], "pop": 5517, "state": "MN" }, { "_id": "55072", "city": "MARKVILLE", "loc": [ -92.87100100000001, 46.121355 ], "pop": 3299, "state": "MN" }, { "_id": "55073", "city": "SCANDIA", "loc": [ -92.82915800000001, 45.269666 ], "pop": 2024, "state": "MN" }, { "_id": "55074", "city": "SHAFER", "loc": [ -92.76088900000001, 45.357561 ], "pop": 1519, "state": "MN" }, { "_id": "55075", "city": "SOUTH SAINT PAUL", "loc": [ -93.046013, 44.888128 ], "pop": 20027, "state": "MN" }, { "_id": "55076", "city": "INVER GROVE HEIG", "loc": [ -93.034746, 44.841966 ], "pop": 14444, "state": "MN" }, { "_id": "55077", "city": "INVER GROVE HEIG", "loc": [ -93.073938, 44.850123 ], "pop": 8309, "state": "MN" }, { "_id": "55079", "city": "STACY", "loc": [ -93.017743, 45.397509 ], "pop": 5936, "state": "MN" }, { "_id": "55080", "city": "STANCHFIELD", "loc": [ -93.243302, 45.667513 ], "pop": 913, "state": "MN" }, { "_id": "55082", "city": "OAK PARK HEIGHTS", "loc": [ -92.830032, 45.050007 ], "pop": 25247, "state": "MN" }, { "_id": "55084", "city": "TAYLORS FALLS", "loc": [ -92.69059300000001, 45.41825 ], "pop": 1421, "state": "MN" }, { "_id": "55087", "city": "WARSAW", "loc": [ -93.364181, 44.250439 ], "pop": 1236, "state": "MN" }, { "_id": "55088", "city": "WEBSTER", "loc": [ -93.334418, 44.502633 ], "pop": 1452, "state": "MN" }, { "_id": "55089", "city": "WELCH", "loc": [ -92.726259, 44.603006 ], "pop": 678, "state": "MN" }, { "_id": "55092", "city": "EAST BETHEL", "loc": [ -93.06856500000001, 45.324337 ], "pop": 7514, "state": "MN" }, { "_id": "55101", "city": "SAINT PAUL", "loc": [ -93.083167, 44.969963 ], "pop": 18352, "state": "MN" }, { "_id": "55102", "city": "SAINT PAUL", "loc": [ -93.120852, 44.937228 ], "pop": 18585, "state": "MN" }, { "_id": "55103", "city": "SAINT PAUL", "loc": [ -93.121594, 44.960798 ], "pop": 12169, "state": "MN" }, { "_id": "55104", "city": "SAINT PAUL", "loc": [ -93.15797000000001, 44.953179 ], "pop": 46396, "state": "MN" }, { "_id": "55105", "city": "SAINT PAUL", "loc": [ -93.165148, 44.934723 ], "pop": 26216, "state": "MN" }, { "_id": "55106", "city": "SAINT PAUL", "loc": [ -93.048817, 44.968384 ], "pop": 47905, "state": "MN" }, { "_id": "55107", "city": "WEST SAINT PAUL", "loc": [ -93.086157, 44.927235 ], "pop": 15825, "state": "MN" }, { "_id": "55108", "city": "LAUDERDALE", "loc": [ -93.17458000000001, 44.982217 ], "pop": 17285, "state": "MN" }, { "_id": "55109", "city": "NORTH SAINT PAUL", "loc": [ -93.017072, 45.011859 ], "pop": 28263, "state": "MN" }, { "_id": "55110", "city": "WHITE BEAR LAKE", "loc": [ -93.01129899999999, 45.074527 ], "pop": 38649, "state": "MN" }, { "_id": "55111", "city": "FORT SNELLING", "loc": [ -93.202579, 44.901548 ], "pop": 97, "state": "MN" }, { "_id": "55112", "city": "NEW BRIGHTON", "loc": [ -93.199691, 45.074129 ], "pop": 44128, "state": "MN" }, { "_id": "55113", "city": "ROSEVILLE", "loc": [ -93.14924499999999, 45.012876 ], "pop": 37302, "state": "MN" }, { "_id": "55114", "city": "SAINT PAUL", "loc": [ -93.19806699999999, 44.967968 ], "pop": 1402, "state": "MN" }, { "_id": "55115", "city": "WHITE BEAR LAKE", "loc": [ -92.954847, 45.061132 ], "pop": 6201, "state": "MN" }, { "_id": "55116", "city": "SAINT PAUL", "loc": [ -93.172747, 44.914007 ], "pop": 23868, "state": "MN" }, { "_id": "55117", "city": "LITTLE CANADA", "loc": [ -93.10365899999999, 44.992165 ], "pop": 38771, "state": "MN" }, { "_id": "55118", "city": "WEST SAINT PAUL", "loc": [ -93.096435, 44.902691 ], "pop": 25866, "state": "MN" }, { "_id": "55119", "city": "MAPLEWOOD", "loc": [ -93.008019, 44.955384 ], "pop": 33887, "state": "MN" }, { "_id": "55120", "city": "EAGAN", "loc": [ -93.12902, 44.873825 ], "pop": 3113, "state": "MN" }, { "_id": "55121", "city": "EAGAN", "loc": [ -93.16753, 44.843039 ], "pop": 6047, "state": "MN" }, { "_id": "55122", "city": "EAGAN", "loc": [ -93.19693700000001, 44.803593 ], "pop": 23875, "state": "MN" }, { "_id": "55123", "city": "EAGAN", "loc": [ -93.14135, 44.809764 ], "pop": 17487, "state": "MN" }, { "_id": "55124", "city": "APPLE VALLEY", "loc": [ -93.20775999999999, 44.746147 ], "pop": 34598, "state": "MN" }, { "_id": "55125", "city": "WOODBURY", "loc": [ -92.951413, 44.916195 ], "pop": 20075, "state": "MN" }, { "_id": "55126", "city": "SHOREVIEW", "loc": [ -93.134367, 45.083334 ], "pop": 24597, "state": "MN" }, { "_id": "55127", "city": "VADNAIS HEIGHTS", "loc": [ -93.07875, 45.070839 ], "pop": 14628, "state": "MN" }, { "_id": "55128", "city": "OAKDALE", "loc": [ -92.96812799999999, 44.984648 ], "pop": 19099, "state": "MN" }, { "_id": "55150", "city": "MENDOTA", "loc": [ -93.161221, 44.885796 ], "pop": 164, "state": "MN" }, { "_id": "55301", "city": "ALBERTVILLE", "loc": [ -93.646899, 45.253425 ], "pop": 3132, "state": "MN" }, { "_id": "55302", "city": "ANNANDALE", "loc": [ -94.106072, 45.248272 ], "pop": 6174, "state": "MN" }, { "_id": "55303", "city": "RAMSEY", "loc": [ -93.407822, 45.238537 ], "pop": 33161, "state": "MN" }, { "_id": "55304", "city": "HAM LAKE", "loc": [ -93.284531, 45.25068 ], "pop": 25122, "state": "MN" }, { "_id": "55307", "city": "ARLINGTON", "loc": [ -94.076195, 44.615279 ], "pop": 2997, "state": "MN" }, { "_id": "55308", "city": "BECKER", "loc": [ -93.84096599999999, 45.436539 ], "pop": 3589, "state": "MN" }, { "_id": "55309", "city": "BIG LAKE", "loc": [ -93.73991700000001, 45.350648 ], "pop": 6703, "state": "MN" }, { "_id": "55310", "city": "BIRD ISLAND", "loc": [ -94.871634, 44.750729 ], "pop": 1885, "state": "MN" }, { "_id": "55312", "city": "BROWNTON", "loc": [ -94.330611, 44.728145 ], "pop": 1686, "state": "MN" }, { "_id": "55313", "city": "BUFFALO", "loc": [ -93.863479, 45.181371 ], "pop": 8942, "state": "MN" }, { "_id": "55314", "city": "BUFFALO LAKE", "loc": [ -94.591207, 44.770885 ], "pop": 1431, "state": "MN" }, { "_id": "55315", "city": "CARVER", "loc": [ -93.687949, 44.716898 ], "pop": 1181, "state": "MN" }, { "_id": "55316", "city": "CHAMPLIN", "loc": [ -93.381927, 45.170042 ], "pop": 16849, "state": "MN" }, { "_id": "55317", "city": "CHANHASSEN", "loc": [ -93.535906, 44.867924 ], "pop": 8499, "state": "MN" }, { "_id": "55318", "city": "CHASKA", "loc": [ -93.60831399999999, 44.806071 ], "pop": 13907, "state": "MN" }, { "_id": "55319", "city": "CLEAR LAKE", "loc": [ -93.968391, 45.479477 ], "pop": 3280, "state": "MN" }, { "_id": "55320", "city": "CLEARWATER", "loc": [ -94.04524600000001, 45.387694 ], "pop": 1752, "state": "MN" }, { "_id": "55321", "city": "COKATO", "loc": [ -94.19105399999999, 45.074761 ], "pop": 4053, "state": "MN" }, { "_id": "55322", "city": "COLOGNE", "loc": [ -93.798249, 44.764591 ], "pop": 2298, "state": "MN" }, { "_id": "55324", "city": "DARWIN", "loc": [ -94.424926, 45.102949 ], "pop": 933, "state": "MN" }, { "_id": "55325", "city": "DASSEL", "loc": [ -94.33047500000001, 45.103208 ], "pop": 4818, "state": "MN" }, { "_id": "55327", "city": "DAYTON", "loc": [ -93.466795, 45.198164 ], "pop": 4251, "state": "MN" }, { "_id": "55328", "city": "DELANO", "loc": [ -93.801644, 45.034222 ], "pop": 5574, "state": "MN" }, { "_id": "55329", "city": "EDEN VALLEY", "loc": [ -94.603911, 45.302006 ], "pop": 1955, "state": "MN" }, { "_id": "55330", "city": "ELK RIVER", "loc": [ -93.5814, 45.313601 ], "pop": 17703, "state": "MN" }, { "_id": "55331", "city": "EXCELSIOR", "loc": [ -93.579132, 44.900704 ], "pop": 15860, "state": "MN" }, { "_id": "55332", "city": "FAIRFAX", "loc": [ -94.72562600000001, 44.532942 ], "pop": 2250, "state": "MN" }, { "_id": "55333", "city": "FRANKLIN", "loc": [ -94.893094, 44.542132 ], "pop": 702, "state": "MN" }, { "_id": "55334", "city": "GAYLORD", "loc": [ -94.195543, 44.546298 ], "pop": 3099, "state": "MN" }, { "_id": "55335", "city": "GIBBON", "loc": [ -94.54667999999999, 44.560587 ], "pop": 1718, "state": "MN" }, { "_id": "55336", "city": "GLENCOE", "loc": [ -94.161554, 44.778001 ], "pop": 6275, "state": "MN" }, { "_id": "55337", "city": "BURNSVILLE", "loc": [ -93.275283, 44.76086 ], "pop": 51421, "state": "MN" }, { "_id": "55338", "city": "GREEN ISLE", "loc": [ -93.932635, 44.668665 ], "pop": 1353, "state": "MN" }, { "_id": "55339", "city": "HAMBURG", "loc": [ -93.96431699999999, 44.731452 ], "pop": 696, "state": "MN" }, { "_id": "55340", "city": "HAMEL", "loc": [ -93.575957, 45.079951 ], "pop": 4930, "state": "MN" }, { "_id": "55342", "city": "HECTOR", "loc": [ -94.70582400000001, 44.748489 ], "pop": 1896, "state": "MN" }, { "_id": "55343", "city": "EDEN PRAIRIE", "loc": [ -93.41645200000001, 44.933318 ], "pop": 40067, "state": "MN" }, { "_id": "55344", "city": "EDEN PRAIRIE", "loc": [ -93.437573, 44.857426 ], "pop": 7901, "state": "MN" }, { "_id": "55345", "city": "MINNETONKA", "loc": [ -93.48499700000001, 44.913808 ], "pop": 22535, "state": "MN" }, { "_id": "55346", "city": "EDEN PRAIRIE", "loc": [ -93.483028, 44.877106 ], "pop": 16269, "state": "MN" }, { "_id": "55347", "city": "EDEN PRAIRIE", "loc": [ -93.438934, 44.834217 ], "pop": 15141, "state": "MN" }, { "_id": "55349", "city": "HOWARD LAKE", "loc": [ -94.069515, 45.061594 ], "pop": 3443, "state": "MN" }, { "_id": "55350", "city": "HUTCHINSON", "loc": [ -94.384691, 44.894554 ], "pop": 15549, "state": "MN" }, { "_id": "55352", "city": "JORDAN", "loc": [ -93.61946, 44.671321 ], "pop": 4679, "state": "MN" }, { "_id": "55353", "city": "KIMBALL", "loc": [ -94.302837, 45.343584 ], "pop": 2226, "state": "MN" }, { "_id": "55354", "city": "LESTER PRAIRIE", "loc": [ -94.055094, 44.873898 ], "pop": 2160, "state": "MN" }, { "_id": "55355", "city": "LITCHFIELD", "loc": [ -94.526805, 45.126272 ], "pop": 8528, "state": "MN" }, { "_id": "55356", "city": "LONG LAKE", "loc": [ -93.58179800000001, 44.991228 ], "pop": 5700, "state": "MN" }, { "_id": "55357", "city": "LORETTO", "loc": [ -93.66916500000001, 45.106099 ], "pop": 1492, "state": "MN" }, { "_id": "55358", "city": "MAPLE LAKE", "loc": [ -93.963793, 45.220236 ], "pop": 4084, "state": "MN" }, { "_id": "55359", "city": "MAPLE PLAIN", "loc": [ -93.700214, 44.978686 ], "pop": 6885, "state": "MN" }, { "_id": "55360", "city": "MAYER", "loc": [ -93.885925, 44.902231 ], "pop": 1233, "state": "MN" }, { "_id": "55362", "city": "MONTICELLO", "loc": [ -93.802252, 45.295557 ], "pop": 8919, "state": "MN" }, { "_id": "55363", "city": "MONTROSE", "loc": [ -93.93176200000001, 45.089737 ], "pop": 2847, "state": "MN" }, { "_id": "55364", "city": "MOUND", "loc": [ -93.656087, 44.938158 ], "pop": 13251, "state": "MN" }, { "_id": "55366", "city": "NEW AUBURN", "loc": [ -94.20567, 44.675919 ], "pop": 784, "state": "MN" }, { "_id": "55367", "city": "NEW GERMANY", "loc": [ -93.97013099999999, 44.899431 ], "pop": 1136, "state": "MN" }, { "_id": "55368", "city": "NORWOOD", "loc": [ -93.93006699999999, 44.766786 ], "pop": 1761, "state": "MN" }, { "_id": "55369", "city": "MAPLE GROVE", "loc": [ -93.43987, 45.108636 ], "pop": 41581, "state": "MN" }, { "_id": "55370", "city": "PLATO", "loc": [ -94.050583, 44.765728 ], "pop": 990, "state": "MN" }, { "_id": "55371", "city": "PRINCETON", "loc": [ -93.596143, 45.585115 ], "pop": 8975, "state": "MN" }, { "_id": "55372", "city": "PRIOR LAKE", "loc": [ -93.41005699999999, 44.710694 ], "pop": 18539, "state": "MN" }, { "_id": "55373", "city": "ROCKFORD", "loc": [ -93.765832, 45.103074 ], "pop": 6268, "state": "MN" }, { "_id": "55374", "city": "ROGERS", "loc": [ -93.581445, 45.171484 ], "pop": 4957, "state": "MN" }, { "_id": "55376", "city": "SAINT MICHAEL", "loc": [ -93.65925300000001, 45.206409 ], "pop": 5441, "state": "MN" }, { "_id": "55378", "city": "SAVAGE", "loc": [ -93.343445, 44.761547 ], "pop": 7764, "state": "MN" }, { "_id": "55379", "city": "SHAKOPEE", "loc": [ -93.51974800000001, 44.7793 ], "pop": 14755, "state": "MN" }, { "_id": "55380", "city": "SILVER CREEK", "loc": [ -93.94962200000001, 45.326474 ], "pop": 1835, "state": "MN" }, { "_id": "55381", "city": "SILVER LAKE", "loc": [ -94.197383, 44.913945 ], "pop": 2012, "state": "MN" }, { "_id": "55382", "city": "SOUTH HAVEN", "loc": [ -94.162768, 45.346008 ], "pop": 4377, "state": "MN" }, { "_id": "55384", "city": "SPRING PARK", "loc": [ -93.63410399999999, 44.935566 ], "pop": 1571, "state": "MN" }, { "_id": "55385", "city": "STEWART", "loc": [ -94.451572, 44.725928 ], "pop": 1410, "state": "MN" }, { "_id": "55386", "city": "VICTORIA", "loc": [ -93.656094, 44.858223 ], "pop": 1367, "state": "MN" }, { "_id": "55387", "city": "WACONIA", "loc": [ -93.7784, 44.851029 ], "pop": 5844, "state": "MN" }, { "_id": "55388", "city": "WATERTOWN", "loc": [ -93.848159, 44.959533 ], "pop": 3520, "state": "MN" }, { "_id": "55389", "city": "WATKINS", "loc": [ -94.429677, 45.308652 ], "pop": 1998, "state": "MN" }, { "_id": "55390", "city": "WAVERLY", "loc": [ -93.954538, 45.041265 ], "pop": 1691, "state": "MN" }, { "_id": "55391", "city": "WAYZATA", "loc": [ -93.52058100000001, 44.958189 ], "pop": 15196, "state": "MN" }, { "_id": "55395", "city": "WINSTED", "loc": [ -94.05516799999999, 44.958459 ], "pop": 2548, "state": "MN" }, { "_id": "55396", "city": "WINTHROP", "loc": [ -94.36984699999999, 44.543566 ], "pop": 2630, "state": "MN" }, { "_id": "55397", "city": "YOUNG AMERICA", "loc": [ -93.918049, 44.792905 ], "pop": 2527, "state": "MN" }, { "_id": "55398", "city": "ZIMMERMAN", "loc": [ -93.58785899999999, 45.455321 ], "pop": 5786, "state": "MN" }, { "_id": "55401", "city": "MINNEAPOLIS", "loc": [ -93.26825100000001, 44.983473 ], "pop": 2716, "state": "MN" }, { "_id": "55402", "city": "MINNEAPOLIS", "loc": [ -93.275871, 44.976184 ], "pop": 261, "state": "MN" }, { "_id": "55403", "city": "MINNEAPOLIS", "loc": [ -93.282841, 44.967345 ], "pop": 14098, "state": "MN" }, { "_id": "55404", "city": "MINNEAPOLIS", "loc": [ -93.26416, 44.960891 ], "pop": 19903, "state": "MN" }, { "_id": "55405", "city": "MINNEAPOLIS", "loc": [ -93.29909600000001, 44.968734 ], "pop": 16148, "state": "MN" }, { "_id": "55406", "city": "MINNEAPOLIS", "loc": [ -93.221357, 44.938359 ], "pop": 31760, "state": "MN" }, { "_id": "55407", "city": "MINNEAPOLIS", "loc": [ -93.25449999999999, 44.937787 ], "pop": 34059, "state": "MN" }, { "_id": "55408", "city": "MINNEAPOLIS", "loc": [ -93.28617300000001, 44.946575 ], "pop": 29685, "state": "MN" }, { "_id": "55409", "city": "MINNEAPOLIS", "loc": [ -93.28182, 44.926378 ], "pop": 20415, "state": "MN" }, { "_id": "55410", "city": "EDINA", "loc": [ -93.31818699999999, 44.915366 ], "pop": 16834, "state": "MN" }, { "_id": "55411", "city": "MINNEAPOLIS", "loc": [ -93.30054800000001, 44.999601 ], "pop": 30088, "state": "MN" }, { "_id": "55412", "city": "MINNEAPOLIS", "loc": [ -93.30203299999999, 45.024236 ], "pop": 21329, "state": "MN" }, { "_id": "55413", "city": "MINNEAPOLIS", "loc": [ -93.255194, 44.997994 ], "pop": 12201, "state": "MN" }, { "_id": "55414", "city": "MINNEAPOLIS", "loc": [ -93.219904, 44.977908 ], "pop": 10535, "state": "MN" }, { "_id": "55415", "city": "MINNEAPOLIS", "loc": [ -93.264403, 44.971455 ], "pop": 4401, "state": "MN" }, { "_id": "55416", "city": "SAINT LOUIS PARK", "loc": [ -93.340344, 44.946899 ], "pop": 26211, "state": "MN" }, { "_id": "55417", "city": "MINNEAPOLIS", "loc": [ -93.23605999999999, 44.905371 ], "pop": 25445, "state": "MN" }, { "_id": "55418", "city": "MINNEAPOLIS", "loc": [ -93.24010800000001, 45.01923 ], "pop": 30904, "state": "MN" }, { "_id": "55419", "city": "MINNEAPOLIS", "loc": [ -93.288618, 44.902567 ], "pop": 19740, "state": "MN" }, { "_id": "55420", "city": "BLOOMINGTON", "loc": [ -93.276034, 44.837284 ], "pop": 22028, "state": "MN" }, { "_id": "55421", "city": "COLUMBIA HEIGHTS", "loc": [ -93.246095, 45.049582 ], "pop": 25668, "state": "MN" }, { "_id": "55422", "city": "ROBBINSDALE", "loc": [ -93.339769, 45.016722 ], "pop": 28922, "state": "MN" }, { "_id": "55423", "city": "RICHFIELD", "loc": [ -93.281351, 44.875731 ], "pop": 35710, "state": "MN" }, { "_id": "55424", "city": "EDINA", "loc": [ -93.335005, 44.904385 ], "pop": 12342, "state": "MN" }, { "_id": "55425", "city": "BLOOMINGTON", "loc": [ -93.249413, 44.843198 ], "pop": 8501, "state": "MN" }, { "_id": "55426", "city": "SAINT LOUIS PARK", "loc": [ -93.379627, 44.954448 ], "pop": 25951, "state": "MN" }, { "_id": "55427", "city": "GOLDEN VALLEY", "loc": [ -93.381585, 45.010374 ], "pop": 24406, "state": "MN" }, { "_id": "55428", "city": "CRYSTAL", "loc": [ -93.376908, 45.060299 ], "pop": 33233, "state": "MN" }, { "_id": "55429", "city": "BROOKLYN CENTER", "loc": [ -93.340203, 45.067667 ], "pop": 22597, "state": "MN" }, { "_id": "55430", "city": "BROOKLYN CENTER", "loc": [ -93.29906800000001, 45.061106 ], "pop": 21561, "state": "MN" }, { "_id": "55431", "city": "BLOOMINGTON", "loc": [ -93.31232199999999, 44.827776 ], "pop": 19428, "state": "MN" }, { "_id": "55432", "city": "FRIDLEY", "loc": [ -93.253905, 45.095695 ], "pop": 31132, "state": "MN" }, { "_id": "55433", "city": "COON RAPIDS", "loc": [ -93.32625299999999, 45.168192 ], "pop": 27580, "state": "MN" }, { "_id": "55434", "city": "BLAINE", "loc": [ -93.24255700000001, 45.168083 ], "pop": 33410, "state": "MN" }, { "_id": "55435", "city": "EDINA", "loc": [ -93.37145200000001, 44.877143 ], "pop": 8926, "state": "MN" }, { "_id": "55436", "city": "EDINA", "loc": [ -93.370997, 44.902305 ], "pop": 11750, "state": "MN" }, { "_id": "55437", "city": "BLOOMINGTON", "loc": [ -93.34349899999999, 44.823279 ], "pop": 19472, "state": "MN" }, { "_id": "55438", "city": "BLOOMINGTON", "loc": [ -93.38014099999999, 44.823924 ], "pop": 16896, "state": "MN" }, { "_id": "55439", "city": "EDINA", "loc": [ -93.33216899999999, 44.873716 ], "pop": 10571, "state": "MN" }, { "_id": "55441", "city": "PLYMOUTH", "loc": [ -93.422782, 45.009836 ], "pop": 16840, "state": "MN" }, { "_id": "55442", "city": "PLYMOUTH", "loc": [ -93.426316, 45.045151 ], "pop": 9893, "state": "MN" }, { "_id": "55443", "city": "BROOKLYN CENTER", "loc": [ -93.34018399999999, 45.105586 ], "pop": 20896, "state": "MN" }, { "_id": "55444", "city": "BROOKLYN CENTER", "loc": [ -93.30245499999999, 45.100172 ], "pop": 12538, "state": "MN" }, { "_id": "55445", "city": "BROOKLYN PARK", "loc": [ -93.37349500000001, 45.103956 ], "pop": 6398, "state": "MN" }, { "_id": "55446", "city": "PLYMOUTH", "loc": [ -93.472323, 45.032446 ], "pop": 7704, "state": "MN" }, { "_id": "55447", "city": "PLYMOUTH", "loc": [ -93.49469499999999, 44.998593 ], "pop": 16668, "state": "MN" }, { "_id": "55448", "city": "COON RAPIDS", "loc": [ -93.289699, 45.180626 ], "pop": 25234, "state": "MN" }, { "_id": "55450", "city": "MINNEAPOLIS", "loc": [ -93.24741400000001, 44.865883 ], "pop": 0, "state": "MN" }, { "_id": "55454", "city": "MINNEAPOLIS", "loc": [ -93.242898, 44.968161 ], "pop": 8815, "state": "MN" }, { "_id": "55455", "city": "MINNEAPOLIS", "loc": [ -93.23927999999999, 44.981562 ], "pop": 12216, "state": "MN" }, { "_id": "55599", "city": "LORETTO", "loc": [ -93.664534, 45.05604 ], "pop": 541, "state": "MN" }, { "_id": "55602", "city": "BRIMSON", "loc": [ -91.862521, 47.314162 ], "pop": 176, "state": "MN" }, { "_id": "55603", "city": "FINLAND", "loc": [ -91.209597, 47.419716 ], "pop": 565, "state": "MN" }, { "_id": "55604", "city": "GRAND MARAIS", "loc": [ -90.339114, 47.77577 ], "pop": 2404, "state": "MN" }, { "_id": "55605", "city": "GRAND PORTAGE", "loc": [ -89.69886200000001, 47.959065 ], "pop": 350, "state": "MN" }, { "_id": "55606", "city": "HOVLAND", "loc": [ -90.04756999999999, 47.83415 ], "pop": 218, "state": "MN" }, { "_id": "55607", "city": "ISABELLA", "loc": [ -91.51732699999999, 47.626719 ], "pop": 402, "state": "MN" }, { "_id": "55612", "city": "LUTSEN", "loc": [ -90.638059, 47.683066 ], "pop": 381, "state": "MN" }, { "_id": "55613", "city": "SCHROEDER", "loc": [ -90.933807, 47.542185 ], "pop": 174, "state": "MN" }, { "_id": "55614", "city": "LITTLE MARAIS", "loc": [ -91.277753, 47.299905 ], "pop": 2552, "state": "MN" }, { "_id": "55615", "city": "TOFTE", "loc": [ -90.783135, 47.760792 ], "pop": 341, "state": "MN" }, { "_id": "55616", "city": "TWO HARBORS", "loc": [ -91.678264, 47.039364 ], "pop": 6511, "state": "MN" }, { "_id": "55702", "city": "ALBORN", "loc": [ -92.557937, 46.978229 ], "pop": 601, "state": "MN" }, { "_id": "55703", "city": "ANGORA", "loc": [ -92.64133200000001, 47.757738 ], "pop": 291, "state": "MN" }, { "_id": "55704", "city": "ASKOV", "loc": [ -92.75281200000001, 46.196408 ], "pop": 919, "state": "MN" }, { "_id": "55705", "city": "AURORA", "loc": [ -92.24148599999999, 47.495096 ], "pop": 3674, "state": "MN" }, { "_id": "55706", "city": "BABBITT", "loc": [ -91.956951, 47.709121 ], "pop": 2014, "state": "MN" }, { "_id": "55707", "city": "BARNUM", "loc": [ -92.629167, 46.519616 ], "pop": 2028, "state": "MN" }, { "_id": "55709", "city": "BOVEY", "loc": [ -93.372322, 47.286788 ], "pop": 5077, "state": "MN" }, { "_id": "55710", "city": "BRITT", "loc": [ -92.632062, 47.65496 ], "pop": 1229, "state": "MN" }, { "_id": "55711", "city": "BROOKSTON", "loc": [ -92.643005, 46.838425 ], "pop": 621, "state": "MN" }, { "_id": "55712", "city": "BRUNO", "loc": [ -92.618994, 46.284496 ], "pop": 259, "state": "MN" }, { "_id": "55717", "city": "CANYON", "loc": [ -92.459361, 47.078525 ], "pop": 230, "state": "MN" }, { "_id": "55718", "city": "CARLTON", "loc": [ -92.470984, 46.6484 ], "pop": 3401, "state": "MN" }, { "_id": "55719", "city": "CHISHOLM", "loc": [ -92.861693, 47.500744 ], "pop": 7412, "state": "MN" }, { "_id": "55720", "city": "CLOQUET", "loc": [ -92.45282, 46.726041 ], "pop": 13503, "state": "MN" }, { "_id": "55721", "city": "COHASSET", "loc": [ -93.639154, 47.269112 ], "pop": 3694, "state": "MN" }, { "_id": "55723", "city": "COOK", "loc": [ -92.72103799999999, 47.844193 ], "pop": 2705, "state": "MN" }, { "_id": "55724", "city": "KELSEY", "loc": [ -92.44492099999999, 47.163803 ], "pop": 430, "state": "MN" }, { "_id": "55725", "city": "CRANE LAKE", "loc": [ -92.48959600000001, 48.259387 ], "pop": 74, "state": "MN" }, { "_id": "55726", "city": "CROMWELL", "loc": [ -92.873942, 46.671784 ], "pop": 1048, "state": "MN" }, { "_id": "55727", "city": "CULVER", "loc": [ -92.552403, 46.911886 ], "pop": 309, "state": "MN" }, { "_id": "55731", "city": "ELY", "loc": [ -91.85704200000001, 47.903435 ], "pop": 5685, "state": "MN" }, { "_id": "55732", "city": "EMBARRASS", "loc": [ -92.21011, 47.665847 ], "pop": 1143, "state": "MN" }, { "_id": "55733", "city": "ESKO", "loc": [ -92.35691799999999, 46.712551 ], "pop": 4102, "state": "MN" }, { "_id": "55734", "city": "EVELETH", "loc": [ -92.528037, 47.451047 ], "pop": 6135, "state": "MN" }, { "_id": "55735", "city": "FINLAYSON", "loc": [ -92.938924, 46.212111 ], "pop": 1264, "state": "MN" }, { "_id": "55736", "city": "FLOODWOOD", "loc": [ -92.91668199999999, 46.907589 ], "pop": 1475, "state": "MN" }, { "_id": "55740", "city": "GHEEN", "loc": [ -92.906892, 47.946475 ], "pop": 255, "state": "MN" }, { "_id": "55741", "city": "GILBERT", "loc": [ -92.40246399999999, 47.488487 ], "pop": 4721, "state": "MN" }, { "_id": "55742", "city": "GOODLAND", "loc": [ -93.146914, 47.192426 ], "pop": 437, "state": "MN" }, { "_id": "55744", "city": "LA PRAIRIE", "loc": [ -93.527672, 47.223472 ], "pop": 18067, "state": "MN" }, { "_id": "55746", "city": "HIBBING", "loc": [ -92.935582, 47.4156 ], "pop": 20816, "state": "MN" }, { "_id": "55748", "city": "HILL CITY", "loc": [ -93.599397, 46.996817 ], "pop": 762, "state": "MN" }, { "_id": "55749", "city": "HOLYOKE", "loc": [ -92.374955, 46.466445 ], "pop": 160, "state": "MN" }, { "_id": "55750", "city": "HOYT LAKES", "loc": [ -92.140046, 47.514957 ], "pop": 2348, "state": "MN" }, { "_id": "55751", "city": "IRON", "loc": [ -92.619502, 47.411455 ], "pop": 1210, "state": "MN" }, { "_id": "55752", "city": "JACOBSON", "loc": [ -93.306359, 46.977187 ], "pop": 387, "state": "MN" }, { "_id": "55756", "city": "KERRICK", "loc": [ -92.578, 46.379151 ], "pop": 487, "state": "MN" }, { "_id": "55757", "city": "KETTLE RIVER", "loc": [ -92.904746, 46.502899 ], "pop": 1136, "state": "MN" }, { "_id": "55760", "city": "MC GREGOR", "loc": [ -93.29562, 46.686424 ], "pop": 1897, "state": "MN" }, { "_id": "55762", "city": "MAHTOWA", "loc": [ -92.606505, 46.582588 ], "pop": 833, "state": "MN" }, { "_id": "55763", "city": "MAKINEN", "loc": [ -92.344584, 47.341603 ], "pop": 1028, "state": "MN" }, { "_id": "55765", "city": "MEADOWLANDS", "loc": [ -92.788357, 47.102064 ], "pop": 1172, "state": "MN" }, { "_id": "55766", "city": "MELRUDE", "loc": [ -92.42644, 47.242318 ], "pop": 121, "state": "MN" }, { "_id": "55767", "city": "MOOSE LAKE", "loc": [ -92.74664799999999, 46.44724 ], "pop": 2699, "state": "MN" }, { "_id": "55768", "city": "MOUNTAIN IRON", "loc": [ -92.624274, 47.513336 ], "pop": 1790, "state": "MN" }, { "_id": "55769", "city": "NASHWAUK", "loc": [ -93.216818, 47.42003 ], "pop": 4058, "state": "MN" }, { "_id": "55771", "city": "BUYCK", "loc": [ -92.845555, 47.933881 ], "pop": 1252, "state": "MN" }, { "_id": "55773", "city": "PARKVILLE", "loc": [ -92.584051, 47.510296 ], "pop": 1787, "state": "MN" }, { "_id": "55775", "city": "PENGILLY", "loc": [ -93.193667, 47.315089 ], "pop": 1173, "state": "MN" }, { "_id": "55779", "city": "SAGINAW", "loc": [ -92.391723, 46.879462 ], "pop": 3185, "state": "MN" }, { "_id": "55780", "city": "SAWYER", "loc": [ -92.609612, 46.711799 ], "pop": 833, "state": "MN" }, { "_id": "55783", "city": "STURGEON LAKE", "loc": [ -92.818246, 46.383685 ], "pop": 1883, "state": "MN" }, { "_id": "55784", "city": "SWAN RIVER", "loc": [ -93.19643600000001, 47.07394 ], "pop": 231, "state": "MN" }, { "_id": "55785", "city": "SWATARA", "loc": [ -93.66848299999999, 46.929871 ], "pop": 331, "state": "MN" }, { "_id": "55787", "city": "TAMARACK", "loc": [ -93.13420000000001, 46.617873 ], "pop": 559, "state": "MN" }, { "_id": "55788", "city": "TOGO", "loc": [ -93.201545, 47.76843 ], "pop": 632, "state": "MN" }, { "_id": "55790", "city": "TOWER", "loc": [ -92.287781, 47.808926 ], "pop": 2280, "state": "MN" }, { "_id": "55792", "city": "VIRGINIA", "loc": [ -92.528525, 47.537078 ], "pop": 11153, "state": "MN" }, { "_id": "55793", "city": "WARBA", "loc": [ -93.276417, 47.13611 ], "pop": 431, "state": "MN" }, { "_id": "55795", "city": "WILLOW RIVER", "loc": [ -92.83093100000001, 46.294883 ], "pop": 968, "state": "MN" }, { "_id": "55797", "city": "WRENSHALL", "loc": [ -92.37177200000001, 46.592114 ], "pop": 839, "state": "MN" }, { "_id": "55798", "city": "WRIGHT", "loc": [ -93.002863, 46.675324 ], "pop": 417, "state": "MN" }, { "_id": "55799", "city": "ZIM", "loc": [ -92.629606, 47.317591 ], "pop": 507, "state": "MN" }, { "_id": "55801", "city": "DULUTH", "loc": [ -91.84673100000001, 47.094431 ], "pop": 230, "state": "MN" }, { "_id": "55802", "city": "DULUTH", "loc": [ -92.08649699999999, 46.768475 ], "pop": 2639, "state": "MN" }, { "_id": "55803", "city": "DULUTH", "loc": [ -92.09405700000001, 46.874913 ], "pop": 14740, "state": "MN" }, { "_id": "55804", "city": "DULUTH", "loc": [ -92.00743300000001, 46.855131 ], "pop": 14207, "state": "MN" }, { "_id": "55805", "city": "DULUTH", "loc": [ -92.094553, 46.798733 ], "pop": 10849, "state": "MN" }, { "_id": "55806", "city": "DULUTH", "loc": [ -92.127871, 46.771457 ], "pop": 9723, "state": "MN" }, { "_id": "55807", "city": "DULUTH", "loc": [ -92.169821, 46.740783 ], "pop": 10257, "state": "MN" }, { "_id": "55808", "city": "DULUTH", "loc": [ -92.22261, 46.681002 ], "pop": 5903, "state": "MN" }, { "_id": "55810", "city": "PROCTOR", "loc": [ -92.232332, 46.74459 ], "pop": 6881, "state": "MN" }, { "_id": "55811", "city": "HERMANTOWN", "loc": [ -92.16822500000001, 46.81341 ], "pop": 23478, "state": "MN" }, { "_id": "55812", "city": "DULUTH", "loc": [ -92.07669300000001, 46.810598 ], "pop": 10296, "state": "MN" }, { "_id": "55901", "city": "ROCHESTER", "loc": [ -92.48962, 44.049572 ], "pop": 33744, "state": "MN" }, { "_id": "55902", "city": "ROCHESTER", "loc": [ -92.483519, 44.003217 ], "pop": 13594, "state": "MN" }, { "_id": "55904", "city": "ROCHESTER", "loc": [ -92.39727600000001, 44.010545 ], "pop": 7854, "state": "MN" }, { "_id": "55906", "city": "ROCHESTER", "loc": [ -92.44687399999999, 44.021001 ], "pop": 29174, "state": "MN" }, { "_id": "55909", "city": "ADAMS", "loc": [ -92.73049399999999, 43.559119 ], "pop": 1214, "state": "MN" }, { "_id": "55910", "city": "ALTURA", "loc": [ -91.974474, 44.136114 ], "pop": 2913, "state": "MN" }, { "_id": "55912", "city": "AUSTIN", "loc": [ -92.978374, 43.669538 ], "pop": 25655, "state": "MN" }, { "_id": "55917", "city": "BLOOMING PRAIRIE", "loc": [ -93.06081, 43.897732 ], "pop": 3922, "state": "MN" }, { "_id": "55918", "city": "BROWNSDALE", "loc": [ -92.873752, 43.724761 ], "pop": 1443, "state": "MN" }, { "_id": "55919", "city": "BROWNSVILLE", "loc": [ -91.301226, 43.670732 ], "pop": 995, "state": "MN" }, { "_id": "55920", "city": "BYRON", "loc": [ -92.630753, 44.037333 ], "pop": 7129, "state": "MN" }, { "_id": "55921", "city": "CALEDONIA", "loc": [ -91.48365699999999, 43.622079 ], "pop": 5049, "state": "MN" }, { "_id": "55922", "city": "CANTON", "loc": [ -91.91295700000001, 43.566687 ], "pop": 1390, "state": "MN" }, { "_id": "55923", "city": "CHATFIELD", "loc": [ -92.15735100000001, 43.836201 ], "pop": 3949, "state": "MN" }, { "_id": "55924", "city": "CLAREMONT", "loc": [ -92.988839, 44.05223 ], "pop": 979, "state": "MN" }, { "_id": "55925", "city": "DAKOTA", "loc": [ -91.39404, 43.914806 ], "pop": 725, "state": "MN" }, { "_id": "55926", "city": "DEXTER", "loc": [ -92.726764, 43.715962 ], "pop": 588, "state": "MN" }, { "_id": "55927", "city": "DODGE CENTER", "loc": [ -92.85537600000001, 44.032514 ], "pop": 3319, "state": "MN" }, { "_id": "55929", "city": "DOVER", "loc": [ -92.14151099999999, 44.001457 ], "pop": 1265, "state": "MN" }, { "_id": "55932", "city": "ELGIN", "loc": [ -92.25349300000001, 44.135837 ], "pop": 1494, "state": "MN" }, { "_id": "55933", "city": "ELKTON", "loc": [ -92.710407, 43.634806 ], "pop": 721, "state": "MN" }, { "_id": "55934", "city": "VIOLA", "loc": [ -92.244068, 44.004294 ], "pop": 2579, "state": "MN" }, { "_id": "55935", "city": "FOUNTAIN", "loc": [ -92.14228799999999, 43.728404 ], "pop": 662, "state": "MN" }, { "_id": "55936", "city": "GRAND MEADOW", "loc": [ -92.569203, 43.710065 ], "pop": 1653, "state": "MN" }, { "_id": "55937", "city": "GRANGER", "loc": [ -92.156115, 43.544873 ], "pop": 385, "state": "MN" }, { "_id": "55939", "city": "HARMONY", "loc": [ -92.014511, 43.566268 ], "pop": 1853, "state": "MN" }, { "_id": "55940", "city": "HAYFIELD", "loc": [ -92.81748899999999, 43.892259 ], "pop": 2254, "state": "MN" }, { "_id": "55941", "city": "HOKAH", "loc": [ -91.345472, 43.750856 ], "pop": 1289, "state": "MN" }, { "_id": "55943", "city": "HOUSTON", "loc": [ -91.56256500000001, 43.792904 ], "pop": 3337, "state": "MN" }, { "_id": "55944", "city": "KASSON", "loc": [ -92.74642, 44.024029 ], "pop": 4420, "state": "MN" }, { "_id": "55945", "city": "THEILMAN", "loc": [ -92.00839000000001, 44.305396 ], "pop": 738, "state": "MN" }, { "_id": "55946", "city": "KENYON", "loc": [ -93.019661, 44.255237 ], "pop": 3437, "state": "MN" }, { "_id": "55947", "city": "LA CRESCENT", "loc": [ -91.326325, 43.830686 ], "pop": 6700, "state": "MN" }, { "_id": "55949", "city": "LANESBORO", "loc": [ -91.987719, 43.717447 ], "pop": 1191, "state": "MN" }, { "_id": "55951", "city": "LE ROY", "loc": [ -92.50646399999999, 43.531533 ], "pop": 1478, "state": "MN" }, { "_id": "55952", "city": "LEWISTON", "loc": [ -91.866162, 43.970193 ], "pop": 2038, "state": "MN" }, { "_id": "55953", "city": "LYLE", "loc": [ -92.932818, 43.530868 ], "pop": 1314, "state": "MN" }, { "_id": "55954", "city": "MABEL", "loc": [ -91.780636, 43.544611 ], "pop": 1470, "state": "MN" }, { "_id": "55955", "city": "MANTORVILLE", "loc": [ -92.75796200000001, 44.070195 ], "pop": 1324, "state": "MN" }, { "_id": "55956", "city": "MAZEPPA", "loc": [ -92.52068300000001, 44.264568 ], "pop": 1560, "state": "MN" }, { "_id": "55957", "city": "MILLVILLE", "loc": [ -92.267188, 44.235862 ], "pop": 579, "state": "MN" }, { "_id": "55959", "city": "MINNESOTA CITY", "loc": [ -91.74180800000001, 44.083222 ], "pop": 1185, "state": "MN" }, { "_id": "55960", "city": "ORONOCO", "loc": [ -92.48496, 44.148861 ], "pop": 3319, "state": "MN" }, { "_id": "55961", "city": "OSTRANDER", "loc": [ -92.415744, 43.597188 ], "pop": 654, "state": "MN" }, { "_id": "55962", "city": "PETERSON", "loc": [ -91.84433799999999, 43.77691 ], "pop": 901, "state": "MN" }, { "_id": "55963", "city": "PINE ISLAND", "loc": [ -92.66134700000001, 44.211009 ], "pop": 3832, "state": "MN" }, { "_id": "55964", "city": "PLAINVIEW", "loc": [ -92.162125, 44.16373 ], "pop": 3303, "state": "MN" }, { "_id": "55965", "city": "PRESTON", "loc": [ -92.096039, 43.664132 ], "pop": 1866, "state": "MN" }, { "_id": "55967", "city": "RACINE", "loc": [ -92.531013, 43.78997 ], "pop": 1107, "state": "MN" }, { "_id": "55969", "city": "ROLLINGSTONE", "loc": [ -91.81579499999999, 44.102501 ], "pop": 1085, "state": "MN" }, { "_id": "55970", "city": "ROSE CREEK", "loc": [ -92.862082, 43.627423 ], "pop": 952, "state": "MN" }, { "_id": "55971", "city": "RUSHFORD", "loc": [ -91.75364999999999, 43.821626 ], "pop": 2809, "state": "MN" }, { "_id": "55972", "city": "SAINT CHARLES", "loc": [ -92.051738, 43.958481 ], "pop": 3704, "state": "MN" }, { "_id": "55973", "city": "SARGEANT", "loc": [ -92.759517, 43.808976 ], "pop": 349, "state": "MN" }, { "_id": "55974", "city": "SPRING GROVE", "loc": [ -91.636788, 43.562339 ], "pop": 2333, "state": "MN" }, { "_id": "55975", "city": "SPRING VALLEY", "loc": [ -92.367985, 43.682288 ], "pop": 4506, "state": "MN" }, { "_id": "55976", "city": "STEWARTVILLE", "loc": [ -92.454654, 43.867345 ], "pop": 6847, "state": "MN" }, { "_id": "55977", "city": "TAOPI", "loc": [ -92.633455, 43.545783 ], "pop": 350, "state": "MN" }, { "_id": "55978", "city": "THEILMAN", "loc": [ -92.211579, 44.30278 ], "pop": 402, "state": "MN" }, { "_id": "55979", "city": "UTICA", "loc": [ -91.941737, 43.958727 ], "pop": 599, "state": "MN" }, { "_id": "55981", "city": "WABASHA", "loc": [ -92.036058, 44.370273 ], "pop": 3743, "state": "MN" }, { "_id": "55982", "city": "WALTHAM", "loc": [ -92.873446, 43.806958 ], "pop": 561, "state": "MN" }, { "_id": "55983", "city": "WANAMINGO", "loc": [ -92.810258, 44.31214 ], "pop": 1319, "state": "MN" }, { "_id": "55985", "city": "WEST CONCORD", "loc": [ -92.88249500000001, 44.151954 ], "pop": 2040, "state": "MN" }, { "_id": "55986", "city": "WHALAN", "loc": [ -91.918863, 43.716528 ], "pop": 269, "state": "MN" }, { "_id": "55987", "city": "GOODVIEW", "loc": [ -91.65334799999999, 44.039132 ], "pop": 34518, "state": "MN" }, { "_id": "55990", "city": "WYKOFF", "loc": [ -92.267921, 43.71464 ], "pop": 954, "state": "MN" }, { "_id": "55991", "city": "HAMMOND", "loc": [ -92.40396699999999, 44.248812 ], "pop": 1720, "state": "MN" }, { "_id": "55992", "city": "ZUMBROTA", "loc": [ -92.671863, 44.303179 ], "pop": 3535, "state": "MN" }, { "_id": "56001", "city": "MANKATO", "loc": [ -93.996044, 44.153809 ], "pop": 38417, "state": "MN" }, { "_id": "56003", "city": "NORTH MANKATO", "loc": [ -94.031476, 44.177541 ], "pop": 11629, "state": "MN" }, { "_id": "56007", "city": "ALBERT LEA", "loc": [ -93.370672, 43.653678 ], "pop": 21186, "state": "MN" }, { "_id": "56009", "city": "ALDEN", "loc": [ -93.582307, 43.646586 ], "pop": 1660, "state": "MN" }, { "_id": "56010", "city": "AMBOY", "loc": [ -94.177353, 43.890326 ], "pop": 1449, "state": "MN" }, { "_id": "56011", "city": "BELLE PLAINE", "loc": [ -93.76039400000001, 44.613852 ], "pop": 4623, "state": "MN" }, { "_id": "56013", "city": "BLUE EARTH", "loc": [ -94.09237899999999, 43.639426 ], "pop": 5090, "state": "MN" }, { "_id": "56014", "city": "BRICELYN", "loc": [ -93.82108100000001, 43.574628 ], "pop": 912, "state": "MN" }, { "_id": "56016", "city": "CLARKS GROVE", "loc": [ -93.323222, 43.762971 ], "pop": 956, "state": "MN" }, { "_id": "56017", "city": "CLEVELAND", "loc": [ -93.828622, 44.32014 ], "pop": 1258, "state": "MN" }, { "_id": "56019", "city": "COMFREY", "loc": [ -94.91345, 44.111069 ], "pop": 981, "state": "MN" }, { "_id": "56020", "city": "CONGER", "loc": [ -93.522358, 43.611417 ], "pop": 277, "state": "MN" }, { "_id": "56021", "city": "COURTLAND", "loc": [ -94.348229, 44.279083 ], "pop": 1122, "state": "MN" }, { "_id": "56022", "city": "DARFUR", "loc": [ -94.813416, 44.061034 ], "pop": 331, "state": "MN" }, { "_id": "56023", "city": "DELAVAN", "loc": [ -94.022488, 43.771859 ], "pop": 310, "state": "MN" }, { "_id": "56024", "city": "EAGLE LAKE", "loc": [ -93.87191199999999, 44.154587 ], "pop": 2218, "state": "MN" }, { "_id": "56025", "city": "EASTON", "loc": [ -93.933994, 43.758126 ], "pop": 793, "state": "MN" }, { "_id": "56026", "city": "ELLENDALE", "loc": [ -93.319492, 43.882591 ], "pop": 1051, "state": "MN" }, { "_id": "56027", "city": "ELMORE", "loc": [ -94.09836799999999, 43.520065 ], "pop": 1125, "state": "MN" }, { "_id": "56028", "city": "ELYSIAN", "loc": [ -93.69649800000001, 44.22313 ], "pop": 1303, "state": "MN" }, { "_id": "56029", "city": "EMMONS", "loc": [ -93.48244099999999, 43.508851 ], "pop": 599, "state": "MN" }, { "_id": "56030", "city": "ESSIG", "loc": [ -94.56823, 44.323754 ], "pop": 522, "state": "MN" }, { "_id": "56031", "city": "FAIRMONT", "loc": [ -94.45095000000001, 43.637592 ], "pop": 12732, "state": "MN" }, { "_id": "56032", "city": "FREEBORN", "loc": [ -93.57454300000001, 43.784763 ], "pop": 632, "state": "MN" }, { "_id": "56033", "city": "FROST", "loc": [ -93.936099, 43.563796 ], "pop": 388, "state": "MN" }, { "_id": "56034", "city": "GARDEN CITY", "loc": [ -94.179084, 44.046748 ], "pop": 460, "state": "MN" }, { "_id": "56035", "city": "GENEVA", "loc": [ -93.267096, 43.82354 ], "pop": 524, "state": "MN" }, { "_id": "56036", "city": "GLENVILLE", "loc": [ -93.26176100000001, 43.557749 ], "pop": 1254, "state": "MN" }, { "_id": "56037", "city": "GOOD THUNDER", "loc": [ -94.067662, 43.995187 ], "pop": 941, "state": "MN" }, { "_id": "56039", "city": "GRANADA", "loc": [ -94.330731, 43.706082 ], "pop": 681, "state": "MN" }, { "_id": "56041", "city": "HANSKA", "loc": [ -94.493267, 44.152678 ], "pop": 1184, "state": "MN" }, { "_id": "56042", "city": "HARTLAND", "loc": [ -93.47695299999999, 43.803989 ], "pop": 612, "state": "MN" }, { "_id": "56043", "city": "HAYWARD", "loc": [ -93.23772700000001, 43.63864 ], "pop": 705, "state": "MN" }, { "_id": "56044", "city": "HENDERSON", "loc": [ -93.934487, 44.534398 ], "pop": 1785, "state": "MN" }, { "_id": "56045", "city": "HOLLANDALE", "loc": [ -93.16798900000001, 43.752842 ], "pop": 2346, "state": "MN" }, { "_id": "56046", "city": "HOPE", "loc": [ -93.345823, 43.979723 ], "pop": 520, "state": "MN" }, { "_id": "56047", "city": "HUNTLEY", "loc": [ -94.201567, 43.723746 ], "pop": 469, "state": "MN" }, { "_id": "56048", "city": "JANESVILLE", "loc": [ -93.709462, 44.116778 ], "pop": 2996, "state": "MN" }, { "_id": "56050", "city": "KASOTA", "loc": [ -93.945319, 44.284188 ], "pop": 1958, "state": "MN" }, { "_id": "56051", "city": "KIESTER", "loc": [ -93.71019099999999, 43.541445 ], "pop": 923, "state": "MN" }, { "_id": "56052", "city": "KILKENNY", "loc": [ -93.516397, 44.318532 ], "pop": 1249, "state": "MN" }, { "_id": "56054", "city": "LAFAYETTE", "loc": [ -94.436463, 44.407315 ], "pop": 2268, "state": "MN" }, { "_id": "56055", "city": "LAKE CRYSTAL", "loc": [ -94.218385, 44.120189 ], "pop": 3350, "state": "MN" }, { "_id": "56057", "city": "LE CENTER", "loc": [ -93.721428, 44.385348 ], "pop": 3284, "state": "MN" }, { "_id": "56058", "city": "LE SUEUR", "loc": [ -93.885588, 44.458154 ], "pop": 5491, "state": "MN" }, { "_id": "56060", "city": "LEWISVILLE", "loc": [ -94.428854, 43.920922 ], "pop": 568, "state": "MN" }, { "_id": "56061", "city": "LONDON", "loc": [ -93.116527, 43.543455 ], "pop": 437, "state": "MN" }, { "_id": "56062", "city": "MADELIA", "loc": [ -94.410994, 44.049949 ], "pop": 3012, "state": "MN" }, { "_id": "56063", "city": "MADISON LAKE", "loc": [ -93.82889299999999, 44.222074 ], "pop": 2135, "state": "MN" }, { "_id": "56064", "city": "MANCHESTER", "loc": [ -93.46065400000001, 43.716762 ], "pop": 552, "state": "MN" }, { "_id": "56065", "city": "MAPLETON", "loc": [ -93.954247, 43.933065 ], "pop": 2299, "state": "MN" }, { "_id": "56067", "city": "MERIDEN", "loc": [ -93.351167, 44.069875 ], "pop": 693, "state": "MN" }, { "_id": "56068", "city": "MINNESOTA LAKE", "loc": [ -93.82820100000001, 43.829465 ], "pop": 944, "state": "MN" }, { "_id": "56069", "city": "MONTGOMERY", "loc": [ -93.581024, 44.435591 ], "pop": 3026, "state": "MN" }, { "_id": "56071", "city": "NEW PRAGUE", "loc": [ -93.580473, 44.540239 ], "pop": 6601, "state": "MN" }, { "_id": "56072", "city": "NEW RICHLAND", "loc": [ -93.49954099999999, 43.893724 ], "pop": 1964, "state": "MN" }, { "_id": "56073", "city": "NEW ULM", "loc": [ -94.464421, 44.304378 ], "pop": 15142, "state": "MN" }, { "_id": "56074", "city": "NICOLLET", "loc": [ -94.186701, 44.272373 ], "pop": 1654, "state": "MN" }, { "_id": "56075", "city": "NORTHROP", "loc": [ -94.43495, 43.721164 ], "pop": 724, "state": "MN" }, { "_id": "56076", "city": "OAKLAND", "loc": [ -93.11132499999999, 43.632981 ], "pop": 394, "state": "MN" }, { "_id": "56077", "city": "OTISCO", "loc": [ -93.474097, 43.981513 ], "pop": 623, "state": "MN" }, { "_id": "56078", "city": "PEMBERTON", "loc": [ -93.818449, 43.959955 ], "pop": 880, "state": "MN" }, { "_id": "56080", "city": "SAINT CLAIR", "loc": [ -93.844932, 44.077775 ], "pop": 1083, "state": "MN" }, { "_id": "56081", "city": "SAINT JAMES", "loc": [ -94.622935, 43.987519 ], "pop": 6472, "state": "MN" }, { "_id": "56082", "city": "SAINT PETER", "loc": [ -93.981061, 44.335107 ], "pop": 11277, "state": "MN" }, { "_id": "56083", "city": "SANBORN", "loc": [ -95.13279300000001, 44.218291 ], "pop": 1030, "state": "MN" }, { "_id": "56085", "city": "SLEEPY EYE", "loc": [ -94.727251, 44.282089 ], "pop": 6092, "state": "MN" }, { "_id": "56087", "city": "SPRINGFIELD", "loc": [ -94.979204, 44.232905 ], "pop": 2915, "state": "MN" }, { "_id": "56088", "city": "TRUMAN", "loc": [ -94.431862, 43.820008 ], "pop": 2319, "state": "MN" }, { "_id": "56089", "city": "TWIN LAKES", "loc": [ -93.388667, 43.553951 ], "pop": 926, "state": "MN" }, { "_id": "56090", "city": "VERNON CENTER", "loc": [ -94.214212, 43.970557 ], "pop": 942, "state": "MN" }, { "_id": "56091", "city": "WALDORF", "loc": [ -93.70426399999999, 43.939868 ], "pop": 962, "state": "MN" }, { "_id": "56092", "city": "WALTERS", "loc": [ -93.70102, 43.623868 ], "pop": 400, "state": "MN" }, { "_id": "56093", "city": "WASECA", "loc": [ -93.510828, 44.0834 ], "pop": 11534, "state": "MN" }, { "_id": "56096", "city": "WATERVILLE", "loc": [ -93.575063, 44.223796 ], "pop": 2390, "state": "MN" }, { "_id": "56097", "city": "WELLS", "loc": [ -93.732069, 43.743396 ], "pop": 3585, "state": "MN" }, { "_id": "56098", "city": "WINNEBAGO", "loc": [ -94.16324, 43.77549 ], "pop": 1998, "state": "MN" }, { "_id": "56101", "city": "WILDER", "loc": [ -95.15153100000001, 43.879022 ], "pop": 6224, "state": "MN" }, { "_id": "56110", "city": "ADRIAN", "loc": [ -95.927261, 43.619683 ], "pop": 1899, "state": "MN" }, { "_id": "56111", "city": "ALPHA", "loc": [ -94.90508800000001, 43.594594 ], "pop": 674, "state": "MN" }, { "_id": "56112", "city": "AMIRET", "loc": [ -95.71904600000001, 44.325134 ], "pop": 556, "state": "MN" }, { "_id": "56113", "city": "ARCO", "loc": [ -96.199913, 44.409147 ], "pop": 515, "state": "MN" }, { "_id": "56114", "city": "AVOCA", "loc": [ -95.60015199999999, 43.970553 ], "pop": 572, "state": "MN" }, { "_id": "56115", "city": "BALATON", "loc": [ -95.88377, 44.225253 ], "pop": 1305, "state": "MN" }, { "_id": "56116", "city": "BEAVER CREEK", "loc": [ -96.369771, 43.622343 ], "pop": 694, "state": "MN" }, { "_id": "56117", "city": "BIGELOW", "loc": [ -95.651527, 43.533612 ], "pop": 633, "state": "MN" }, { "_id": "56118", "city": "BINGHAM LAKE", "loc": [ -95.04571, 43.894155 ], "pop": 432, "state": "MN" }, { "_id": "56119", "city": "BREWSTER", "loc": [ -95.480676, 43.703223 ], "pop": 800, "state": "MN" }, { "_id": "56120", "city": "BUTTERFIELD", "loc": [ -94.795627, 43.965417 ], "pop": 894, "state": "MN" }, { "_id": "56121", "city": "CEYLON", "loc": [ -94.614908, 43.538243 ], "pop": 1051, "state": "MN" }, { "_id": "56122", "city": "CHANDLER", "loc": [ -95.929616, 43.916308 ], "pop": 808, "state": "MN" }, { "_id": "56123", "city": "CURRIE", "loc": [ -95.695323, 44.094616 ], "pop": 1254, "state": "MN" }, { "_id": "56124", "city": "DELFT", "loc": [ -95.047234, 43.978502 ], "pop": 363, "state": "MN" }, { "_id": "56125", "city": "DOVRAY", "loc": [ -95.52708199999999, 44.05967 ], "pop": 277, "state": "MN" }, { "_id": "56126", "city": "DUNDEE", "loc": [ -95.499286, 43.819052 ], "pop": 414, "state": "MN" }, { "_id": "56127", "city": "DUNNELL", "loc": [ -94.787558, 43.553052 ], "pop": 452, "state": "MN" }, { "_id": "56128", "city": "EDGERTON", "loc": [ -96.146333, 43.882419 ], "pop": 2045, "state": "MN" }, { "_id": "56129", "city": "ELLSWORTH", "loc": [ -96.01124799999999, 43.526539 ], "pop": 852, "state": "MN" }, { "_id": "56131", "city": "FULDA", "loc": [ -95.597937, 43.875298 ], "pop": 1792, "state": "MN" }, { "_id": "56132", "city": "GARVIN", "loc": [ -95.76721499999999, 44.229318 ], "pop": 471, "state": "MN" }, { "_id": "56133", "city": "HADLEY", "loc": [ -95.86902499999999, 44.03105 ], "pop": 429, "state": "MN" }, { "_id": "56134", "city": "HARDWICK", "loc": [ -96.21607, 43.791072 ], "pop": 461, "state": "MN" }, { "_id": "56136", "city": "HENDRICKS", "loc": [ -96.407753, 44.499514 ], "pop": 1305, "state": "MN" }, { "_id": "56137", "city": "HERON LAKE", "loc": [ -95.326736, 43.79788 ], "pop": 1190, "state": "MN" }, { "_id": "56138", "city": "HILLS", "loc": [ -96.364527, 43.533548 ], "pop": 1072, "state": "MN" }, { "_id": "56139", "city": "HOLLAND", "loc": [ -96.19027699999999, 44.075904 ], "pop": 682, "state": "MN" }, { "_id": "56141", "city": "IONA", "loc": [ -95.77176900000001, 43.902631 ], "pop": 434, "state": "MN" }, { "_id": "56142", "city": "IVANHOE", "loc": [ -96.22605900000001, 44.507119 ], "pop": 1683, "state": "MN" }, { "_id": "56143", "city": "JACKSON", "loc": [ -94.993827, 43.645732 ], "pop": 5119, "state": "MN" }, { "_id": "56144", "city": "JASPER", "loc": [ -96.385035, 43.856827 ], "pop": 1220, "state": "MN" }, { "_id": "56145", "city": "JEFFERS", "loc": [ -95.154664, 44.073678 ], "pop": 1000, "state": "MN" }, { "_id": "56146", "city": "KANARANZI", "loc": [ -96.111306, 43.54979 ], "pop": 320, "state": "MN" }, { "_id": "56147", "city": "KENNETH", "loc": [ -96.10886000000001, 43.763738 ], "pop": 523, "state": "MN" }, { "_id": "56149", "city": "LAKE BENTON", "loc": [ -96.29103499999999, 44.278211 ], "pop": 1323, "state": "MN" }, { "_id": "56150", "city": "LAKEFIELD", "loc": [ -95.184834, 43.654456 ], "pop": 3233, "state": "MN" }, { "_id": "56151", "city": "LAKE WILSON", "loc": [ -95.97973, 44.009529 ], "pop": 749, "state": "MN" }, { "_id": "56152", "city": "LAMBERTON", "loc": [ -95.273946, 44.237776 ], "pop": 1736, "state": "MN" }, { "_id": "56153", "city": "LEOTA", "loc": [ -96.005392, 43.822628 ], "pop": 504, "state": "MN" }, { "_id": "56155", "city": "LISMORE", "loc": [ -95.96817799999999, 43.733857 ], "pop": 494, "state": "MN" }, { "_id": "56156", "city": "LUVERNE", "loc": [ -96.22156200000001, 43.661366 ], "pop": 5436, "state": "MN" }, { "_id": "56157", "city": "LYND", "loc": [ -95.923284, 44.40322 ], "pop": 1005, "state": "MN" }, { "_id": "56158", "city": "MAGNOLIA", "loc": [ -96.100825, 43.638211 ], "pop": 458, "state": "MN" }, { "_id": "56159", "city": "MOUNTAIN LAKE", "loc": [ -94.927313, 43.938998 ], "pop": 2506, "state": "MN" }, { "_id": "56160", "city": "ODIN", "loc": [ -94.77401999999999, 43.882402 ], "pop": 382, "state": "MN" }, { "_id": "56161", "city": "OKABENA", "loc": [ -95.338112, 43.72302 ], "pop": 606, "state": "MN" }, { "_id": "56162", "city": "ORMSBY", "loc": [ -94.68725499999999, 43.861639 ], "pop": 221, "state": "MN" }, { "_id": "56164", "city": "HATFIELD", "loc": [ -96.322762, 44.009516 ], "pop": 5923, "state": "MN" }, { "_id": "56165", "city": "READING", "loc": [ -95.738945, 43.713604 ], "pop": 400, "state": "MN" }, { "_id": "56166", "city": "REVERE", "loc": [ -95.39958799999999, 44.271326 ], "pop": 459, "state": "MN" }, { "_id": "56167", "city": "ROUND LAKE", "loc": [ -95.45015100000001, 43.562045 ], "pop": 1236, "state": "MN" }, { "_id": "56168", "city": "RUSHMORE", "loc": [ -95.77672800000001, 43.624011 ], "pop": 726, "state": "MN" }, { "_id": "56169", "city": "RUSSELL", "loc": [ -95.942564, 44.320129 ], "pop": 781, "state": "MN" }, { "_id": "56170", "city": "FLORENCE", "loc": [ -96.07902799999999, 44.163836 ], "pop": 737, "state": "MN" }, { "_id": "56171", "city": "SHERBURN", "loc": [ -94.726877, 43.661089 ], "pop": 2275, "state": "MN" }, { "_id": "56172", "city": "SLAYTON", "loc": [ -95.755448, 43.985596 ], "pop": 2535, "state": "MN" }, { "_id": "56173", "city": "STEEN", "loc": [ -96.24386800000001, 43.531728 ], "pop": 526, "state": "MN" }, { "_id": "56174", "city": "STORDEN", "loc": [ -95.30192599999999, 44.052383 ], "pop": 537, "state": "MN" }, { "_id": "56175", "city": "TRACY", "loc": [ -95.621301, 44.234201 ], "pop": 2390, "state": "MN" }, { "_id": "56176", "city": "TRIMONT", "loc": [ -94.71863, 43.782702 ], "pop": 1349, "state": "MN" }, { "_id": "56178", "city": "TYLER", "loc": [ -96.130235, 44.277342 ], "pop": 1940, "state": "MN" }, { "_id": "56179", "city": "VERDI", "loc": [ -96.372429, 44.234078 ], "pop": 234, "state": "MN" }, { "_id": "56180", "city": "WALNUT GROVE", "loc": [ -95.49645099999999, 44.229375 ], "pop": 1277, "state": "MN" }, { "_id": "56181", "city": "WELCOME", "loc": [ -94.588593, 43.67052 ], "pop": 1435, "state": "MN" }, { "_id": "56183", "city": "WESTBROOK", "loc": [ -95.423208, 44.065381 ], "pop": 1362, "state": "MN" }, { "_id": "56185", "city": "WILMONT", "loc": [ -95.832421, 43.7692 ], "pop": 1101, "state": "MN" }, { "_id": "56186", "city": "WOODSTOCK", "loc": [ -96.119198, 43.987338 ], "pop": 451, "state": "MN" }, { "_id": "56187", "city": "WORTHINGTON", "loc": [ -95.605907, 43.628626 ], "pop": 11556, "state": "MN" }, { "_id": "56201", "city": "WILLMAR", "loc": [ -95.05231499999999, 45.139264 ], "pop": 22069, "state": "MN" }, { "_id": "56207", "city": "ALBERTA", "loc": [ -96.049772, 45.557086 ], "pop": 296, "state": "MN" }, { "_id": "56208", "city": "APPLETON", "loc": [ -95.994872, 45.20543 ], "pop": 2294, "state": "MN" }, { "_id": "56209", "city": "ATWATER", "loc": [ -94.793779, 45.111645 ], "pop": 1841, "state": "MN" }, { "_id": "56210", "city": "BARRY", "loc": [ -96.56052699999999, 45.547446 ], "pop": 135, "state": "MN" }, { "_id": "56211", "city": "BEARDSLEY", "loc": [ -96.706013, 45.553855 ], "pop": 494, "state": "MN" }, { "_id": "56212", "city": "BELLINGHAM", "loc": [ -96.32235, 45.155626 ], "pop": 715, "state": "MN" }, { "_id": "56214", "city": "BELVIEW", "loc": [ -95.317757, 44.605486 ], "pop": 750, "state": "MN" }, { "_id": "56215", "city": "BENSON", "loc": [ -95.576644, 45.312904 ], "pop": 5107, "state": "MN" }, { "_id": "56216", "city": "SVEA", "loc": [ -95.06395500000001, 44.939512 ], "pop": 668, "state": "MN" }, { "_id": "56218", "city": "BOYD", "loc": [ -95.94210200000001, 44.850725 ], "pop": 668, "state": "MN" }, { "_id": "56219", "city": "BROWNS VALLEY", "loc": [ -96.80625000000001, 45.606934 ], "pop": 1128, "state": "MN" }, { "_id": "56220", "city": "CANBY", "loc": [ -96.27839400000001, 44.720187 ], "pop": 3043, "state": "MN" }, { "_id": "56221", "city": "CHOKIO", "loc": [ -96.17331, 45.552369 ], "pop": 785, "state": "MN" }, { "_id": "56222", "city": "CLARA CITY", "loc": [ -95.349902, 44.963912 ], "pop": 1879, "state": "MN" }, { "_id": "56223", "city": "CLARKFIELD", "loc": [ -95.830405, 44.774261 ], "pop": 1623, "state": "MN" }, { "_id": "56224", "city": "CLEMENTS", "loc": [ -95.04744700000001, 44.39432 ], "pop": 398, "state": "MN" }, { "_id": "56225", "city": "CLINTON", "loc": [ -96.418161, 45.457659 ], "pop": 843, "state": "MN" }, { "_id": "56226", "city": "CLONTARF", "loc": [ -95.678629, 45.373418 ], "pop": 279, "state": "MN" }, { "_id": "56227", "city": "CORRELL", "loc": [ -96.17526599999999, 45.290742 ], "pop": 397, "state": "MN" }, { "_id": "56228", "city": "COSMOS", "loc": [ -94.697827, 44.958969 ], "pop": 1217, "state": "MN" }, { "_id": "56229", "city": "COTTONWOOD", "loc": [ -95.692508, 44.600251 ], "pop": 1552, "state": "MN" }, { "_id": "56230", "city": "DANUBE", "loc": [ -95.078366, 44.795567 ], "pop": 1179, "state": "MN" }, { "_id": "56231", "city": "DANVERS", "loc": [ -95.886194, 45.341853 ], "pop": 710, "state": "MN" }, { "_id": "56232", "city": "DAWSON", "loc": [ -96.01501399999999, 44.931737 ], "pop": 2496, "state": "MN" }, { "_id": "56233", "city": "DE GRAFF", "loc": [ -95.44658800000001, 45.270845 ], "pop": 336, "state": "MN" }, { "_id": "56235", "city": "DONNELLY", "loc": [ -96.064937, 45.70137 ], "pop": 526, "state": "MN" }, { "_id": "56236", "city": "DUMONT", "loc": [ -96.40612299999999, 45.671742 ], "pop": 727, "state": "MN" }, { "_id": "56237", "city": "ECHO", "loc": [ -95.418223, 44.631046 ], "pop": 797, "state": "MN" }, { "_id": "56238", "city": "EVAN", "loc": [ -94.816956, 44.351114 ], "pop": 222, "state": "MN" }, { "_id": "56239", "city": "GHENT", "loc": [ -95.893642, 44.507843 ], "pop": 661, "state": "MN" }, { "_id": "56240", "city": "GRACEVILLE", "loc": [ -96.420925, 45.560248 ], "pop": 1019, "state": "MN" }, { "_id": "56241", "city": "GRANITE FALLS", "loc": [ -95.551557, 44.808749 ], "pop": 4051, "state": "MN" }, { "_id": "56243", "city": "GROVE CITY", "loc": [ -94.687843, 45.153172 ], "pop": 1428, "state": "MN" }, { "_id": "56244", "city": "HANCOCK", "loc": [ -95.800775, 45.498464 ], "pop": 1255, "state": "MN" }, { "_id": "56245", "city": "HANLEY FALLS", "loc": [ -95.682492, 44.678862 ], "pop": 652, "state": "MN" }, { "_id": "56246", "city": "HAWICK", "loc": [ -94.820762, 45.361775 ], "pop": 536, "state": "MN" }, { "_id": "56247", "city": "HAZEL RUN", "loc": [ -95.712187, 44.749688 ], "pop": 328, "state": "MN" }, { "_id": "56248", "city": "HERMAN", "loc": [ -96.099188, 45.807104 ], "pop": 928, "state": "MN" }, { "_id": "56249", "city": "HOLLOWAY", "loc": [ -95.916374, 45.270805 ], "pop": 283, "state": "MN" }, { "_id": "56250", "city": "JOHNSON", "loc": [ -96.266277, 45.573007 ], "pop": 12, "state": "MN" }, { "_id": "56251", "city": "KANDIYOHI", "loc": [ -94.94727399999999, 45.123162 ], "pop": 1169, "state": "MN" }, { "_id": "56252", "city": "KERKHOVEN", "loc": [ -95.311465, 45.209626 ], "pop": 1267, "state": "MN" }, { "_id": "56253", "city": "LAKE LILLIAN", "loc": [ -94.901443, 44.96603 ], "pop": 1106, "state": "MN" }, { "_id": "56254", "city": "LOUISBURG", "loc": [ -96.171539, 45.130556 ], "pop": 307, "state": "MN" }, { "_id": "56255", "city": "LUCAN", "loc": [ -95.411934, 44.413237 ], "pop": 487, "state": "MN" }, { "_id": "56256", "city": "MADISON", "loc": [ -96.164507, 44.994618 ], "pop": 3857, "state": "MN" }, { "_id": "56257", "city": "MARIETTA", "loc": [ -96.409448, 44.963582 ], "pop": 588, "state": "MN" }, { "_id": "56258", "city": "MARSHALL", "loc": [ -95.779454, 44.448127 ], "pop": 13489, "state": "MN" }, { "_id": "56260", "city": "MAYNARD", "loc": [ -95.48450800000001, 44.922615 ], "pop": 1004, "state": "MN" }, { "_id": "56262", "city": "MILAN", "loc": [ -95.869045, 45.114317 ], "pop": 864, "state": "MN" }, { "_id": "56263", "city": "MILROY", "loc": [ -95.55447100000001, 44.436494 ], "pop": 907, "state": "MN" }, { "_id": "56264", "city": "MINNEOTA", "loc": [ -95.976714, 44.558732 ], "pop": 2056, "state": "MN" }, { "_id": "56265", "city": "MONTEVIDEO", "loc": [ -95.676473, 44.968829 ], "pop": 8405, "state": "MN" }, { "_id": "56266", "city": "MORGAN", "loc": [ -94.921783, 44.392554 ], "pop": 2257, "state": "MN" }, { "_id": "56267", "city": "MORRIS", "loc": [ -95.91723399999999, 45.592095 ], "pop": 7772, "state": "MN" }, { "_id": "56270", "city": "MORTON", "loc": [ -95.02681699999999, 44.566189 ], "pop": 962, "state": "MN" }, { "_id": "56271", "city": "MURDOCK", "loc": [ -95.40489700000001, 45.216147 ], "pop": 448, "state": "MN" }, { "_id": "56272", "city": "NASSAU", "loc": [ -96.413307, 45.107554 ], "pop": 293, "state": "MN" }, { "_id": "56273", "city": "NEW LONDON", "loc": [ -94.948008, 45.294936 ], "pop": 4077, "state": "MN" }, { "_id": "56274", "city": "NORCROSS", "loc": [ -96.134168, 45.885839 ], "pop": 303, "state": "MN" }, { "_id": "56276", "city": "ODESSA", "loc": [ -96.310154, 45.299766 ], "pop": 457, "state": "MN" }, { "_id": "56277", "city": "OLIVIA", "loc": [ -94.972747, 44.770627 ], "pop": 3829, "state": "MN" }, { "_id": "56278", "city": "ORTONVILLE", "loc": [ -96.45965, 45.329621 ], "pop": 2928, "state": "MN" }, { "_id": "56279", "city": "PENNOCK", "loc": [ -95.17533299999999, 45.131031 ], "pop": 915, "state": "MN" }, { "_id": "56280", "city": "PORTER", "loc": [ -96.15812, 44.656532 ], "pop": 425, "state": "MN" }, { "_id": "56281", "city": "PRINSBURG", "loc": [ -95.18653999999999, 44.937088 ], "pop": 931, "state": "MN" }, { "_id": "56282", "city": "RAYMOND", "loc": [ -95.220788, 45.018097 ], "pop": 1095, "state": "MN" }, { "_id": "56283", "city": "DELHI", "loc": [ -95.10713, 44.531753 ], "pop": 6705, "state": "MN" }, { "_id": "56284", "city": "RENVILLE", "loc": [ -95.19887900000001, 44.777609 ], "pop": 2027, "state": "MN" }, { "_id": "56285", "city": "SACRED HEART", "loc": [ -95.353801, 44.797536 ], "pop": 1725, "state": "MN" }, { "_id": "56286", "city": "SAINT LEO", "loc": [ -96.042546, 44.711091 ], "pop": 483, "state": "MN" }, { "_id": "56287", "city": "SEAFORTH", "loc": [ -95.297768, 44.490536 ], "pop": 327, "state": "MN" }, { "_id": "56288", "city": "SPICER", "loc": [ -94.91157200000001, 45.224112 ], "pop": 3440, "state": "MN" }, { "_id": "56289", "city": "SUNBURG", "loc": [ -95.204915, 45.358316 ], "pop": 408, "state": "MN" }, { "_id": "56291", "city": "TAUNTON", "loc": [ -96.052594, 44.595076 ], "pop": 349, "state": "MN" }, { "_id": "56292", "city": "VESTA", "loc": [ -95.411801, 44.505052 ], "pop": 525, "state": "MN" }, { "_id": "56293", "city": "WABASSO", "loc": [ -95.2632, 44.405865 ], "pop": 991, "state": "MN" }, { "_id": "56294", "city": "WANDA", "loc": [ -95.178, 44.32295 ], "pop": 401, "state": "MN" }, { "_id": "56295", "city": "WATSON", "loc": [ -95.794203, 45.019443 ], "pop": 436, "state": "MN" }, { "_id": "56296", "city": "WHEATON", "loc": [ -96.486598, 45.811104 ], "pop": 2338, "state": "MN" }, { "_id": "56297", "city": "WOOD LAKE", "loc": [ -95.540908, 44.637915 ], "pop": 922, "state": "MN" }, { "_id": "56301", "city": "SAINT CLOUD", "loc": [ -94.18185699999999, 45.540972 ], "pop": 36182, "state": "MN" }, { "_id": "56303", "city": "SAINT CLOUD", "loc": [ -94.20363399999999, 45.571298 ], "pop": 14039, "state": "MN" }, { "_id": "56304", "city": "SAINT CLOUD", "loc": [ -94.12844699999999, 45.552113 ], "pop": 13570, "state": "MN" }, { "_id": "56307", "city": "ALBANY", "loc": [ -94.574022, 45.615114 ], "pop": 3064, "state": "MN" }, { "_id": "56308", "city": "ALEXANDRIA", "loc": [ -95.38199400000001, 45.881747 ], "pop": 17548, "state": "MN" }, { "_id": "56309", "city": "ASHBY", "loc": [ -95.821417, 46.078066 ], "pop": 869, "state": "MN" }, { "_id": "56310", "city": "AVON", "loc": [ -94.436029, 45.612168 ], "pop": 4355, "state": "MN" }, { "_id": "56311", "city": "BARRETT", "loc": [ -95.87539099999999, 45.899555 ], "pop": 799, "state": "MN" }, { "_id": "56312", "city": "BELGRADE", "loc": [ -94.969877, 45.486522 ], "pop": 1661, "state": "MN" }, { "_id": "56313", "city": "BOCK", "loc": [ -93.553658, 45.784427 ], "pop": 115, "state": "MN" }, { "_id": "56314", "city": "BOWLUS", "loc": [ -94.41753300000001, 45.81212 ], "pop": 1183, "state": "MN" }, { "_id": "56315", "city": "BRANDON", "loc": [ -95.57876899999999, 46.0039 ], "pop": 1453, "state": "MN" }, { "_id": "56316", "city": "BROOTEN", "loc": [ -95.09004899999999, 45.493171 ], "pop": 1287, "state": "MN" }, { "_id": "56318", "city": "BURTRUM", "loc": [ -94.696214, 45.88803 ], "pop": 854, "state": "MN" }, { "_id": "56319", "city": "CARLOS", "loc": [ -95.310468, 45.972572 ], "pop": 2136, "state": "MN" }, { "_id": "56320", "city": "COLD SPRING", "loc": [ -94.43782299999999, 45.449976 ], "pop": 5162, "state": "MN" }, { "_id": "56323", "city": "CYRUS", "loc": [ -95.706965, 45.569483 ], "pop": 988, "state": "MN" }, { "_id": "56324", "city": "DALTON", "loc": [ -95.85001699999999, 46.154414 ], "pop": 1305, "state": "MN" }, { "_id": "56326", "city": "EVANSVILLE", "loc": [ -95.69506699999999, 46.01525 ], "pop": 1149, "state": "MN" }, { "_id": "56327", "city": "FARWELL", "loc": [ -95.665583, 45.724424 ], "pop": 394, "state": "MN" }, { "_id": "56328", "city": "FLENSBURG", "loc": [ -94.530767, 45.950899 ], "pop": 213, "state": "MN" }, { "_id": "56329", "city": "FOLEY", "loc": [ -93.868459, 45.708687 ], "pop": 4078, "state": "MN" }, { "_id": "56330", "city": "FORESTON", "loc": [ -93.69575500000001, 45.702842 ], "pop": 1353, "state": "MN" }, { "_id": "56331", "city": "FREEPORT", "loc": [ -94.678529, 45.673146 ], "pop": 3865, "state": "MN" }, { "_id": "56332", "city": "GARFIELD", "loc": [ -95.45004400000001, 45.995309 ], "pop": 1430, "state": "MN" }, { "_id": "56333", "city": "GILMAN", "loc": [ -93.946876, 45.774178 ], "pop": 945, "state": "MN" }, { "_id": "56334", "city": "GLENWOOD", "loc": [ -95.38681, 45.642911 ], "pop": 5272, "state": "MN" }, { "_id": "56336", "city": "GREY EAGLE", "loc": [ -94.832075, 45.81069 ], "pop": 2188, "state": "MN" }, { "_id": "56338", "city": "HILLMAN", "loc": [ -93.881224, 46.06776 ], "pop": 724, "state": "MN" }, { "_id": "56339", "city": "HOFFMAN", "loc": [ -95.79548200000001, 45.823292 ], "pop": 852, "state": "MN" }, { "_id": "56340", "city": "HOLDINGFORD", "loc": [ -94.458091, 45.724924 ], "pop": 1721, "state": "MN" }, { "_id": "56341", "city": "HOLMES CITY", "loc": [ -95.56464, 45.810706 ], "pop": 614, "state": "MN" }, { "_id": "56342", "city": "ISLE", "loc": [ -93.474062, 46.169605 ], "pop": 1109, "state": "MN" }, { "_id": "56343", "city": "KENSINGTON", "loc": [ -95.694452, 45.81761 ], "pop": 770, "state": "MN" }, { "_id": "56345", "city": "LITTLE FALLS", "loc": [ -94.360428, 45.98108 ], "pop": 13558, "state": "MN" }, { "_id": "56347", "city": "LITTLE SAUK", "loc": [ -94.89838899999999, 45.962417 ], "pop": 6436, "state": "MN" }, { "_id": "56349", "city": "LOWRY", "loc": [ -95.53221000000001, 45.710469 ], "pop": 429, "state": "MN" }, { "_id": "56350", "city": "MC GRATH", "loc": [ -93.241619, 46.244116 ], "pop": 933, "state": "MN" }, { "_id": "56352", "city": "MELROSE", "loc": [ -94.819768, 45.658183 ], "pop": 4739, "state": "MN" }, { "_id": "56353", "city": "MILACA", "loc": [ -93.64526600000001, 45.779481 ], "pop": 4927, "state": "MN" }, { "_id": "56354", "city": "MILTONA", "loc": [ -95.325767, 46.054519 ], "pop": 866, "state": "MN" }, { "_id": "56355", "city": "NELSON", "loc": [ -95.226032, 45.8516 ], "pop": 858, "state": "MN" }, { "_id": "56357", "city": "OAK PARK", "loc": [ -93.92141700000001, 45.671403 ], "pop": 2636, "state": "MN" }, { "_id": "56358", "city": "OGILVIE", "loc": [ -93.43592099999999, 45.847632 ], "pop": 1143, "state": "MN" }, { "_id": "56359", "city": "ONAMIA", "loc": [ -93.68668, 46.09022 ], "pop": 3111, "state": "MN" }, { "_id": "56360", "city": "OSAKIS", "loc": [ -95.13317000000001, 45.876836 ], "pop": 2099, "state": "MN" }, { "_id": "56361", "city": "PARKERS PRAIRIE", "loc": [ -95.360764, 46.176925 ], "pop": 3067, "state": "MN" }, { "_id": "56362", "city": "PAYNESVILLE", "loc": [ -94.715709, 45.398798 ], "pop": 4967, "state": "MN" }, { "_id": "56363", "city": "PEASE", "loc": [ -93.649247, 45.697872 ], "pop": 178, "state": "MN" }, { "_id": "56364", "city": "PIERZ", "loc": [ -94.085306, 46.008059 ], "pop": 4300, "state": "MN" }, { "_id": "56367", "city": "RICE", "loc": [ -94.165752, 45.736383 ], "pop": 4560, "state": "MN" }, { "_id": "56368", "city": "RICHMOND", "loc": [ -94.546072, 45.423817 ], "pop": 3718, "state": "MN" }, { "_id": "56373", "city": "ROYALTON", "loc": [ -94.221063, 45.858928 ], "pop": 2571, "state": "MN" }, { "_id": "56374", "city": "SAINT JOSEPH", "loc": [ -94.336688, 45.565124 ], "pop": 9480, "state": "MN" }, { "_id": "56375", "city": "SAINT STEPHEN", "loc": [ -94.281662, 45.711815 ], "pop": 2868, "state": "MN" }, { "_id": "56377", "city": "SARTELL", "loc": [ -94.21356900000001, 45.631827 ], "pop": 4966, "state": "MN" }, { "_id": "56378", "city": "SAUK CENTRE", "loc": [ -94.968166, 45.728079 ], "pop": 6025, "state": "MN" }, { "_id": "56379", "city": "SAUK RAPIDS", "loc": [ -94.159088, 45.604032 ], "pop": 12505, "state": "MN" }, { "_id": "56380", "city": "SEDAN", "loc": [ -95.263989, 45.51069 ], "pop": 968, "state": "MN" }, { "_id": "56381", "city": "STARBUCK", "loc": [ -95.542125, 45.592587 ], "pop": 1964, "state": "MN" }, { "_id": "56382", "city": "SWANVILLE", "loc": [ -94.62892100000001, 45.943148 ], "pop": 1917, "state": "MN" }, { "_id": "56384", "city": "UPSALA", "loc": [ -94.575531, 45.809723 ], "pop": 1001, "state": "MN" }, { "_id": "56385", "city": "VILLARD", "loc": [ -95.241439, 45.711823 ], "pop": 730, "state": "MN" }, { "_id": "56386", "city": "WAHKON", "loc": [ -93.497174, 46.11214 ], "pop": 656, "state": "MN" }, { "_id": "56387", "city": "WAITE PARK", "loc": [ -94.224481, 45.54972 ], "pop": 5227, "state": "MN" }, { "_id": "56389", "city": "WEST UNION", "loc": [ -95.08328, 45.798451 ], "pop": 54, "state": "MN" }, { "_id": "56401", "city": "EAST GULL LAKE", "loc": [ -94.20187300000001, 46.357219 ], "pop": 23504, "state": "MN" }, { "_id": "56431", "city": "AITKIN", "loc": [ -93.645413, 46.479929 ], "pop": 6388, "state": "MN" }, { "_id": "56433", "city": "AKELEY", "loc": [ -94.72342999999999, 47.000987 ], "pop": 1097, "state": "MN" }, { "_id": "56434", "city": "ALDRICH", "loc": [ -94.992017, 46.402538 ], "pop": 1105, "state": "MN" }, { "_id": "56435", "city": "BACKUS", "loc": [ -94.39591799999999, 46.869905 ], "pop": 2594, "state": "MN" }, { "_id": "56437", "city": "BERTHA", "loc": [ -95.03573299999999, 46.251457 ], "pop": 1365, "state": "MN" }, { "_id": "56438", "city": "BROWERVILLE", "loc": [ -94.834581, 46.090525 ], "pop": 2179, "state": "MN" }, { "_id": "56440", "city": "CLARISSA", "loc": [ -94.95719, 46.137305 ], "pop": 1222, "state": "MN" }, { "_id": "56441", "city": "CROSBY", "loc": [ -93.987448, 46.509084 ], "pop": 5601, "state": "MN" }, { "_id": "56442", "city": "CROSSLAKE", "loc": [ -94.114256, 46.678644 ], "pop": 1132, "state": "MN" }, { "_id": "56443", "city": "CUSHING", "loc": [ -94.618452, 46.202194 ], "pop": 2122, "state": "MN" }, { "_id": "56444", "city": "DEERWOOD", "loc": [ -93.884863, 46.444571 ], "pop": 2225, "state": "MN" }, { "_id": "56446", "city": "EAGLE BEND", "loc": [ -95.09606100000001, 46.117017 ], "pop": 1714, "state": "MN" }, { "_id": "56447", "city": "EMILY", "loc": [ -93.948385, 46.747791 ], "pop": 699, "state": "MN" }, { "_id": "56448", "city": "FIFTY LAKES", "loc": [ -94.065555, 46.746997 ], "pop": 289, "state": "MN" }, { "_id": "56449", "city": "FORT RIPLEY", "loc": [ -94.252696, 46.20988 ], "pop": 1377, "state": "MN" }, { "_id": "56450", "city": "GARRISON", "loc": [ -93.93634299999999, 46.263725 ], "pop": 1771, "state": "MN" }, { "_id": "56452", "city": "HACKENSACK", "loc": [ -94.50332400000001, 46.988442 ], "pop": 1382, "state": "MN" }, { "_id": "56453", "city": "HEWITT", "loc": [ -95.050361, 46.32497 ], "pop": 1213, "state": "MN" }, { "_id": "56455", "city": "IRONTON", "loc": [ -94.043655, 46.464135 ], "pop": 145, "state": "MN" }, { "_id": "56456", "city": "JENKINS", "loc": [ -94.33248500000001, 46.650983 ], "pop": 262, "state": "MN" }, { "_id": "56458", "city": "LAKE GEORGE", "loc": [ -95.00214800000001, 47.214992 ], "pop": 485, "state": "MN" }, { "_id": "56460", "city": "LAKE ITASCA", "loc": [ -95.252149, 47.275725 ], "pop": 208, "state": "MN" }, { "_id": "56461", "city": "LAPORTE", "loc": [ -94.77716100000001, 47.236752 ], "pop": 1624, "state": "MN" }, { "_id": "56463", "city": "MANHATTAN BEACH", "loc": [ -94.140068, 46.733563 ], "pop": 71, "state": "MN" }, { "_id": "56464", "city": "MENAHGA", "loc": [ -95.07142899999999, 46.757233 ], "pop": 1940, "state": "MN" }, { "_id": "56465", "city": "MERRIFIELD", "loc": [ -94.204268, 46.494309 ], "pop": 1552, "state": "MN" }, { "_id": "56466", "city": "LEADER", "loc": [ -94.628086, 46.321568 ], "pop": 943, "state": "MN" }, { "_id": "56467", "city": "NEVIS", "loc": [ -94.84600500000001, 46.931892 ], "pop": 1252, "state": "MN" }, { "_id": "56468", "city": "LAKE SHORE", "loc": [ -94.29656199999999, 46.484828 ], "pop": 2184, "state": "MN" }, { "_id": "56469", "city": "PALISADE", "loc": [ -93.562741, 46.689492 ], "pop": 1168, "state": "MN" }, { "_id": "56470", "city": "PARK RAPIDS", "loc": [ -95.03829899999999, 46.937682 ], "pop": 8074, "state": "MN" }, { "_id": "56472", "city": "PEQUOT LAKES", "loc": [ -94.26842600000001, 46.62569 ], "pop": 3437, "state": "MN" }, { "_id": "56473", "city": "PILLAGER", "loc": [ -94.392287, 46.398395 ], "pop": 3481, "state": "MN" }, { "_id": "56474", "city": "PINE RIVER", "loc": [ -94.44769100000001, 46.693796 ], "pop": 4095, "state": "MN" }, { "_id": "56475", "city": "RANDALL", "loc": [ -94.50054299999999, 46.073361 ], "pop": 1621, "state": "MN" }, { "_id": "56477", "city": "SEBEKA", "loc": [ -95.068055, 46.630615 ], "pop": 3089, "state": "MN" }, { "_id": "56479", "city": "STAPLES", "loc": [ -94.763299, 46.353552 ], "pop": 5352, "state": "MN" }, { "_id": "56481", "city": "VERNDALE", "loc": [ -94.853268, 46.426995 ], "pop": 1899, "state": "MN" }, { "_id": "56482", "city": "WADENA", "loc": [ -95.128283, 46.440121 ], "pop": 5818, "state": "MN" }, { "_id": "56484", "city": "WALKER", "loc": [ -94.584675, 47.08775 ], "pop": 2431, "state": "MN" }, { "_id": "56485", "city": "WHIPHOLT", "loc": [ -94.35097399999999, 47.040953 ], "pop": 138, "state": "MN" }, { "_id": "56501", "city": "DETROIT LAKES", "loc": [ -95.800606, 46.834877 ], "pop": 15501, "state": "MN" }, { "_id": "56510", "city": "LOCKHART", "loc": [ -96.503569, 47.315597 ], "pop": 2500, "state": "MN" }, { "_id": "56511", "city": "AUDUBON", "loc": [ -95.988136, 46.871887 ], "pop": 1083, "state": "MN" }, { "_id": "56513", "city": "BAKER", "loc": [ -96.604955, 46.685764 ], "pop": 267, "state": "MN" }, { "_id": "56514", "city": "DOWNER", "loc": [ -96.37269000000001, 46.677296 ], "pop": 3357, "state": "MN" }, { "_id": "56515", "city": "BATTLE LAKE", "loc": [ -95.714395, 46.314175 ], "pop": 2143, "state": "MN" }, { "_id": "56516", "city": "BEJOU", "loc": [ -95.94542300000001, 47.44909 ], "pop": 358, "state": "MN" }, { "_id": "56517", "city": "BELTRAMI", "loc": [ -96.454864, 47.572118 ], "pop": 517, "state": "MN" }, { "_id": "56518", "city": "BLUFFTON", "loc": [ -95.223592, 46.491795 ], "pop": 623, "state": "MN" }, { "_id": "56519", "city": "BORUP", "loc": [ -96.552969, 47.189641 ], "pop": 329, "state": "MN" }, { "_id": "56520", "city": "BRECKENRIDGE", "loc": [ -96.56222, 46.27966 ], "pop": 4776, "state": "MN" }, { "_id": "56521", "city": "CALLAWAY", "loc": [ -95.94396399999999, 47.007642 ], "pop": 761, "state": "MN" }, { "_id": "56522", "city": "DORAN", "loc": [ -96.437169, 46.129645 ], "pop": 718, "state": "MN" }, { "_id": "56523", "city": "ELDRED", "loc": [ -96.80264699999999, 47.653011 ], "pop": 731, "state": "MN" }, { "_id": "56524", "city": "CLITHERALL", "loc": [ -95.58582199999999, 46.31693 ], "pop": 555, "state": "MN" }, { "_id": "56525", "city": "COMSTOCK", "loc": [ -96.739752, 46.666703 ], "pop": 260, "state": "MN" }, { "_id": "56527", "city": "DEER CREEK", "loc": [ -95.26726499999999, 46.411193 ], "pop": 1431, "state": "MN" }, { "_id": "56528", "city": "DENT", "loc": [ -95.764357, 46.555417 ], "pop": 2064, "state": "MN" }, { "_id": "56529", "city": "DILWORTH", "loc": [ -96.70222, 46.878168 ], "pop": 2546, "state": "MN" }, { "_id": "56531", "city": "ELBOW LAKE", "loc": [ -95.96714900000001, 45.995267 ], "pop": 2087, "state": "MN" }, { "_id": "56533", "city": "ELIZABETH", "loc": [ -96.085093, 46.406218 ], "pop": 738, "state": "MN" }, { "_id": "56534", "city": "ERHARD", "loc": [ -96.059264, 46.494817 ], "pop": 846, "state": "MN" }, { "_id": "56535", "city": "ERSKINE", "loc": [ -96.012173, 47.661817 ], "pop": 993, "state": "MN" }, { "_id": "56536", "city": "FELTON", "loc": [ -96.505225, 47.070528 ], "pop": 431, "state": "MN" }, { "_id": "56537", "city": "CARLISLE", "loc": [ -96.06433800000001, 46.289723 ], "pop": 18010, "state": "MN" }, { "_id": "56540", "city": "FERTILE", "loc": [ -96.237127, 47.521367 ], "pop": 1933, "state": "MN" }, { "_id": "56542", "city": "FOSSTON", "loc": [ -95.743082, 47.581584 ], "pop": 2469, "state": "MN" }, { "_id": "56543", "city": "FOXHOME", "loc": [ -96.31757899999999, 46.258366 ], "pop": 309, "state": "MN" }, { "_id": "56544", "city": "FRAZEE", "loc": [ -95.521159, 46.756469 ], "pop": 3166, "state": "MN" }, { "_id": "56545", "city": "GARY", "loc": [ -96.215233, 47.367491 ], "pop": 518, "state": "MN" }, { "_id": "56546", "city": "GEORGETOWN", "loc": [ -96.726996, 47.099865 ], "pop": 425, "state": "MN" }, { "_id": "56547", "city": "GLYNDON", "loc": [ -96.55833800000001, 46.882023 ], "pop": 2198, "state": "MN" }, { "_id": "56548", "city": "HALSTAD", "loc": [ -96.79803800000001, 47.355114 ], "pop": 898, "state": "MN" }, { "_id": "56549", "city": "ROLLAG", "loc": [ -96.31115, 46.884185 ], "pop": 3105, "state": "MN" }, { "_id": "56550", "city": "HENDRUM", "loc": [ -96.79875, 47.26889 ], "pop": 467, "state": "MN" }, { "_id": "56551", "city": "HENNING", "loc": [ -95.38516199999999, 46.325606 ], "pop": 1770, "state": "MN" }, { "_id": "56552", "city": "HITTERDAL", "loc": [ -96.28883999999999, 47.001354 ], "pop": 613, "state": "MN" }, { "_id": "56553", "city": "KENT", "loc": [ -96.685181, 46.437811 ], "pop": 168, "state": "MN" }, { "_id": "56554", "city": "LAKE PARK", "loc": [ -96.067047, 46.817623 ], "pop": 3001, "state": "MN" }, { "_id": "56556", "city": "MCINTOSH", "loc": [ -95.886252, 47.652165 ], "pop": 1088, "state": "MN" }, { "_id": "56557", "city": "MAHNOMEN", "loc": [ -95.885609, 47.336155 ], "pop": 2940, "state": "MN" }, { "_id": "56560", "city": "MOORHEAD", "loc": [ -96.75719700000001, 46.867748 ], "pop": 35056, "state": "MN" }, { "_id": "56565", "city": "NASHUA", "loc": [ -96.31600899999999, 46.053731 ], "pop": 153, "state": "MN" }, { "_id": "56566", "city": "NAYTAHWAUSH", "loc": [ -95.62832400000001, 47.26007 ], "pop": 785, "state": "MN" }, { "_id": "56567", "city": "NEW YORK MILLS", "loc": [ -95.40471700000001, 46.555867 ], "pop": 3681, "state": "MN" }, { "_id": "56568", "city": "NIELSVILLE", "loc": [ -96.75743300000001, 47.537336 ], "pop": 299, "state": "MN" }, { "_id": "56569", "city": "OGEMA", "loc": [ -95.91512400000001, 47.102865 ], "pop": 1129, "state": "MN" }, { "_id": "56570", "city": "OSAGE", "loc": [ -95.23528399999999, 46.932896 ], "pop": 626, "state": "MN" }, { "_id": "56571", "city": "OTTERTAIL", "loc": [ -95.543571, 46.417722 ], "pop": 1080, "state": "MN" }, { "_id": "56572", "city": "PELICAN RAPIDS", "loc": [ -96.066227, 46.599444 ], "pop": 4481, "state": "MN" }, { "_id": "56573", "city": "PERHAM", "loc": [ -95.581763, 46.603106 ], "pop": 3238, "state": "MN" }, { "_id": "56574", "city": "PERLEY", "loc": [ -96.777722, 47.18308 ], "pop": 303, "state": "MN" }, { "_id": "56575", "city": "PONSFORD", "loc": [ -95.319717, 47.013348 ], "pop": 1072, "state": "MN" }, { "_id": "56576", "city": "RICHVILLE", "loc": [ -95.59289099999999, 46.500807 ], "pop": 898, "state": "MN" }, { "_id": "56577", "city": "RICHWOOD", "loc": [ -95.850094, 46.93609 ], "pop": 594, "state": "MN" }, { "_id": "56578", "city": "ROCHERT", "loc": [ -95.600443, 46.855904 ], "pop": 688, "state": "MN" }, { "_id": "56579", "city": "ROTHSAY", "loc": [ -96.288726, 46.509412 ], "pop": 916, "state": "MN" }, { "_id": "56580", "city": "SABIN", "loc": [ -96.59851999999999, 46.770257 ], "pop": 1225, "state": "MN" }, { "_id": "56581", "city": "SHELLY", "loc": [ -96.78380199999999, 47.455375 ], "pop": 445, "state": "MN" }, { "_id": "56583", "city": "TENNEY", "loc": [ -96.387049, 45.990196 ], "pop": 270, "state": "MN" }, { "_id": "56584", "city": "TWIN VALLEY", "loc": [ -96.246382, 47.250905 ], "pop": 2108, "state": "MN" }, { "_id": "56585", "city": "ULEN", "loc": [ -96.28239000000001, 47.090263 ], "pop": 939, "state": "MN" }, { "_id": "56586", "city": "UNDERWOOD", "loc": [ -95.84155, 46.32652 ], "pop": 1932, "state": "MN" }, { "_id": "56587", "city": "VERGAS", "loc": [ -95.79481199999999, 46.670645 ], "pop": 1338, "state": "MN" }, { "_id": "56588", "city": "VINING", "loc": [ -95.588263, 46.256135 ], "pop": 463, "state": "MN" }, { "_id": "56589", "city": "WAUBUN", "loc": [ -95.887125, 47.192009 ], "pop": 961, "state": "MN" }, { "_id": "56590", "city": "WENDELL", "loc": [ -96.114407, 46.056174 ], "pop": 408, "state": "MN" }, { "_id": "56592", "city": "WINGER", "loc": [ -95.994085, 47.537516 ], "pop": 406, "state": "MN" }, { "_id": "56593", "city": "WOLF LAKE", "loc": [ -95.36070599999999, 46.833417 ], "pop": 260, "state": "MN" }, { "_id": "56594", "city": "WOLVERTON", "loc": [ -96.61487, 46.555017 ], "pop": 834, "state": "MN" }, { "_id": "56601", "city": "BEMIDJI", "loc": [ -94.848809, 47.488071 ], "pop": 25278, "state": "MN" }, { "_id": "56621", "city": "BAGLEY", "loc": [ -95.41334000000001, 47.487024 ], "pop": 4063, "state": "MN" }, { "_id": "56623", "city": "BAUDETTE", "loc": [ -94.599479, 48.692724 ], "pop": 2065, "state": "MN" }, { "_id": "56626", "city": "BENA", "loc": [ -94.251921, 47.347732 ], "pop": 461, "state": "MN" }, { "_id": "56627", "city": "BIG FALLS", "loc": [ -93.729629, 48.156028 ], "pop": 652, "state": "MN" }, { "_id": "56628", "city": "BIGFORK", "loc": [ -93.670699, 47.750227 ], "pop": 819, "state": "MN" }, { "_id": "56629", "city": "BIRCHDALE", "loc": [ -94.167652, 48.624696 ], "pop": 374, "state": "MN" }, { "_id": "56630", "city": "BLACKDUCK", "loc": [ -94.496072, 47.738136 ], "pop": 1428, "state": "MN" }, { "_id": "56632", "city": "BOY RIVER", "loc": [ -94.102587, 47.181841 ], "pop": 132, "state": "MN" }, { "_id": "56633", "city": "CASS LAKE", "loc": [ -94.611896, 47.35155 ], "pop": 2866, "state": "MN" }, { "_id": "56634", "city": "CLEARBROOK", "loc": [ -95.375185, 47.714581 ], "pop": 1208, "state": "MN" }, { "_id": "56636", "city": "DEER RIVER", "loc": [ -93.84979, 47.382867 ], "pop": 3254, "state": "MN" }, { "_id": "56637", "city": "TALMOON", "loc": [ -93.774913, 47.588764 ], "pop": 155, "state": "MN" }, { "_id": "56639", "city": "EFFIE", "loc": [ -93.579905, 47.847187 ], "pop": 346, "state": "MN" }, { "_id": "56641", "city": "FEDERAL DAM", "loc": [ -94.257519, 47.206914 ], "pop": 347, "state": "MN" }, { "_id": "56644", "city": "GONVICK", "loc": [ -95.499014, 47.749009 ], "pop": 931, "state": "MN" }, { "_id": "56646", "city": "GULLY", "loc": [ -95.641034, 47.769745 ], "pop": 511, "state": "MN" }, { "_id": "56647", "city": "HINES", "loc": [ -94.647666, 47.732429 ], "pop": 1083, "state": "MN" }, { "_id": "56649", "city": "INTERNATIONAL FA", "loc": [ -93.40609000000001, 48.583398 ], "pop": 11124, "state": "MN" }, { "_id": "56650", "city": "KELLIHER", "loc": [ -94.538166, 47.927173 ], "pop": 1092, "state": "MN" }, { "_id": "56651", "city": "LENGBY", "loc": [ -95.627475, 47.536998 ], "pop": 514, "state": "MN" }, { "_id": "56652", "city": "LEONARD", "loc": [ -95.37077499999999, 47.628905 ], "pop": 1022, "state": "MN" }, { "_id": "56653", "city": "LITTLEFORK", "loc": [ -93.53993199999999, 48.385233 ], "pop": 1769, "state": "MN" }, { "_id": "56654", "city": "LOMAN", "loc": [ -93.840673, 48.516406 ], "pop": 198, "state": "MN" }, { "_id": "56655", "city": "LONGVILLE", "loc": [ -94.198182, 47.024842 ], "pop": 757, "state": "MN" }, { "_id": "56657", "city": "MARCELL", "loc": [ -93.678425, 47.634527 ], "pop": 449, "state": "MN" }, { "_id": "56659", "city": "MAX", "loc": [ -93.972031, 47.628919 ], "pop": 140, "state": "MN" }, { "_id": "56660", "city": "MIZPAH", "loc": [ -94.146748, 47.949525 ], "pop": 321, "state": "MN" }, { "_id": "56661", "city": "NORTHOME", "loc": [ -94.204274, 47.844039 ], "pop": 908, "state": "MN" }, { "_id": "56662", "city": "OUTING", "loc": [ -93.94425200000001, 46.837528 ], "pop": 348, "state": "MN" }, { "_id": "56663", "city": "PENNINGTON", "loc": [ -94.483361, 47.465121 ], "pop": 176, "state": "MN" }, { "_id": "56665", "city": "PITT", "loc": [ -94.728252, 48.782986 ], "pop": 678, "state": "MN" }, { "_id": "56666", "city": "PONEMAH", "loc": [ -94.91704799999999, 48.037168 ], "pop": 790, "state": "MN" }, { "_id": "56667", "city": "PUPOSKY", "loc": [ -94.980294, 47.7436 ], "pop": 967, "state": "MN" }, { "_id": "56668", "city": "RANIER", "loc": [ -93.31245699999999, 48.611847 ], "pop": 1145, "state": "MN" }, { "_id": "56669", "city": "RAY", "loc": [ -93.08954900000001, 48.421834 ], "pop": 365, "state": "MN" }, { "_id": "56670", "city": "REDBY", "loc": [ -94.940409, 47.868888 ], "pop": 1394, "state": "MN" }, { "_id": "56671", "city": "REDLAKE", "loc": [ -95.06432, 47.865378 ], "pop": 1358, "state": "MN" }, { "_id": "56672", "city": "REMER", "loc": [ -93.919647, 47.087422 ], "pop": 1466, "state": "MN" }, { "_id": "56673", "city": "ROOSEVELT", "loc": [ -95.179389, 48.814807 ], "pop": 907, "state": "MN" }, { "_id": "56674", "city": "SAUM", "loc": [ -94.651203, 47.974492 ], "pop": 150, "state": "MN" }, { "_id": "56676", "city": "SHEVLIN", "loc": [ -95.24502099999999, 47.500364 ], "pop": 879, "state": "MN" }, { "_id": "56678", "city": "SOLWAY", "loc": [ -95.120475, 47.547972 ], "pop": 971, "state": "MN" }, { "_id": "56680", "city": "SPRING LAKE", "loc": [ -93.83821500000001, 47.588811 ], "pop": 383, "state": "MN" }, { "_id": "56681", "city": "SQUAW LAKE", "loc": [ -94.14749999999999, 47.636162 ], "pop": 337, "state": "MN" }, { "_id": "56682", "city": "SWIFT", "loc": [ -95.297499, 48.847573 ], "pop": 789, "state": "MN" }, { "_id": "56683", "city": "TENSTRIKE", "loc": [ -94.68243200000001, 47.661146 ], "pop": 184, "state": "MN" }, { "_id": "56684", "city": "TRAIL", "loc": [ -95.760668, 47.747769 ], "pop": 353, "state": "MN" }, { "_id": "56685", "city": "WASKISH", "loc": [ -94.50370700000001, 48.176971 ], "pop": 115, "state": "MN" }, { "_id": "56686", "city": "WILLIAMS", "loc": [ -94.955586, 48.802218 ], "pop": 1257, "state": "MN" }, { "_id": "56687", "city": "WILTON", "loc": [ -94.986238, 47.535254 ], "pop": 976, "state": "MN" }, { "_id": "56688", "city": "WIRT", "loc": [ -93.98107899999999, 47.716428 ], "pop": 84, "state": "MN" }, { "_id": "56701", "city": "THIEF RIVER FALL", "loc": [ -96.167019, 48.110391 ], "pop": 11401, "state": "MN" }, { "_id": "56710", "city": "ALVARADO", "loc": [ -96.991457, 48.201968 ], "pop": 483, "state": "MN" }, { "_id": "56711", "city": "ANGLE INLET", "loc": [ -95.090248, 49.324924 ], "pop": 50, "state": "MN" }, { "_id": "56712", "city": "ANGUS", "loc": [ -96.656978, 48.092675 ], "pop": 336, "state": "MN" }, { "_id": "56713", "city": "ARGYLE", "loc": [ -96.867096, 48.331418 ], "pop": 989, "state": "MN" }, { "_id": "56714", "city": "BADGER", "loc": [ -96.096523, 48.791294 ], "pop": 1068, "state": "MN" }, { "_id": "56715", "city": "BROOKS", "loc": [ -96.011663, 47.812942 ], "pop": 350, "state": "MN" }, { "_id": "56716", "city": "CROOKSTON", "loc": [ -96.59307800000001, 47.779694 ], "pop": 9976, "state": "MN" }, { "_id": "56720", "city": "DONALDSON", "loc": [ -96.857894, 48.579792 ], "pop": 117, "state": "MN" }, { "_id": "56721", "city": "EAST GRAND FORKS", "loc": [ -97.02126199999999, 47.931802 ], "pop": 8830, "state": "MN" }, { "_id": "56722", "city": "EUCLID", "loc": [ -96.921496, 48.033804 ], "pop": 1483, "state": "MN" }, { "_id": "56723", "city": "FISHER", "loc": [ -96.880312, 47.838145 ], "pop": 1473, "state": "MN" }, { "_id": "56724", "city": "GATZKE", "loc": [ -95.790305, 48.410416 ], "pop": 131, "state": "MN" }, { "_id": "56725", "city": "GOODRIDGE", "loc": [ -95.72834400000001, 48.068586 ], "pop": 923, "state": "MN" }, { "_id": "56726", "city": "GREENBUSH", "loc": [ -96.187091, 48.695667 ], "pop": 1022, "state": "MN" }, { "_id": "56727", "city": "GRYGLA", "loc": [ -95.639805, 48.307068 ], "pop": 1315, "state": "MN" }, { "_id": "56728", "city": "HALLOCK", "loc": [ -96.944486, 48.774855 ], "pop": 1729, "state": "MN" }, { "_id": "56729", "city": "HALMA", "loc": [ -96.59689899999999, 48.666895 ], "pop": 146, "state": "MN" }, { "_id": "56732", "city": "KARLSTAD", "loc": [ -96.55111599999999, 48.591592 ], "pop": 1461, "state": "MN" }, { "_id": "56733", "city": "KENNEDY", "loc": [ -96.96140699999999, 48.633686 ], "pop": 673, "state": "MN" }, { "_id": "56734", "city": "LAKE BRONSON", "loc": [ -96.643145, 48.77868 ], "pop": 548, "state": "MN" }, { "_id": "56735", "city": "ORLEANS", "loc": [ -96.813729, 48.881968 ], "pop": 785, "state": "MN" }, { "_id": "56736", "city": "MENTOR", "loc": [ -96.177823, 47.657597 ], "pop": 993, "state": "MN" }, { "_id": "56737", "city": "MIDDLE RIVER", "loc": [ -96.12325, 48.442593 ], "pop": 948, "state": "MN" }, { "_id": "56738", "city": "NEWFOLDEN", "loc": [ -96.25501800000001, 48.28945 ], "pop": 1700, "state": "MN" }, { "_id": "56740", "city": "NOYES", "loc": [ -97.14903200000001, 48.969223 ], "pop": 67, "state": "MN" }, { "_id": "56741", "city": "OAK ISLAND", "loc": [ -94.849209, 49.313466 ], "pop": 21, "state": "MN" }, { "_id": "56742", "city": "OKLEE", "loc": [ -95.861693, 47.82861 ], "pop": 628, "state": "MN" }, { "_id": "56744", "city": "OSLO", "loc": [ -97.116252, 48.20657 ], "pop": 552, "state": "MN" }, { "_id": "56748", "city": "PLUMMER", "loc": [ -95.964558, 47.911324 ], "pop": 847, "state": "MN" }, { "_id": "56750", "city": "RED LAKE FALLS", "loc": [ -96.268097, 47.882285 ], "pop": 2700, "state": "MN" }, { "_id": "56751", "city": "PENCER", "loc": [ -95.756709, 48.826809 ], "pop": 5473, "state": "MN" }, { "_id": "56754", "city": "SAINT HILAIRE", "loc": [ -96.224914, 48.010871 ], "pop": 873, "state": "MN" }, { "_id": "56755", "city": "SAINT VINCENT", "loc": [ -97.17030699999999, 48.945825 ], "pop": 241, "state": "MN" }, { "_id": "56756", "city": "SALOL", "loc": [ -95.535594, 48.852213 ], "pop": 478, "state": "MN" }, { "_id": "56757", "city": "STEPHEN", "loc": [ -96.867392, 48.452488 ], "pop": 1340, "state": "MN" }, { "_id": "56758", "city": "STRANDQUIST", "loc": [ -96.472266, 48.45256 ], "pop": 969, "state": "MN" }, { "_id": "56759", "city": "STRATHCONA", "loc": [ -96.109604, 48.626556 ], "pop": 860, "state": "MN" }, { "_id": "56760", "city": "VIKING", "loc": [ -96.474926, 48.234881 ], "pop": 627, "state": "MN" }, { "_id": "56761", "city": "WANNASKA", "loc": [ -95.7072, 48.64515 ], "pop": 684, "state": "MN" }, { "_id": "56762", "city": "RADIUM", "loc": [ -96.759702, 48.20784 ], "pop": 2404, "state": "MN" }, { "_id": "56763", "city": "WARROAD", "loc": [ -95.353843, 48.911144 ], "pop": 3766, "state": "MN" }, { "_id": "57001", "city": "ALCESTER", "loc": [ -96.63324299999999, 43.004726 ], "pop": 2064, "state": "SD" }, { "_id": "57002", "city": "AURORA", "loc": [ -96.704268, 44.283786 ], "pop": 1252, "state": "SD" }, { "_id": "57003", "city": "BALTIC", "loc": [ -96.756272, 43.730908 ], "pop": 1839, "state": "SD" }, { "_id": "57004", "city": "BERESFORD", "loc": [ -96.781256, 43.087409 ], "pop": 2639, "state": "SD" }, { "_id": "57005", "city": "CORSON", "loc": [ -96.57820100000001, 43.596413 ], "pop": 4155, "state": "SD" }, { "_id": "57006", "city": "BROOKINGS", "loc": [ -96.791408, 44.305619 ], "pop": 18164, "state": "SD" }, { "_id": "57010", "city": "BURBANK", "loc": [ -96.846569, 42.763798 ], "pop": 293, "state": "SD" }, { "_id": "57012", "city": "CANISTOTA", "loc": [ -97.288901, 43.585639 ], "pop": 1255, "state": "SD" }, { "_id": "57013", "city": "CANTON", "loc": [ -96.593796, 43.303819 ], "pop": 3210, "state": "SD" }, { "_id": "57014", "city": "CENTERVILLE", "loc": [ -96.96363700000001, 43.117635 ], "pop": 1048, "state": "SD" }, { "_id": "57015", "city": "CHANCELLOR", "loc": [ -96.98269500000001, 43.407962 ], "pop": 887, "state": "SD" }, { "_id": "57016", "city": "CHESTER", "loc": [ -96.975883, 43.898077 ], "pop": 799, "state": "SD" }, { "_id": "57017", "city": "COLMAN", "loc": [ -96.818882, 43.955761 ], "pop": 1013, "state": "SD" }, { "_id": "57018", "city": "COLTON", "loc": [ -96.957202, 43.795102 ], "pop": 1242, "state": "SD" }, { "_id": "57020", "city": "CROOKS", "loc": [ -96.818259, 43.64509 ], "pop": 1262, "state": "SD" }, { "_id": "57021", "city": "DAVIS", "loc": [ -96.979206, 43.286365 ], "pop": 357, "state": "SD" }, { "_id": "57022", "city": "DELL RAPIDS", "loc": [ -96.72231499999999, 43.822759 ], "pop": 3128, "state": "SD" }, { "_id": "57024", "city": "EGAN", "loc": [ -96.649252, 43.986592 ], "pop": 658, "state": "SD" }, { "_id": "57025", "city": "ELK POINT", "loc": [ -96.686954, 42.738219 ], "pop": 2698, "state": "SD" }, { "_id": "57026", "city": "ELKTON", "loc": [ -96.50109500000001, 44.234984 ], "pop": 853, "state": "SD" }, { "_id": "57027", "city": "FAIRVIEW", "loc": [ -96.57426100000001, 43.208965 ], "pop": 472, "state": "SD" }, { "_id": "57028", "city": "FLANDREAU", "loc": [ -96.622184, 44.06578 ], "pop": 3851, "state": "SD" }, { "_id": "57029", "city": "FREEMAN", "loc": [ -97.46007299999999, 43.360501 ], "pop": 2190, "state": "SD" }, { "_id": "57030", "city": "GARRETSON", "loc": [ -96.519626, 43.71617 ], "pop": 1546, "state": "SD" }, { "_id": "57031", "city": "GAYVILLE", "loc": [ -97.18295000000001, 42.883516 ], "pop": 572, "state": "SD" }, { "_id": "57032", "city": "HARRISBURG", "loc": [ -96.68638900000001, 43.446021 ], "pop": 3387, "state": "SD" }, { "_id": "57033", "city": "HARTFORD", "loc": [ -96.950052, 43.615472 ], "pop": 3110, "state": "SD" }, { "_id": "57034", "city": "HUDSON", "loc": [ -96.53063, 43.128357 ], "pop": 774, "state": "SD" }, { "_id": "57035", "city": "HUMBOLDT", "loc": [ -97.06971, 43.612026 ], "pop": 1090, "state": "SD" }, { "_id": "57036", "city": "HURLEY", "loc": [ -97.190364, 43.289256 ], "pop": 1124, "state": "SD" }, { "_id": "57037", "city": "IRENE", "loc": [ -97.255797, 43.102683 ], "pop": 1320, "state": "SD" }, { "_id": "57038", "city": "JEFFERSON", "loc": [ -96.57839199999999, 42.601341 ], "pop": 1262, "state": "SD" }, { "_id": "57039", "city": "LENNOX", "loc": [ -96.88206099999999, 43.345066 ], "pop": 2852, "state": "SD" }, { "_id": "57040", "city": "LESTERVILLE", "loc": [ -97.548282, 43.054976 ], "pop": 680, "state": "SD" }, { "_id": "57042", "city": "MADISON", "loc": [ -97.11485999999999, 44.005434 ], "pop": 7745, "state": "SD" }, { "_id": "57043", "city": "MARION", "loc": [ -97.277066, 43.41878 ], "pop": 1377, "state": "SD" }, { "_id": "57044", "city": "MECKLING", "loc": [ -97.092249, 42.848994 ], "pop": 228, "state": "SD" }, { "_id": "57045", "city": "MENNO", "loc": [ -97.564986, 43.233968 ], "pop": 1337, "state": "SD" }, { "_id": "57046", "city": "MISSION HILL", "loc": [ -97.33487700000001, 42.983611 ], "pop": 546, "state": "SD" }, { "_id": "57047", "city": "MONROE", "loc": [ -97.21816699999999, 43.477883 ], "pop": 239, "state": "SD" }, { "_id": "57048", "city": "MONTROSE", "loc": [ -97.18849299999999, 43.706262 ], "pop": 958, "state": "SD" }, { "_id": "57049", "city": "DAKOTA DUNES", "loc": [ -96.50761, 42.532706 ], "pop": 2491, "state": "SD" }, { "_id": "57050", "city": "NUNDA", "loc": [ -96.994209, 44.152459 ], "pop": 334, "state": "SD" }, { "_id": "57051", "city": "OLDHAM", "loc": [ -97.269575, 44.245722 ], "pop": 655, "state": "SD" }, { "_id": "57052", "city": "OLIVET", "loc": [ -97.718355, 43.292811 ], "pop": 555, "state": "SD" }, { "_id": "57053", "city": "PARKER", "loc": [ -97.133298, 43.40204 ], "pop": 1494, "state": "SD" }, { "_id": "57054", "city": "RAMONA", "loc": [ -97.234889, 44.122887 ], "pop": 641, "state": "SD" }, { "_id": "57055", "city": "RENNER", "loc": [ -96.71192499999999, 43.636625 ], "pop": 1444, "state": "SD" }, { "_id": "57057", "city": "RUTLAND", "loc": [ -96.95185600000001, 44.068282 ], "pop": 213, "state": "SD" }, { "_id": "57058", "city": "SALEM", "loc": [ -97.379695, 43.735583 ], "pop": 1963, "state": "SD" }, { "_id": "57059", "city": "SCOTLAND", "loc": [ -97.729596, 43.121208 ], "pop": 1611, "state": "SD" }, { "_id": "57060", "city": "SHERMAN", "loc": [ -96.54439600000001, 43.798677 ], "pop": 507, "state": "SD" }, { "_id": "57061", "city": "SINAI", "loc": [ -97.054332, 44.239745 ], "pop": 296, "state": "SD" }, { "_id": "57062", "city": "SPRINGFIELD", "loc": [ -97.928825, 42.868694 ], "pop": 2044, "state": "SD" }, { "_id": "57063", "city": "TABOR", "loc": [ -97.69228200000001, 42.938262 ], "pop": 853, "state": "SD" }, { "_id": "57064", "city": "TEA", "loc": [ -96.817734, 43.471114 ], "pop": 2885, "state": "SD" }, { "_id": "57065", "city": "TRENT", "loc": [ -96.63257400000001, 43.894159 ], "pop": 865, "state": "SD" }, { "_id": "57066", "city": "TYNDALL", "loc": [ -97.863285, 42.990043 ], "pop": 1451, "state": "SD" }, { "_id": "57067", "city": "UTICA", "loc": [ -97.455095, 42.936629 ], "pop": 1183, "state": "SD" }, { "_id": "57068", "city": "VALLEY SPRINGS", "loc": [ -96.495637, 43.577306 ], "pop": 1709, "state": "SD" }, { "_id": "57069", "city": "VERMILLION", "loc": [ -96.92578399999999, 42.795109 ], "pop": 11446, "state": "SD" }, { "_id": "57070", "city": "VIBORG", "loc": [ -97.114048, 43.181497 ], "pop": 1664, "state": "SD" }, { "_id": "57071", "city": "VOLGA", "loc": [ -96.92514799999999, 44.322354 ], "pop": 1562, "state": "SD" }, { "_id": "57072", "city": "VOLIN", "loc": [ -97.22823099999999, 42.969617 ], "pop": 782, "state": "SD" }, { "_id": "57073", "city": "WAKONDA", "loc": [ -97.069374, 42.996001 ], "pop": 938, "state": "SD" }, { "_id": "57074", "city": "WARD", "loc": [ -96.481325, 44.155883 ], "pop": 120, "state": "SD" }, { "_id": "57075", "city": "WENTWORTH", "loc": [ -96.961456, 43.985242 ], "pop": 394, "state": "SD" }, { "_id": "57076", "city": "WINFRED", "loc": [ -97.30926599999999, 43.959511 ], "pop": 424, "state": "SD" }, { "_id": "57077", "city": "WORTHING", "loc": [ -96.75293499999999, 43.292531 ], "pop": 882, "state": "SD" }, { "_id": "57078", "city": "YANKTON", "loc": [ -97.398624, 42.882086 ], "pop": 14765, "state": "SD" }, { "_id": "57102", "city": "SIOUX FALLS", "loc": [ -96.726927, 43.546131 ], "pop": 530, "state": "SD" }, { "_id": "57103", "city": "SIOUX FALLS", "loc": [ -96.686415, 43.537386 ], "pop": 32508, "state": "SD" }, { "_id": "57104", "city": "SIOUX FALLS", "loc": [ -96.73753499999999, 43.551355 ], "pop": 22081, "state": "SD" }, { "_id": "57105", "city": "SIOUX FALLS", "loc": [ -96.73414099999999, 43.523972 ], "pop": 26347, "state": "SD" }, { "_id": "57106", "city": "SIOUX FALLS", "loc": [ -96.792376, 43.517912 ], "pop": 16823, "state": "SD" }, { "_id": "57107", "city": "SIOUX FALLS", "loc": [ -96.80281100000001, 43.556628 ], "pop": 3331, "state": "SD" }, { "_id": "57115", "city": "BUFFALO RIDGE", "loc": [ -96.834165, 43.516936 ], "pop": 731, "state": "SD" }, { "_id": "57116", "city": "SIOUX FALLS", "loc": [ -96.766199, 43.508535 ], "pop": 426, "state": "SD" }, { "_id": "57201", "city": "WATERTOWN", "loc": [ -97.123977, 44.904295 ], "pop": 20148, "state": "SD" }, { "_id": "57202", "city": "WAVERLY", "loc": [ -96.946744, 45.003209 ], "pop": 163, "state": "SD" }, { "_id": "57212", "city": "ARLINGTON", "loc": [ -97.06873400000001, 44.366769 ], "pop": 358, "state": "SD" }, { "_id": "57213", "city": "ASTORIA", "loc": [ -96.541634, 44.573515 ], "pop": 370, "state": "SD" }, { "_id": "57214", "city": "BADGER", "loc": [ -97.218368, 44.491802 ], "pop": 354, "state": "SD" }, { "_id": "57216", "city": "BIG STONE CITY", "loc": [ -96.56143400000001, 45.28504 ], "pop": 1568, "state": "SD" }, { "_id": "57217", "city": "BRADLEY", "loc": [ -97.638712, 45.075099 ], "pop": 399, "state": "SD" }, { "_id": "57218", "city": "BRANDT", "loc": [ -96.643545, 44.67383 ], "pop": 655, "state": "SD" }, { "_id": "57219", "city": "BUTLER", "loc": [ -97.746573, 45.308982 ], "pop": 769, "state": "SD" }, { "_id": "57220", "city": "BRUCE", "loc": [ -96.910984, 44.467453 ], "pop": 929, "state": "SD" }, { "_id": "57221", "city": "BRYANT", "loc": [ -97.453659, 44.598671 ], "pop": 627, "state": "SD" }, { "_id": "57223", "city": "CASTLEWOOD", "loc": [ -97.020432, 44.731339 ], "pop": 1083, "state": "SD" }, { "_id": "57224", "city": "CLAIRE CITY", "loc": [ -97.107274, 45.875522 ], "pop": 394, "state": "SD" }, { "_id": "57225", "city": "CLARK", "loc": [ -97.726536, 44.878 ], "pop": 2062, "state": "SD" }, { "_id": "57226", "city": "ALTAMONT", "loc": [ -96.700541, 44.763703 ], "pop": 1786, "state": "SD" }, { "_id": "57227", "city": "CORONA", "loc": [ -96.664897, 45.359483 ], "pop": 613, "state": "SD" }, { "_id": "57231", "city": "DE SMET", "loc": [ -97.56343200000001, 44.385169 ], "pop": 1956, "state": "SD" }, { "_id": "57232", "city": "EDEN", "loc": [ -97.37409100000001, 45.621074 ], "pop": 318, "state": "SD" }, { "_id": "57233", "city": "ERWIN", "loc": [ -97.410291, 44.491484 ], "pop": 225, "state": "SD" }, { "_id": "57234", "city": "DEMPSTER", "loc": [ -96.923678, 44.576998 ], "pop": 903, "state": "SD" }, { "_id": "57235", "city": "FLORENCE", "loc": [ -97.286643, 45.055388 ], "pop": 664, "state": "SD" }, { "_id": "57236", "city": "GARDEN CITY", "loc": [ -97.56802500000001, 44.947413 ], "pop": 175, "state": "SD" }, { "_id": "57237", "city": "GARY", "loc": [ -96.504362, 44.827022 ], "pop": 733, "state": "SD" }, { "_id": "57238", "city": "BEMIS", "loc": [ -96.811368, 44.886232 ], "pop": 509, "state": "SD" }, { "_id": "57239", "city": "GRENVILLE", "loc": [ -97.415457, 45.489673 ], "pop": 334, "state": "SD" }, { "_id": "57241", "city": "HAYTI", "loc": [ -97.230509, 44.664737 ], "pop": 720, "state": "SD" }, { "_id": "57242", "city": "HAZEL", "loc": [ -97.30829, 44.75717 ], "pop": 496, "state": "SD" }, { "_id": "57243", "city": "HENRY", "loc": [ -97.444216, 44.88576 ], "pop": 435, "state": "SD" }, { "_id": "57244", "city": "HETLAND", "loc": [ -97.141024, 44.367519 ], "pop": 1069, "state": "SD" }, { "_id": "57245", "city": "KRANZBURG", "loc": [ -96.947013, 44.879264 ], "pop": 525, "state": "SD" }, { "_id": "57246", "city": "LABOLT", "loc": [ -96.68920900000001, 45.041458 ], "pop": 188, "state": "SD" }, { "_id": "57247", "city": "LAKE CITY", "loc": [ -97.348131, 45.68991 ], "pop": 401, "state": "SD" }, { "_id": "57248", "city": "LAKE NORDEN", "loc": [ -97.200867, 44.584351 ], "pop": 900, "state": "SD" }, { "_id": "57249", "city": "LAKE PRESTON", "loc": [ -97.356283, 44.367298 ], "pop": 1074, "state": "SD" }, { "_id": "57251", "city": "MARVIN", "loc": [ -96.90996, 45.272651 ], "pop": 146, "state": "SD" }, { "_id": "57252", "city": "MILBANK", "loc": [ -96.62548, 45.206127 ], "pop": 5235, "state": "SD" }, { "_id": "57255", "city": "NEW EFFINGTON", "loc": [ -96.91498900000001, 45.865868 ], "pop": 391, "state": "SD" }, { "_id": "57256", "city": "ORTLEY", "loc": [ -97.176985, 45.340633 ], "pop": 151, "state": "SD" }, { "_id": "57257", "city": "PEEVER", "loc": [ -97.001205, 45.520647 ], "pop": 992, "state": "SD" }, { "_id": "57258", "city": "RAYMOND", "loc": [ -97.916781, 44.863651 ], "pop": 415, "state": "SD" }, { "_id": "57259", "city": "ALBEE", "loc": [ -96.562366, 45.022142 ], "pop": 357, "state": "SD" }, { "_id": "57260", "city": "ROSHOLT", "loc": [ -96.71741, 45.875315 ], "pop": 841, "state": "SD" }, { "_id": "57261", "city": "ROSLYN", "loc": [ -97.540105, 45.500564 ], "pop": 533, "state": "SD" }, { "_id": "57262", "city": "AGENCY VILLAGE", "loc": [ -97.02321999999999, 45.664413 ], "pop": 4968, "state": "SD" }, { "_id": "57263", "city": "SOUTH SHORE", "loc": [ -96.985885, 45.104919 ], "pop": 487, "state": "SD" }, { "_id": "57264", "city": "STOCKHOLM", "loc": [ -96.81059, 45.10309 ], "pop": 213, "state": "SD" }, { "_id": "57265", "city": "STRANDBURG", "loc": [ -96.79012899999999, 45.038872 ], "pop": 133, "state": "SD" }, { "_id": "57266", "city": "SUMMIT", "loc": [ -97.042654, 45.352128 ], "pop": 469, "state": "SD" }, { "_id": "57268", "city": "TORONTO", "loc": [ -96.70774, 44.578622 ], "pop": 469, "state": "SD" }, { "_id": "57269", "city": "TWIN BROOKS", "loc": [ -96.99560099999999, 45.211519 ], "pop": 532, "state": "SD" }, { "_id": "57270", "city": "VEBLEN", "loc": [ -97.31219299999999, 45.853508 ], "pop": 765, "state": "SD" }, { "_id": "57271", "city": "VIENNA", "loc": [ -97.545559, 44.690019 ], "pop": 454, "state": "SD" }, { "_id": "57272", "city": "WALLACE", "loc": [ -97.445751, 45.081542 ], "pop": 276, "state": "SD" }, { "_id": "57273", "city": "WAUBAY", "loc": [ -97.29498700000001, 45.37837 ], "pop": 1437, "state": "SD" }, { "_id": "57274", "city": "LILY", "loc": [ -97.515316, 45.322573 ], "pop": 3194, "state": "SD" }, { "_id": "57276", "city": "WHITE", "loc": [ -96.614963, 44.413237 ], "pop": 1793, "state": "SD" }, { "_id": "57278", "city": "WILLOW LAKE", "loc": [ -97.674747, 44.627225 ], "pop": 661, "state": "SD" }, { "_id": "57279", "city": "WILMOT", "loc": [ -96.85600599999999, 45.412487 ], "pop": 1095, "state": "SD" }, { "_id": "57301", "city": "LOOMIS", "loc": [ -98.02702600000001, 43.710921 ], "pop": 16187, "state": "SD" }, { "_id": "57311", "city": "FARMER", "loc": [ -97.782087, 43.623847 ], "pop": 934, "state": "SD" }, { "_id": "57312", "city": "ALPENA", "loc": [ -98.396191, 44.170907 ], "pop": 414, "state": "SD" }, { "_id": "57313", "city": "ARMOUR", "loc": [ -98.34137200000001, 43.316045 ], "pop": 1118, "state": "SD" }, { "_id": "57314", "city": "FORESTBURG", "loc": [ -97.953958, 44.035362 ], "pop": 640, "state": "SD" }, { "_id": "57315", "city": "AVON", "loc": [ -98.028261, 43.039725 ], "pop": 1130, "state": "SD" }, { "_id": "57316", "city": "BANCROFT", "loc": [ -97.77673299999999, 44.494419 ], "pop": 200, "state": "SD" }, { "_id": "57317", "city": "BONESTEEL", "loc": [ -98.987959, 43.069536 ], "pop": 688, "state": "SD" }, { "_id": "57319", "city": "DOLTON", "loc": [ -97.49590999999999, 43.554306 ], "pop": 1055, "state": "SD" }, { "_id": "57321", "city": "CANOVA", "loc": [ -97.53416300000001, 43.885517 ], "pop": 506, "state": "SD" }, { "_id": "57322", "city": "CARPENTER", "loc": [ -97.916825, 44.664768 ], "pop": 101, "state": "SD" }, { "_id": "57323", "city": "CARTHAGE", "loc": [ -97.71163199999999, 44.1496 ], "pop": 380, "state": "SD" }, { "_id": "57324", "city": "CAVOUR", "loc": [ -98.020797, 44.364951 ], "pop": 444, "state": "SD" }, { "_id": "57325", "city": "CHAMBERLAIN", "loc": [ -99.311819, 43.795295 ], "pop": 3218, "state": "SD" }, { "_id": "57328", "city": "CORSICA", "loc": [ -98.356358, 43.421319 ], "pop": 1569, "state": "SD" }, { "_id": "57329", "city": "DANTE", "loc": [ -98.174637, 42.996661 ], "pop": 519, "state": "SD" }, { "_id": "57330", "city": "DELMONT", "loc": [ -98.159612, 43.257261 ], "pop": 468, "state": "SD" }, { "_id": "57331", "city": "DIMOCK", "loc": [ -97.9988, 43.470476 ], "pop": 426, "state": "SD" }, { "_id": "57332", "city": "EMERY", "loc": [ -97.64748899999999, 43.565647 ], "pop": 888, "state": "SD" }, { "_id": "57334", "city": "ETHAN", "loc": [ -98.059074, 43.542653 ], "pop": 975, "state": "SD" }, { "_id": "57335", "city": "FAIRFAX", "loc": [ -98.83075700000001, 43.035103 ], "pop": 423, "state": "SD" }, { "_id": "57337", "city": "FEDORA", "loc": [ -97.78900299999999, 43.984125 ], "pop": 288, "state": "SD" }, { "_id": "57339", "city": "FORT THOMPSON", "loc": [ -99.397305, 44.051695 ], "pop": 1495, "state": "SD" }, { "_id": "57340", "city": "FULTON", "loc": [ -97.871218, 43.758767 ], "pop": 572, "state": "SD" }, { "_id": "57341", "city": "GANN VALLEY", "loc": [ -99.054334, 44.069303 ], "pop": 264, "state": "SD" }, { "_id": "57342", "city": "GEDDES", "loc": [ -98.69256, 43.259677 ], "pop": 725, "state": "SD" }, { "_id": "57344", "city": "HARRISON", "loc": [ -98.523338, 43.454923 ], "pop": 233, "state": "SD" }, { "_id": "57345", "city": "HIGHMORE", "loc": [ -99.45434899999999, 44.532604 ], "pop": 1652, "state": "SD" }, { "_id": "57348", "city": "HITCHCOCK", "loc": [ -98.450914, 44.583444 ], "pop": 501, "state": "SD" }, { "_id": "57349", "city": "ROSWELL", "loc": [ -97.516012, 44.029296 ], "pop": 2098, "state": "SD" }, { "_id": "57350", "city": "HURON", "loc": [ -98.21629299999999, 44.359022 ], "pop": 15277, "state": "SD" }, { "_id": "57353", "city": "IROQUOIS", "loc": [ -97.85417200000001, 44.345517 ], "pop": 576, "state": "SD" }, { "_id": "57354", "city": "KAYLOR", "loc": [ -97.820094, 43.202393 ], "pop": 223, "state": "SD" }, { "_id": "57355", "city": "KIMBALL", "loc": [ -98.93430499999999, 43.712881 ], "pop": 1546, "state": "SD" }, { "_id": "57356", "city": "LAKE ANDES", "loc": [ -98.49635499999999, 43.130288 ], "pop": 2556, "state": "SD" }, { "_id": "57357", "city": "RAVINIA", "loc": [ -98.426413, 43.136123 ], "pop": 79, "state": "SD" }, { "_id": "57358", "city": "LANE", "loc": [ -98.406496, 44.067383 ], "pop": 152, "state": "SD" }, { "_id": "57359", "city": "LETCHER", "loc": [ -98.174279, 43.892324 ], "pop": 912, "state": "SD" }, { "_id": "57361", "city": "MARTY", "loc": [ -98.42242899999999, 42.97639 ], "pop": 306, "state": "SD" }, { "_id": "57362", "city": "MILLER", "loc": [ -98.989395, 44.496644 ], "pop": 2938, "state": "SD" }, { "_id": "57363", "city": "MOUNT VERNON", "loc": [ -98.263288, 43.7204 ], "pop": 731, "state": "SD" }, { "_id": "57364", "city": "NEW HOLLAND", "loc": [ -98.628697, 43.431042 ], "pop": 358, "state": "SD" }, { "_id": "57366", "city": "PARKSTON", "loc": [ -97.96782399999999, 43.397796 ], "pop": 2231, "state": "SD" }, { "_id": "57368", "city": "PLANKINTON", "loc": [ -98.46939500000001, 43.737287 ], "pop": 1129, "state": "SD" }, { "_id": "57369", "city": "ACADEMY", "loc": [ -98.889656, 43.40242 ], "pop": 2425, "state": "SD" }, { "_id": "57370", "city": "PUKWANA", "loc": [ -99.17788400000001, 43.778326 ], "pop": 577, "state": "SD" }, { "_id": "57371", "city": "REE HEIGHTS", "loc": [ -99.22864, 44.560275 ], "pop": 288, "state": "SD" }, { "_id": "57373", "city": "SAINT LAWRENCE", "loc": [ -98.875427, 44.521523 ], "pop": 425, "state": "SD" }, { "_id": "57374", "city": "SPENCER", "loc": [ -97.59361, 43.755684 ], "pop": 658, "state": "SD" }, { "_id": "57375", "city": "STICKNEY", "loc": [ -98.508843, 43.58422 ], "pop": 1099, "state": "SD" }, { "_id": "57376", "city": "TRIPP", "loc": [ -97.97128499999999, 43.240377 ], "pop": 1128, "state": "SD" }, { "_id": "57379", "city": "VIRGIL", "loc": [ -98.392146, 44.325582 ], "pop": 167, "state": "SD" }, { "_id": "57380", "city": "WAGNER", "loc": [ -98.281876, 43.081931 ], "pop": 2665, "state": "SD" }, { "_id": "57381", "city": "WESSINGTON", "loc": [ -98.691982, 44.41285 ], "pop": 618, "state": "SD" }, { "_id": "57382", "city": "WESSINGTON SPRIN", "loc": [ -98.611625, 44.069935 ], "pop": 1864, "state": "SD" }, { "_id": "57383", "city": "WHITE LAKE", "loc": [ -98.70761299999999, 43.756441 ], "pop": 717, "state": "SD" }, { "_id": "57384", "city": "WOLSEY", "loc": [ -98.474251, 44.399072 ], "pop": 751, "state": "SD" }, { "_id": "57385", "city": "WOONSOCKET", "loc": [ -98.24301699999999, 44.057186 ], "pop": 1471, "state": "SD" }, { "_id": "57386", "city": "YALE", "loc": [ -97.99324900000001, 44.495591 ], "pop": 462, "state": "SD" }, { "_id": "57401", "city": "ABERDEEN", "loc": [ -98.485642, 45.466109 ], "pop": 28786, "state": "SD" }, { "_id": "57420", "city": "AKASKA", "loc": [ -100.118614, 45.332447 ], "pop": 52, "state": "SD" }, { "_id": "57421", "city": "AMHERST", "loc": [ -97.93007799999999, 45.707426 ], "pop": 227, "state": "SD" }, { "_id": "57422", "city": "ANDOVER", "loc": [ -97.917497, 45.422171 ], "pop": 348, "state": "SD" }, { "_id": "57424", "city": "ATHOL", "loc": [ -98.442549, 45.012833 ], "pop": 306, "state": "SD" }, { "_id": "57426", "city": "BARNARD", "loc": [ -98.55337900000001, 45.720469 ], "pop": 172, "state": "SD" }, { "_id": "57427", "city": "BATH", "loc": [ -98.355209, 45.456352 ], "pop": 593, "state": "SD" }, { "_id": "57428", "city": "BOWDLE", "loc": [ -99.63597799999999, 45.432881 ], "pop": 882, "state": "SD" }, { "_id": "57429", "city": "BRENTFORD", "loc": [ -98.319281, 45.153063 ], "pop": 257, "state": "SD" }, { "_id": "57430", "city": "BRITTON", "loc": [ -97.74183499999999, 45.802304 ], "pop": 2507, "state": "SD" }, { "_id": "57432", "city": "CLAREMONT", "loc": [ -98.040367, 45.666149 ], "pop": 400, "state": "SD" }, { "_id": "57433", "city": "COLUMBIA", "loc": [ -98.295152, 45.671721 ], "pop": 585, "state": "SD" }, { "_id": "57434", "city": "VERDON", "loc": [ -98.034323, 45.155125 ], "pop": 611, "state": "SD" }, { "_id": "57435", "city": "CRESBARD", "loc": [ -98.941124, 45.169125 ], "pop": 312, "state": "SD" }, { "_id": "57436", "city": "DOLAND", "loc": [ -98.09470899999999, 44.81587 ], "pop": 997, "state": "SD" }, { "_id": "57437", "city": "ARTAS", "loc": [ -99.615926, 45.769768 ], "pop": 1753, "state": "SD" }, { "_id": "57438", "city": "MIRANDA", "loc": [ -99.13405400000001, 45.06845 ], "pop": 1593, "state": "SD" }, { "_id": "57440", "city": "FRANKFORT", "loc": [ -98.293496, 44.808416 ], "pop": 533, "state": "SD" }, { "_id": "57441", "city": "FREDERICK", "loc": [ -98.51756399999999, 45.849332 ], "pop": 524, "state": "SD" }, { "_id": "57442", "city": "GETTYSBURG", "loc": [ -99.976626, 45.02588 ], "pop": 2065, "state": "SD" }, { "_id": "57445", "city": "GROTON", "loc": [ -98.105814, 45.450345 ], "pop": 1814, "state": "SD" }, { "_id": "57446", "city": "HECLA", "loc": [ -98.191774, 45.872515 ], "pop": 754, "state": "SD" }, { "_id": "57448", "city": "HOSMER", "loc": [ -99.48574499999999, 45.568988 ], "pop": 454, "state": "SD" }, { "_id": "57449", "city": "HOUGHTON", "loc": [ -98.095186, 45.796746 ], "pop": 147, "state": "SD" }, { "_id": "57450", "city": "HOVEN", "loc": [ -99.776286, 45.227799 ], "pop": 677, "state": "SD" }, { "_id": "57451", "city": "IPSWICH", "loc": [ -99.014807, 45.448905 ], "pop": 1771, "state": "SD" }, { "_id": "57452", "city": "JAVA", "loc": [ -99.83515300000001, 45.413541 ], "pop": 518, "state": "SD" }, { "_id": "57454", "city": "LANGFORD", "loc": [ -97.792547, 45.617381 ], "pop": 626, "state": "SD" }, { "_id": "57455", "city": "LEBANON", "loc": [ -99.73657900000001, 45.012318 ], "pop": 259, "state": "SD" }, { "_id": "57456", "city": "LEOLA", "loc": [ -98.901544, 45.732265 ], "pop": 1192, "state": "SD" }, { "_id": "57457", "city": "LONGLAKE", "loc": [ -99.250677, 45.796812 ], "pop": 378, "state": "SD" }, { "_id": "57460", "city": "MANSFIELD", "loc": [ -98.606568, 45.226727 ], "pop": 92, "state": "SD" }, { "_id": "57461", "city": "MELLETTE", "loc": [ -98.48237, 45.16312 ], "pop": 362, "state": "SD" }, { "_id": "57462", "city": "MINA", "loc": [ -98.756581, 45.439116 ], "pop": 515, "state": "SD" }, { "_id": "57465", "city": "NORTHVILLE", "loc": [ -98.65885299999999, 45.161112 ], "pop": 328, "state": "SD" }, { "_id": "57466", "city": "ONAKA", "loc": [ -99.45505199999999, 45.196527 ], "pop": 143, "state": "SD" }, { "_id": "57467", "city": "ORIENT", "loc": [ -99.10578700000001, 44.834347 ], "pop": 441, "state": "SD" }, { "_id": "57468", "city": "PIERPONT", "loc": [ -97.812844, 45.495983 ], "pop": 328, "state": "SD" }, { "_id": "57469", "city": "REDFIELD", "loc": [ -98.511234, 44.871853 ], "pop": 4033, "state": "SD" }, { "_id": "57470", "city": "ROCKHAM", "loc": [ -98.768683, 44.971579 ], "pop": 237, "state": "SD" }, { "_id": "57471", "city": "ROSCOE", "loc": [ -99.33263100000001, 45.427119 ], "pop": 673, "state": "SD" }, { "_id": "57472", "city": "SELBY", "loc": [ -100.054067, 45.478587 ], "pop": 1284, "state": "SD" }, { "_id": "57473", "city": "SENECA", "loc": [ -99.46098600000001, 45.026191 ], "pop": 246, "state": "SD" }, { "_id": "57474", "city": "STRATFORD", "loc": [ -98.27915299999999, 45.286595 ], "pop": 418, "state": "SD" }, { "_id": "57475", "city": "TOLSTOY", "loc": [ -99.617553, 45.170199 ], "pop": 189, "state": "SD" }, { "_id": "57476", "city": "TULARE", "loc": [ -98.553926, 44.730489 ], "pop": 526, "state": "SD" }, { "_id": "57477", "city": "TURTON", "loc": [ -98.09964100000001, 45.037938 ], "pop": 154, "state": "SD" }, { "_id": "57479", "city": "WARNER", "loc": [ -98.475697, 45.348627 ], "pop": 1060, "state": "SD" }, { "_id": "57481", "city": "WETONKA", "loc": [ -98.585623, 45.625025 ], "pop": 337, "state": "SD" }, { "_id": "57483", "city": "ZELL", "loc": [ -98.831746, 44.854624 ], "pop": 131, "state": "SD" }, { "_id": "57501", "city": "PIERRE", "loc": [ -100.321057, 44.369514 ], "pop": 14138, "state": "SD" }, { "_id": "57520", "city": "AGAR", "loc": [ -100.071238, 44.839345 ], "pop": 89, "state": "SD" }, { "_id": "57521", "city": "BELVIDERE", "loc": [ -101.238691, 43.886031 ], "pop": 177, "state": "SD" }, { "_id": "57522", "city": "BLUNT", "loc": [ -99.94627800000001, 44.502572 ], "pop": 484, "state": "SD" }, { "_id": "57523", "city": "LUCAS", "loc": [ -99.268963, 43.210602 ], "pop": 1258, "state": "SD" }, { "_id": "57526", "city": "CARTER", "loc": [ -100.172958, 43.368487 ], "pop": 118, "state": "SD" }, { "_id": "57527", "city": "CEDARBUTTE", "loc": [ -101.131585, 43.64731 ], "pop": 208, "state": "SD" }, { "_id": "57528", "city": "COLOME", "loc": [ -99.693273, 43.227334 ], "pop": 771, "state": "SD" }, { "_id": "57529", "city": "DALLAS", "loc": [ -99.513994, 43.235075 ], "pop": 167, "state": "SD" }, { "_id": "57531", "city": "DRAPER", "loc": [ -100.508514, 43.926035 ], "pop": 304, "state": "SD" }, { "_id": "57532", "city": "FORT PIERRE", "loc": [ -100.404323, 44.342587 ], "pop": 2179, "state": "SD" }, { "_id": "57533", "city": "DIXON", "loc": [ -99.43021400000001, 43.226908 ], "pop": 2401, "state": "SD" }, { "_id": "57534", "city": "HAMILL", "loc": [ -99.69175199999999, 43.643942 ], "pop": 78, "state": "SD" }, { "_id": "57536", "city": "HARROLD", "loc": [ -99.73816600000001, 44.521476 ], "pop": 195, "state": "SD" }, { "_id": "57537", "city": "HAYES", "loc": [ -100.735938, 44.421898 ], "pop": 191, "state": "SD" }, { "_id": "57538", "city": "HERRICK", "loc": [ -99.21726700000001, 43.101186 ], "pop": 337, "state": "SD" }, { "_id": "57540", "city": "HOLABIRD", "loc": [ -99.59429900000001, 44.517327 ], "pop": 44, "state": "SD" }, { "_id": "57541", "city": "IDEAL", "loc": [ -99.927949, 43.559612 ], "pop": 473, "state": "SD" }, { "_id": "57542", "city": "IONA", "loc": [ -99.488073, 43.575756 ], "pop": 146, "state": "SD" }, { "_id": "57543", "city": "KADOKA", "loc": [ -101.552272, 43.84457 ], "pop": 1024, "state": "SD" }, { "_id": "57544", "city": "KENNEBEC", "loc": [ -99.850191, 43.892139 ], "pop": 495, "state": "SD" }, { "_id": "57545", "city": "KEYAPAHA", "loc": [ -100.163958, 43.073497 ], "pop": 48, "state": "SD" }, { "_id": "57547", "city": "LONG VALLEY", "loc": [ -101.382145, 43.569784 ], "pop": 214, "state": "SD" }, { "_id": "57548", "city": "LOWER BRULE", "loc": [ -99.613896, 44.093692 ], "pop": 1118, "state": "SD" }, { "_id": "57551", "city": "VETAL", "loc": [ -101.740814, 43.178543 ], "pop": 2159, "state": "SD" }, { "_id": "57552", "city": "OTTUMWA", "loc": [ -101.292442, 44.237443 ], "pop": 789, "state": "SD" }, { "_id": "57553", "city": "MILESVILLE", "loc": [ -101.752276, 44.428259 ], "pop": 191, "state": "SD" }, { "_id": "57555", "city": "MISSION", "loc": [ -100.595364, 43.285017 ], "pop": 3169, "state": "SD" }, { "_id": "57557", "city": "MISSION RIDGE", "loc": [ -100.894553, 44.623851 ], "pop": 83, "state": "SD" }, { "_id": "57559", "city": "MURDO", "loc": [ -100.712107, 43.896115 ], "pop": 855, "state": "SD" }, { "_id": "57560", "city": "NORRIS", "loc": [ -101.151664, 43.466176 ], "pop": 322, "state": "SD" }, { "_id": "57562", "city": "OKATON", "loc": [ -100.935054, 43.934157 ], "pop": 165, "state": "SD" }, { "_id": "57564", "city": "ONIDA", "loc": [ -100.095667, 44.712543 ], "pop": 1500, "state": "SD" }, { "_id": "57566", "city": "PARMELEE", "loc": [ -101.008089, 43.311716 ], "pop": 1272, "state": "SD" }, { "_id": "57567", "city": "PHILIP", "loc": [ -101.687611, 44.055006 ], "pop": 1644, "state": "SD" }, { "_id": "57568", "city": "PRESHO", "loc": [ -100.074645, 43.899538 ], "pop": 897, "state": "SD" }, { "_id": "57569", "city": "RELIANCE", "loc": [ -99.485668, 43.830241 ], "pop": 790, "state": "SD" }, { "_id": "57571", "city": "SAINT CHARLES", "loc": [ -99.090969, 43.108893 ], "pop": 85, "state": "SD" }, { "_id": "57572", "city": "SAINT FRANCIS", "loc": [ -100.88502, 43.191017 ], "pop": 3917, "state": "SD" }, { "_id": "57574", "city": "TUTHILL", "loc": [ -101.470116, 43.119623 ], "pop": 286, "state": "SD" }, { "_id": "57576", "city": "VIVIAN", "loc": [ -100.285989, 43.95352 ], "pop": 192, "state": "SD" }, { "_id": "57577", "city": "WANBLEE", "loc": [ -101.721856, 43.55893 ], "pop": 1269, "state": "SD" }, { "_id": "57578", "city": "WEWELA", "loc": [ -99.747317, 43.079352 ], "pop": 207, "state": "SD" }, { "_id": "57579", "city": "WHITE RIVER", "loc": [ -100.74487, 43.56662 ], "pop": 1259, "state": "SD" }, { "_id": "57580", "city": "CLEARFIELD", "loc": [ -99.861907, 43.355504 ], "pop": 5111, "state": "SD" }, { "_id": "57584", "city": "WITTEN", "loc": [ -100.078291, 43.44982 ], "pop": 118, "state": "SD" }, { "_id": "57585", "city": "WOOD", "loc": [ -100.437929, 43.536599 ], "pop": 342, "state": "SD" }, { "_id": "57601", "city": "MOBRIDGE", "loc": [ -100.431488, 45.540723 ], "pop": 4099, "state": "SD" }, { "_id": "57620", "city": "BISON", "loc": [ -102.482707, 45.516126 ], "pop": 710, "state": "SD" }, { "_id": "57622", "city": "CHERRY CREEK", "loc": [ -101.65178, 44.621018 ], "pop": 715, "state": "SD" }, { "_id": "57623", "city": "DUPREE", "loc": [ -101.63368, 45.007851 ], "pop": 1441, "state": "SD" }, { "_id": "57626", "city": "FAITH", "loc": [ -102.054142, 44.992609 ], "pop": 660, "state": "SD" }, { "_id": "57628", "city": "FIRESTEEL", "loc": [ -101.223461, 45.430736 ], "pop": 50, "state": "SD" }, { "_id": "57629", "city": "GLAD VALLEY", "loc": [ -101.795168, 45.43696 ], "pop": 64, "state": "SD" }, { "_id": "57630", "city": "GLENCROSS", "loc": [ -100.894417, 45.450549 ], "pop": 56, "state": "SD" }, { "_id": "57631", "city": "GLENHAM", "loc": [ -100.27156, 45.53351 ], "pop": 134, "state": "SD" }, { "_id": "57632", "city": "HERREID", "loc": [ -100.048983, 45.845164 ], "pop": 829, "state": "SD" }, { "_id": "57633", "city": "ISABEL", "loc": [ -101.273637, 45.064016 ], "pop": 3606, "state": "SD" }, { "_id": "57634", "city": "KELDRON", "loc": [ -101.939465, 45.902221 ], "pop": 72, "state": "SD" }, { "_id": "57638", "city": "LEMMON", "loc": [ -102.192772, 45.915892 ], "pop": 2127, "state": "SD" }, { "_id": "57640", "city": "LODGEPOLE", "loc": [ -102.759917, 45.823193 ], "pop": 216, "state": "SD" }, { "_id": "57641", "city": "MC INTOSH", "loc": [ -101.500393, 45.81244 ], "pop": 719, "state": "SD" }, { "_id": "57642", "city": "MC LAUGHLIN", "loc": [ -100.877596, 45.748884 ], "pop": 2545, "state": "SD" }, { "_id": "57643", "city": "MAHTO", "loc": [ -100.658897, 45.767644 ], "pop": 31, "state": "SD" }, { "_id": "57644", "city": "MEADOW", "loc": [ -102.284425, 45.353769 ], "pop": 530, "state": "SD" }, { "_id": "57645", "city": "MORRISTOWN", "loc": [ -101.699838, 45.900642 ], "pop": 190, "state": "SD" }, { "_id": "57646", "city": "MOUND CITY", "loc": [ -100.047856, 45.678645 ], "pop": 548, "state": "SD" }, { "_id": "57647", "city": "PARADE", "loc": [ -100.743399, 45.108068 ], "pop": 819, "state": "SD" }, { "_id": "57648", "city": "POLLOCK", "loc": [ -100.287518, 45.889043 ], "pop": 493, "state": "SD" }, { "_id": "57649", "city": "PRAIRIE CITY", "loc": [ -102.80847, 45.581342 ], "pop": 172, "state": "SD" }, { "_id": "57650", "city": "RALPH", "loc": [ -103.035552, 45.855365 ], "pop": 101, "state": "SD" }, { "_id": "57651", "city": "REVA", "loc": [ -103.069163, 45.527653 ], "pop": 332, "state": "SD" }, { "_id": "57653", "city": "SHADEHILL", "loc": [ -102.189131, 45.669855 ], "pop": 49, "state": "SD" }, { "_id": "57656", "city": "TIMBER LAKE", "loc": [ -101.035077, 45.392737 ], "pop": 939, "state": "SD" }, { "_id": "57657", "city": "TRAIL CITY", "loc": [ -100.682902, 45.440082 ], "pop": 53, "state": "SD" }, { "_id": "57658", "city": "WAKPALA", "loc": [ -100.533176, 45.700617 ], "pop": 582, "state": "SD" }, { "_id": "57660", "city": "WATAUGA", "loc": [ -101.512936, 45.927593 ], "pop": 56, "state": "SD" }, { "_id": "57701", "city": "ROCKERVILLE", "loc": [ -103.200259, 44.077041 ], "pop": 45328, "state": "SD" }, { "_id": "57702", "city": "SILVER CITY", "loc": [ -103.283406, 44.069796 ], "pop": 20904, "state": "SD" }, { "_id": "57706", "city": "ELLSWORTH AFB", "loc": [ -103.07591, 44.144655 ], "pop": 6355, "state": "SD" }, { "_id": "57708", "city": "BETHLEHEM", "loc": [ -103.461246, 44.288967 ], "pop": 374, "state": "SD" }, { "_id": "57714", "city": "ALLEN", "loc": [ -101.932858, 43.290818 ], "pop": 761, "state": "SD" }, { "_id": "57716", "city": "DENBY", "loc": [ -102.173776, 43.078962 ], "pop": 435, "state": "SD" }, { "_id": "57717", "city": "BELLE FOURCHE", "loc": [ -103.839601, 44.672281 ], "pop": 5841, "state": "SD" }, { "_id": "57718", "city": "BLACK HAWK", "loc": [ -103.348634, 44.151173 ], "pop": 7418, "state": "SD" }, { "_id": "57719", "city": "BOX ELDER", "loc": [ -103.068237, 44.119858 ], "pop": 3690, "state": "SD" }, { "_id": "57720", "city": "BUFFALO", "loc": [ -103.582605, 45.574001 ], "pop": 913, "state": "SD" }, { "_id": "57722", "city": "BUFFALO GAP", "loc": [ -103.315749, 43.495762 ], "pop": 302, "state": "SD" }, { "_id": "57724", "city": "SKY RANCH", "loc": [ -103.963232, 45.595289 ], "pop": 258, "state": "SD" }, { "_id": "57725", "city": "CAPUTA", "loc": [ -103.023406, 43.980116 ], "pop": 578, "state": "SD" }, { "_id": "57729", "city": "CREIGHTON", "loc": [ -102.177043, 44.283087 ], "pop": 127, "state": "SD" }, { "_id": "57730", "city": "CRAZY HORSE", "loc": [ -103.618465, 43.740886 ], "pop": 4781, "state": "SD" }, { "_id": "57732", "city": "DEADWOOD", "loc": [ -103.699939, 44.356628 ], "pop": 2726, "state": "SD" }, { "_id": "57735", "city": "EDGEMONT", "loc": [ -103.811018, 43.287361 ], "pop": 1264, "state": "SD" }, { "_id": "57736", "city": "ELM SPRINGS", "loc": [ -102.631208, 44.239743 ], "pop": 222, "state": "SD" }, { "_id": "57737", "city": "ENNING", "loc": [ -102.6208, 44.538884 ], "pop": 275, "state": "SD" }, { "_id": "57738", "city": "FAIRBURN", "loc": [ -103.213335, 43.66228 ], "pop": 203, "state": "SD" }, { "_id": "57741", "city": "FORT MEADE", "loc": [ -103.47233, 44.409097 ], "pop": 124, "state": "SD" }, { "_id": "57742", "city": "FRUITDALE", "loc": [ -103.689568, 44.660039 ], "pop": 234, "state": "SD" }, { "_id": "57744", "city": "HERMOSA", "loc": [ -103.20596, 43.818845 ], "pop": 919, "state": "SD" }, { "_id": "57745", "city": "HILL CITY", "loc": [ -103.578158, 43.93768 ], "pop": 1671, "state": "SD" }, { "_id": "57747", "city": "HOT SPRINGS", "loc": [ -103.476555, 43.422308 ], "pop": 5467, "state": "SD" }, { "_id": "57748", "city": "PLAINVIEW", "loc": [ -102.215763, 44.534952 ], "pop": 153, "state": "SD" }, { "_id": "57750", "city": "INTERIOR", "loc": [ -101.964238, 43.731892 ], "pop": 127, "state": "SD" }, { "_id": "57751", "city": "KEYSTONE", "loc": [ -103.335235, 43.969604 ], "pop": 2573, "state": "SD" }, { "_id": "57752", "city": "KYLE", "loc": [ -102.212419, 43.439437 ], "pop": 1424, "state": "SD" }, { "_id": "57754", "city": "SPEARFISH CANYON", "loc": [ -103.769841, 44.349012 ], "pop": 4626, "state": "SD" }, { "_id": "57755", "city": "LUDLOW", "loc": [ -103.31115, 45.874655 ], "pop": 142, "state": "SD" }, { "_id": "57756", "city": "MANDERSON", "loc": [ -102.374493, 43.309844 ], "pop": 1027, "state": "SD" }, { "_id": "57757", "city": "MARCUS", "loc": [ -102.330697, 44.674678 ], "pop": 28, "state": "SD" }, { "_id": "57758", "city": "MUD BUTTE", "loc": [ -102.803129, 45.031046 ], "pop": 104, "state": "SD" }, { "_id": "57759", "city": "NEMO", "loc": [ -103.544863, 44.209718 ], "pop": 393, "state": "SD" }, { "_id": "57760", "city": "NEWELL", "loc": [ -103.391359, 44.740979 ], "pop": 1223, "state": "SD" }, { "_id": "57761", "city": "NEW UNDERWOOD", "loc": [ -102.813635, 44.087354 ], "pop": 763, "state": "SD" }, { "_id": "57762", "city": "NISLAND", "loc": [ -103.540176, 44.666539 ], "pop": 313, "state": "SD" }, { "_id": "57763", "city": "OELRICHS", "loc": [ -103.216181, 43.155063 ], "pop": 284, "state": "SD" }, { "_id": "57765", "city": "OPAL", "loc": [ -102.477752, 44.867111 ], "pop": 235, "state": "SD" }, { "_id": "57766", "city": "ORAL", "loc": [ -103.183215, 43.387587 ], "pop": 265, "state": "SD" }, { "_id": "57767", "city": "OWANKA", "loc": [ -102.562776, 44.063078 ], "pop": 69, "state": "SD" }, { "_id": "57769", "city": "PIEDMONT", "loc": [ -103.368818, 44.228744 ], "pop": 1337, "state": "SD" }, { "_id": "57770", "city": "PINE RIDGE", "loc": [ -102.598352, 43.112401 ], "pop": 5720, "state": "SD" }, { "_id": "57772", "city": "PORCUPINE", "loc": [ -102.223448, 43.293979 ], "pop": 470, "state": "SD" }, { "_id": "57774", "city": "PROVO", "loc": [ -103.866588, 43.173599 ], "pop": 32, "state": "SD" }, { "_id": "57775", "city": "COTTONWOOD", "loc": [ -102.069706, 44.07721 ], "pop": 89, "state": "SD" }, { "_id": "57777", "city": "REDOWL", "loc": [ -102.65923, 44.720224 ], "pop": 16, "state": "SD" }, { "_id": "57778", "city": "ROCHFORD", "loc": [ -103.657621, 44.072318 ], "pop": 251, "state": "SD" }, { "_id": "57779", "city": "SAINT ONGE", "loc": [ -103.734426, 44.552225 ], "pop": 317, "state": "SD" }, { "_id": "57780", "city": "SCENIC", "loc": [ -102.535309, 43.799368 ], "pop": 128, "state": "SD" }, { "_id": "57782", "city": "SMITHWICK", "loc": [ -103.198826, 43.26837 ], "pop": 15, "state": "SD" }, { "_id": "57783", "city": "SPEARFISH", "loc": [ -103.864962, 44.494625 ], "pop": 11088, "state": "SD" }, { "_id": "57785", "city": "HEREFORD", "loc": [ -103.477158, 44.413077 ], "pop": 8209, "state": "SD" }, { "_id": "57787", "city": "STONEVILLE", "loc": [ -102.79796, 44.638004 ], "pop": 204, "state": "SD" }, { "_id": "57788", "city": "VALE", "loc": [ -103.379499, 44.622235 ], "pop": 303, "state": "SD" }, { "_id": "57790", "city": "WALL", "loc": [ -102.224546, 43.981232 ], "pop": 1070, "state": "SD" }, { "_id": "57791", "city": "WASTA", "loc": [ -102.347077, 44.093707 ], "pop": 217, "state": "SD" }, { "_id": "57792", "city": "WHITE OWL", "loc": [ -102.445195, 44.618247 ], "pop": 92, "state": "SD" }, { "_id": "57793", "city": "WHITEWOOD", "loc": [ -103.637039, 44.458855 ], "pop": 1505, "state": "SD" }, { "_id": "57794", "city": "WOUNDED KNEE", "loc": [ -102.402157, 43.185194 ], "pop": 826, "state": "SD" }, { "_id": "57795", "city": "ZEONA", "loc": [ -102.7793, 45.251481 ], "pop": 8, "state": "SD" }, { "_id": "58002", "city": "ABSARAKA", "loc": [ -97.388769, 47.014359 ], "pop": 124, "state": "ND" }, { "_id": "58003", "city": "ALICE", "loc": [ -97.531819, 46.768892 ], "pop": 255, "state": "ND" }, { "_id": "58004", "city": "AMENIA", "loc": [ -97.204808, 47.019395 ], "pop": 321, "state": "ND" }, { "_id": "58005", "city": "ARGUSVILLE", "loc": [ -96.905764, 47.10664 ], "pop": 353, "state": "ND" }, { "_id": "58006", "city": "ARTHUR", "loc": [ -97.209737, 47.104774 ], "pop": 543, "state": "ND" }, { "_id": "58007", "city": "AYR", "loc": [ -97.572841, 47.019576 ], "pop": 187, "state": "ND" }, { "_id": "58008", "city": "BARNEY", "loc": [ -96.970772, 46.249621 ], "pop": 222, "state": "ND" }, { "_id": "58009", "city": "BLANCHARD", "loc": [ -97.262079, 47.353664 ], "pop": 144, "state": "ND" }, { "_id": "58011", "city": "BUFFALO", "loc": [ -97.53515899999999, 46.926351 ], "pop": 281, "state": "ND" }, { "_id": "58012", "city": "CASSELTON", "loc": [ -97.213821, 46.899195 ], "pop": 1838, "state": "ND" }, { "_id": "58013", "city": "CAYUGA", "loc": [ -97.405941, 46.132589 ], "pop": 442, "state": "ND" }, { "_id": "58014", "city": "CHAFFEE", "loc": [ -97.357753, 46.766477 ], "pop": 189, "state": "ND" }, { "_id": "58015", "city": "CHRISTINE", "loc": [ -96.790882, 46.552157 ], "pop": 377, "state": "ND" }, { "_id": "58016", "city": "CLIFFORD", "loc": [ -97.409961, 47.356946 ], "pop": 128, "state": "ND" }, { "_id": "58017", "city": "BRAMPTON", "loc": [ -97.80954300000001, 46.089106 ], "pop": 631, "state": "ND" }, { "_id": "58018", "city": "COLFAX", "loc": [ -96.979001, 46.497153 ], "pop": 414, "state": "ND" }, { "_id": "58021", "city": "DAVENPORT", "loc": [ -97.087073, 46.696811 ], "pop": 349, "state": "ND" }, { "_id": "58027", "city": "ENDERLIN", "loc": [ -97.61055399999999, 46.607898 ], "pop": 1732, "state": "ND" }, { "_id": "58029", "city": "ERIE", "loc": [ -97.384851, 47.112803 ], "pop": 135, "state": "ND" }, { "_id": "58030", "city": "FAIRMOUNT", "loc": [ -96.63081099999999, 46.042658 ], "pop": 780, "state": "ND" }, { "_id": "58031", "city": "FINGAL", "loc": [ -97.781198, 46.772754 ], "pop": 349, "state": "ND" }, { "_id": "58032", "city": "FORMAN", "loc": [ -97.698643, 46.072075 ], "pop": 72, "state": "ND" }, { "_id": "58033", "city": "ENGLEVALE", "loc": [ -97.90548200000001, 46.478188 ], "pop": 764, "state": "ND" }, { "_id": "58035", "city": "GALESBURG", "loc": [ -97.374599, 47.27779 ], "pop": 344, "state": "ND" }, { "_id": "58036", "city": "GARDNER", "loc": [ -96.990116, 47.1252 ], "pop": 200, "state": "ND" }, { "_id": "58038", "city": "GRANDIN", "loc": [ -97.02067599999999, 47.215769 ], "pop": 365, "state": "ND" }, { "_id": "58039", "city": "GREAT BEND", "loc": [ -96.817143, 46.154369 ], "pop": 235, "state": "ND" }, { "_id": "58040", "city": "CRETE", "loc": [ -97.86685300000001, 46.230455 ], "pop": 243, "state": "ND" }, { "_id": "58041", "city": "HANKINSON", "loc": [ -96.899069, 46.055797 ], "pop": 1546, "state": "ND" }, { "_id": "58042", "city": "PROSPER", "loc": [ -96.90097299999999, 46.996497 ], "pop": 1045, "state": "ND" }, { "_id": "58043", "city": "HAVANA", "loc": [ -97.60945, 45.964413 ], "pop": 272, "state": "ND" }, { "_id": "58045", "city": "KELSO", "loc": [ -97.05602399999999, 47.394168 ], "pop": 2398, "state": "ND" }, { "_id": "58046", "city": "COLGATE", "loc": [ -97.784865, 47.19995 ], "pop": 90, "state": "ND" }, { "_id": "58047", "city": "HICKSON", "loc": [ -96.860941, 46.739267 ], "pop": 2056, "state": "ND" }, { "_id": "58048", "city": "HUNTER", "loc": [ -97.251648, 47.19132 ], "pop": 512, "state": "ND" }, { "_id": "58049", "city": "HASTINGS", "loc": [ -97.999791, 46.705548 ], "pop": 355, "state": "ND" }, { "_id": "58051", "city": "KINDRED", "loc": [ -97.004919, 46.654296 ], "pop": 907, "state": "ND" }, { "_id": "58052", "city": "LEONARD", "loc": [ -97.272488, 46.659324 ], "pop": 554, "state": "ND" }, { "_id": "58053", "city": "GENESEO", "loc": [ -97.144429, 46.073885 ], "pop": 1494, "state": "ND" }, { "_id": "58054", "city": "ELLIOTT", "loc": [ -97.658895, 46.420133 ], "pop": 3078, "state": "ND" }, { "_id": "58056", "city": "LUVERNE", "loc": [ -97.72962200000001, 47.315052 ], "pop": 893, "state": "ND" }, { "_id": "58057", "city": "MCLEOD", "loc": [ -97.313892, 46.41027 ], "pop": 70, "state": "ND" }, { "_id": "58058", "city": "MANTADOR", "loc": [ -96.957004, 46.159935 ], "pop": 239, "state": "ND" }, { "_id": "58059", "city": "DURBIN", "loc": [ -97.051366, 46.867546 ], "pop": 1665, "state": "ND" }, { "_id": "58060", "city": "DELAMERE", "loc": [ -97.433724, 46.255074 ], "pop": 927, "state": "ND" }, { "_id": "58061", "city": "MOORETON", "loc": [ -96.85072599999999, 46.261537 ], "pop": 313, "state": "ND" }, { "_id": "58062", "city": "NOME", "loc": [ -97.791099, 46.674834 ], "pop": 284, "state": "ND" }, { "_id": "58063", "city": "ORISKA", "loc": [ -97.785331, 46.943251 ], "pop": 332, "state": "ND" }, { "_id": "58064", "city": "PAGE", "loc": [ -97.596665, 47.151512 ], "pop": 586, "state": "ND" }, { "_id": "58067", "city": "RUTLAND", "loc": [ -97.548284, 46.073813 ], "pop": 1166, "state": "ND" }, { "_id": "58068", "city": "SHELDON", "loc": [ -97.454261, 46.554784 ], "pop": 546, "state": "ND" }, { "_id": "58069", "city": "STIRUM", "loc": [ -97.654233, 46.229891 ], "pop": 776, "state": "ND" }, { "_id": "58071", "city": "TOWER CITY", "loc": [ -97.659392, 46.911873 ], "pop": 417, "state": "ND" }, { "_id": "58072", "city": "VALLEY CITY", "loc": [ -98.003316, 46.92681 ], "pop": 8633, "state": "ND" }, { "_id": "58075", "city": "DWIGHT", "loc": [ -96.633934, 46.279842 ], "pop": 10683, "state": "ND" }, { "_id": "58077", "city": "WALCOTT", "loc": [ -97.001442, 46.583529 ], "pop": 740, "state": "ND" }, { "_id": "58078", "city": "RIVERSIDE", "loc": [ -96.89500200000001, 46.869523 ], "pop": 12422, "state": "ND" }, { "_id": "58079", "city": "EMBDEN", "loc": [ -97.391694, 46.875015 ], "pop": 367, "state": "ND" }, { "_id": "58081", "city": "WYNDMERE", "loc": [ -97.128912, 46.289137 ], "pop": 1127, "state": "ND" }, { "_id": "58102", "city": "NORTH RIVER", "loc": [ -96.793577, 46.900878 ], "pop": 33408, "state": "ND" }, { "_id": "58103", "city": "FARGO", "loc": [ -96.812252, 46.856406 ], "pop": 38483, "state": "ND" }, { "_id": "58104", "city": "BRIARWOOD", "loc": [ -96.823846, 46.81492 ], "pop": 5170, "state": "ND" }, { "_id": "58201", "city": "GRAND FORKS", "loc": [ -97.04463, 47.901041 ], "pop": 31138, "state": "ND" }, { "_id": "58203", "city": "GRAND FORKS", "loc": [ -97.067156, 47.927217 ], "pop": 19056, "state": "ND" }, { "_id": "58205", "city": "GRAND FORKS", "loc": [ -97.370802, 47.959499 ], "pop": 9333, "state": "ND" }, { "_id": "58210", "city": "ADAMS", "loc": [ -98.086741, 48.422299 ], "pop": 312, "state": "ND" }, { "_id": "58212", "city": "ANETA", "loc": [ -97.98140600000001, 47.699262 ], "pop": 426, "state": "ND" }, { "_id": "58213", "city": "ARDOCH", "loc": [ -97.253534, 48.226911 ], "pop": 355, "state": "ND" }, { "_id": "58214", "city": "ARVILLA", "loc": [ -97.48712399999999, 47.909292 ], "pop": 529, "state": "ND" }, { "_id": "58216", "city": "BATHGATE", "loc": [ -97.483215, 48.868632 ], "pop": 169, "state": "ND" }, { "_id": "58218", "city": "BUXTON", "loc": [ -97.089259, 47.616314 ], "pop": 952, "state": "ND" }, { "_id": "58219", "city": "CALEDONIA", "loc": [ -96.90847599999999, 47.457645 ], "pop": 154, "state": "ND" }, { "_id": "58220", "city": "CONCRETE", "loc": [ -97.657191, 48.794341 ], "pop": 2758, "state": "ND" }, { "_id": "58222", "city": "CRYSTAL", "loc": [ -97.673846, 48.592387 ], "pop": 384, "state": "ND" }, { "_id": "58223", "city": "CUMMINGS", "loc": [ -96.991287, 47.537023 ], "pop": 286, "state": "ND" }, { "_id": "58224", "city": "DAHLEN", "loc": [ -97.957269, 48.159896 ], "pop": 103, "state": "ND" }, { "_id": "58225", "city": "BOWESMONT", "loc": [ -97.19922200000001, 48.578569 ], "pop": 1233, "state": "ND" }, { "_id": "58227", "city": "GARDAR", "loc": [ -97.89018799999999, 48.490164 ], "pop": 859, "state": "ND" }, { "_id": "58228", "city": "EMERADO", "loc": [ -97.263012, 47.921376 ], "pop": 1690, "state": "ND" }, { "_id": "58229", "city": "FAIRDALE", "loc": [ -98.206587, 48.481924 ], "pop": 274, "state": "ND" }, { "_id": "58230", "city": "FINLEY", "loc": [ -97.744242, 47.530611 ], "pop": 1403, "state": "ND" }, { "_id": "58231", "city": "FORDVILLE", "loc": [ -97.802238, 48.22119 ], "pop": 377, "state": "ND" }, { "_id": "58233", "city": "FOREST RIVER", "loc": [ -97.460476, 48.225094 ], "pop": 284, "state": "ND" }, { "_id": "58235", "city": "HONEYFORD", "loc": [ -97.46329900000001, 48.077082 ], "pop": 395, "state": "ND" }, { "_id": "58237", "city": "NASH", "loc": [ -97.41589500000001, 48.410783 ], "pop": 6591, "state": "ND" }, { "_id": "58238", "city": "HAMILTON", "loc": [ -97.469302, 48.794249 ], "pop": 135, "state": "ND" }, { "_id": "58239", "city": "HANNAH", "loc": [ -98.723693, 48.959446 ], "pop": 141, "state": "ND" }, { "_id": "58240", "city": "HATTON", "loc": [ -97.432548, 47.638012 ], "pop": 1081, "state": "ND" }, { "_id": "58241", "city": "HENSEL", "loc": [ -97.59622299999999, 48.673836 ], "pop": 121, "state": "ND" }, { "_id": "58243", "city": "HOOPLE", "loc": [ -97.61833300000001, 48.51981 ], "pop": 555, "state": "ND" }, { "_id": "58244", "city": "ORR", "loc": [ -97.681302, 48.118654 ], "pop": 730, "state": "ND" }, { "_id": "58249", "city": "LANGDON", "loc": [ -98.35662000000001, 48.786562 ], "pop": 3701, "state": "ND" }, { "_id": "58250", "city": "LANKIN", "loc": [ -98.006997, 48.295233 ], "pop": 796, "state": "ND" }, { "_id": "58251", "city": "MCCANNA", "loc": [ -97.651792, 47.904048 ], "pop": 2023, "state": "ND" }, { "_id": "58254", "city": "KLOTEN", "loc": [ -98.162999, 47.778981 ], "pop": 925, "state": "ND" }, { "_id": "58255", "city": "MAIDA", "loc": [ -98.39482599999999, 48.949043 ], "pop": 104, "state": "ND" }, { "_id": "58256", "city": "MANVEL", "loc": [ -97.194332, 48.085314 ], "pop": 1033, "state": "ND" }, { "_id": "58257", "city": "MAYVILLE", "loc": [ -97.317645, 47.50138 ], "pop": 2378, "state": "ND" }, { "_id": "58258", "city": "MEKINOCK", "loc": [ -97.489593, 47.980909 ], "pop": 398, "state": "ND" }, { "_id": "58259", "city": "WHITMAN", "loc": [ -98.12424300000001, 48.04144 ], "pop": 624, "state": "ND" }, { "_id": "58260", "city": "MILTON", "loc": [ -98.01828500000001, 48.616963 ], "pop": 248, "state": "ND" }, { "_id": "58261", "city": "VOSS", "loc": [ -97.333727, 48.298874 ], "pop": 851, "state": "ND" }, { "_id": "58262", "city": "MOUNTAIN", "loc": [ -97.807569, 48.677341 ], "pop": 435, "state": "ND" }, { "_id": "58265", "city": "NECHE", "loc": [ -97.542687, 48.979567 ], "pop": 500, "state": "ND" }, { "_id": "58266", "city": "NIAGARA", "loc": [ -97.833431, 47.984817 ], "pop": 164, "state": "ND" }, { "_id": "58267", "city": "KEMPTON", "loc": [ -97.56305399999999, 47.741756 ], "pop": 1910, "state": "ND" }, { "_id": "58269", "city": "OSNABROCK", "loc": [ -98.23271, 48.641908 ], "pop": 620, "state": "ND" }, { "_id": "58270", "city": "PARK RIVER", "loc": [ -97.743897, 48.403881 ], "pop": 2139, "state": "ND" }, { "_id": "58271", "city": "JOLIETTE", "loc": [ -97.275611, 48.936124 ], "pop": 907, "state": "ND" }, { "_id": "58272", "city": "PETERSBURG", "loc": [ -97.984033, 47.997973 ], "pop": 404, "state": "ND" }, { "_id": "58273", "city": "PISEK", "loc": [ -97.702894, 48.297096 ], "pop": 350, "state": "ND" }, { "_id": "58274", "city": "PORTLAND", "loc": [ -97.384303, 47.501542 ], "pop": 887, "state": "ND" }, { "_id": "58275", "city": "REYNOLDS", "loc": [ -97.209153, 47.706776 ], "pop": 470, "state": "ND" }, { "_id": "58276", "city": "SAINT THOMAS", "loc": [ -97.454508, 48.625223 ], "pop": 607, "state": "ND" }, { "_id": "58277", "city": "SHARON", "loc": [ -97.905091, 47.606188 ], "pop": 163, "state": "ND" }, { "_id": "58278", "city": "THOMPSON", "loc": [ -97.09620099999999, 47.77658 ], "pop": 1705, "state": "ND" }, { "_id": "58281", "city": "WALES", "loc": [ -98.55964899999999, 48.921647 ], "pop": 122, "state": "ND" }, { "_id": "58282", "city": "BACKOO", "loc": [ -97.881927, 48.91103 ], "pop": 1759, "state": "ND" }, { "_id": "58301", "city": "DEVILS LAKE", "loc": [ -98.861588, 48.113162 ], "pop": 10324, "state": "ND" }, { "_id": "58311", "city": "LOMA", "loc": [ -98.622545, 48.636847 ], "pop": 272, "state": "ND" }, { "_id": "58315", "city": "BARTON", "loc": [ -100.204429, 48.461084 ], "pop": 140, "state": "ND" }, { "_id": "58316", "city": "BELCOURT", "loc": [ -99.768754, 48.837862 ], "pop": 5415, "state": "ND" }, { "_id": "58317", "city": "BISBEE", "loc": [ -99.363592, 48.555196 ], "pop": 507, "state": "ND" }, { "_id": "58318", "city": "BOTTINEAU", "loc": [ -100.432894, 48.845137 ], "pop": 4356, "state": "ND" }, { "_id": "58319", "city": "BREMEN", "loc": [ -99.37156400000001, 47.727212 ], "pop": 108, "state": "ND" }, { "_id": "58320", "city": "BRINSMADE", "loc": [ -99.31238399999999, 48.156805 ], "pop": 168, "state": "ND" }, { "_id": "58321", "city": "BROCKET", "loc": [ -98.35585399999999, 48.225527 ], "pop": 131, "state": "ND" }, { "_id": "58323", "city": "CALVIN", "loc": [ -98.92423599999999, 48.80843 ], "pop": 117, "state": "ND" }, { "_id": "58324", "city": "MAZA", "loc": [ -99.194553, 48.485479 ], "pop": 1800, "state": "ND" }, { "_id": "58325", "city": "CHURCHS FERRY", "loc": [ -99.141187, 48.286206 ], "pop": 206, "state": "ND" }, { "_id": "58327", "city": "SOUTHAM", "loc": [ -98.621236, 48.053028 ], "pop": 272, "state": "ND" }, { "_id": "58328", "city": "DOYON", "loc": [ -98.50675699999999, 48.081067 ], "pop": 121, "state": "ND" }, { "_id": "58329", "city": "SAN HAVEN", "loc": [ -100.031105, 48.84801 ], "pop": 3092, "state": "ND" }, { "_id": "58330", "city": "EDMORE", "loc": [ -98.445756, 48.43084 ], "pop": 572, "state": "ND" }, { "_id": "58331", "city": "EGELAND", "loc": [ -99.111475, 48.635537 ], "pop": 297, "state": "ND" }, { "_id": "58332", "city": "FILLMORE", "loc": [ -99.703388, 48.072022 ], "pop": 563, "state": "ND" }, { "_id": "58337", "city": "HAMBERG", "loc": [ -99.46829700000001, 47.779372 ], "pop": 213, "state": "ND" }, { "_id": "58338", "city": "HAMPDEN", "loc": [ -98.65431599999999, 48.522892 ], "pop": 148, "state": "ND" }, { "_id": "58339", "city": "HANSBORO", "loc": [ -99.383259, 48.86648 ], "pop": 390, "state": "ND" }, { "_id": "58341", "city": "MANFRED", "loc": [ -99.932941, 47.768121 ], "pop": 2769, "state": "ND" }, { "_id": "58342", "city": "HEIMDAL", "loc": [ -99.68914700000001, 47.799918 ], "pop": 180, "state": "ND" }, { "_id": "58343", "city": "KNOX", "loc": [ -99.671274, 48.338812 ], "pop": 100, "state": "ND" }, { "_id": "58344", "city": "MAPES", "loc": [ -98.341548, 48.035714 ], "pop": 1327, "state": "ND" }, { "_id": "58345", "city": "LAWTON", "loc": [ -98.414199, 48.30326 ], "pop": 178, "state": "ND" }, { "_id": "58346", "city": "HARLOW", "loc": [ -99.440123, 48.26681 ], "pop": 980, "state": "ND" }, { "_id": "58348", "city": "FLORA", "loc": [ -99.54306099999999, 47.95074 ], "pop": 1045, "state": "ND" }, { "_id": "58351", "city": "MINNEWAUKAN", "loc": [ -99.274323, 48.069777 ], "pop": 554, "state": "ND" }, { "_id": "58352", "city": "CALIO", "loc": [ -98.842646, 48.654605 ], "pop": 572, "state": "ND" }, { "_id": "58353", "city": "MYLO", "loc": [ -99.63287800000001, 48.635981 ], "pop": 292, "state": "ND" }, { "_id": "58356", "city": "BRANTFORD", "loc": [ -99.078007, 47.679385 ], "pop": 2309, "state": "ND" }, { "_id": "58357", "city": "OBERON", "loc": [ -99.140129, 47.948744 ], "pop": 556, "state": "ND" }, { "_id": "58360", "city": "OVERLY", "loc": [ -100.175958, 48.679029 ], "pop": 61, "state": "ND" }, { "_id": "58361", "city": "PEKIN", "loc": [ -98.326035, 47.769558 ], "pop": 229, "state": "ND" }, { "_id": "58362", "city": "PENN", "loc": [ -99.06550900000001, 48.227106 ], "pop": 165, "state": "ND" }, { "_id": "58363", "city": "PERTH", "loc": [ -99.383076, 48.681601 ], "pop": 125, "state": "ND" }, { "_id": "58365", "city": "ROCKLAKE", "loc": [ -99.17962799999999, 48.821569 ], "pop": 508, "state": "ND" }, { "_id": "58366", "city": "NANSON", "loc": [ -99.874375, 48.655224 ], "pop": 1125, "state": "ND" }, { "_id": "58367", "city": "ROLLA", "loc": [ -99.61338600000001, 48.859423 ], "pop": 1645, "state": "ND" }, { "_id": "58368", "city": "PLEASANT LAKE", "loc": [ -99.998954, 48.317264 ], "pop": 4592, "state": "ND" }, { "_id": "58369", "city": "SAINT JOHN", "loc": [ -99.76476, 48.936588 ], "pop": 1203, "state": "ND" }, { "_id": "58370", "city": "SAINT MICHAEL", "loc": [ -98.918058, 47.977363 ], "pop": 2860, "state": "ND" }, { "_id": "58372", "city": "SARLES", "loc": [ -98.960562, 48.945921 ], "pop": 172, "state": "ND" }, { "_id": "58374", "city": "SHEYENNE", "loc": [ -99.05832599999999, 47.818386 ], "pop": 551, "state": "ND" }, { "_id": "58377", "city": "STARKWEATHER", "loc": [ -98.853903, 48.448802 ], "pop": 456, "state": "ND" }, { "_id": "58380", "city": "HAMAR", "loc": [ -98.475218, 47.802014 ], "pop": 463, "state": "ND" }, { "_id": "58381", "city": "WARWICK", "loc": [ -98.68095599999999, 47.891285 ], "pop": 195, "state": "ND" }, { "_id": "58382", "city": "WEBSTER", "loc": [ -98.87394399999999, 48.322852 ], "pop": 108, "state": "ND" }, { "_id": "58384", "city": "WILLOW CITY", "loc": [ -100.296802, 48.606205 ], "pop": 453, "state": "ND" }, { "_id": "58385", "city": "WOLFORD", "loc": [ -99.662756, 48.480937 ], "pop": 326, "state": "ND" }, { "_id": "58386", "city": "BAKER", "loc": [ -99.550489, 48.321709 ], "pop": 74, "state": "ND" }, { "_id": "58401", "city": "ELDRIDGE", "loc": [ -98.706127, 46.905899 ], "pop": 18347, "state": "ND" }, { "_id": "58411", "city": "ALFRED", "loc": [ -98.914671, 46.58588 ], "pop": 121, "state": "ND" }, { "_id": "58412", "city": "ARENA", "loc": [ -100.17651, 47.134934 ], "pop": 140, "state": "ND" }, { "_id": "58413", "city": "ASHLEY", "loc": [ -99.3164, 46.053677 ], "pop": 1544, "state": "ND" }, { "_id": "58415", "city": "BERLIN", "loc": [ -98.523342, 46.400834 ], "pop": 185, "state": "ND" }, { "_id": "58416", "city": "BINFORD", "loc": [ -98.354625, 47.573899 ], "pop": 506, "state": "ND" }, { "_id": "58418", "city": "BOWDON", "loc": [ -99.701532, 47.434318 ], "pop": 387, "state": "ND" }, { "_id": "58420", "city": "BUCHANAN", "loc": [ -98.81115800000001, 47.040917 ], "pop": 162, "state": "ND" }, { "_id": "58421", "city": "BORDULAC", "loc": [ -99.108226, 47.453918 ], "pop": 3104, "state": "ND" }, { "_id": "58422", "city": "EMRICK", "loc": [ -99.429677, 47.549857 ], "pop": 115, "state": "ND" }, { "_id": "58423", "city": "CHASELEY", "loc": [ -99.824082, 47.449018 ], "pop": 68, "state": "ND" }, { "_id": "58424", "city": "WINDSOR", "loc": [ -99.086596, 46.883242 ], "pop": 378, "state": "ND" }, { "_id": "58425", "city": "COOPERSTOWN", "loc": [ -98.15333200000001, 47.452732 ], "pop": 2313, "state": "ND" }, { "_id": "58426", "city": "COURTENAY", "loc": [ -98.54885, 47.227195 ], "pop": 166, "state": "ND" }, { "_id": "58428", "city": "DAWSON", "loc": [ -99.763544, 46.829612 ], "pop": 298, "state": "ND" }, { "_id": "58429", "city": "SIBLEY", "loc": [ -98.143863, 47.195503 ], "pop": 376, "state": "ND" }, { "_id": "58430", "city": "DENHOFF", "loc": [ -100.263037, 47.570905 ], "pop": 177, "state": "ND" }, { "_id": "58431", "city": "DICKEY", "loc": [ -98.46821199999999, 46.542565 ], "pop": 211, "state": "ND" }, { "_id": "58432", "city": "ECKELSON", "loc": [ -98.366939, 46.916737 ], "pop": 138, "state": "ND" }, { "_id": "58433", "city": "MERRICOURT", "loc": [ -98.70834600000001, 46.324969 ], "pop": 1364, "state": "ND" }, { "_id": "58436", "city": "ELLENDALE", "loc": [ -98.51383, 46.007317 ], "pop": 2446, "state": "ND" }, { "_id": "58438", "city": "FESSENDEN", "loc": [ -99.643361, 47.628644 ], "pop": 1297, "state": "ND" }, { "_id": "58439", "city": "FORBES", "loc": [ -98.812414, 46.010926 ], "pop": 287, "state": "ND" }, { "_id": "58440", "city": "FREDONIA", "loc": [ -99.262818, 46.353456 ], "pop": 453, "state": "ND" }, { "_id": "58441", "city": "FULLERTON", "loc": [ -98.38821900000001, 46.195138 ], "pop": 375, "state": "ND" }, { "_id": "58442", "city": "GACKLE", "loc": [ -99.21905599999999, 46.591263 ], "pop": 866, "state": "ND" }, { "_id": "58443", "city": "JUANITA", "loc": [ -98.663951, 47.443185 ], "pop": 539, "state": "ND" }, { "_id": "58444", "city": "GOODRICH", "loc": [ -100.118979, 47.471048 ], "pop": 339, "state": "ND" }, { "_id": "58445", "city": "GRACE CITY", "loc": [ -98.809465, 47.55358 ], "pop": 168, "state": "ND" }, { "_id": "58448", "city": "WALUM", "loc": [ -98.15718, 47.299693 ], "pop": 374, "state": "ND" }, { "_id": "58450", "city": "HEATON", "loc": [ -99.57848199999999, 47.462249 ], "pop": 76, "state": "ND" }, { "_id": "58451", "city": "HURDSFIELD", "loc": [ -99.94165, 47.438733 ], "pop": 194, "state": "ND" }, { "_id": "58454", "city": "NORTONVILLE", "loc": [ -98.807661, 46.500996 ], "pop": 575, "state": "ND" }, { "_id": "58455", "city": "KENSAL", "loc": [ -98.720579, 47.272609 ], "pop": 384, "state": "ND" }, { "_id": "58456", "city": "KULM", "loc": [ -98.942724, 46.307274 ], "pop": 634, "state": "ND" }, { "_id": "58458", "city": "GRAND RAPIDS", "loc": [ -98.30022, 46.361961 ], "pop": 1493, "state": "ND" }, { "_id": "58460", "city": "LEHR", "loc": [ -99.349136, 46.258638 ], "pop": 227, "state": "ND" }, { "_id": "58461", "city": "LITCHVILLE", "loc": [ -98.20327, 46.688788 ], "pop": 421, "state": "ND" }, { "_id": "58463", "city": "MCCLUSKY", "loc": [ -100.451966, 47.489639 ], "pop": 1002, "state": "ND" }, { "_id": "58464", "city": "MCHENRY", "loc": [ -98.572594, 47.560416 ], "pop": 172, "state": "ND" }, { "_id": "58465", "city": "MANFRED", "loc": [ -99.764369, 47.711663 ], "pop": 73, "state": "ND" }, { "_id": "58466", "city": "MARION", "loc": [ -98.253327, 46.571587 ], "pop": 723, "state": "ND" }, { "_id": "58467", "city": "MEDINA", "loc": [ -99.31055600000001, 46.891951 ], "pop": 622, "state": "ND" }, { "_id": "58471", "city": "MONANGO", "loc": [ -98.57962000000001, 46.193641 ], "pop": 172, "state": "ND" }, { "_id": "58472", "city": "ADRIAN", "loc": [ -98.59764699999999, 46.654218 ], "pop": 419, "state": "ND" }, { "_id": "58474", "city": "GUELPH", "loc": [ -98.099339, 46.128796 ], "pop": 2569, "state": "ND" }, { "_id": "58475", "city": "PETTIBONE", "loc": [ -99.52789199999999, 47.119973 ], "pop": 163, "state": "ND" }, { "_id": "58476", "city": "EDMUNDS", "loc": [ -99.00204100000001, 47.165715 ], "pop": 624, "state": "ND" }, { "_id": "58477", "city": "REGAN", "loc": [ -100.522448, 47.152703 ], "pop": 274, "state": "ND" }, { "_id": "58478", "city": "LAKE WILLIAMS", "loc": [ -99.70030199999999, 47.150765 ], "pop": 505, "state": "ND" }, { "_id": "58479", "city": "LEAL", "loc": [ -98.220885, 47.071086 ], "pop": 395, "state": "ND" }, { "_id": "58480", "city": "SANBORN", "loc": [ -98.233622, 46.927065 ], "pop": 304, "state": "ND" }, { "_id": "58481", "city": "SPIRITWOOD", "loc": [ -98.64846799999999, 47.101601 ], "pop": 263, "state": "ND" }, { "_id": "58482", "city": "STEELE", "loc": [ -99.933559, 46.852357 ], "pop": 1277, "state": "ND" }, { "_id": "58483", "city": "STREETER", "loc": [ -99.29710799999999, 46.694999 ], "pop": 482, "state": "ND" }, { "_id": "58484", "city": "SUTTON", "loc": [ -98.432044, 47.385355 ], "pop": 110, "state": "ND" }, { "_id": "58486", "city": "SYKESTON", "loc": [ -99.39751, 47.436938 ], "pop": 384, "state": "ND" }, { "_id": "58487", "city": "TAPPEN", "loc": [ -99.60189200000001, 46.83362 ], "pop": 631, "state": "ND" }, { "_id": "58488", "city": "TUTTLE", "loc": [ -99.98728699999999, 47.162583 ], "pop": 458, "state": "ND" }, { "_id": "58489", "city": "VENTURIA", "loc": [ -99.494253, 46.037075 ], "pop": 164, "state": "ND" }, { "_id": "58490", "city": "VERONA", "loc": [ -98.089536, 46.371229 ], "pop": 278, "state": "ND" }, { "_id": "58492", "city": "WIMBLEDON", "loc": [ -98.43291600000001, 47.143837 ], "pop": 530, "state": "ND" }, { "_id": "58494", "city": "WING", "loc": [ -100.307159, 47.151939 ], "pop": 376, "state": "ND" }, { "_id": "58495", "city": "BURNSTAD", "loc": [ -99.586005, 46.251617 ], "pop": 1677, "state": "ND" }, { "_id": "58496", "city": "WOODWORTH", "loc": [ -99.34059999999999, 47.163639 ], "pop": 340, "state": "ND" }, { "_id": "58497", "city": "YPSILANTI", "loc": [ -98.48763599999999, 46.771949 ], "pop": 281, "state": "ND" }, { "_id": "58501", "city": "BISMARCK", "loc": [ -100.774755, 46.823448 ], "pop": 36602, "state": "ND" }, { "_id": "58504", "city": "LINCOLN", "loc": [ -100.774411, 46.782463 ], "pop": 19990, "state": "ND" }, { "_id": "58520", "city": "ALMONT", "loc": [ -101.522126, 46.704605 ], "pop": 309, "state": "ND" }, { "_id": "58521", "city": "BALDWIN", "loc": [ -100.761464, 46.954338 ], "pop": 1218, "state": "ND" }, { "_id": "58523", "city": "BEULAH", "loc": [ -101.807468, 47.270664 ], "pop": 4363, "state": "ND" }, { "_id": "58524", "city": "BRADDOCK", "loc": [ -100.241577, 46.549885 ], "pop": 401, "state": "ND" }, { "_id": "58528", "city": "CANNON BALL", "loc": [ -100.59749, 46.387446 ], "pop": 608, "state": "ND" }, { "_id": "58529", "city": "CARSON", "loc": [ -101.538725, 46.462389 ], "pop": 713, "state": "ND" }, { "_id": "58530", "city": "FORT CLARK", "loc": [ -101.328643, 47.121912 ], "pop": 2381, "state": "ND" }, { "_id": "58531", "city": "COLEHARBOR", "loc": [ -101.233198, 47.519559 ], "pop": 184, "state": "ND" }, { "_id": "58532", "city": "DRISCOLL", "loc": [ -100.144063, 46.851139 ], "pop": 235, "state": "ND" }, { "_id": "58533", "city": "HEIL", "loc": [ -101.835145, 46.411346 ], "pop": 1052, "state": "ND" }, { "_id": "58535", "city": "LARK", "loc": [ -101.151681, 46.465133 ], "pop": 972, "state": "ND" }, { "_id": "58537", "city": "HUFF", "loc": [ -100.693909, 46.563172 ], "pop": 266, "state": "ND" }, { "_id": "58538", "city": "FORT YATES", "loc": [ -100.651611, 46.09054 ], "pop": 2096, "state": "ND" }, { "_id": "58540", "city": "EMMET", "loc": [ -101.398325, 47.655219 ], "pop": 2215, "state": "ND" }, { "_id": "58541", "city": "GOLDEN VALLEY", "loc": [ -102.061229, 47.293754 ], "pop": 315, "state": "ND" }, { "_id": "58542", "city": "HAGUE", "loc": [ -99.974507, 46.058896 ], "pop": 252, "state": "ND" }, { "_id": "58544", "city": "HAZELTON", "loc": [ -100.273325, 46.487477 ], "pop": 323, "state": "ND" }, { "_id": "58545", "city": "HAZEN", "loc": [ -101.610695, 47.327138 ], "pop": 4072, "state": "ND" }, { "_id": "58549", "city": "KINTYRE", "loc": [ -99.970462, 46.573573 ], "pop": 83, "state": "ND" }, { "_id": "58551", "city": "LEITH", "loc": [ -101.455531, 46.234873 ], "pop": 456, "state": "ND" }, { "_id": "58552", "city": "TEMVIK", "loc": [ -100.215832, 46.286924 ], "pop": 2362, "state": "ND" }, { "_id": "58553", "city": "MCKENZIE", "loc": [ -100.3995, 46.831062 ], "pop": 163, "state": "ND" }, { "_id": "58554", "city": "MANDAN", "loc": [ -100.909175, 46.830649 ], "pop": 18098, "state": "ND" }, { "_id": "58558", "city": "MENOKEN", "loc": [ -100.527488, 46.861032 ], "pop": 176, "state": "ND" }, { "_id": "58559", "city": "MERCER", "loc": [ -100.717079, 47.485792 ], "pop": 142, "state": "ND" }, { "_id": "58560", "city": "MOFFIT", "loc": [ -100.297538, 46.675725 ], "pop": 176, "state": "ND" }, { "_id": "58561", "city": "NAPOLEON", "loc": [ -99.77253, 46.486724 ], "pop": 1440, "state": "ND" }, { "_id": "58562", "city": "BENTLEY", "loc": [ -101.89369, 46.374448 ], "pop": 1095, "state": "ND" }, { "_id": "58563", "city": "HANNOVER", "loc": [ -101.424453, 46.851248 ], "pop": 1545, "state": "ND" }, { "_id": "58564", "city": "RALEIGH", "loc": [ -101.282651, 46.335236 ], "pop": 138, "state": "ND" }, { "_id": "58565", "city": "RIVERDALE", "loc": [ -101.115061, 47.640333 ], "pop": 86, "state": "ND" }, { "_id": "58566", "city": "SAINT ANTHONY", "loc": [ -100.897237, 46.588831 ], "pop": 238, "state": "ND" }, { "_id": "58568", "city": "SELFRIDGE", "loc": [ -101.150204, 46.035147 ], "pop": 647, "state": "ND" }, { "_id": "58569", "city": "SHIELDS", "loc": [ -101.258894, 46.183772 ], "pop": 76, "state": "ND" }, { "_id": "58570", "city": "BREIEN", "loc": [ -100.81363, 46.294106 ], "pop": 410, "state": "ND" }, { "_id": "58571", "city": "STANTON", "loc": [ -101.38987, 47.312786 ], "pop": 720, "state": "ND" }, { "_id": "58572", "city": "STERLING", "loc": [ -100.274392, 46.843583 ], "pop": 263, "state": "ND" }, { "_id": "58573", "city": "STRASBURG", "loc": [ -100.211869, 46.097938 ], "pop": 1409, "state": "ND" }, { "_id": "58575", "city": "TURTLE LAKE", "loc": [ -100.881364, 47.541416 ], "pop": 1059, "state": "ND" }, { "_id": "58576", "city": "UNDERWOOD", "loc": [ -101.189807, 47.460163 ], "pop": 1629, "state": "ND" }, { "_id": "58577", "city": "WASHBURN", "loc": [ -101.011568, 47.311388 ], "pop": 2006, "state": "ND" }, { "_id": "58579", "city": "WILTON", "loc": [ -100.794385, 47.170853 ], "pop": 1335, "state": "ND" }, { "_id": "58580", "city": "ZAP", "loc": [ -101.925649, 47.289711 ], "pop": 338, "state": "ND" }, { "_id": "58581", "city": "ZEELAND", "loc": [ -99.772543, 46.005476 ], "pop": 497, "state": "ND" }, { "_id": "58601", "city": "NEW HRADEC", "loc": [ -102.787595, 46.887289 ], "pop": 18751, "state": "ND" }, { "_id": "58620", "city": "AMIDON", "loc": [ -103.264741, 46.455951 ], "pop": 673, "state": "ND" }, { "_id": "58621", "city": "BEACH", "loc": [ -103.98429, 46.932381 ], "pop": 1577, "state": "ND" }, { "_id": "58622", "city": "FRYBURG", "loc": [ -103.179515, 46.887728 ], "pop": 1290, "state": "ND" }, { "_id": "58623", "city": "BOWMAN", "loc": [ -103.401965, 46.173316 ], "pop": 2432, "state": "ND" }, { "_id": "58625", "city": "DODGE", "loc": [ -102.198505, 47.304893 ], "pop": 159, "state": "ND" }, { "_id": "58626", "city": "DUNN CENTER", "loc": [ -102.589198, 47.345265 ], "pop": 276, "state": "ND" }, { "_id": "58627", "city": "GORHAM", "loc": [ -103.222328, 47.118004 ], "pop": 729, "state": "ND" }, { "_id": "58630", "city": "GLADSTONE", "loc": [ -102.527379, 46.815162 ], "pop": 397, "state": "ND" }, { "_id": "58631", "city": "GLEN ULLIN", "loc": [ -101.822293, 46.823301 ], "pop": 1207, "state": "ND" }, { "_id": "58632", "city": "GOLVA", "loc": [ -103.957545, 46.7075 ], "pop": 290, "state": "ND" }, { "_id": "58634", "city": "GRASSY BUTTE", "loc": [ -103.294433, 47.443072 ], "pop": 282, "state": "ND" }, { "_id": "58636", "city": "WERNER", "loc": [ -102.319286, 47.367752 ], "pop": 973, "state": "ND" }, { "_id": "58638", "city": "HEBRON", "loc": [ -102.036678, 46.893613 ], "pop": 1133, "state": "ND" }, { "_id": "58639", "city": "BUCYRUS", "loc": [ -102.584516, 46.027869 ], "pop": 2793, "state": "ND" }, { "_id": "58640", "city": "KILLDEER", "loc": [ -102.776242, 47.410898 ], "pop": 1564, "state": "ND" }, { "_id": "58641", "city": "LEFOR", "loc": [ -102.764292, 46.725264 ], "pop": 601, "state": "ND" }, { "_id": "58642", "city": "MANNING", "loc": [ -102.680638, 47.125837 ], "pop": 733, "state": "ND" }, { "_id": "58643", "city": "MARMARTH", "loc": [ -103.88, 46.325396 ], "pop": 234, "state": "ND" }, { "_id": "58645", "city": "MEDORA", "loc": [ -103.421011, 46.845771 ], "pop": 379, "state": "ND" }, { "_id": "58646", "city": "BURT", "loc": [ -102.312935, 46.401095 ], "pop": 1834, "state": "ND" }, { "_id": "58647", "city": "NEW ENGLAND", "loc": [ -102.835816, 46.512841 ], "pop": 1183, "state": "ND" }, { "_id": "58649", "city": "REEDER", "loc": [ -102.940519, 46.111577 ], "pop": 381, "state": "ND" }, { "_id": "58650", "city": "REGENT", "loc": [ -102.568443, 46.423452 ], "pop": 379, "state": "ND" }, { "_id": "58651", "city": "RHAME", "loc": [ -103.70791, 46.166449 ], "pop": 467, "state": "ND" }, { "_id": "58652", "city": "RICHARDTON", "loc": [ -102.292004, 46.842614 ], "pop": 1091, "state": "ND" }, { "_id": "58653", "city": "GASCOYNE", "loc": [ -103.144688, 46.139924 ], "pop": 697, "state": "ND" }, { "_id": "58654", "city": "SENTINEL BUTTE", "loc": [ -103.800113, 46.830475 ], "pop": 229, "state": "ND" }, { "_id": "58655", "city": "SOUTH HEART", "loc": [ -103.016241, 46.812701 ], "pop": 613, "state": "ND" }, { "_id": "58656", "city": "TAYLOR", "loc": [ -102.375626, 46.928372 ], "pop": 389, "state": "ND" }, { "_id": "58657", "city": "TROTTERS", "loc": [ -103.854704, 47.233008 ], "pop": 12, "state": "ND" }, { "_id": "58701", "city": "MINOT", "loc": [ -101.298476, 48.22914 ], "pop": 42195, "state": "ND" }, { "_id": "58704", "city": "MINOT AFB", "loc": [ -101.31678, 48.423217 ], "pop": 9095, "state": "ND" }, { "_id": "58710", "city": "ANAMOOSE", "loc": [ -100.252941, 47.870307 ], "pop": 595, "state": "ND" }, { "_id": "58711", "city": "ANTLER", "loc": [ -101.333758, 48.958525 ], "pop": 222, "state": "ND" }, { "_id": "58712", "city": "BALFOUR", "loc": [ -100.520929, 47.968451 ], "pop": 82, "state": "ND" }, { "_id": "58713", "city": "BANTRY", "loc": [ -100.789445, 48.511875 ], "pop": 504, "state": "ND" }, { "_id": "58716", "city": "BENEDICT", "loc": [ -101.057884, 47.786493 ], "pop": 149, "state": "ND" }, { "_id": "58718", "city": "BLAISDELL", "loc": [ -101.800562, 48.323399 ], "pop": 677, "state": "ND" }, { "_id": "58721", "city": "COTEAU", "loc": [ -102.247271, 48.796803 ], "pop": 705, "state": "ND" }, { "_id": "58722", "city": "BURLINGTON", "loc": [ -101.428205, 48.273534 ], "pop": 1291, "state": "ND" }, { "_id": "58723", "city": "BUTTE", "loc": [ -100.660446, 47.811884 ], "pop": 241, "state": "ND" }, { "_id": "58725", "city": "CARPIO", "loc": [ -101.711943, 48.432299 ], "pop": 298, "state": "ND" }, { "_id": "58727", "city": "LARSON", "loc": [ -102.794848, 48.878875 ], "pop": 484, "state": "ND" }, { "_id": "58730", "city": "CROSBY", "loc": [ -103.274023, 48.883551 ], "pop": 1881, "state": "ND" }, { "_id": "58731", "city": "DEERING", "loc": [ -101.033685, 48.405693 ], "pop": 200, "state": "ND" }, { "_id": "58733", "city": "DES LACS", "loc": [ -101.567167, 48.25569 ], "pop": 306, "state": "ND" }, { "_id": "58734", "city": "DONNYBROOK", "loc": [ -101.896039, 48.490015 ], "pop": 208, "state": "ND" }, { "_id": "58735", "city": "DOUGLAS", "loc": [ -101.511218, 47.865914 ], "pop": 135, "state": "ND" }, { "_id": "58736", "city": "DRAKE", "loc": [ -100.378955, 47.902431 ], "pop": 577, "state": "ND" }, { "_id": "58737", "city": "NORTHGATE", "loc": [ -102.341502, 48.917672 ], "pop": 240, "state": "ND" }, { "_id": "58738", "city": "FOXHOLM", "loc": [ -101.59072, 48.339193 ], "pop": 88, "state": "ND" }, { "_id": "58739", "city": "GARDENA", "loc": [ -100.48429, 48.683566 ], "pop": 82, "state": "ND" }, { "_id": "58740", "city": "WOLSETH", "loc": [ -101.31955, 48.507978 ], "pop": 783, "state": "ND" }, { "_id": "58741", "city": "GRANVILLE", "loc": [ -100.808193, 48.256575 ], "pop": 679, "state": "ND" }, { "_id": "58744", "city": "KARLSRUHE", "loc": [ -100.574158, 48.10085 ], "pop": 682, "state": "ND" }, { "_id": "58746", "city": "COULEE", "loc": [ -102.071745, 48.673149 ], "pop": 1756, "state": "ND" }, { "_id": "58747", "city": "KIEF", "loc": [ -100.52146, 47.818615 ], "pop": 204, "state": "ND" }, { "_id": "58748", "city": "KRAMER", "loc": [ -100.671638, 48.686666 ], "pop": 145, "state": "ND" }, { "_id": "58750", "city": "LANSFORD", "loc": [ -101.385825, 48.625419 ], "pop": 562, "state": "ND" }, { "_id": "58752", "city": "LIGNITE", "loc": [ -102.554177, 48.848113 ], "pop": 399, "state": "ND" }, { "_id": "58755", "city": "MCGREGOR", "loc": [ -102.928795, 48.594983 ], "pop": 94, "state": "ND" }, { "_id": "58756", "city": "MAKOTI", "loc": [ -101.814942, 47.985283 ], "pop": 247, "state": "ND" }, { "_id": "58757", "city": "MANDAREE", "loc": [ -102.653473, 47.856744 ], "pop": 886, "state": "ND" }, { "_id": "58758", "city": "MARTIN", "loc": [ -100.122517, 47.778144 ], "pop": 279, "state": "ND" }, { "_id": "58759", "city": "MAX", "loc": [ -101.293166, 47.815577 ], "pop": 472, "state": "ND" }, { "_id": "58760", "city": "MAXBASS", "loc": [ -101.256328, 48.772163 ], "pop": 404, "state": "ND" }, { "_id": "58761", "city": "LORAINE", "loc": [ -101.554512, 48.765814 ], "pop": 1455, "state": "ND" }, { "_id": "58762", "city": "NEWBURG", "loc": [ -100.968056, 48.698192 ], "pop": 516, "state": "ND" }, { "_id": "58763", "city": "CHARLSON", "loc": [ -102.485793, 47.977154 ], "pop": 2033, "state": "ND" }, { "_id": "58765", "city": "NOONAN", "loc": [ -103.009793, 48.885635 ], "pop": 326, "state": "ND" }, { "_id": "58768", "city": "NORWICH", "loc": [ -100.971165, 48.249115 ], "pop": 167, "state": "ND" }, { "_id": "58769", "city": "PALERMO", "loc": [ -102.239954, 48.3396 ], "pop": 133, "state": "ND" }, { "_id": "58770", "city": "PARSHALL", "loc": [ -102.142732, 47.95597 ], "pop": 1425, "state": "ND" }, { "_id": "58771", "city": "PLAZA", "loc": [ -101.964276, 48.02421 ], "pop": 309, "state": "ND" }, { "_id": "58772", "city": "PORTAL", "loc": [ -102.548023, 48.975818 ], "pop": 286, "state": "ND" }, { "_id": "58773", "city": "BATTLEVIEW", "loc": [ -102.644646, 48.589815 ], "pop": 888, "state": "ND" }, { "_id": "58775", "city": "ROSEGLEN", "loc": [ -101.822041, 47.695967 ], "pop": 1178, "state": "ND" }, { "_id": "58776", "city": "ROSS", "loc": [ -102.530721, 48.316159 ], "pop": 104, "state": "ND" }, { "_id": "58778", "city": "RUSO", "loc": [ -100.875432, 47.762224 ], "pop": 187, "state": "ND" }, { "_id": "58779", "city": "RAUB", "loc": [ -101.765095, 47.868017 ], "pop": 320, "state": "ND" }, { "_id": "58781", "city": "SAWYER", "loc": [ -101.067396, 48.085837 ], "pop": 493, "state": "ND" }, { "_id": "58782", "city": "SHERWOOD", "loc": [ -101.697024, 48.957551 ], "pop": 487, "state": "ND" }, { "_id": "58783", "city": "CARBURY", "loc": [ -100.741324, 48.937378 ], "pop": 443, "state": "ND" }, { "_id": "58784", "city": "BELDEN", "loc": [ -102.392802, 48.319189 ], "pop": 2711, "state": "ND" }, { "_id": "58785", "city": "SURREY", "loc": [ -101.121617, 48.236472 ], "pop": 1109, "state": "ND" }, { "_id": "58787", "city": "TOLLEY", "loc": [ -101.855891, 48.796903 ], "pop": 270, "state": "ND" }, { "_id": "58788", "city": "BERWICK", "loc": [ -100.412322, 48.377657 ], "pop": 1251, "state": "ND" }, { "_id": "58789", "city": "UPHAM", "loc": [ -100.732314, 48.581632 ], "pop": 285, "state": "ND" }, { "_id": "58790", "city": "VELVA", "loc": [ -100.934623, 48.06748 ], "pop": 1241, "state": "ND" }, { "_id": "58792", "city": "BERGEN", "loc": [ -100.803824, 47.951793 ], "pop": 418, "state": "ND" }, { "_id": "58793", "city": "WESTHOPE", "loc": [ -101.033809, 48.905074 ], "pop": 855, "state": "ND" }, { "_id": "58794", "city": "WHITE EARTH", "loc": [ -102.806672, 48.430748 ], "pop": 172, "state": "ND" }, { "_id": "58795", "city": "HAMLET", "loc": [ -103.184878, 48.621929 ], "pop": 238, "state": "ND" }, { "_id": "58801", "city": "BONETRAILL", "loc": [ -103.631699, 48.167924 ], "pop": 16473, "state": "ND" }, { "_id": "58830", "city": "APPAM", "loc": [ -103.422154, 48.585803 ], "pop": 116, "state": "ND" }, { "_id": "58831", "city": "RAWSON", "loc": [ -103.63961, 47.843517 ], "pop": 535, "state": "ND" }, { "_id": "58833", "city": "AMBROSE", "loc": [ -103.700676, 48.817195 ], "pop": 569, "state": "ND" }, { "_id": "58835", "city": "ARNEGARD", "loc": [ -103.453837, 47.808832 ], "pop": 190, "state": "ND" }, { "_id": "58838", "city": "CARTWRIGHT", "loc": [ -103.948718, 47.79922 ], "pop": 944, "state": "ND" }, { "_id": "58843", "city": "SPRINGBROOK", "loc": [ -103.372462, 48.260088 ], "pop": 195, "state": "ND" }, { "_id": "58844", "city": "COLGAN", "loc": [ -103.828955, 48.924646 ], "pop": 123, "state": "ND" }, { "_id": "58845", "city": "ALKABO", "loc": [ -103.929128, 48.613946 ], "pop": 313, "state": "ND" }, { "_id": "58847", "city": "KEENE", "loc": [ -102.890567, 47.940516 ], "pop": 358, "state": "ND" }, { "_id": "58849", "city": "WHEELOCK", "loc": [ -103.18365, 48.3323 ], "pop": 816, "state": "ND" }, { "_id": "58852", "city": "TEMPLE", "loc": [ -102.961281, 48.392009 ], "pop": 1984, "state": "ND" }, { "_id": "58853", "city": "TRENTON", "loc": [ -103.861276, 48.056303 ], "pop": 806, "state": "ND" }, { "_id": "58854", "city": "WATFORD CITY", "loc": [ -103.258205, 47.804258 ], "pop": 3188, "state": "ND" }, { "_id": "58856", "city": "ZAHL", "loc": [ -103.659926, 48.578747 ], "pop": 94, "state": "ND" }, { "_id": "59001", "city": "ABSAROKEE", "loc": [ -109.469171, 45.515356 ], "pop": 1330, "state": "MT" }, { "_id": "59002", "city": "ACTON", "loc": [ -108.680975, 45.936997 ], "pop": 55, "state": "MT" }, { "_id": "59003", "city": "ASHLAND", "loc": [ -106.279722, 45.58275 ], "pop": 353, "state": "MT" }, { "_id": "59006", "city": "BALLANTINE", "loc": [ -108.123133, 45.954699 ], "pop": 730, "state": "MT" }, { "_id": "59007", "city": "BEARCREEK", "loc": [ -109.044704, 45.15226 ], "pop": 312, "state": "MT" }, { "_id": "59008", "city": "BELFRY", "loc": [ -109.078777, 45.049827 ], "pop": 64, "state": "MT" }, { "_id": "59010", "city": "BIGHORN", "loc": [ -107.205942, 46.238286 ], "pop": 573, "state": "MT" }, { "_id": "59011", "city": "BIG TIMBER", "loc": [ -109.963094, 45.82827 ], "pop": 2296, "state": "MT" }, { "_id": "59012", "city": "BIRNEY", "loc": [ -106.509496, 45.286204 ], "pop": 138, "state": "MT" }, { "_id": "59014", "city": "BRIDGER", "loc": [ -108.908217, 45.285682 ], "pop": 1524, "state": "MT" }, { "_id": "59015", "city": "BROADVIEW", "loc": [ -108.809062, 46.082101 ], "pop": 303, "state": "MT" }, { "_id": "59016", "city": "BUSBY", "loc": [ -106.872311, 45.554139 ], "pop": 1077, "state": "MT" }, { "_id": "59017", "city": "CAT CREEK", "loc": [ -108.259094, 47.154789 ], "pop": 155, "state": "MT" }, { "_id": "59019", "city": "COLUMBUS", "loc": [ -109.257126, 45.626171 ], "pop": 2438, "state": "MT" }, { "_id": "59022", "city": "CROW AGENCY", "loc": [ -107.497251, 45.629594 ], "pop": 2267, "state": "MT" }, { "_id": "59024", "city": "CUSTER", "loc": [ -107.59585, 46.13019 ], "pop": 304, "state": "MT" }, { "_id": "59025", "city": "DECKER", "loc": [ -106.87206, 45.179698 ], "pop": 164, "state": "MT" }, { "_id": "59027", "city": "EMIGRANT", "loc": [ -110.798928, 45.127557 ], "pop": 2058, "state": "MT" }, { "_id": "59028", "city": "FISHTAIL", "loc": [ -109.582078, 45.400217 ], "pop": 348, "state": "MT" }, { "_id": "59029", "city": "FROMBERG", "loc": [ -108.905658, 45.40269 ], "pop": 627, "state": "MT" }, { "_id": "59030", "city": "GARDINER", "loc": [ -110.196258, 45.0493 ], "pop": 168, "state": "MT" }, { "_id": "59031", "city": "GARRYOWEN", "loc": [ -107.364925, 45.508557 ], "pop": 428, "state": "MT" }, { "_id": "59032", "city": "GRASS RANGE", "loc": [ -108.827059, 47.025894 ], "pop": 494, "state": "MT" }, { "_id": "59033", "city": "GREYCLIFF", "loc": [ -109.674601, 45.792631 ], "pop": 216, "state": "MT" }, { "_id": "59034", "city": "HARDIN", "loc": [ -107.607457, 45.749843 ], "pop": 3889, "state": "MT" }, { "_id": "59037", "city": "HUNTLEY", "loc": [ -108.284981, 45.89049 ], "pop": 1006, "state": "MT" }, { "_id": "59038", "city": "HYSHAM", "loc": [ -107.307196, 46.276483 ], "pop": 301, "state": "MT" }, { "_id": "59039", "city": "INGOMAR", "loc": [ -107.551749, 46.654196 ], "pop": 118, "state": "MT" }, { "_id": "59041", "city": "SILESIA", "loc": [ -108.94804, 45.498763 ], "pop": 1739, "state": "MT" }, { "_id": "59043", "city": "LAME DEER", "loc": [ -106.565424, 45.603167 ], "pop": 2846, "state": "MT" }, { "_id": "59044", "city": "LAUREL", "loc": [ -108.769008, 45.67451 ], "pop": 8328, "state": "MT" }, { "_id": "59046", "city": "LAVINA", "loc": [ -108.995853, 46.329058 ], "pop": 410, "state": "MT" }, { "_id": "59047", "city": "LIVINGSTON", "loc": [ -110.560907, 45.654587 ], "pop": 9980, "state": "MT" }, { "_id": "59050", "city": "LODGE GRASS", "loc": [ -107.734105, 45.33218 ], "pop": 2938, "state": "MT" }, { "_id": "59051", "city": "LUTHER", "loc": [ -109.475326, 45.279485 ], "pop": 11, "state": "MT" }, { "_id": "59052", "city": "MC LEOD", "loc": [ -109.935698, 45.596334 ], "pop": 226, "state": "MT" }, { "_id": "59053", "city": "MARTINSDALE", "loc": [ -110.432397, 46.458149 ], "pop": 246, "state": "MT" }, { "_id": "59055", "city": "MELVILLE", "loc": [ -109.880885, 46.036446 ], "pop": 416, "state": "MT" }, { "_id": "59057", "city": "MOLT", "loc": [ -108.973073, 45.861503 ], "pop": 524, "state": "MT" }, { "_id": "59058", "city": "MOSBY", "loc": [ -107.789149, 46.900453 ], "pop": 7, "state": "MT" }, { "_id": "59059", "city": "MUSSELSHELL", "loc": [ -108.003122, 46.517125 ], "pop": 584, "state": "MT" }, { "_id": "59061", "city": "NYE", "loc": [ -109.827137, 45.441022 ], "pop": 236, "state": "MT" }, { "_id": "59062", "city": "OTTER", "loc": [ -106.008667, 45.445803 ], "pop": 404, "state": "MT" }, { "_id": "59063", "city": "PARK CITY", "loc": [ -108.929279, 45.632864 ], "pop": 1398, "state": "MT" }, { "_id": "59064", "city": "POMPEYS PILLAR", "loc": [ -107.915406, 45.983847 ], "pop": 207, "state": "MT" }, { "_id": "59065", "city": "PRAY", "loc": [ -110.686399, 45.419315 ], "pop": 1094, "state": "MT" }, { "_id": "59067", "city": "RAPELJE", "loc": [ -109.276093, 45.97948 ], "pop": 219, "state": "MT" }, { "_id": "59068", "city": "RED LODGE", "loc": [ -109.268812, 45.196522 ], "pop": 2875, "state": "MT" }, { "_id": "59069", "city": "REEDPOINT", "loc": [ -109.468889, 45.648462 ], "pop": 301, "state": "MT" }, { "_id": "59070", "city": "ROBERTS", "loc": [ -109.176888, 45.367235 ], "pop": 652, "state": "MT" }, { "_id": "59071", "city": "ROSCOE", "loc": [ -109.44644, 45.377232 ], "pop": 159, "state": "MT" }, { "_id": "59072", "city": "ROUNDUP", "loc": [ -108.543846, 46.422487 ], "pop": 3522, "state": "MT" }, { "_id": "59074", "city": "RYEGATE", "loc": [ -109.276121, 46.272367 ], "pop": 502, "state": "MT" }, { "_id": "59075", "city": "SAINT XAVIER", "loc": [ -107.709242, 45.488996 ], "pop": 199, "state": "MT" }, { "_id": "59077", "city": "SAND SPRINGS", "loc": [ -107.288623, 47.032287 ], "pop": 95, "state": "MT" }, { "_id": "59078", "city": "SHAWMUT", "loc": [ -109.597361, 46.386921 ], "pop": 249, "state": "MT" }, { "_id": "59079", "city": "SHEPHERD", "loc": [ -108.342634, 45.94608 ], "pop": 2078, "state": "MT" }, { "_id": "59085", "city": "TWODOT", "loc": [ -109.899483, 46.446513 ], "pop": 1694, "state": "MT" }, { "_id": "59086", "city": "WILSALL", "loc": [ -110.606147, 45.948351 ], "pop": 1293, "state": "MT" }, { "_id": "59087", "city": "WINNETT", "loc": [ -108.318373, 46.943788 ], "pop": 364, "state": "MT" }, { "_id": "59088", "city": "WORDEN", "loc": [ -108.153284, 45.977937 ], "pop": 1025, "state": "MT" }, { "_id": "59089", "city": "WYOLA", "loc": [ -107.430258, 45.108904 ], "pop": 375, "state": "MT" }, { "_id": "59101", "city": "BILLINGS", "loc": [ -108.500452, 45.774489 ], "pop": 33061, "state": "MT" }, { "_id": "59102", "city": "BILLINGS", "loc": [ -108.572662, 45.781265 ], "pop": 40121, "state": "MT" }, { "_id": "59105", "city": "BILLINGS HEIGHTS", "loc": [ -108.474726, 45.828443 ], "pop": 20320, "state": "MT" }, { "_id": "59106", "city": "BILLINGS", "loc": [ -108.65191, 45.775306 ], "pop": 5623, "state": "MT" }, { "_id": "59201", "city": "WOLF POINT", "loc": [ -105.629318, 48.111879 ], "pop": 4845, "state": "MT" }, { "_id": "59211", "city": "ANTELOPE", "loc": [ -104.452883, 48.696813 ], "pop": 152, "state": "MT" }, { "_id": "59212", "city": "BAINVILLE", "loc": [ -104.199532, 48.157989 ], "pop": 354, "state": "MT" }, { "_id": "59213", "city": "BROCKTON", "loc": [ -104.85479, 48.210063 ], "pop": 959, "state": "MT" }, { "_id": "59214", "city": "BROCKWAY", "loc": [ -105.777649, 47.248497 ], "pop": 233, "state": "MT" }, { "_id": "59215", "city": "CIRCLE", "loc": [ -105.614771, 47.426389 ], "pop": 1271, "state": "MT" }, { "_id": "59218", "city": "CULBERTSON", "loc": [ -104.513212, 48.149536 ], "pop": 949, "state": "MT" }, { "_id": "59219", "city": "DAGMAR", "loc": [ -104.240123, 48.609337 ], "pop": 317, "state": "MT" }, { "_id": "59221", "city": "FAIRVIEW", "loc": [ -104.230194, 47.891598 ], "pop": 1668, "state": "MT" }, { "_id": "59222", "city": "FLAXVILLE", "loc": [ -105.163746, 48.747222 ], "pop": 312, "state": "MT" }, { "_id": "59223", "city": "FORT PECK", "loc": [ -106.516646, 48.053844 ], "pop": 714, "state": "MT" }, { "_id": "59225", "city": "LUSTRE", "loc": [ -105.991929, 48.161166 ], "pop": 819, "state": "MT" }, { "_id": "59226", "city": "FROID", "loc": [ -104.451765, 48.320113 ], "pop": 479, "state": "MT" }, { "_id": "59230", "city": "GLASGOW", "loc": [ -106.609419, 48.203385 ], "pop": 5192, "state": "MT" }, { "_id": "59241", "city": "HINSDALE", "loc": [ -107.009836, 48.400705 ], "pop": 704, "state": "MT" }, { "_id": "59242", "city": "HOMESTEAD", "loc": [ -104.591805, 48.429616 ], "pop": 7, "state": "MT" }, { "_id": "59243", "city": "LAMBERT", "loc": [ -104.598746, 47.745908 ], "pop": 655, "state": "MT" }, { "_id": "59244", "city": "LARSLAN", "loc": [ -106.283503, 48.58218 ], "pop": 120, "state": "MT" }, { "_id": "59247", "city": "MEDICINE LAKE", "loc": [ -104.437545, 48.485179 ], "pop": 629, "state": "MT" }, { "_id": "59248", "city": "NASHUA", "loc": [ -106.24407, 48.18653 ], "pop": 206, "state": "MT" }, { "_id": "59250", "city": "OPHEIM", "loc": [ -106.365832, 48.87016 ], "pop": 322, "state": "MT" }, { "_id": "59252", "city": "OUTLOOK", "loc": [ -104.741526, 48.881673 ], "pop": 241, "state": "MT" }, { "_id": "59253", "city": "PEERLESS", "loc": [ -105.800567, 48.780767 ], "pop": 395, "state": "MT" }, { "_id": "59254", "city": "PLENTYWOOD", "loc": [ -104.560032, 48.778825 ], "pop": 2557, "state": "MT" }, { "_id": "59255", "city": "POPLAR", "loc": [ -105.187021, 48.130713 ], "pop": 3407, "state": "MT" }, { "_id": "59256", "city": "RAYMOND", "loc": [ -104.629763, 48.968612 ], "pop": 29, "state": "MT" }, { "_id": "59257", "city": "REDSTONE", "loc": [ -104.935259, 48.835511 ], "pop": 158, "state": "MT" }, { "_id": "59258", "city": "RESERVE", "loc": [ -104.627875, 48.590519 ], "pop": 127, "state": "MT" }, { "_id": "59259", "city": "RICHEY", "loc": [ -105.017017, 47.622874 ], "pop": 462, "state": "MT" }, { "_id": "59260", "city": "RICHLAND", "loc": [ -106.223696, 48.727326 ], "pop": 162, "state": "MT" }, { "_id": "59261", "city": "SACO", "loc": [ -107.429324, 48.638938 ], "pop": 178, "state": "MT" }, { "_id": "59262", "city": "SAVAGE", "loc": [ -104.284487, 47.519375 ], "pop": 1170, "state": "MT" }, { "_id": "59263", "city": "SCOBEY", "loc": [ -105.417016, 48.785356 ], "pop": 1415, "state": "MT" }, { "_id": "59270", "city": "SIDNEY", "loc": [ -104.163445, 47.713017 ], "pop": 7229, "state": "MT" }, { "_id": "59274", "city": "VIDA", "loc": [ -105.599595, 47.894727 ], "pop": 772, "state": "MT" }, { "_id": "59275", "city": "WESTBY", "loc": [ -104.124708, 48.858695 ], "pop": 515, "state": "MT" }, { "_id": "59276", "city": "WHITETAIL", "loc": [ -105.297667, 48.924968 ], "pop": 144, "state": "MT" }, { "_id": "59301", "city": "MILES CITY", "loc": [ -105.833193, 46.407459 ], "pop": 10604, "state": "MT" }, { "_id": "59311", "city": "ALZADA", "loc": [ -104.261747, 45.156244 ], "pop": 101, "state": "MT" }, { "_id": "59312", "city": "ANGELA", "loc": [ -106.315732, 46.771929 ], "pop": 35, "state": "MT" }, { "_id": "59313", "city": "BAKER", "loc": [ -104.266707, 46.355219 ], "pop": 2631, "state": "MT" }, { "_id": "59314", "city": "BIDDLE", "loc": [ -105.290138, 45.256977 ], "pop": 606, "state": "MT" }, { "_id": "59315", "city": "BLOOMFIELD", "loc": [ -104.878235, 47.340813 ], "pop": 569, "state": "MT" }, { "_id": "59316", "city": "BOYES", "loc": [ -104.884118, 45.490003 ], "pop": 90, "state": "MT" }, { "_id": "59317", "city": "BELLE CREEK", "loc": [ -105.424968, 45.46057 ], "pop": 946, "state": "MT" }, { "_id": "59318", "city": "BRUSETT", "loc": [ -107.599864, 47.342341 ], "pop": 229, "state": "MT" }, { "_id": "59319", "city": "CAPITOL", "loc": [ -104.146212, 45.473162 ], "pop": 73, "state": "MT" }, { "_id": "59322", "city": "COHAGEN", "loc": [ -106.498065, 47.126296 ], "pop": 372, "state": "MT" }, { "_id": "59324", "city": "EKALAKA", "loc": [ -104.503958, 45.88054 ], "pop": 881, "state": "MT" }, { "_id": "59326", "city": "FALLON", "loc": [ -105.116055, 46.786632 ], "pop": 388, "state": "MT" }, { "_id": "59327", "city": "FORSYTH", "loc": [ -106.699086, 46.2819 ], "pop": 3148, "state": "MT" }, { "_id": "59330", "city": "GLENDIVE", "loc": [ -104.728716, 47.100813 ], "pop": 8364, "state": "MT" }, { "_id": "59332", "city": "HAMMOND", "loc": [ -104.615444, 45.291872 ], "pop": 358, "state": "MT" }, { "_id": "59336", "city": "ISMAY", "loc": [ -105.209064, 46.413223 ], "pop": 317, "state": "MT" }, { "_id": "59337", "city": "JORDAN", "loc": [ -106.922076, 47.369419 ], "pop": 886, "state": "MT" }, { "_id": "59338", "city": "KINSEY", "loc": [ -105.74458, 46.577008 ], "pop": 346, "state": "MT" }, { "_id": "59339", "city": "LINDSAY", "loc": [ -105.208878, 47.202383 ], "pop": 110, "state": "MT" }, { "_id": "59341", "city": "MILDRED", "loc": [ -104.7891, 46.751671 ], "pop": 83, "state": "MT" }, { "_id": "59343", "city": "OLIVE", "loc": [ -105.668741, 45.546641 ], "pop": 59, "state": "MT" }, { "_id": "59344", "city": "PLEVNA", "loc": [ -104.571289, 46.411225 ], "pop": 433, "state": "MT" }, { "_id": "59345", "city": "POWDERVILLE", "loc": [ -105.276098, 45.739183 ], "pop": 24, "state": "MT" }, { "_id": "59347", "city": "ROSEBUD", "loc": [ -106.598123, 45.935826 ], "pop": 3867, "state": "MT" }, { "_id": "59349", "city": "TERRY", "loc": [ -105.37059, 46.828972 ], "pop": 912, "state": "MT" }, { "_id": "59351", "city": "VOLBORG", "loc": [ -105.721444, 46.073609 ], "pop": 481, "state": "MT" }, { "_id": "59353", "city": "WIBAUX", "loc": [ -104.189715, 46.964596 ], "pop": 1191, "state": "MT" }, { "_id": "59354", "city": "WILLARD", "loc": [ -104.446662, 46.114064 ], "pop": 39, "state": "MT" }, { "_id": "59401", "city": "GREAT FALLS", "loc": [ -111.273397, 47.509812 ], "pop": 13361, "state": "MT" }, { "_id": "59404", "city": "GREAT FALLS", "loc": [ -111.340496, 47.509755 ], "pop": 23133, "state": "MT" }, { "_id": "59405", "city": "GREAT FALLS", "loc": [ -111.250227, 47.495016 ], "pop": 32774, "state": "MT" }, { "_id": "59410", "city": "AUGUSTA", "loc": [ -112.388304, 47.453739 ], "pop": 839, "state": "MT" }, { "_id": "59411", "city": "BABB", "loc": [ -113.368132, 48.878781 ], "pop": 224, "state": "MT" }, { "_id": "59412", "city": "BELT", "loc": [ -110.908099, 47.38211 ], "pop": 1383, "state": "MT" }, { "_id": "59414", "city": "BLACK EAGLE", "loc": [ -111.276366, 47.526197 ], "pop": 927, "state": "MT" }, { "_id": "59416", "city": "BRADY", "loc": [ -111.755013, 48.031244 ], "pop": 334, "state": "MT" }, { "_id": "59417", "city": "SAINT MARY", "loc": [ -113.019697, 48.54926 ], "pop": 6712, "state": "MT" }, { "_id": "59418", "city": "BUFFALO", "loc": [ -109.723122, 46.805593 ], "pop": 105, "state": "MT" }, { "_id": "59419", "city": "BYNUM", "loc": [ -112.276177, 47.990017 ], "pop": 130, "state": "MT" }, { "_id": "59420", "city": "CARTER", "loc": [ -110.978593, 47.780964 ], "pop": 99, "state": "MT" }, { "_id": "59421", "city": "CASCADE", "loc": [ -111.722321, 47.29117 ], "pop": 2050, "state": "MT" }, { "_id": "59422", "city": "CHOTEAU", "loc": [ -112.202136, 47.837951 ], "pop": 2846, "state": "MT" }, { "_id": "59424", "city": "COFFEE CREEK", "loc": [ -110.052784, 47.339642 ], "pop": 175, "state": "MT" }, { "_id": "59425", "city": "CONRAD", "loc": [ -111.939665, 48.178346 ], "pop": 3843, "state": "MT" }, { "_id": "59427", "city": "CUT BANK", "loc": [ -112.365354, 48.660284 ], "pop": 5249, "state": "MT" }, { "_id": "59430", "city": "DENTON", "loc": [ -109.878877, 47.319081 ], "pop": 604, "state": "MT" }, { "_id": "59433", "city": "DUTTON", "loc": [ -111.689967, 47.860082 ], "pop": 710, "state": "MT" }, { "_id": "59434", "city": "EAST GLACIER PAR", "loc": [ -113.317304, 48.45998 ], "pop": 35, "state": "MT" }, { "_id": "59436", "city": "FAIRFIELD", "loc": [ -112.001502, 47.614255 ], "pop": 1598, "state": "MT" }, { "_id": "59440", "city": "FLOWEREE", "loc": [ -111.121384, 47.658441 ], "pop": 188, "state": "MT" }, { "_id": "59441", "city": "FORESTGROVE", "loc": [ -109.023294, 46.913727 ], "pop": 143, "state": "MT" }, { "_id": "59442", "city": "FORT BENTON", "loc": [ -110.671487, 47.809406 ], "pop": 2795, "state": "MT" }, { "_id": "59443", "city": "FORT SHAW", "loc": [ -111.805655, 47.563862 ], "pop": 531, "state": "MT" }, { "_id": "59444", "city": "GALATA", "loc": [ -111.419772, 48.458657 ], "pop": 156, "state": "MT" }, { "_id": "59446", "city": "GERALDINE", "loc": [ -110.276537, 47.602365 ], "pop": 369, "state": "MT" }, { "_id": "59447", "city": "GEYSER", "loc": [ -110.483877, 47.259816 ], "pop": 289, "state": "MT" }, { "_id": "59448", "city": "HEART BUTTE", "loc": [ -112.845591, 48.277743 ], "pop": 642, "state": "MT" }, { "_id": "59450", "city": "HIGHWOOD", "loc": [ -110.788656, 47.581587 ], "pop": 387, "state": "MT" }, { "_id": "59451", "city": "HILGER", "loc": [ -109.456246, 47.269546 ], "pop": 719, "state": "MT" }, { "_id": "59452", "city": "UTICA", "loc": [ -109.951824, 46.947633 ], "pop": 632, "state": "MT" }, { "_id": "59453", "city": "JUDITH GAP", "loc": [ -109.675475, 46.662301 ], "pop": 303, "state": "MT" }, { "_id": "59454", "city": "KEVIN", "loc": [ -111.970829, 48.750786 ], "pop": 254, "state": "MT" }, { "_id": "59456", "city": "LEDGER", "loc": [ -111.756384, 48.277569 ], "pop": 42, "state": "MT" }, { "_id": "59457", "city": "LEWISTOWN", "loc": [ -109.420297, 47.056324 ], "pop": 8545, "state": "MT" }, { "_id": "59460", "city": "LOMA", "loc": [ -110.499487, 47.954576 ], "pop": 201, "state": "MT" }, { "_id": "59462", "city": "MOCCASIN", "loc": [ -109.890066, 47.09164 ], "pop": 187, "state": "MT" }, { "_id": "59463", "city": "MONARCH", "loc": [ -110.871027, 47.07223 ], "pop": 150, "state": "MT" }, { "_id": "59464", "city": "MOORE", "loc": [ -109.653838, 46.989811 ], "pop": 569, "state": "MT" }, { "_id": "59465", "city": "NEIHART", "loc": [ -110.732827, 46.939086 ], "pop": 58, "state": "MT" }, { "_id": "59467", "city": "PENDROY", "loc": [ -112.326082, 48.087892 ], "pop": 214, "state": "MT" }, { "_id": "59468", "city": "POWER", "loc": [ -111.716898, 47.679846 ], "pop": 862, "state": "MT" }, { "_id": "59469", "city": "RAYNESFORD", "loc": [ -110.704747, 47.260425 ], "pop": 208, "state": "MT" }, { "_id": "59471", "city": "ROY", "loc": [ -108.863422, 47.367821 ], "pop": 353, "state": "MT" }, { "_id": "59472", "city": "SAND COULEE", "loc": [ -111.16606, 47.402117 ], "pop": 583, "state": "MT" }, { "_id": "59474", "city": "SHELBY", "loc": [ -111.839122, 48.503666 ], "pop": 3375, "state": "MT" }, { "_id": "59479", "city": "STANFORD", "loc": [ -110.196111, 47.14886 ], "pop": 966, "state": "MT" }, { "_id": "59480", "city": "STOCKETT", "loc": [ -111.12868, 47.321712 ], "pop": 554, "state": "MT" }, { "_id": "59482", "city": "SUNBURST", "loc": [ -111.744195, 48.851585 ], "pop": 912, "state": "MT" }, { "_id": "59483", "city": "SUN RIVER", "loc": [ -111.724214, 47.480975 ], "pop": 1083, "state": "MT" }, { "_id": "59484", "city": "SWEETGRASS", "loc": [ -112.020436, 48.971305 ], "pop": 349, "state": "MT" }, { "_id": "59486", "city": "VALIER", "loc": [ -112.303275, 48.279504 ], "pop": 1473, "state": "MT" }, { "_id": "59487", "city": "VAUGHN", "loc": [ -111.576955, 47.562445 ], "pop": 869, "state": "MT" }, { "_id": "59489", "city": "WINIFRED", "loc": [ -109.340931, 47.589903 ], "pop": 376, "state": "MT" }, { "_id": "59501", "city": "HAVRE", "loc": [ -109.687974, 48.556121 ], "pop": 13961, "state": "MT" }, { "_id": "59520", "city": "BIG SANDY", "loc": [ -110.07762, 48.149677 ], "pop": 1554, "state": "MT" }, { "_id": "59521", "city": "BOX ELDER", "loc": [ -109.820548, 48.284066 ], "pop": 2012, "state": "MT" }, { "_id": "59522", "city": "CHESTER", "loc": [ -110.97982, 48.454125 ], "pop": 1530, "state": "MT" }, { "_id": "59523", "city": "CHINOOK", "loc": [ -109.22246, 48.57985 ], "pop": 2607, "state": "MT" }, { "_id": "59524", "city": "DODSON", "loc": [ -108.629967, 48.207526 ], "pop": 1870, "state": "MT" }, { "_id": "59525", "city": "GILDFORD", "loc": [ -110.283633, 48.592716 ], "pop": 330, "state": "MT" }, { "_id": "59526", "city": "HARLEM", "loc": [ -108.769253, 48.539802 ], "pop": 1177, "state": "MT" }, { "_id": "59527", "city": "HAYS", "loc": [ -108.768422, 48.380374 ], "pop": 638, "state": "MT" }, { "_id": "59528", "city": "HINGHAM", "loc": [ -110.427548, 48.587029 ], "pop": 333, "state": "MT" }, { "_id": "59529", "city": "HOGELAND", "loc": [ -108.667704, 48.857071 ], "pop": 143, "state": "MT" }, { "_id": "59530", "city": "INVERNESS", "loc": [ -110.68796, 48.593009 ], "pop": 231, "state": "MT" }, { "_id": "59531", "city": "JOPLIN", "loc": [ -110.79145, 48.649795 ], "pop": 496, "state": "MT" }, { "_id": "59532", "city": "KREMLIN", "loc": [ -110.051315, 48.559955 ], "pop": 311, "state": "MT" }, { "_id": "59535", "city": "LLOYD", "loc": [ -109.294264, 48.148632 ], "pop": 212, "state": "MT" }, { "_id": "59537", "city": "LORING", "loc": [ -107.868603, 48.798333 ], "pop": 243, "state": "MT" }, { "_id": "59538", "city": "MALTA", "loc": [ -107.840784, 48.369167 ], "pop": 4049, "state": "MT" }, { "_id": "59540", "city": "RUDYARD", "loc": [ -110.555235, 48.586001 ], "pop": 476, "state": "MT" }, { "_id": "59542", "city": "TURNER", "loc": [ -108.396079, 48.832766 ], "pop": 270, "state": "MT" }, { "_id": "59544", "city": "WHITEWATER", "loc": [ -107.40543, 48.834909 ], "pop": 110, "state": "MT" }, { "_id": "59545", "city": "WHITLASH", "loc": [ -111.107512, 48.911037 ], "pop": 269, "state": "MT" }, { "_id": "59546", "city": "ZORTMAN", "loc": [ -108.349523, 47.874326 ], "pop": 394, "state": "MT" }, { "_id": "59601", "city": "HELENA", "loc": [ -112.021283, 46.613066 ], "pop": 40102, "state": "MT" }, { "_id": "59632", "city": "BOULDER", "loc": [ -112.113757, 46.230647 ], "pop": 1737, "state": "MT" }, { "_id": "59633", "city": "CANYON CREEK", "loc": [ -112.279496, 46.762662 ], "pop": 648, "state": "MT" }, { "_id": "59634", "city": "MONTANA CITY", "loc": [ -111.992565, 46.474492 ], "pop": 3496, "state": "MT" }, { "_id": "59635", "city": "EAST HELENA", "loc": [ -111.905089, 46.597324 ], "pop": 3901, "state": "MT" }, { "_id": "59639", "city": "LINCOLN", "loc": [ -112.66514, 46.957458 ], "pop": 1015, "state": "MT" }, { "_id": "59641", "city": "RADERSBURG", "loc": [ -111.572186, 46.079317 ], "pop": 391, "state": "MT" }, { "_id": "59642", "city": "RINGLING", "loc": [ -110.824214, 46.285468 ], "pop": 97, "state": "MT" }, { "_id": "59643", "city": "TOSTON", "loc": [ -111.425974, 46.20437 ], "pop": 168, "state": "MT" }, { "_id": "59644", "city": "TOWNSEND", "loc": [ -111.491906, 46.334571 ], "pop": 2343, "state": "MT" }, { "_id": "59645", "city": "WHITE SULPHUR SP", "loc": [ -110.934413, 46.566323 ], "pop": 1476, "state": "MT" }, { "_id": "59647", "city": "WINSTON", "loc": [ -111.644671, 46.431485 ], "pop": 416, "state": "MT" }, { "_id": "59648", "city": "WOLF CREEK", "loc": [ -111.883316, 46.839567 ], "pop": 995, "state": "MT" }, { "_id": "59701", "city": "WALKERVILLE", "loc": [ -112.517807, 45.991579 ], "pop": 33096, "state": "MT" }, { "_id": "59711", "city": "ANACONDA", "loc": [ -112.97388, 46.129863 ], "pop": 8611, "state": "MT" }, { "_id": "59714", "city": "BELGRADE", "loc": [ -111.143927, 45.780126 ], "pop": 9060, "state": "MT" }, { "_id": "59715", "city": "BOZEMAN", "loc": [ -111.043057, 45.669269 ], "pop": 31218, "state": "MT" }, { "_id": "59720", "city": "CAMERON", "loc": [ -111.650778, 45.139021 ], "pop": 269, "state": "MT" }, { "_id": "59721", "city": "CARDWELL", "loc": [ -111.780946, 45.894071 ], "pop": 109, "state": "MT" }, { "_id": "59722", "city": "DEER LODGE", "loc": [ -112.747589, 46.38807 ], "pop": 5220, "state": "MT" }, { "_id": "59724", "city": "DELL", "loc": [ -112.950401, 44.95877 ], "pop": 387, "state": "MT" }, { "_id": "59725", "city": "DILLON", "loc": [ -112.640452, 45.23394 ], "pop": 6972, "state": "MT" }, { "_id": "59727", "city": "DIVIDE", "loc": [ -112.719551, 45.716055 ], "pop": 316, "state": "MT" }, { "_id": "59729", "city": "ENNIS", "loc": [ -111.687033, 45.354456 ], "pop": 1749, "state": "MT" }, { "_id": "59730", "city": "GALLATIN GATEWAY", "loc": [ -111.173407, 45.609963 ], "pop": 2807, "state": "MT" }, { "_id": "59731", "city": "GARRISON", "loc": [ -112.617322, 46.572363 ], "pop": 817, "state": "MT" }, { "_id": "59733", "city": "GOLD CREEK", "loc": [ -112.97057, 46.590025 ], "pop": 66, "state": "MT" }, { "_id": "59735", "city": "HARRISON", "loc": [ -111.846135, 45.742333 ], "pop": 434, "state": "MT" }, { "_id": "59736", "city": "JACKSON", "loc": [ -113.465862, 45.430725 ], "pop": 208, "state": "MT" }, { "_id": "59739", "city": "LIMA", "loc": [ -112.562492, 44.644057 ], "pop": 434, "state": "MT" }, { "_id": "59741", "city": "MANHATTAN", "loc": [ -111.314577, 45.79799 ], "pop": 3461, "state": "MT" }, { "_id": "59745", "city": "NORRIS", "loc": [ -111.694284, 45.532271 ], "pop": 148, "state": "MT" }, { "_id": "59747", "city": "PONY", "loc": [ -111.961859, 45.574502 ], "pop": 252, "state": "MT" }, { "_id": "59748", "city": "RAMSAY", "loc": [ -112.619628, 46.119573 ], "pop": 89, "state": "MT" }, { "_id": "59749", "city": "SHERIDAN", "loc": [ -112.173543, 45.422968 ], "pop": 1524, "state": "MT" }, { "_id": "59750", "city": "BUTTE", "loc": [ -112.71586, 46.003281 ], "pop": 440, "state": "MT" }, { "_id": "59751", "city": "SILVER STAR", "loc": [ -112.177604, 45.757105 ], "pop": 310, "state": "MT" }, { "_id": "59752", "city": "THREE FORKS", "loc": [ -111.543643, 45.881068 ], "pop": 1951, "state": "MT" }, { "_id": "59754", "city": "TWIN BRIDGES", "loc": [ -112.349461, 45.531055 ], "pop": 1041, "state": "MT" }, { "_id": "59755", "city": "VIRGINIA CITY", "loc": [ -112.002619, 45.247216 ], "pop": 268, "state": "MT" }, { "_id": "59756", "city": "WARMSPRINGS", "loc": [ -112.820041, 46.162593 ], "pop": 1667, "state": "MT" }, { "_id": "59758", "city": "WEST YELLOWSTONE", "loc": [ -111.18595, 44.912502 ], "pop": 1987, "state": "MT" }, { "_id": "59759", "city": "WHITEHALL", "loc": [ -112.124535, 45.877146 ], "pop": 2591, "state": "MT" }, { "_id": "59761", "city": "WISDOM", "loc": [ -113.472926, 45.651915 ], "pop": 224, "state": "MT" }, { "_id": "59762", "city": "WISE RIVER", "loc": [ -112.996285, 45.742397 ], "pop": 199, "state": "MT" }, { "_id": "59801", "city": "MISSOULA", "loc": [ -114.025207, 46.856274 ], "pop": 33811, "state": "MT" }, { "_id": "59802", "city": "MISSOULA", "loc": [ -114.002732, 46.900615 ], "pop": 22650, "state": "MT" }, { "_id": "59803", "city": "MISSOULA", "loc": [ -114.026528, 46.822362 ], "pop": 10444, "state": "MT" }, { "_id": "59820", "city": "ALBERTON", "loc": [ -114.492139, 46.98061 ], "pop": 885, "state": "MT" }, { "_id": "59821", "city": "ARLEE", "loc": [ -114.075978, 47.186035 ], "pop": 1432, "state": "MT" }, { "_id": "59823", "city": "BONNER", "loc": [ -113.746254, 46.860138 ], "pop": 1625, "state": "MT" }, { "_id": "59824", "city": "MOIESE", "loc": [ -114.15931, 47.433449 ], "pop": 1638, "state": "MT" }, { "_id": "59825", "city": "CLINTON", "loc": [ -113.703764, 46.767281 ], "pop": 829, "state": "MT" }, { "_id": "59826", "city": "CONDON", "loc": [ -113.707477, 47.509696 ], "pop": 534, "state": "MT" }, { "_id": "59827", "city": "CONNER", "loc": [ -114.179966, 45.912762 ], "pop": 579, "state": "MT" }, { "_id": "59828", "city": "CORVALLIS", "loc": [ -114.095995, 46.314193 ], "pop": 2987, "state": "MT" }, { "_id": "59829", "city": "DARBY", "loc": [ -114.193784, 46.028033 ], "pop": 1657, "state": "MT" }, { "_id": "59831", "city": "DIXON", "loc": [ -114.30557, 47.31313 ], "pop": 454, "state": "MT" }, { "_id": "59832", "city": "DRUMMOND", "loc": [ -113.242649, 46.664676 ], "pop": 800, "state": "MT" }, { "_id": "59833", "city": "FLORENCE", "loc": [ -114.094487, 46.63102 ], "pop": 3184, "state": "MT" }, { "_id": "59834", "city": "FRENCHTOWN", "loc": [ -114.268308, 47.047112 ], "pop": 1679, "state": "MT" }, { "_id": "59836", "city": "GREENOUGH", "loc": [ -113.427017, 46.943361 ], "pop": 372, "state": "MT" }, { "_id": "59837", "city": "HALL", "loc": [ -113.208725, 46.582539 ], "pop": 276, "state": "MT" }, { "_id": "59840", "city": "HAMILTON", "loc": [ -114.167869, 46.23953 ], "pop": 9548, "state": "MT" }, { "_id": "59843", "city": "HELMVILLE", "loc": [ -112.941296, 46.829968 ], "pop": 155, "state": "MT" }, { "_id": "59844", "city": "HERON", "loc": [ -115.940668, 48.053668 ], "pop": 559, "state": "MT" }, { "_id": "59845", "city": "HOT SPRINGS", "loc": [ -114.659712, 47.591408 ], "pop": 858, "state": "MT" }, { "_id": "59846", "city": "HUSON", "loc": [ -114.421939, 47.065953 ], "pop": 562, "state": "MT" }, { "_id": "59847", "city": "LOLO", "loc": [ -114.109732, 46.7585 ], "pop": 3783, "state": "MT" }, { "_id": "59848", "city": "LONEPINE", "loc": [ -114.63718, 47.711209 ], "pop": 236, "state": "MT" }, { "_id": "59852", "city": "NIARADA", "loc": [ -114.656218, 47.8031 ], "pop": 58, "state": "MT" }, { "_id": "59853", "city": "NOXON", "loc": [ -115.780658, 48.030166 ], "pop": 530, "state": "MT" }, { "_id": "59854", "city": "OVANDO", "loc": [ -113.090528, 47.006719 ], "pop": 362, "state": "MT" }, { "_id": "59858", "city": "PHILIPSBURG", "loc": [ -113.3126, 46.318899 ], "pop": 1445, "state": "MT" }, { "_id": "59859", "city": "PLAINS", "loc": [ -114.893014, 47.473448 ], "pop": 2590, "state": "MT" }, { "_id": "59860", "city": "POLSON", "loc": [ -114.140444, 47.687574 ], "pop": 6294, "state": "MT" }, { "_id": "59864", "city": "RONAN", "loc": [ -114.105385, 47.552457 ], "pop": 5682, "state": "MT" }, { "_id": "59865", "city": "SAINT IGNATIUS", "loc": [ -114.075822, 47.330014 ], "pop": 2283, "state": "MT" }, { "_id": "59866", "city": "SAINT REGIS", "loc": [ -115.170323, 47.336899 ], "pop": 962, "state": "MT" }, { "_id": "59868", "city": "SEELEY LAKE", "loc": [ -113.481019, 47.178928 ], "pop": 1240, "state": "MT" }, { "_id": "59870", "city": "STEVENSVILLE", "loc": [ -114.047846, 46.526723 ], "pop": 5250, "state": "MT" }, { "_id": "59871", "city": "SULA", "loc": [ -114.042968, 45.827701 ], "pop": 422, "state": "MT" }, { "_id": "59872", "city": "SUPERIOR", "loc": [ -114.888483, 47.172103 ], "pop": 1825, "state": "MT" }, { "_id": "59873", "city": "THOMPSON FALLS", "loc": [ -115.360236, 47.601572 ], "pop": 2311, "state": "MT" }, { "_id": "59874", "city": "TROUT CREEK", "loc": [ -115.559185, 47.811138 ], "pop": 1095, "state": "MT" }, { "_id": "59875", "city": "VICTOR", "loc": [ -114.166534, 46.400489 ], "pop": 2211, "state": "MT" }, { "_id": "59901", "city": "EVERGREEN", "loc": [ -114.289163, 48.220939 ], "pop": 33469, "state": "MT" }, { "_id": "59910", "city": "BIG ARM", "loc": [ -114.207049, 47.758514 ], "pop": 1089, "state": "MT" }, { "_id": "59911", "city": "SWAN LAKE", "loc": [ -114.01993, 48.039725 ], "pop": 5119, "state": "MT" }, { "_id": "59912", "city": "COLUMBIA FALLS", "loc": [ -114.178394, 48.353394 ], "pop": 9275, "state": "MT" }, { "_id": "59914", "city": "DAYTON", "loc": [ -114.280918, 47.860749 ], "pop": 226, "state": "MT" }, { "_id": "59915", "city": "ELMO", "loc": [ -114.343938, 47.818541 ], "pop": 243, "state": "MT" }, { "_id": "59916", "city": "ESSEX", "loc": [ -113.946678, 48.494028 ], "pop": 98, "state": "MT" }, { "_id": "59917", "city": "EUREKA", "loc": [ -115.004938, 48.842766 ], "pop": 3747, "state": "MT" }, { "_id": "59920", "city": "KILA", "loc": [ -114.510402, 48.074437 ], "pop": 578, "state": "MT" }, { "_id": "59922", "city": "LAKESIDE", "loc": [ -114.226562, 48.021469 ], "pop": 1027, "state": "MT" }, { "_id": "59923", "city": "LIBBY", "loc": [ -115.539101, 48.377311 ], "pop": 10148, "state": "MT" }, { "_id": "59925", "city": "MARION", "loc": [ -114.744625, 48.083596 ], "pop": 475, "state": "MT" }, { "_id": "59928", "city": "POLEBRIDGE", "loc": [ -114.383558, 48.820585 ], "pop": 97, "state": "MT" }, { "_id": "59929", "city": "PROCTOR", "loc": [ -114.383193, 47.940371 ], "pop": 66, "state": "MT" }, { "_id": "59930", "city": "REXFORD", "loc": [ -115.212859, 48.917947 ], "pop": 440, "state": "MT" }, { "_id": "59931", "city": "ROLLINS", "loc": [ -114.224986, 47.918207 ], "pop": 205, "state": "MT" }, { "_id": "59932", "city": "SOMERS", "loc": [ -114.23548, 48.079329 ], "pop": 1104, "state": "MT" }, { "_id": "59935", "city": "TROY", "loc": [ -115.881684, 48.479119 ], "pop": 3146, "state": "MT" }, { "_id": "59937", "city": "WHITEFISH", "loc": [ -114.350859, 48.403999 ], "pop": 9837, "state": "MT" }, { "_id": "60002", "city": "ANTIOCH", "loc": [ -88.117802, 42.464811 ], "pop": 18058, "state": "IL" }, { "_id": "60004", "city": "ARLINGTON HEIGHT", "loc": [ -87.97909900000001, 42.111619 ], "pop": 52947, "state": "IL" }, { "_id": "60005", "city": "ARLINGTON HEIGHT", "loc": [ -87.985461, 42.066599 ], "pop": 26742, "state": "IL" }, { "_id": "60007", "city": "ELK GROVE VILLAG", "loc": [ -88.012775, 42.005613 ], "pop": 34577, "state": "IL" }, { "_id": "60008", "city": "ROLLING MEADOWS", "loc": [ -88.019075, 42.072979 ], "pop": 18672, "state": "IL" }, { "_id": "60010", "city": "BARRINGTON", "loc": [ -88.138345, 42.161387 ], "pop": 37323, "state": "IL" }, { "_id": "60012", "city": "CRYSTAL LAKE", "loc": [ -88.32129399999999, 42.266198 ], "pop": 6855, "state": "IL" }, { "_id": "60013", "city": "CARY", "loc": [ -88.242594, 42.219599 ], "pop": 17521, "state": "IL" }, { "_id": "60014", "city": "CRYSTAL LAKE", "loc": [ -88.332364, 42.230755 ], "pop": 29595, "state": "IL" }, { "_id": "60015", "city": "DEERFIELD", "loc": [ -87.859033, 42.170494 ], "pop": 22048, "state": "IL" }, { "_id": "60016", "city": "DES PLAINES", "loc": [ -87.88589899999999, 42.046734 ], "pop": 54734, "state": "IL" }, { "_id": "60018", "city": "ROSEMONT", "loc": [ -87.897882, 42.015116 ], "pop": 28884, "state": "IL" }, { "_id": "60020", "city": "FOX LAKE", "loc": [ -88.16475199999999, 42.393701 ], "pop": 10336, "state": "IL" }, { "_id": "60021", "city": "FOX RIVER GROVE", "loc": [ -88.220483, 42.193594 ], "pop": 4898, "state": "IL" }, { "_id": "60022", "city": "GLENCOE", "loc": [ -87.761486, 42.133339 ], "pop": 8168, "state": "IL" }, { "_id": "60025", "city": "GLENVIEW", "loc": [ -87.822299, 42.075785 ], "pop": 45038, "state": "IL" }, { "_id": "60026", "city": "GLENVIEW NAS", "loc": [ -87.824782, 42.09134 ], "pop": 437, "state": "IL" }, { "_id": "60030", "city": "GAGES LAKE", "loc": [ -88.037789, 42.34848 ], "pop": 8038, "state": "IL" }, { "_id": "60031", "city": "GURNEE", "loc": [ -87.945232, 42.366906 ], "pop": 32114, "state": "IL" }, { "_id": "60033", "city": "HARVARD", "loc": [ -88.604812, 42.422727 ], "pop": 10790, "state": "IL" }, { "_id": "60034", "city": "HEBRON", "loc": [ -88.41758299999999, 42.464173 ], "pop": 1606, "state": "IL" }, { "_id": "60035", "city": "HIGHLAND PARK", "loc": [ -87.805894, 42.179446 ], "pop": 29346, "state": "IL" }, { "_id": "60037", "city": "FORT SHERIDAN", "loc": [ -87.805572, 42.209683 ], "pop": 2598, "state": "IL" }, { "_id": "60040", "city": "HIGHWOOD", "loc": [ -87.81406800000001, 42.203549 ], "pop": 3956, "state": "IL" }, { "_id": "60041", "city": "INGLESIDE", "loc": [ -88.158749, 42.363093 ], "pop": 4267, "state": "IL" }, { "_id": "60042", "city": "ISLAND LAKE", "loc": [ -88.19262999999999, 42.274186 ], "pop": 3919, "state": "IL" }, { "_id": "60043", "city": "KENILWORTH", "loc": [ -87.716463, 42.088444 ], "pop": 2509, "state": "IL" }, { "_id": "60044", "city": "LAKE BLUFF", "loc": [ -87.85595000000001, 42.28196 ], "pop": 8031, "state": "IL" }, { "_id": "60045", "city": "LAKE FOREST", "loc": [ -87.84815399999999, 42.237398 ], "pop": 17948, "state": "IL" }, { "_id": "60046", "city": "LINDENHURST", "loc": [ -88.063318, 42.414796 ], "pop": 20764, "state": "IL" }, { "_id": "60047", "city": "LONG GROVE", "loc": [ -88.07029900000001, 42.196721 ], "pop": 26893, "state": "IL" }, { "_id": "60048", "city": "LIBERTYVILLE", "loc": [ -87.949955, 42.281001 ], "pop": 28573, "state": "IL" }, { "_id": "60050", "city": "MC HENRY", "loc": [ -88.254429, 42.345527 ], "pop": 39545, "state": "IL" }, { "_id": "60053", "city": "MORTON GROVE", "loc": [ -87.789879, 42.043133 ], "pop": 22502, "state": "IL" }, { "_id": "60056", "city": "MOUNT PROSPECT", "loc": [ -87.937667, 42.062392 ], "pop": 54459, "state": "IL" }, { "_id": "60060", "city": "MUNDELEIN", "loc": [ -88.004762, 42.263616 ], "pop": 22817, "state": "IL" }, { "_id": "60061", "city": "VERNON HILLS", "loc": [ -87.971852, 42.228753 ], "pop": 19713, "state": "IL" }, { "_id": "60062", "city": "NORTHBROOK", "loc": [ -87.846535, 42.125443 ], "pop": 40216, "state": "IL" }, { "_id": "60064", "city": "ABBOTT PARK", "loc": [ -87.847819, 42.318901 ], "pop": 26542, "state": "IL" }, { "_id": "60067", "city": "PALATINE", "loc": [ -88.04293699999999, 42.113888 ], "pop": 57281, "state": "IL" }, { "_id": "60068", "city": "PARK RIDGE", "loc": [ -87.841675, 42.012171 ], "pop": 37450, "state": "IL" }, { "_id": "60069", "city": "PRAIRIE VIEW", "loc": [ -87.90482299999999, 42.192872 ], "pop": 4047, "state": "IL" }, { "_id": "60070", "city": "PROSPECT HEIGHTS", "loc": [ -87.914934, 42.103324 ], "pop": 14692, "state": "IL" }, { "_id": "60071", "city": "RICHMOND", "loc": [ -88.290024, 42.466863 ], "pop": 2658, "state": "IL" }, { "_id": "60072", "city": "RINGWOOD", "loc": [ -88.297073, 42.380427 ], "pop": 1926, "state": "IL" }, { "_id": "60073", "city": "ROUND LAKE", "loc": [ -88.088819, 42.366809 ], "pop": 28919, "state": "IL" }, { "_id": "60074", "city": "PALATINE", "loc": [ -88.022998, 42.145775 ], "pop": 11712, "state": "IL" }, { "_id": "60076", "city": "SKOKIE", "loc": [ -87.732828, 42.036168 ], "pop": 31589, "state": "IL" }, { "_id": "60077", "city": "SKOKIE", "loc": [ -87.75412300000001, 42.034525 ], "pop": 22680, "state": "IL" }, { "_id": "60081", "city": "SPRING GROVE", "loc": [ -88.22373399999999, 42.441267 ], "pop": 2783, "state": "IL" }, { "_id": "60082", "city": "TECHNY", "loc": [ -87.80488200000001, 42.121425 ], "pop": 196, "state": "IL" }, { "_id": "60083", "city": "WADSWORTH", "loc": [ -87.904048, 42.446032 ], "pop": 5510, "state": "IL" }, { "_id": "60084", "city": "WAUCONDA", "loc": [ -88.133284, 42.263553 ], "pop": 11142, "state": "IL" }, { "_id": "60085", "city": "MC GAW PARK", "loc": [ -87.852585, 42.361882 ], "pop": 55778, "state": "IL" }, { "_id": "60087", "city": "WAUKEGAN", "loc": [ -87.85538699999999, 42.398906 ], "pop": 17816, "state": "IL" }, { "_id": "60088", "city": "GREAT LAKES", "loc": [ -87.864192, 42.303173 ], "pop": 8831, "state": "IL" }, { "_id": "60089", "city": "BUFFALO GROVE", "loc": [ -87.964364, 42.159843 ], "pop": 41478, "state": "IL" }, { "_id": "60090", "city": "WHEELING", "loc": [ -87.93409699999999, 42.13404 ], "pop": 31261, "state": "IL" }, { "_id": "60091", "city": "WILMETTE", "loc": [ -87.72457199999999, 42.076462 ], "pop": 26657, "state": "IL" }, { "_id": "60093", "city": "NORTHFIELD", "loc": [ -87.752256, 42.103605 ], "pop": 19317, "state": "IL" }, { "_id": "60096", "city": "WINTHROP HARBOR", "loc": [ -87.831788, 42.479269 ], "pop": 7433, "state": "IL" }, { "_id": "60097", "city": "WONDER LAKE", "loc": [ -88.353364, 42.384908 ], "pop": 8401, "state": "IL" }, { "_id": "60098", "city": "WOODSTOCK", "loc": [ -88.447671, 42.319775 ], "pop": 21770, "state": "IL" }, { "_id": "60099", "city": "ZION", "loc": [ -87.838925, 42.444249 ], "pop": 24944, "state": "IL" }, { "_id": "60101", "city": "ADDISON", "loc": [ -88.00539999999999, 41.933509 ], "pop": 35140, "state": "IL" }, { "_id": "60102", "city": "LAKE IN THE HILL", "loc": [ -88.301429, 42.170923 ], "pop": 22082, "state": "IL" }, { "_id": "60103", "city": "HANOVER PARK", "loc": [ -88.16035599999999, 41.983559 ], "pop": 51877, "state": "IL" }, { "_id": "60104", "city": "BELLWOOD", "loc": [ -87.878557, 41.882484 ], "pop": 19336, "state": "IL" }, { "_id": "60106", "city": "BENSENVILLE", "loc": [ -87.944973, 41.950145 ], "pop": 20080, "state": "IL" }, { "_id": "60107", "city": "STREAMWOOD", "loc": [ -88.168965, 42.022539 ], "pop": 30513, "state": "IL" }, { "_id": "60108", "city": "BLOOMINGDALE", "loc": [ -88.07823999999999, 41.94827 ], "pop": 16560, "state": "IL" }, { "_id": "60110", "city": "CARPENTERSVILLE", "loc": [ -88.2606, 42.123004 ], "pop": 23550, "state": "IL" }, { "_id": "60111", "city": "CLARE", "loc": [ -88.83783200000001, 42.027045 ], "pop": 373, "state": "IL" }, { "_id": "60115", "city": "DE KALB", "loc": [ -88.760673, 41.934245 ], "pop": 38360, "state": "IL" }, { "_id": "60118", "city": "DUNDEE", "loc": [ -88.29020199999999, 42.096197 ], "pop": 11919, "state": "IL" }, { "_id": "60119", "city": "ELBURN", "loc": [ -88.461106, 41.882405 ], "pop": 6271, "state": "IL" }, { "_id": "60120", "city": "ELGIN", "loc": [ -88.260631, 42.038356 ], "pop": 42848, "state": "IL" }, { "_id": "60123", "city": "ELGIN", "loc": [ -88.31861499999999, 42.037574 ], "pop": 43835, "state": "IL" }, { "_id": "60126", "city": "ELMHURST", "loc": [ -87.941025, 41.892661 ], "pop": 43637, "state": "IL" }, { "_id": "60129", "city": "ESMOND", "loc": [ -88.94386, 42.022458 ], "pop": 388, "state": "IL" }, { "_id": "60130", "city": "FOREST PARK", "loc": [ -87.810624, 41.874373 ], "pop": 14882, "state": "IL" }, { "_id": "60131", "city": "FRANKLIN PARK", "loc": [ -87.873423, 41.933878 ], "pop": 18572, "state": "IL" }, { "_id": "60134", "city": "GENEVA", "loc": [ -88.310954, 41.886013 ], "pop": 13603, "state": "IL" }, { "_id": "60135", "city": "GENOA", "loc": [ -88.690803, 42.09811 ], "pop": 4356, "state": "IL" }, { "_id": "60136", "city": "GILBERTS", "loc": [ -88.369089, 42.098377 ], "pop": 1212, "state": "IL" }, { "_id": "60137", "city": "GLEN ELLYN", "loc": [ -88.064774, 41.866112 ], "pop": 35643, "state": "IL" }, { "_id": "60139", "city": "GLENDALE HEIGHTS", "loc": [ -88.07928200000001, 41.920523 ], "pop": 27324, "state": "IL" }, { "_id": "60140", "city": "HAMPSHIRE", "loc": [ -88.517033, 42.080748 ], "pop": 6255, "state": "IL" }, { "_id": "60141", "city": "HINES", "loc": [ -87.835542, 41.862262 ], "pop": 200, "state": "IL" }, { "_id": "60142", "city": "HUNTLEY", "loc": [ -88.42684800000001, 42.175555 ], "pop": 4351, "state": "IL" }, { "_id": "60143", "city": "ITASCA", "loc": [ -88.020247, 41.971967 ], "pop": 8650, "state": "IL" }, { "_id": "60145", "city": "KINGSTON", "loc": [ -88.769496, 42.105654 ], "pop": 1555, "state": "IL" }, { "_id": "60146", "city": "KIRKLAND", "loc": [ -88.868522, 42.101406 ], "pop": 1930, "state": "IL" }, { "_id": "60148", "city": "LOMBARD", "loc": [ -88.01598799999999, 41.872139 ], "pop": 52289, "state": "IL" }, { "_id": "60150", "city": "MALTA", "loc": [ -88.868818, 41.918332 ], "pop": 1619, "state": "IL" }, { "_id": "60151", "city": "MAPLE PARK", "loc": [ -88.59985, 41.923217 ], "pop": 4893, "state": "IL" }, { "_id": "60152", "city": "MARENGO", "loc": [ -88.60736900000001, 42.244189 ], "pop": 8536, "state": "IL" }, { "_id": "60153", "city": "BROADVIEW", "loc": [ -87.847675, 41.874857 ], "pop": 37099, "state": "IL" }, { "_id": "60154", "city": "WESTCHESTER", "loc": [ -87.884488, 41.852368 ], "pop": 16957, "state": "IL" }, { "_id": "60157", "city": "MEDINAH", "loc": [ -88.057507, 41.970545 ], "pop": 3110, "state": "IL" }, { "_id": "60160", "city": "MELROSE PARK", "loc": [ -87.85806599999999, 41.900347 ], "pop": 21235, "state": "IL" }, { "_id": "60162", "city": "HILLSIDE", "loc": [ -87.901591, 41.872452 ], "pop": 7757, "state": "IL" }, { "_id": "60163", "city": "HILLSIDE", "loc": [ -87.910678, 41.886538 ], "pop": 5079, "state": "IL" }, { "_id": "60164", "city": "NORTHLAKE", "loc": [ -87.89592, 41.917961 ], "pop": 21306, "state": "IL" }, { "_id": "60165", "city": "STONE PARK", "loc": [ -87.88105299999999, 41.903005 ], "pop": 4387, "state": "IL" }, { "_id": "60171", "city": "RIVER GROVE", "loc": [ -87.838707, 41.927886 ], "pop": 9949, "state": "IL" }, { "_id": "60172", "city": "ROSELLE", "loc": [ -88.08569900000001, 41.979834 ], "pop": 22626, "state": "IL" }, { "_id": "60173", "city": "SCHAUMBURG", "loc": [ -88.04818899999999, 42.05807 ], "pop": 9314, "state": "IL" }, { "_id": "60174", "city": "SAINT CHARLES", "loc": [ -88.307022, 41.919417 ], "pop": 27454, "state": "IL" }, { "_id": "60175", "city": "SAINT CHARLES", "loc": [ -88.39179900000001, 41.947842 ], "pop": 11851, "state": "IL" }, { "_id": "60176", "city": "SCHILLER PARK", "loc": [ -87.869179, 41.956304 ], "pop": 11189, "state": "IL" }, { "_id": "60177", "city": "SOUTH ELGIN", "loc": [ -88.298558, 41.996868 ], "pop": 9117, "state": "IL" }, { "_id": "60178", "city": "SYCAMORE", "loc": [ -88.692809, 41.991117 ], "pop": 13512, "state": "IL" }, { "_id": "60180", "city": "UNION", "loc": [ -88.528295, 42.210274 ], "pop": 1450, "state": "IL" }, { "_id": "60181", "city": "VILLA PARK", "loc": [ -87.978246, 41.879899 ], "pop": 27217, "state": "IL" }, { "_id": "60185", "city": "WEST CHICAGO", "loc": [ -88.202168, 41.888558 ], "pop": 23894, "state": "IL" }, { "_id": "60187", "city": "WHEATON", "loc": [ -88.10763300000001, 41.856592 ], "pop": 57758, "state": "IL" }, { "_id": "60188", "city": "CAROL STREAM", "loc": [ -88.136962, 41.91784 ], "pop": 34902, "state": "IL" }, { "_id": "60190", "city": "WINFIELD", "loc": [ -88.15162100000001, 41.874358 ], "pop": 9255, "state": "IL" }, { "_id": "60191", "city": "WOOD DALE", "loc": [ -87.980971, 41.960171 ], "pop": 13750, "state": "IL" }, { "_id": "60193", "city": "SCHAUMBURG", "loc": [ -88.093481, 42.014432 ], "pop": 39438, "state": "IL" }, { "_id": "60194", "city": "HOFFMAN ESTATES", "loc": [ -88.109442, 42.039025 ], "pop": 37295, "state": "IL" }, { "_id": "60195", "city": "HOFFMAN ESTATES", "loc": [ -88.108709, 42.073865 ], "pop": 29236, "state": "IL" }, { "_id": "60201", "city": "EVANSTON", "loc": [ -87.69433100000001, 42.054551 ], "pop": 41692, "state": "IL" }, { "_id": "60202", "city": "EVANSTON", "loc": [ -87.686544, 42.03022 ], "pop": 31509, "state": "IL" }, { "_id": "60203", "city": "EVANSTON", "loc": [ -87.71759, 42.048487 ], "pop": 4764, "state": "IL" }, { "_id": "60301", "city": "OAK PARK", "loc": [ -87.798598, 41.888601 ], "pop": 1673, "state": "IL" }, { "_id": "60302", "city": "OAK PARK", "loc": [ -87.78954299999999, 41.892471 ], "pop": 33298, "state": "IL" }, { "_id": "60304", "city": "OAK PARK", "loc": [ -87.787712, 41.872458 ], "pop": 18677, "state": "IL" }, { "_id": "60305", "city": "RIVER FOREST", "loc": [ -87.8159, 41.895064 ], "pop": 11669, "state": "IL" }, { "_id": "60401", "city": "BEECHER", "loc": [ -87.611538, 41.34437 ], "pop": 3724, "state": "IL" }, { "_id": "60402", "city": "STICKNEY", "loc": [ -87.79075, 41.841819 ], "pop": 51541, "state": "IL" }, { "_id": "60406", "city": "BLUE ISLAND", "loc": [ -87.67946499999999, 41.658187 ], "pop": 23305, "state": "IL" }, { "_id": "60407", "city": "BRACEVILLE", "loc": [ -88.269042, 41.228788 ], "pop": 1535, "state": "IL" }, { "_id": "60408", "city": "BRAIDWOOD", "loc": [ -88.223124, 41.26574 ], "pop": 3814, "state": "IL" }, { "_id": "60409", "city": "CALUMET CITY", "loc": [ -87.548328, 41.615257 ], "pop": 36065, "state": "IL" }, { "_id": "60410", "city": "CHANNAHON", "loc": [ -88.213786, 41.434664 ], "pop": 3870, "state": "IL" }, { "_id": "60411", "city": "SAUK VILLAGE", "loc": [ -87.613209, 41.506202 ], "pop": 60738, "state": "IL" }, { "_id": "60415", "city": "CHICAGO RIDGE", "loc": [ -87.77738100000001, 41.70171 ], "pop": 13472, "state": "IL" }, { "_id": "60416", "city": "COAL CITY", "loc": [ -88.282346, 41.290769 ], "pop": 6248, "state": "IL" }, { "_id": "60417", "city": "CRETE", "loc": [ -87.602738, 41.438952 ], "pop": 14372, "state": "IL" }, { "_id": "60419", "city": "DOLTON", "loc": [ -87.59795200000001, 41.625723 ], "pop": 22705, "state": "IL" }, { "_id": "60420", "city": "DWIGHT", "loc": [ -88.41588400000001, 41.088701 ], "pop": 4956, "state": "IL" }, { "_id": "60421", "city": "ELWOOD", "loc": [ -88.08642, 41.426018 ], "pop": 2700, "state": "IL" }, { "_id": "60422", "city": "FLOSSMOOR", "loc": [ -87.68373699999999, 41.540574 ], "pop": 8627, "state": "IL" }, { "_id": "60423", "city": "FRANKFORT", "loc": [ -87.82477400000001, 41.509361 ], "pop": 15682, "state": "IL" }, { "_id": "60424", "city": "GARDNER", "loc": [ -88.296543, 41.179321 ], "pop": 2349, "state": "IL" }, { "_id": "60425", "city": "GLENWOOD", "loc": [ -87.612584, 41.546718 ], "pop": 10180, "state": "IL" }, { "_id": "60426", "city": "MARKHAM", "loc": [ -87.661115, 41.608536 ], "pop": 48332, "state": "IL" }, { "_id": "60429", "city": "HAZEL CREST", "loc": [ -87.68488499999999, 41.573803 ], "pop": 14987, "state": "IL" }, { "_id": "60430", "city": "HOMEWOOD", "loc": [ -87.66157800000001, 41.555579 ], "pop": 19469, "state": "IL" }, { "_id": "60431", "city": "JOLIET", "loc": [ -88.08241, 41.527154 ], "pop": 512, "state": "IL" }, { "_id": "60432", "city": "JOLIET", "loc": [ -88.05717799999999, 41.537758 ], "pop": 20199, "state": "IL" }, { "_id": "60433", "city": "JOLIET", "loc": [ -88.05687, 41.511873 ], "pop": 18342, "state": "IL" }, { "_id": "60435", "city": "SHOREWOOD", "loc": [ -88.128107, 41.541468 ], "pop": 56510, "state": "IL" }, { "_id": "60436", "city": "ROCKDALE", "loc": [ -88.135779, 41.508818 ], "pop": 23888, "state": "IL" }, { "_id": "60437", "city": "KINSMAN", "loc": [ -88.48047699999999, 41.161825 ], "pop": 687, "state": "IL" }, { "_id": "60438", "city": "LANSING", "loc": [ -87.544634, 41.566045 ], "pop": 28810, "state": "IL" }, { "_id": "60439", "city": "ARGONNE", "loc": [ -88.02355799999999, 41.695076 ], "pop": 31018, "state": "IL" }, { "_id": "60440", "city": "BOLINGBROOK", "loc": [ -88.087315, 41.697605 ], "pop": 23726, "state": "IL" }, { "_id": "60441", "city": "ROMEOVILLE", "loc": [ -88.025581, 41.613481 ], "pop": 55268, "state": "IL" }, { "_id": "60442", "city": "MANHATTAN", "loc": [ -87.97713299999999, 41.428883 ], "pop": 3657, "state": "IL" }, { "_id": "60443", "city": "MATTESON", "loc": [ -87.74064799999999, 41.510183 ], "pop": 13624, "state": "IL" }, { "_id": "60444", "city": "MAZON", "loc": [ -88.409561, 41.297189 ], "pop": 3909, "state": "IL" }, { "_id": "60445", "city": "CRESTWOOD", "loc": [ -87.732418, 41.634106 ], "pop": 26378, "state": "IL" }, { "_id": "60447", "city": "MINOOKA", "loc": [ -88.27859599999999, 41.461516 ], "pop": 6005, "state": "IL" }, { "_id": "60448", "city": "MOKENA", "loc": [ -87.891121, 41.53421 ], "pop": 12324, "state": "IL" }, { "_id": "60449", "city": "MONEE", "loc": [ -87.77484, 41.419133 ], "pop": 3537, "state": "IL" }, { "_id": "60450", "city": "MORRIS", "loc": [ -88.41776900000001, 41.367233 ], "pop": 13423, "state": "IL" }, { "_id": "60451", "city": "NEW LENOX", "loc": [ -87.963083, 41.506701 ], "pop": 17470, "state": "IL" }, { "_id": "60452", "city": "OAK FOREST", "loc": [ -87.75421900000001, 41.607684 ], "pop": 26772, "state": "IL" }, { "_id": "60453", "city": "OAK LAWN", "loc": [ -87.751564, 41.714305 ], "pop": 56039, "state": "IL" }, { "_id": "60455", "city": "BRIDGEVIEW", "loc": [ -87.806572, 41.743128 ], "pop": 14065, "state": "IL" }, { "_id": "60456", "city": "HOMETOWN", "loc": [ -87.73153600000001, 41.73113 ], "pop": 4769, "state": "IL" }, { "_id": "60457", "city": "HICKORY HILLS", "loc": [ -87.82889299999999, 41.726228 ], "pop": 12894, "state": "IL" }, { "_id": "60458", "city": "JUSTICE", "loc": [ -87.834587, 41.744709 ], "pop": 12773, "state": "IL" }, { "_id": "60459", "city": "BURBANK", "loc": [ -87.769907, 41.744704 ], "pop": 27870, "state": "IL" }, { "_id": "60460", "city": "ODELL", "loc": [ -88.515641, 41.023773 ], "pop": 2795, "state": "IL" }, { "_id": "60461", "city": "OLYMPIA FIELDS", "loc": [ -87.68995200000001, 41.51564 ], "pop": 4253, "state": "IL" }, { "_id": "60462", "city": "ORLAND PARK", "loc": [ -87.84225000000001, 41.619378 ], "pop": 42564, "state": "IL" }, { "_id": "60463", "city": "PALOS HEIGHTS", "loc": [ -87.792697, 41.662146 ], "pop": 13509, "state": "IL" }, { "_id": "60464", "city": "PALOS PARK", "loc": [ -87.852146, 41.662352 ], "pop": 8967, "state": "IL" }, { "_id": "60465", "city": "PALOS HILLS", "loc": [ -87.82627599999999, 41.700389 ], "pop": 18112, "state": "IL" }, { "_id": "60466", "city": "UNIVERSITY PARK", "loc": [ -87.682867, 41.474064 ], "pop": 31607, "state": "IL" }, { "_id": "60468", "city": "PEOTONE", "loc": [ -87.78968, 41.33609 ], "pop": 4936, "state": "IL" }, { "_id": "60469", "city": "POSEN", "loc": [ -87.687213, 41.62766 ], "pop": 4158, "state": "IL" }, { "_id": "60470", "city": "RANSOM", "loc": [ -88.65021400000001, 41.153048 ], "pop": 690, "state": "IL" }, { "_id": "60471", "city": "RICHTON PARK", "loc": [ -87.723834, 41.481854 ], "pop": 10776, "state": "IL" }, { "_id": "60472", "city": "ROBBINS", "loc": [ -87.70890900000001, 41.642289 ], "pop": 7132, "state": "IL" }, { "_id": "60473", "city": "SOUTH HOLLAND", "loc": [ -87.59381399999999, 41.597916 ], "pop": 24457, "state": "IL" }, { "_id": "60475", "city": "STEGER", "loc": [ -87.63858500000001, 41.468608 ], "pop": 8531, "state": "IL" }, { "_id": "60476", "city": "THORNTON", "loc": [ -87.607823, 41.572726 ], "pop": 2678, "state": "IL" }, { "_id": "60477", "city": "TINLEY PARK", "loc": [ -87.804963, 41.582535 ], "pop": 45371, "state": "IL" }, { "_id": "60478", "city": "COUNTRY CLUB HIL", "loc": [ -87.718452, 41.559773 ], "pop": 16225, "state": "IL" }, { "_id": "60479", "city": "VERONA", "loc": [ -88.51701, 41.250094 ], "pop": 769, "state": "IL" }, { "_id": "60480", "city": "WILLOW SPRINGS", "loc": [ -87.87858799999999, 41.736416 ], "pop": 4469, "state": "IL" }, { "_id": "60481", "city": "CUSTER PARK", "loc": [ -88.130083, 41.298063 ], "pop": 11034, "state": "IL" }, { "_id": "60482", "city": "WORTH", "loc": [ -87.786272, 41.689498 ], "pop": 13081, "state": "IL" }, { "_id": "60501", "city": "ARGO", "loc": [ -87.807468, 41.784245 ], "pop": 10525, "state": "IL" }, { "_id": "60504", "city": "AURORA", "loc": [ -88.24528100000001, 41.752269 ], "pop": 15334, "state": "IL" }, { "_id": "60505", "city": "AURORA", "loc": [ -88.297139, 41.758209 ], "pop": 51422, "state": "IL" }, { "_id": "60506", "city": "AURORA", "loc": [ -88.344582, 41.766414 ], "pop": 42636, "state": "IL" }, { "_id": "60510", "city": "BATAVIA", "loc": [ -88.30975599999999, 41.848165 ], "pop": 19299, "state": "IL" }, { "_id": "60511", "city": "BIG ROCK", "loc": [ -88.537617, 41.759308 ], "pop": 1976, "state": "IL" }, { "_id": "60512", "city": "BRISTOL", "loc": [ -88.401354, 41.707446 ], "pop": 595, "state": "IL" }, { "_id": "60513", "city": "BROOKFIELD", "loc": [ -87.84924599999999, 41.82167 ], "pop": 18859, "state": "IL" }, { "_id": "60514", "city": "CLARENDON HILLS", "loc": [ -87.955322, 41.779729 ], "pop": 17321, "state": "IL" }, { "_id": "60515", "city": "DOWNERS GROVE", "loc": [ -88.01375299999999, 41.803428 ], "pop": 26971, "state": "IL" }, { "_id": "60516", "city": "DOWNERS GROVE", "loc": [ -88.015873, 41.760157 ], "pop": 35756, "state": "IL" }, { "_id": "60517", "city": "WOODRIDGE", "loc": [ -88.04885, 41.751755 ], "pop": 23761, "state": "IL" }, { "_id": "60518", "city": "EARLVILLE", "loc": [ -88.910346, 41.585901 ], "pop": 2305, "state": "IL" }, { "_id": "60520", "city": "HINCKLEY", "loc": [ -88.644831, 41.769108 ], "pop": 2387, "state": "IL" }, { "_id": "60521", "city": "OAK BROOK", "loc": [ -87.940089, 41.7891 ], "pop": 44245, "state": "IL" }, { "_id": "60525", "city": "HODGKINS", "loc": [ -87.875252, 41.801345 ], "pop": 45424, "state": "IL" }, { "_id": "60530", "city": "LEE", "loc": [ -88.971386, 41.786418 ], "pop": 825, "state": "IL" }, { "_id": "60531", "city": "LELAND", "loc": [ -88.771574, 41.606591 ], "pop": 1601, "state": "IL" }, { "_id": "60532", "city": "LISLE", "loc": [ -88.0879, 41.786174 ], "pop": 24914, "state": "IL" }, { "_id": "60534", "city": "LYONS", "loc": [ -87.823559, 41.813016 ], "pop": 9828, "state": "IL" }, { "_id": "60538", "city": "MONTGOMERY", "loc": [ -88.331965, 41.717742 ], "pop": 14146, "state": "IL" }, { "_id": "60539", "city": "MOOSEHEART", "loc": [ -88.331532, 41.824148 ], "pop": 371, "state": "IL" }, { "_id": "60540", "city": "NAPERVILLE", "loc": [ -88.14103799999999, 41.766198 ], "pop": 35414, "state": "IL" }, { "_id": "60541", "city": "NEWARK", "loc": [ -88.527006, 41.526679 ], "pop": 3016, "state": "IL" }, { "_id": "60542", "city": "NORTH AURORA", "loc": [ -88.32742399999999, 41.808932 ], "pop": 6618, "state": "IL" }, { "_id": "60543", "city": "OSWEGO", "loc": [ -88.345305, 41.684893 ], "pop": 9649, "state": "IL" }, { "_id": "60544", "city": "PLAINFIELD", "loc": [ -88.19939100000001, 41.600884 ], "pop": 10416, "state": "IL" }, { "_id": "60545", "city": "PLANO", "loc": [ -88.53838, 41.666987 ], "pop": 7506, "state": "IL" }, { "_id": "60546", "city": "NORTH RIVERSIDE", "loc": [ -87.82135599999999, 41.837367 ], "pop": 14899, "state": "IL" }, { "_id": "60548", "city": "SANDWICH", "loc": [ -88.639303, 41.635286 ], "pop": 10125, "state": "IL" }, { "_id": "60549", "city": "SERENA", "loc": [ -88.75089, 41.499481 ], "pop": 830, "state": "IL" }, { "_id": "60550", "city": "SHABBONA", "loc": [ -88.875249, 41.763846 ], "pop": 1180, "state": "IL" }, { "_id": "60551", "city": "SHERIDAN", "loc": [ -88.67063400000001, 41.516428 ], "pop": 3345, "state": "IL" }, { "_id": "60552", "city": "SOMONAUK", "loc": [ -88.681645, 41.638289 ], "pop": 1475, "state": "IL" }, { "_id": "60553", "city": "STEWARD", "loc": [ -89.015086, 41.847545 ], "pop": 661, "state": "IL" }, { "_id": "60554", "city": "SUGAR GROVE", "loc": [ -88.43972100000001, 41.774113 ], "pop": 4255, "state": "IL" }, { "_id": "60555", "city": "WARRENVILLE", "loc": [ -88.19213000000001, 41.828046 ], "pop": 12421, "state": "IL" }, { "_id": "60556", "city": "WATERMAN", "loc": [ -88.775381, 41.750365 ], "pop": 1914, "state": "IL" }, { "_id": "60558", "city": "WESTERN SPRINGS", "loc": [ -87.899485, 41.804864 ], "pop": 11862, "state": "IL" }, { "_id": "60559", "city": "WESTMONT", "loc": [ -87.975736, 41.772848 ], "pop": 41903, "state": "IL" }, { "_id": "60560", "city": "YORKVILLE", "loc": [ -88.443794, 41.638725 ], "pop": 8161, "state": "IL" }, { "_id": "60563", "city": "NAPERVILLE", "loc": [ -88.16901, 41.78955 ], "pop": 26348, "state": "IL" }, { "_id": "60564", "city": "NAPERVILLE", "loc": [ -88.19524800000001, 41.704022 ], "pop": 8549, "state": "IL" }, { "_id": "60565", "city": "NAPERVILLE", "loc": [ -88.12824500000001, 41.732833 ], "pop": 32693, "state": "IL" }, { "_id": "60601", "city": "CHICAGO", "loc": [ -87.618123, 41.885847 ], "pop": 4585, "state": "IL" }, { "_id": "60602", "city": "CHICAGO", "loc": [ -87.632125, 41.882883 ], "pop": 59, "state": "IL" }, { "_id": "60603", "city": "CHICAGO", "loc": [ -87.62849900000001, 41.87985 ], "pop": 0, "state": "IL" }, { "_id": "60604", "city": "CHICAGO", "loc": [ -87.632999, 41.87845 ], "pop": 3, "state": "IL" }, { "_id": "60605", "city": "CHICAGO", "loc": [ -87.62771499999999, 41.87125 ], "pop": 7709, "state": "IL" }, { "_id": "60606", "city": "CHICAGO", "loc": [ -87.638648, 41.886822 ], "pop": 58, "state": "IL" }, { "_id": "60607", "city": "CHICAGO", "loc": [ -87.65784499999999, 41.872075 ], "pop": 13745, "state": "IL" }, { "_id": "60608", "city": "CHICAGO", "loc": [ -87.669444, 41.851482 ], "pop": 84518, "state": "IL" }, { "_id": "60609", "city": "CHICAGO", "loc": [ -87.653279, 41.809721 ], "pop": 89762, "state": "IL" }, { "_id": "60610", "city": "CHICAGO", "loc": [ -87.633565, 41.903294 ], "pop": 40840, "state": "IL" }, { "_id": "60611", "city": "CHICAGO", "loc": [ -87.62228500000001, 41.897105 ], "pop": 22264, "state": "IL" }, { "_id": "60612", "city": "CHICAGO", "loc": [ -87.687333, 41.880483 ], "pop": 44363, "state": "IL" }, { "_id": "60613", "city": "CHICAGO", "loc": [ -87.65749099999999, 41.954341 ], "pop": 48963, "state": "IL" }, { "_id": "60614", "city": "CHICAGO", "loc": [ -87.648295, 41.92286 ], "pop": 61350, "state": "IL" }, { "_id": "60615", "city": "CHICAGO", "loc": [ -87.600623, 41.802211 ], "pop": 44137, "state": "IL" }, { "_id": "60616", "city": "CHICAGO", "loc": [ -87.63055199999999, 41.84258 ], "pop": 45750, "state": "IL" }, { "_id": "60617", "city": "CHICAGO", "loc": [ -87.556012, 41.725743 ], "pop": 98612, "state": "IL" }, { "_id": "60618", "city": "CHICAGO", "loc": [ -87.70421399999999, 41.946401 ], "pop": 88377, "state": "IL" }, { "_id": "60619", "city": "CHICAGO", "loc": [ -87.60539, 41.745765 ], "pop": 74469, "state": "IL" }, { "_id": "60620", "city": "CHICAGO", "loc": [ -87.654251, 41.741119 ], "pop": 92005, "state": "IL" }, { "_id": "60621", "city": "CHICAGO", "loc": [ -87.64213599999999, 41.774993 ], "pop": 56458, "state": "IL" }, { "_id": "60622", "city": "CHICAGO", "loc": [ -87.67785000000001, 41.901923 ], "pop": 74468, "state": "IL" }, { "_id": "60623", "city": "CHICAGO", "loc": [ -87.7157, 41.849015 ], "pop": 112047, "state": "IL" }, { "_id": "60624", "city": "CHICAGO", "loc": [ -87.72234899999999, 41.880394 ], "pop": 50030, "state": "IL" }, { "_id": "60625", "city": "CHICAGO", "loc": [ -87.704157, 41.970325 ], "pop": 83401, "state": "IL" }, { "_id": "60626", "city": "CHICAGO", "loc": [ -87.668887, 42.009475 ], "pop": 57320, "state": "IL" }, { "_id": "60627", "city": "RIVERDALE", "loc": [ -87.618213, 41.645918 ], "pop": 24996, "state": "IL" }, { "_id": "60628", "city": "CHICAGO", "loc": [ -87.62427700000001, 41.693443 ], "pop": 94317, "state": "IL" }, { "_id": "60629", "city": "CHICAGO", "loc": [ -87.706936, 41.778149 ], "pop": 91814, "state": "IL" }, { "_id": "60630", "city": "CHICAGO", "loc": [ -87.760273, 41.969862 ], "pop": 48371, "state": "IL" }, { "_id": "60631", "city": "CHICAGO", "loc": [ -87.808215, 41.995145 ], "pop": 25175, "state": "IL" }, { "_id": "60632", "city": "CHICAGO", "loc": [ -87.70518, 41.809274 ], "pop": 62368, "state": "IL" }, { "_id": "60633", "city": "BURNHAM", "loc": [ -87.54948899999999, 41.649791 ], "pop": 12367, "state": "IL" }, { "_id": "60634", "city": "NORRIDGE", "loc": [ -87.796054, 41.945213 ], "pop": 69160, "state": "IL" }, { "_id": "60635", "city": "ELMWOOD PARK", "loc": [ -87.808593, 41.922907 ], "pop": 38056, "state": "IL" }, { "_id": "60636", "city": "CHICAGO", "loc": [ -87.667368, 41.775989 ], "pop": 58048, "state": "IL" }, { "_id": "60637", "city": "CHICAGO", "loc": [ -87.605097, 41.781312 ], "pop": 59637, "state": "IL" }, { "_id": "60638", "city": "BEDFORD PARK", "loc": [ -87.77192700000001, 41.789703 ], "pop": 53145, "state": "IL" }, { "_id": "60639", "city": "CHICAGO", "loc": [ -87.753502, 41.920162 ], "pop": 74209, "state": "IL" }, { "_id": "60640", "city": "CHICAGO", "loc": [ -87.66240500000001, 41.971928 ], "pop": 76829, "state": "IL" }, { "_id": "60641", "city": "CHICAGO", "loc": [ -87.747376, 41.945333 ], "pop": 59870, "state": "IL" }, { "_id": "60642", "city": "EVERGREEN PARK", "loc": [ -87.70172100000001, 41.718765 ], "pop": 24016, "state": "IL" }, { "_id": "60643", "city": "CALUMET PARK", "loc": [ -87.65944500000001, 41.693243 ], "pop": 63953, "state": "IL" }, { "_id": "60644", "city": "CHICAGO", "loc": [ -87.758163, 41.882913 ], "pop": 57376, "state": "IL" }, { "_id": "60645", "city": "LINCOLNWOOD", "loc": [ -87.6962, 42.007718 ], "pop": 43829, "state": "IL" }, { "_id": "60646", "city": "LINCOLNWOOD", "loc": [ -87.75917200000001, 41.996414 ], "pop": 32075, "state": "IL" }, { "_id": "60647", "city": "CHICAGO", "loc": [ -87.704322, 41.920903 ], "pop": 95971, "state": "IL" }, { "_id": "60648", "city": "CHICAGO", "loc": [ -87.81636, 42.031101 ], "pop": 30924, "state": "IL" }, { "_id": "60649", "city": "CHICAGO", "loc": [ -87.570252, 41.761968 ], "pop": 54795, "state": "IL" }, { "_id": "60650", "city": "CICERO", "loc": [ -87.76008, 41.84776 ], "pop": 67670, "state": "IL" }, { "_id": "60651", "city": "CHICAGO", "loc": [ -87.739307, 41.902509 ], "pop": 78082, "state": "IL" }, { "_id": "60652", "city": "CHICAGO", "loc": [ -87.713516, 41.745393 ], "pop": 36337, "state": "IL" }, { "_id": "60653", "city": "CHICAGO", "loc": [ -87.612605, 41.819645 ], "pop": 40091, "state": "IL" }, { "_id": "60654", "city": "CHICAGO", "loc": [ -87.63529200000001, 41.888533 ], "pop": 0, "state": "IL" }, { "_id": "60655", "city": "MERRIONETTE PARK", "loc": [ -87.70218800000001, 41.693033 ], "pop": 29847, "state": "IL" }, { "_id": "60656", "city": "HARWOOD HEIGHTS", "loc": [ -87.819981, 41.971844 ], "pop": 43597, "state": "IL" }, { "_id": "60657", "city": "CHICAGO", "loc": [ -87.652805, 41.93992 ], "pop": 65533, "state": "IL" }, { "_id": "60658", "city": "ALSIP", "loc": [ -87.729967, 41.671505 ], "pop": 16461, "state": "IL" }, { "_id": "60659", "city": "LINCOLNWOOD", "loc": [ -87.700823, 41.991687 ], "pop": 35461, "state": "IL" }, { "_id": "60660", "city": "CHICAGO", "loc": [ -87.662856, 41.990879 ], "pop": 45106, "state": "IL" }, { "_id": "60661", "city": "CHICAGO", "loc": [ -87.64296899999999, 41.881351 ], "pop": 2031, "state": "IL" }, { "_id": "60666", "city": "AMF OHARE", "loc": [ -87.906803, 41.9821 ], "pop": 262, "state": "IL" }, { "_id": "60901", "city": "KANKAKEE", "loc": [ -87.869607, 41.116582 ], "pop": 35952, "state": "IL" }, { "_id": "60910", "city": "AROMA PARK", "loc": [ -87.77188700000001, 41.094653 ], "pop": 3151, "state": "IL" }, { "_id": "60911", "city": "ASHKUM", "loc": [ -87.941148, 40.884431 ], "pop": 1484, "state": "IL" }, { "_id": "60912", "city": "BEAVERVILLE", "loc": [ -87.62171499999999, 40.967164 ], "pop": 672, "state": "IL" }, { "_id": "60913", "city": "BONFIELD", "loc": [ -88.061854, 41.15731 ], "pop": 1189, "state": "IL" }, { "_id": "60914", "city": "BOURBONNAIS", "loc": [ -87.879023, 41.166119 ], "pop": 18311, "state": "IL" }, { "_id": "60915", "city": "BRADLEY", "loc": [ -87.86011499999999, 41.145376 ], "pop": 10071, "state": "IL" }, { "_id": "60917", "city": "BUCKINGHAM", "loc": [ -88.177156, 41.043316 ], "pop": 557, "state": "IL" }, { "_id": "60918", "city": "BUCKLEY", "loc": [ -88.036092, 40.601827 ], "pop": 875, "state": "IL" }, { "_id": "60919", "city": "CABERY", "loc": [ -88.19208500000001, 40.981895 ], "pop": 510, "state": "IL" }, { "_id": "60921", "city": "CHATSWORTH", "loc": [ -88.293662, 40.748441 ], "pop": 1703, "state": "IL" }, { "_id": "60922", "city": "CHEBANSE", "loc": [ -87.895917, 41.02541 ], "pop": 3580, "state": "IL" }, { "_id": "60924", "city": "CISSNA PARK", "loc": [ -87.87588, 40.585814 ], "pop": 2282, "state": "IL" }, { "_id": "60927", "city": "CLIFTON", "loc": [ -87.920237, 40.939444 ], "pop": 2033, "state": "IL" }, { "_id": "60928", "city": "CRESCENT CITY", "loc": [ -87.83703, 40.7682 ], "pop": 1271, "state": "IL" }, { "_id": "60929", "city": "CULLOM", "loc": [ -88.276476, 40.878066 ], "pop": 782, "state": "IL" }, { "_id": "60930", "city": "DANFORTH", "loc": [ -87.986824, 40.82443 ], "pop": 959, "state": "IL" }, { "_id": "60931", "city": "DONOVAN", "loc": [ -87.604635, 40.889074 ], "pop": 613, "state": "IL" }, { "_id": "60934", "city": "EMINGTON", "loc": [ -88.321135, 40.978317 ], "pop": 330, "state": "IL" }, { "_id": "60935", "city": "ESSEX", "loc": [ -88.184528, 41.167644 ], "pop": 994, "state": "IL" }, { "_id": "60936", "city": "GIBSON CITY", "loc": [ -88.360873, 40.465932 ], "pop": 4608, "state": "IL" }, { "_id": "60938", "city": "GILMAN", "loc": [ -87.993336, 40.767987 ], "pop": 2125, "state": "IL" }, { "_id": "60940", "city": "GRANT PARK", "loc": [ -87.647992, 41.247677 ], "pop": 3009, "state": "IL" }, { "_id": "60941", "city": "HERSCHER", "loc": [ -88.085801, 41.046441 ], "pop": 2138, "state": "IL" }, { "_id": "60942", "city": "HOOPESTON", "loc": [ -87.666229, 40.463873 ], "pop": 6600, "state": "IL" }, { "_id": "60946", "city": "KEMPTON", "loc": [ -88.209013, 40.912604 ], "pop": 462, "state": "IL" }, { "_id": "60948", "city": "LODA", "loc": [ -88.092675, 40.524097 ], "pop": 1474, "state": "IL" }, { "_id": "60949", "city": "LUDLOW", "loc": [ -88.13796499999999, 40.374736 ], "pop": 832, "state": "IL" }, { "_id": "60950", "city": "MANTENO", "loc": [ -87.846761, 41.251439 ], "pop": 5673, "state": "IL" }, { "_id": "60951", "city": "MARTINTON", "loc": [ -87.744257, 40.905233 ], "pop": 1004, "state": "IL" }, { "_id": "60952", "city": "MELVIN", "loc": [ -88.255078, 40.571379 ], "pop": 654, "state": "IL" }, { "_id": "60953", "city": "MILFORD", "loc": [ -87.685332, 40.629253 ], "pop": 2367, "state": "IL" }, { "_id": "60954", "city": "MOMENCE", "loc": [ -87.657515, 41.159308 ], "pop": 6804, "state": "IL" }, { "_id": "60955", "city": "ONARGA", "loc": [ -87.995841, 40.712005 ], "pop": 1678, "state": "IL" }, { "_id": "60957", "city": "PAXTON", "loc": [ -88.098989, 40.456546 ], "pop": 5226, "state": "IL" }, { "_id": "60959", "city": "PIPER CITY", "loc": [ -88.187347, 40.755615 ], "pop": 1187, "state": "IL" }, { "_id": "60960", "city": "RANKIN", "loc": [ -87.888355, 40.455911 ], "pop": 1697, "state": "IL" }, { "_id": "60961", "city": "REDDICK", "loc": [ -88.208928, 41.10053 ], "pop": 480, "state": "IL" }, { "_id": "60962", "city": "ROBERTS", "loc": [ -88.180414, 40.619333 ], "pop": 617, "state": "IL" }, { "_id": "60963", "city": "ROSSVILLE", "loc": [ -87.66918099999999, 40.362548 ], "pop": 2082, "state": "IL" }, { "_id": "60964", "city": "SAINT ANNE", "loc": [ -87.656363, 41.048725 ], "pop": 6081, "state": "IL" }, { "_id": "60966", "city": "SHELDON", "loc": [ -87.57364, 40.780288 ], "pop": 1966, "state": "IL" }, { "_id": "60968", "city": "THAWVILLE", "loc": [ -88.09993, 40.684011 ], "pop": 374, "state": "IL" }, { "_id": "60970", "city": "WATSEKA", "loc": [ -87.730932, 40.773351 ], "pop": 7072, "state": "IL" }, { "_id": "60973", "city": "WELLINGTON", "loc": [ -87.65607, 40.53394 ], "pop": 782, "state": "IL" }, { "_id": "61001", "city": "APPLE RIVER", "loc": [ -90.12014499999999, 42.471432 ], "pop": 1010, "state": "IL" }, { "_id": "61006", "city": "ASHTON", "loc": [ -89.2086, 41.864327 ], "pop": 1911, "state": "IL" }, { "_id": "61007", "city": "BAILEYVILLE", "loc": [ -89.593937, 42.190465 ], "pop": 430, "state": "IL" }, { "_id": "61008", "city": "BELVIDERE", "loc": [ -88.850943, 42.259465 ], "pop": 22199, "state": "IL" }, { "_id": "61010", "city": "BYRON", "loc": [ -89.26588700000001, 42.129236 ], "pop": 4894, "state": "IL" }, { "_id": "61011", "city": "CALEDONIA", "loc": [ -88.91845600000001, 42.38346 ], "pop": 2086, "state": "IL" }, { "_id": "61012", "city": "CAPRON", "loc": [ -88.74651799999999, 42.408659 ], "pop": 1893, "state": "IL" }, { "_id": "61014", "city": "CHADWICK", "loc": [ -89.896278, 41.996205 ], "pop": 1252, "state": "IL" }, { "_id": "61015", "city": "CHANA", "loc": [ -89.211693, 41.993343 ], "pop": 1167, "state": "IL" }, { "_id": "61016", "city": "CHERRY VALLEY", "loc": [ -88.961923, 42.220562 ], "pop": 3768, "state": "IL" }, { "_id": "61018", "city": "DAKOTA", "loc": [ -89.54678199999999, 42.403078 ], "pop": 1134, "state": "IL" }, { "_id": "61019", "city": "DAVIS", "loc": [ -89.406721, 42.442157 ], "pop": 2337, "state": "IL" }, { "_id": "61020", "city": "DAVIS JUNCTION", "loc": [ -89.083838, 42.09792 ], "pop": 1263, "state": "IL" }, { "_id": "61021", "city": "DIXON", "loc": [ -89.48930300000001, 41.847797 ], "pop": 22293, "state": "IL" }, { "_id": "61024", "city": "DURAND", "loc": [ -89.309378, 42.433653 ], "pop": 2633, "state": "IL" }, { "_id": "61025", "city": "EAST DUBUQUE", "loc": [ -90.604597, 42.487488 ], "pop": 4999, "state": "IL" }, { "_id": "61028", "city": "ELIZABETH", "loc": [ -90.19862000000001, 42.308942 ], "pop": 1951, "state": "IL" }, { "_id": "61030", "city": "FORRESTON", "loc": [ -89.583124, 42.122924 ], "pop": 2261, "state": "IL" }, { "_id": "61031", "city": "FRANKLIN GROVE", "loc": [ -89.31711199999999, 41.857968 ], "pop": 2070, "state": "IL" }, { "_id": "61032", "city": "FREEPORT", "loc": [ -89.63452100000001, 42.299148 ], "pop": 33259, "state": "IL" }, { "_id": "61036", "city": "GALENA", "loc": [ -90.41950900000001, 42.418233 ], "pop": 5479, "state": "IL" }, { "_id": "61038", "city": "GARDEN PRAIRIE", "loc": [ -88.74366999999999, 42.250983 ], "pop": 1584, "state": "IL" }, { "_id": "61039", "city": "GERMAN VALLEY", "loc": [ -89.47115100000001, 42.21761 ], "pop": 1003, "state": "IL" }, { "_id": "61041", "city": "HANOVER", "loc": [ -90.28970700000001, 42.259405 ], "pop": 1559, "state": "IL" }, { "_id": "61042", "city": "HARMON", "loc": [ -89.569513, 41.697296 ], "pop": 793, "state": "IL" }, { "_id": "61044", "city": "KENT", "loc": [ -89.919489, 42.315528 ], "pop": 425, "state": "IL" }, { "_id": "61045", "city": "KINGS", "loc": [ -89.09968499999999, 42.013987 ], "pop": 377, "state": "IL" }, { "_id": "61046", "city": "LANARK", "loc": [ -89.824732, 42.093534 ], "pop": 1843, "state": "IL" }, { "_id": "61047", "city": "EGAN", "loc": [ -89.40102400000001, 42.140975 ], "pop": 1804, "state": "IL" }, { "_id": "61048", "city": "LENA", "loc": [ -89.82525099999999, 42.379054 ], "pop": 4251, "state": "IL" }, { "_id": "61049", "city": "LINDENWOOD", "loc": [ -89.033979, 42.050741 ], "pop": 351, "state": "IL" }, { "_id": "61050", "city": "MC CONNELL", "loc": [ -89.741545, 42.439511 ], "pop": 357, "state": "IL" }, { "_id": "61051", "city": "MILLEDGEVILLE", "loc": [ -89.78012099999999, 41.96737 ], "pop": 1526, "state": "IL" }, { "_id": "61052", "city": "MONROE CENTER", "loc": [ -89.016946, 42.10501 ], "pop": 1327, "state": "IL" }, { "_id": "61053", "city": "MOUNT CARROLL", "loc": [ -89.984454, 42.105308 ], "pop": 3529, "state": "IL" }, { "_id": "61054", "city": "MOUNT MORRIS", "loc": [ -89.434614, 42.047903 ], "pop": 4169, "state": "IL" }, { "_id": "61060", "city": "ORANGEVILLE", "loc": [ -89.644757, 42.472779 ], "pop": 1318, "state": "IL" }, { "_id": "61061", "city": "OREGON", "loc": [ -89.344364, 42.009512 ], "pop": 6482, "state": "IL" }, { "_id": "61062", "city": "PEARL CITY", "loc": [ -89.83932900000001, 42.260972 ], "pop": 1987, "state": "IL" }, { "_id": "61063", "city": "PECATONICA", "loc": [ -89.34722499999999, 42.305111 ], "pop": 3554, "state": "IL" }, { "_id": "61064", "city": "POLO", "loc": [ -89.598358, 41.98895 ], "pop": 4524, "state": "IL" }, { "_id": "61065", "city": "POPLAR GROVE", "loc": [ -88.84277400000001, 42.359365 ], "pop": 2593, "state": "IL" }, { "_id": "61067", "city": "RIDOTT", "loc": [ -89.462664, 42.299607 ], "pop": 750, "state": "IL" }, { "_id": "61068", "city": "ROCHELLE", "loc": [ -89.07103499999999, 41.928156 ], "pop": 12890, "state": "IL" }, { "_id": "61070", "city": "ROCK CITY", "loc": [ -89.47590099999999, 42.410345 ], "pop": 1420, "state": "IL" }, { "_id": "61071", "city": "ROCK FALLS", "loc": [ -89.69247300000001, 41.766525 ], "pop": 14548, "state": "IL" }, { "_id": "61072", "city": "ROCKTON", "loc": [ -89.08874400000001, 42.454371 ], "pop": 6514, "state": "IL" }, { "_id": "61073", "city": "ROSCOE", "loc": [ -88.99433000000001, 42.421659 ], "pop": 10391, "state": "IL" }, { "_id": "61074", "city": "SAVANNA", "loc": [ -90.140061, 42.095581 ], "pop": 4943, "state": "IL" }, { "_id": "61075", "city": "SCALES MOUND", "loc": [ -90.258033, 42.471548 ], "pop": 909, "state": "IL" }, { "_id": "61078", "city": "SHANNON", "loc": [ -89.748075, 42.161049 ], "pop": 1753, "state": "IL" }, { "_id": "61080", "city": "SOUTH BELOIT", "loc": [ -89.029791, 42.483672 ], "pop": 6833, "state": "IL" }, { "_id": "61081", "city": "STERLING", "loc": [ -89.70538999999999, 41.805511 ], "pop": 22261, "state": "IL" }, { "_id": "61084", "city": "STILLMAN VALLEY", "loc": [ -89.189762, 42.11835 ], "pop": 2772, "state": "IL" }, { "_id": "61085", "city": "STOCKTON", "loc": [ -90.020185, 42.349224 ], "pop": 3489, "state": "IL" }, { "_id": "61087", "city": "WARREN", "loc": [ -89.985992, 42.489001 ], "pop": 1967, "state": "IL" }, { "_id": "61088", "city": "WINNEBAGO", "loc": [ -89.23731600000001, 42.272723 ], "pop": 4059, "state": "IL" }, { "_id": "61089", "city": "WINSLOW", "loc": [ -89.806028, 42.48383 ], "pop": 887, "state": "IL" }, { "_id": "61101", "city": "ROCKFORD", "loc": [ -89.116118, 42.292233 ], "pop": 23908, "state": "IL" }, { "_id": "61102", "city": "ROCKFORD", "loc": [ -89.124695, 42.254669 ], "pop": 19427, "state": "IL" }, { "_id": "61103", "city": "ROCKFORD", "loc": [ -89.083326, 42.300986 ], "pop": 24143, "state": "IL" }, { "_id": "61104", "city": "ROCKFORD", "loc": [ -89.076779, 42.255355 ], "pop": 19912, "state": "IL" }, { "_id": "61107", "city": "ROCKFORD", "loc": [ -89.036107, 42.278629 ], "pop": 28879, "state": "IL" }, { "_id": "61108", "city": "ROCKFORD", "loc": [ -89.02351899999999, 42.251406 ], "pop": 25501, "state": "IL" }, { "_id": "61109", "city": "ROCKFORD", "loc": [ -89.05118, 42.216581 ], "pop": 25246, "state": "IL" }, { "_id": "61111", "city": "LOVES PARK", "loc": [ -89.03352099999999, 42.32952 ], "pop": 47733, "state": "IL" }, { "_id": "61112", "city": "ROCKFORD", "loc": [ -88.970429, 42.245639 ], "pop": 15, "state": "IL" }, { "_id": "61201", "city": "ROCK ISLAND", "loc": [ -90.564796, 41.491317 ], "pop": 37799, "state": "IL" }, { "_id": "61230", "city": "ALBANY", "loc": [ -90.208051, 41.765874 ], "pop": 1287, "state": "IL" }, { "_id": "61231", "city": "ALEDO", "loc": [ -90.741629, 41.20078 ], "pop": 5189, "state": "IL" }, { "_id": "61232", "city": "ANDALUSIA", "loc": [ -90.728385, 41.435324 ], "pop": 1899, "state": "IL" }, { "_id": "61234", "city": "ANNAWAN", "loc": [ -89.912949, 41.398022 ], "pop": 1432, "state": "IL" }, { "_id": "61235", "city": "ATKINSON", "loc": [ -90.022482, 41.41619 ], "pop": 1619, "state": "IL" }, { "_id": "61238", "city": "CAMBRIDGE", "loc": [ -90.18048, 41.311379 ], "pop": 3265, "state": "IL" }, { "_id": "61240", "city": "COAL VALLEY", "loc": [ -90.46517900000001, 41.435143 ], "pop": 5435, "state": "IL" }, { "_id": "61241", "city": "GREEN ROCK", "loc": [ -90.349231, 41.475224 ], "pop": 7809, "state": "IL" }, { "_id": "61242", "city": "CORDOVA", "loc": [ -90.307121, 41.69278 ], "pop": 954, "state": "IL" }, { "_id": "61243", "city": "DEER GROVE", "loc": [ -89.6972, 41.631599 ], "pop": 393, "state": "IL" }, { "_id": "61244", "city": "EAST MOLINE", "loc": [ -90.432118, 41.511804 ], "pop": 24023, "state": "IL" }, { "_id": "61250", "city": "ERIE", "loc": [ -90.084264, 41.655958 ], "pop": 2428, "state": "IL" }, { "_id": "61251", "city": "FENTON", "loc": [ -90.04568500000001, 41.728495 ], "pop": 289, "state": "IL" }, { "_id": "61252", "city": "FULTON", "loc": [ -90.15065300000001, 41.8522 ], "pop": 5743, "state": "IL" }, { "_id": "61254", "city": "GENESEO", "loc": [ -90.171127, 41.46881 ], "pop": 10023, "state": "IL" }, { "_id": "61256", "city": "HAMPTON", "loc": [ -90.323037, 41.541805 ], "pop": 538, "state": "IL" }, { "_id": "61257", "city": "HILLSDALE", "loc": [ -90.22625499999999, 41.592896 ], "pop": 1807, "state": "IL" }, { "_id": "61259", "city": "ILLINOIS CITY", "loc": [ -90.89250699999999, 41.389236 ], "pop": 1553, "state": "IL" }, { "_id": "61260", "city": "JOY", "loc": [ -90.85175700000001, 41.226198 ], "pop": 1185, "state": "IL" }, { "_id": "61261", "city": "LYNDON", "loc": [ -89.916865, 41.719933 ], "pop": 936, "state": "IL" }, { "_id": "61262", "city": "LYNN CENTER", "loc": [ -90.330444, 41.288761 ], "pop": 1694, "state": "IL" }, { "_id": "61263", "city": "MATHERVILLE", "loc": [ -90.602343, 41.269075 ], "pop": 1409, "state": "IL" }, { "_id": "61264", "city": "MILAN", "loc": [ -90.57393500000001, 41.426197 ], "pop": 14565, "state": "IL" }, { "_id": "61265", "city": "MOLINE", "loc": [ -90.497968, 41.490609 ], "pop": 45240, "state": "IL" }, { "_id": "61270", "city": "MORRISON", "loc": [ -89.96899500000001, 41.816664 ], "pop": 7580, "state": "IL" }, { "_id": "61272", "city": "NEW BOSTON", "loc": [ -90.98786, 41.215259 ], "pop": 1663, "state": "IL" }, { "_id": "61273", "city": "ORION", "loc": [ -90.384929, 41.363367 ], "pop": 3121, "state": "IL" }, { "_id": "61274", "city": "OSCO", "loc": [ -90.26809299999999, 41.363674 ], "pop": 538, "state": "IL" }, { "_id": "61275", "city": "PORT BYRON", "loc": [ -90.326291, 41.601346 ], "pop": 3441, "state": "IL" }, { "_id": "61277", "city": "PROPHETSTOWN", "loc": [ -89.946665, 41.631223 ], "pop": 3736, "state": "IL" }, { "_id": "61279", "city": "REYNOLDS", "loc": [ -90.638367, 41.327675 ], "pop": 944, "state": "IL" }, { "_id": "61281", "city": "SHERRARD", "loc": [ -90.493863, 41.302669 ], "pop": 2192, "state": "IL" }, { "_id": "61282", "city": "SILVIS", "loc": [ -90.412609, 41.500677 ], "pop": 9832, "state": "IL" }, { "_id": "61283", "city": "TAMPICO", "loc": [ -89.794793, 41.652158 ], "pop": 1753, "state": "IL" }, { "_id": "61284", "city": "TAYLOR RIDGE", "loc": [ -90.734047, 41.382755 ], "pop": 1090, "state": "IL" }, { "_id": "61285", "city": "THOMSON", "loc": [ -90.08444299999999, 41.981626 ], "pop": 1868, "state": "IL" }, { "_id": "61301", "city": "LA SALLE", "loc": [ -89.095468, 41.344221 ], "pop": 10188, "state": "IL" }, { "_id": "61310", "city": "AMBOY", "loc": [ -89.34716, 41.704181 ], "pop": 3994, "state": "IL" }, { "_id": "61311", "city": "ANCONA", "loc": [ -88.76603900000001, 41.055118 ], "pop": 38, "state": "IL" }, { "_id": "61312", "city": "ARLINGTON", "loc": [ -89.221949, 41.443669 ], "pop": 1044, "state": "IL" }, { "_id": "61313", "city": "BLACKSTONE", "loc": [ -88.649782, 41.071945 ], "pop": 258, "state": "IL" }, { "_id": "61314", "city": "BUDA", "loc": [ -89.67947599999999, 41.313973 ], "pop": 931, "state": "IL" }, { "_id": "61318", "city": "COMPTON", "loc": [ -89.08770800000001, 41.684976 ], "pop": 551, "state": "IL" }, { "_id": "61319", "city": "MANVILLE", "loc": [ -88.742694, 40.985827 ], "pop": 968, "state": "IL" }, { "_id": "61320", "city": "DALZELL", "loc": [ -89.20326900000001, 41.373077 ], "pop": 2255, "state": "IL" }, { "_id": "61321", "city": "DANA", "loc": [ -88.962793, 40.954675 ], "pop": 257, "state": "IL" }, { "_id": "61325", "city": "GRAND RIDGE", "loc": [ -88.816836, 41.238621 ], "pop": 1179, "state": "IL" }, { "_id": "61326", "city": "GRANVILLE", "loc": [ -89.22502900000001, 41.264212 ], "pop": 2784, "state": "IL" }, { "_id": "61327", "city": "HENNEPIN", "loc": [ -89.321791, 41.235154 ], "pop": 1111, "state": "IL" }, { "_id": "61330", "city": "LA MOILLE", "loc": [ -89.29702399999999, 41.537557 ], "pop": 1315, "state": "IL" }, { "_id": "61332", "city": "LEONORE", "loc": [ -88.99693600000001, 41.166368 ], "pop": 437, "state": "IL" }, { "_id": "61333", "city": "LONG POINT", "loc": [ -88.881106, 40.989553 ], "pop": 541, "state": "IL" }, { "_id": "61334", "city": "LOSTANT", "loc": [ -89.075031, 41.145007 ], "pop": 747, "state": "IL" }, { "_id": "61335", "city": "MC NABB", "loc": [ -89.218664, 41.173026 ], "pop": 747, "state": "IL" }, { "_id": "61336", "city": "MAGNOLIA", "loc": [ -89.22701000000001, 41.116374 ], "pop": 519, "state": "IL" }, { "_id": "61337", "city": "MALDEN", "loc": [ -89.36761, 41.437743 ], "pop": 1109, "state": "IL" }, { "_id": "61341", "city": "MARSEILLES", "loc": [ -88.694678, 41.330201 ], "pop": 7360, "state": "IL" }, { "_id": "61342", "city": "MENDOTA", "loc": [ -89.10827999999999, 41.544308 ], "pop": 9660, "state": "IL" }, { "_id": "61344", "city": "MINERAL", "loc": [ -89.820087, 41.403556 ], "pop": 648, "state": "IL" }, { "_id": "61345", "city": "NEPONSET", "loc": [ -89.794382, 41.290457 ], "pop": 819, "state": "IL" }, { "_id": "61346", "city": "NEW BEDFORD", "loc": [ -89.778558, 41.540883 ], "pop": 641, "state": "IL" }, { "_id": "61348", "city": "OGLESBY", "loc": [ -89.055341, 41.292768 ], "pop": 5323, "state": "IL" }, { "_id": "61349", "city": "OHIO", "loc": [ -89.45741099999999, 41.537149 ], "pop": 1031, "state": "IL" }, { "_id": "61350", "city": "OTTAWA", "loc": [ -88.841589, 41.352619 ], "pop": 23727, "state": "IL" }, { "_id": "61353", "city": "PAW PAW", "loc": [ -88.967377, 41.685228 ], "pop": 1539, "state": "IL" }, { "_id": "61354", "city": "PERU", "loc": [ -89.12647800000001, 41.333021 ], "pop": 10050, "state": "IL" }, { "_id": "61356", "city": "PRINCETON", "loc": [ -89.42701700000001, 41.362934 ], "pop": 12333, "state": "IL" }, { "_id": "61358", "city": "RUTLAND", "loc": [ -89.03882900000001, 40.984407 ], "pop": 629, "state": "IL" }, { "_id": "61360", "city": "SENECA", "loc": [ -88.610013, 41.315248 ], "pop": 2246, "state": "IL" }, { "_id": "61361", "city": "SHEFFIELD", "loc": [ -89.711502, 41.394876 ], "pop": 1964, "state": "IL" }, { "_id": "61362", "city": "SPRING VALLEY", "loc": [ -89.20417, 41.327923 ], "pop": 5541, "state": "IL" }, { "_id": "61364", "city": "STREATOR", "loc": [ -88.83067200000001, 41.12249 ], "pop": 22239, "state": "IL" }, { "_id": "61367", "city": "SUBLETTE", "loc": [ -89.235409, 41.633144 ], "pop": 899, "state": "IL" }, { "_id": "61368", "city": "TISKILWA", "loc": [ -89.50796800000001, 41.289055 ], "pop": 1587, "state": "IL" }, { "_id": "61369", "city": "TOLUCA", "loc": [ -89.13481, 41.004553 ], "pop": 1755, "state": "IL" }, { "_id": "61370", "city": "TONICA", "loc": [ -89.088993, 41.232741 ], "pop": 1409, "state": "IL" }, { "_id": "61373", "city": "UTICA", "loc": [ -89.000795, 41.363033 ], "pop": 1926, "state": "IL" }, { "_id": "61375", "city": "VARNA", "loc": [ -89.24833099999999, 41.032723 ], "pop": 1527, "state": "IL" }, { "_id": "61376", "city": "NORMANDY", "loc": [ -89.592237, 41.553035 ], "pop": 2050, "state": "IL" }, { "_id": "61377", "city": "WENONA", "loc": [ -89.04163699999999, 41.054846 ], "pop": 1410, "state": "IL" }, { "_id": "61378", "city": "WEST BROOKLYN", "loc": [ -89.190917, 41.729156 ], "pop": 946, "state": "IL" }, { "_id": "61379", "city": "WYANET", "loc": [ -89.574423, 41.378452 ], "pop": 1799, "state": "IL" }, { "_id": "61401", "city": "GALESBURG", "loc": [ -90.36980699999999, 40.952138 ], "pop": 36161, "state": "IL" }, { "_id": "61410", "city": "ABINGDON", "loc": [ -90.400898, 40.802312 ], "pop": 4241, "state": "IL" }, { "_id": "61411", "city": "ADAIR", "loc": [ -90.503742, 40.385197 ], "pop": 731, "state": "IL" }, { "_id": "61412", "city": "ALEXIS", "loc": [ -90.543576, 41.052146 ], "pop": 1866, "state": "IL" }, { "_id": "61413", "city": "ALPHA", "loc": [ -90.382081, 41.193029 ], "pop": 1152, "state": "IL" }, { "_id": "61414", "city": "ALTONA", "loc": [ -90.159826, 41.112828 ], "pop": 813, "state": "IL" }, { "_id": "61415", "city": "AVON", "loc": [ -90.44605300000001, 40.654947 ], "pop": 2125, "state": "IL" }, { "_id": "61416", "city": "BARDOLPH", "loc": [ -90.502495, 40.498078 ], "pop": 365, "state": "IL" }, { "_id": "61417", "city": "BERWICK", "loc": [ -90.50591300000001, 40.779911 ], "pop": 461, "state": "IL" }, { "_id": "61418", "city": "BIGGSVILLE", "loc": [ -90.85605700000001, 40.853122 ], "pop": 627, "state": "IL" }, { "_id": "61420", "city": "BLANDINSVILLE", "loc": [ -90.859521, 40.551585 ], "pop": 1272, "state": "IL" }, { "_id": "61421", "city": "BRADFORD", "loc": [ -89.65207700000001, 41.15323 ], "pop": 2071, "state": "IL" }, { "_id": "61422", "city": "BUSHNELL", "loc": [ -90.506027, 40.553916 ], "pop": 3511, "state": "IL" }, { "_id": "61423", "city": "CAMERON", "loc": [ -90.50013, 40.888963 ], "pop": 969, "state": "IL" }, { "_id": "61425", "city": "CARMAN", "loc": [ -91.05639600000001, 40.755054 ], "pop": 398, "state": "IL" }, { "_id": "61427", "city": "CUBA", "loc": [ -90.181055, 40.4995 ], "pop": 2169, "state": "IL" }, { "_id": "61428", "city": "DAHINDA", "loc": [ -90.139808, 40.95508 ], "pop": 710, "state": "IL" }, { "_id": "61431", "city": "ELLISVILLE", "loc": [ -90.287469, 40.604652 ], "pop": 565, "state": "IL" }, { "_id": "61432", "city": "FAIRVIEW", "loc": [ -90.16526500000001, 40.64418 ], "pop": 702, "state": "IL" }, { "_id": "61433", "city": "FIATT", "loc": [ -90.16218600000001, 40.571779 ], "pop": 495, "state": "IL" }, { "_id": "61434", "city": "GALVA", "loc": [ -90.04809299999999, 41.165627 ], "pop": 3725, "state": "IL" }, { "_id": "61435", "city": "GERLAW", "loc": [ -90.622765, 40.999519 ], "pop": 520, "state": "IL" }, { "_id": "61436", "city": "GILSON", "loc": [ -90.174663, 40.876525 ], "pop": 696, "state": "IL" }, { "_id": "61437", "city": "GLADSTONE", "loc": [ -90.994078, 40.837682 ], "pop": 1166, "state": "IL" }, { "_id": "61438", "city": "GOOD HOPE", "loc": [ -90.63243199999999, 40.574891 ], "pop": 499, "state": "IL" }, { "_id": "61440", "city": "INDUSTRY", "loc": [ -90.610524, 40.3256 ], "pop": 885, "state": "IL" }, { "_id": "61441", "city": "IPAVA", "loc": [ -90.296744, 40.359375 ], "pop": 1152, "state": "IL" }, { "_id": "61442", "city": "KEITHSBURG", "loc": [ -90.926337, 41.104333 ], "pop": 1024, "state": "IL" }, { "_id": "61443", "city": "KEWANEE", "loc": [ -89.92739, 41.241116 ], "pop": 14861, "state": "IL" }, { "_id": "61447", "city": "KIRKWOOD", "loc": [ -90.745659, 40.863849 ], "pop": 1171, "state": "IL" }, { "_id": "61448", "city": "KNOXVILLE", "loc": [ -90.287116, 40.910672 ], "pop": 5958, "state": "IL" }, { "_id": "61449", "city": "LA FAYETTE", "loc": [ -89.957466, 41.109535 ], "pop": 454, "state": "IL" }, { "_id": "61450", "city": "LA HARPE", "loc": [ -90.968746, 40.584586 ], "pop": 1686, "state": "IL" }, { "_id": "61451", "city": "LAURA", "loc": [ -89.93490799999999, 40.933468 ], "pop": 500, "state": "IL" }, { "_id": "61452", "city": "LITTLETON", "loc": [ -90.61900799999999, 40.233929 ], "pop": 386, "state": "IL" }, { "_id": "61453", "city": "LITTLE YORK", "loc": [ -90.736434, 41.01529 ], "pop": 679, "state": "IL" }, { "_id": "61454", "city": "LOMAX", "loc": [ -91.039096, 40.676143 ], "pop": 1036, "state": "IL" }, { "_id": "61455", "city": "MACOMB", "loc": [ -90.678674, 40.461674 ], "pop": 23503, "state": "IL" }, { "_id": "61458", "city": "MAQUON", "loc": [ -90.200841, 40.784863 ], "pop": 1226, "state": "IL" }, { "_id": "61459", "city": "MARIETTA", "loc": [ -90.38845999999999, 40.497775 ], "pop": 421, "state": "IL" }, { "_id": "61460", "city": "MEDIA", "loc": [ -90.85696, 40.761775 ], "pop": 484, "state": "IL" }, { "_id": "61462", "city": "MONMOUTH", "loc": [ -90.644828, 40.910702 ], "pop": 11245, "state": "IL" }, { "_id": "61465", "city": "NEW WINDSOR", "loc": [ -90.45984199999999, 41.198734 ], "pop": 1171, "state": "IL" }, { "_id": "61466", "city": "NORTH HENDERSON", "loc": [ -90.47357100000001, 41.100607 ], "pop": 390, "state": "IL" }, { "_id": "61467", "city": "ONEIDA", "loc": [ -90.239093, 41.083236 ], "pop": 1122, "state": "IL" }, { "_id": "61469", "city": "OQUAWKA", "loc": [ -90.930199, 40.944174 ], "pop": 2410, "state": "IL" }, { "_id": "61470", "city": "PRAIRIE CITY", "loc": [ -90.472748, 40.617952 ], "pop": 651, "state": "IL" }, { "_id": "61471", "city": "RARITAN", "loc": [ -90.831891, 40.687808 ], "pop": 345, "state": "IL" }, { "_id": "61472", "city": "RIO", "loc": [ -90.389978, 41.110319 ], "pop": 570, "state": "IL" }, { "_id": "61473", "city": "ROSEVILLE", "loc": [ -90.65145, 40.723821 ], "pop": 1734, "state": "IL" }, { "_id": "61474", "city": "SAINT AUGUSTINE", "loc": [ -90.37978099999999, 40.7289 ], "pop": 376, "state": "IL" }, { "_id": "61475", "city": "SCIOTA", "loc": [ -90.707999, 40.567361 ], "pop": 622, "state": "IL" }, { "_id": "61476", "city": "SEATON", "loc": [ -90.825654, 41.073222 ], "pop": 704, "state": "IL" }, { "_id": "61477", "city": "SMITHFIELD", "loc": [ -90.285601, 40.48551 ], "pop": 647, "state": "IL" }, { "_id": "61478", "city": "SMITHSHIRE", "loc": [ -90.739874, 40.740021 ], "pop": 568, "state": "IL" }, { "_id": "61479", "city": "SPEER", "loc": [ -89.693254, 41.009682 ], "pop": 398, "state": "IL" }, { "_id": "61480", "city": "STRONGHURST", "loc": [ -90.925702, 40.752265 ], "pop": 1055, "state": "IL" }, { "_id": "61482", "city": "TABLE GROVE", "loc": [ -90.423901, 40.378441 ], "pop": 429, "state": "IL" }, { "_id": "61483", "city": "TOULON", "loc": [ -89.860584, 41.100949 ], "pop": 2378, "state": "IL" }, { "_id": "61484", "city": "VERMONT", "loc": [ -90.422028, 40.30623 ], "pop": 1112, "state": "IL" }, { "_id": "61485", "city": "VICTORIA", "loc": [ -90.09332499999999, 41.025635 ], "pop": 669, "state": "IL" }, { "_id": "61486", "city": "VIOLA", "loc": [ -90.593583, 41.202422 ], "pop": 1651, "state": "IL" }, { "_id": "61488", "city": "WATAGA", "loc": [ -90.27231, 41.022351 ], "pop": 1197, "state": "IL" }, { "_id": "61489", "city": "WILLIAMSFIELD", "loc": [ -90.026725, 40.927724 ], "pop": 912, "state": "IL" }, { "_id": "61490", "city": "WOODHULL", "loc": [ -90.283282, 41.184887 ], "pop": 1390, "state": "IL" }, { "_id": "61491", "city": "WYOMING", "loc": [ -89.778238, 41.059879 ], "pop": 1818, "state": "IL" }, { "_id": "61501", "city": "ASTORIA", "loc": [ -90.34425400000001, 40.231144 ], "pop": 2093, "state": "IL" }, { "_id": "61516", "city": "BENSON", "loc": [ -89.116501, 40.83058 ], "pop": 838, "state": "IL" }, { "_id": "61517", "city": "BRIMFIELD", "loc": [ -89.89703799999999, 40.840654 ], "pop": 1177, "state": "IL" }, { "_id": "61518", "city": "OAK HILL", "loc": [ -89.83725, 40.786938 ], "pop": 1007, "state": "IL" }, { "_id": "61519", "city": "BRYANT", "loc": [ -90.06613400000001, 40.483072 ], "pop": 1017, "state": "IL" }, { "_id": "61520", "city": "CANTON", "loc": [ -90.024151, 40.560137 ], "pop": 16309, "state": "IL" }, { "_id": "61523", "city": "CHILLICOTHE", "loc": [ -89.506793, 40.901349 ], "pop": 9929, "state": "IL" }, { "_id": "61524", "city": "DUNFERMLINE", "loc": [ -90.03134900000001, 40.490342 ], "pop": 319, "state": "IL" }, { "_id": "61525", "city": "DUNLAP", "loc": [ -89.639655, 40.844417 ], "pop": 4669, "state": "IL" }, { "_id": "61526", "city": "EDELSTEIN", "loc": [ -89.585812, 40.945367 ], "pop": 1866, "state": "IL" }, { "_id": "61528", "city": "EDWARDS", "loc": [ -89.705344, 40.764362 ], "pop": 2896, "state": "IL" }, { "_id": "61529", "city": "ELMWOOD", "loc": [ -89.928882, 40.772594 ], "pop": 2698, "state": "IL" }, { "_id": "61530", "city": "EUREKA", "loc": [ -89.270561, 40.715249 ], "pop": 5688, "state": "IL" }, { "_id": "61531", "city": "MIDDLEGROVE", "loc": [ -90.013434, 40.690265 ], "pop": 3569, "state": "IL" }, { "_id": "61532", "city": "FOREST CITY", "loc": [ -89.833426, 40.35942 ], "pop": 670, "state": "IL" }, { "_id": "61533", "city": "GLASFORD", "loc": [ -89.81132599999999, 40.575976 ], "pop": 2531, "state": "IL" }, { "_id": "61534", "city": "GREEN VALLEY", "loc": [ -89.65492500000001, 40.41978 ], "pop": 1800, "state": "IL" }, { "_id": "61536", "city": "HANNA CITY", "loc": [ -89.795242, 40.679776 ], "pop": 3255, "state": "IL" }, { "_id": "61537", "city": "HENRY", "loc": [ -89.37432800000001, 41.111543 ], "pop": 3255, "state": "IL" }, { "_id": "61539", "city": "KINGSTON MINES", "loc": [ -89.806791, 40.49028 ], "pop": 1745, "state": "IL" }, { "_id": "61540", "city": "LACON", "loc": [ -89.400842, 41.021587 ], "pop": 2809, "state": "IL" }, { "_id": "61542", "city": "LEWISTOWN", "loc": [ -90.15628700000001, 40.383046 ], "pop": 3849, "state": "IL" }, { "_id": "61543", "city": "LIVERPOOL", "loc": [ -90.038972, 40.411574 ], "pop": 730, "state": "IL" }, { "_id": "61544", "city": "LONDON MILLS", "loc": [ -90.261594, 40.694954 ], "pop": 746, "state": "IL" }, { "_id": "61545", "city": "CAZENOVIA", "loc": [ -89.37039900000001, 40.871082 ], "pop": 1247, "state": "IL" }, { "_id": "61546", "city": "MANITO", "loc": [ -89.78979099999999, 40.415991 ], "pop": 2593, "state": "IL" }, { "_id": "61547", "city": "MAPLETON", "loc": [ -89.718429, 40.611699 ], "pop": 2593, "state": "IL" }, { "_id": "61548", "city": "METAMORA", "loc": [ -89.430876, 40.784428 ], "pop": 9052, "state": "IL" }, { "_id": "61550", "city": "MORTON", "loc": [ -89.46044500000001, 40.614771 ], "pop": 15207, "state": "IL" }, { "_id": "61554", "city": "PEKIN", "loc": [ -89.624332, 40.567435 ], "pop": 44902, "state": "IL" }, { "_id": "61559", "city": "PRINCEVILLE", "loc": [ -89.772285, 40.909277 ], "pop": 3210, "state": "IL" }, { "_id": "61560", "city": "PUTNAM", "loc": [ -89.440901, 41.19486 ], "pop": 724, "state": "IL" }, { "_id": "61561", "city": "ROANOKE", "loc": [ -89.209334, 40.795601 ], "pop": 2653, "state": "IL" }, { "_id": "61563", "city": "SAINT DAVID", "loc": [ -90.043739, 40.522571 ], "pop": 241, "state": "IL" }, { "_id": "61565", "city": "SPARLAND", "loc": [ -89.45711, 41.013366 ], "pop": 1190, "state": "IL" }, { "_id": "61567", "city": "TOPEKA", "loc": [ -89.93263, 40.38108 ], "pop": 969, "state": "IL" }, { "_id": "61568", "city": "TREMONT", "loc": [ -89.483316, 40.505337 ], "pop": 4492, "state": "IL" }, { "_id": "61569", "city": "TRIVOLI", "loc": [ -89.913546, 40.679506 ], "pop": 1166, "state": "IL" }, { "_id": "61570", "city": "WASHBURN", "loc": [ -89.28304900000001, 40.91413 ], "pop": 1771, "state": "IL" }, { "_id": "61571", "city": "SUNNYLAND", "loc": [ -89.447926, 40.699364 ], "pop": 18931, "state": "IL" }, { "_id": "61572", "city": "YATES CITY", "loc": [ -90.026481, 40.787826 ], "pop": 1402, "state": "IL" }, { "_id": "61602", "city": "PEORIA", "loc": [ -89.601178, 40.687987 ], "pop": 740, "state": "IL" }, { "_id": "61603", "city": "PEORIA HEIGHTS", "loc": [ -89.58081300000001, 40.713915 ], "pop": 20163, "state": "IL" }, { "_id": "61604", "city": "PEORIA", "loc": [ -89.63237700000001, 40.711142 ], "pop": 33171, "state": "IL" }, { "_id": "61605", "city": "PEORIA", "loc": [ -89.62632499999999, 40.677512 ], "pop": 20320, "state": "IL" }, { "_id": "61606", "city": "PEORIA", "loc": [ -89.612189, 40.698926 ], "pop": 10299, "state": "IL" }, { "_id": "61607", "city": "BARTONVILLE", "loc": [ -89.67389799999999, 40.652434 ], "pop": 10389, "state": "IL" }, { "_id": "61611", "city": "EAST PEORIA", "loc": [ -89.55141, 40.673121 ], "pop": 29630, "state": "IL" }, { "_id": "61614", "city": "PEORIA HEIGHTS", "loc": [ -89.603295, 40.75481 ], "pop": 35177, "state": "IL" }, { "_id": "61615", "city": "PEORIA", "loc": [ -89.63208299999999, 40.770165 ], "pop": 15452, "state": "IL" }, { "_id": "61701", "city": "BLOOMINGTON", "loc": [ -88.989318, 40.478295 ], "pop": 35218, "state": "IL" }, { "_id": "61704", "city": "BLOOMINGTON", "loc": [ -88.96246600000001, 40.471618 ], "pop": 24135, "state": "IL" }, { "_id": "61720", "city": "ANCHOR", "loc": [ -88.52658099999999, 40.544091 ], "pop": 393, "state": "IL" }, { "_id": "61721", "city": "ARMINGTON", "loc": [ -89.321775, 40.317046 ], "pop": 1163, "state": "IL" }, { "_id": "61722", "city": "ARROWSMITH", "loc": [ -88.629648, 40.411966 ], "pop": 813, "state": "IL" }, { "_id": "61723", "city": "ATLANTA", "loc": [ -89.23002099999999, 40.258624 ], "pop": 1978, "state": "IL" }, { "_id": "61724", "city": "BELLFLOWER", "loc": [ -88.522702, 40.340091 ], "pop": 702, "state": "IL" }, { "_id": "61725", "city": "CARLOCK", "loc": [ -89.109779, 40.602898 ], "pop": 1066, "state": "IL" }, { "_id": "61726", "city": "CHENOA", "loc": [ -88.721853, 40.744633 ], "pop": 2898, "state": "IL" }, { "_id": "61727", "city": "CLINTON", "loc": [ -88.96266, 40.148708 ], "pop": 10043, "state": "IL" }, { "_id": "61728", "city": "COLFAX", "loc": [ -88.62001600000001, 40.570377 ], "pop": 1391, "state": "IL" }, { "_id": "61729", "city": "CONGERVILLE", "loc": [ -89.199397, 40.620762 ], "pop": 802, "state": "IL" }, { "_id": "61730", "city": "COOKSVILLE", "loc": [ -88.73504699999999, 40.536014 ], "pop": 478, "state": "IL" }, { "_id": "61731", "city": "CROPSEY", "loc": [ -88.494343, 40.602983 ], "pop": 240, "state": "IL" }, { "_id": "61732", "city": "DANVERS", "loc": [ -89.18848699999999, 40.536353 ], "pop": 1825, "state": "IL" }, { "_id": "61733", "city": "DEER CREEK", "loc": [ -89.30029999999999, 40.627992 ], "pop": 2277, "state": "IL" }, { "_id": "61734", "city": "DELAVAN", "loc": [ -89.532133, 40.369029 ], "pop": 2285, "state": "IL" }, { "_id": "61735", "city": "DEWITT", "loc": [ -88.763672, 40.184759 ], "pop": 417, "state": "IL" }, { "_id": "61736", "city": "HOLDER", "loc": [ -88.870814, 40.380858 ], "pop": 992, "state": "IL" }, { "_id": "61737", "city": "ELLSWORTH", "loc": [ -88.737121, 40.443154 ], "pop": 660, "state": "IL" }, { "_id": "61738", "city": "EL PASO", "loc": [ -89.01195199999999, 40.738948 ], "pop": 3338, "state": "IL" }, { "_id": "61739", "city": "FAIRBURY", "loc": [ -88.516486, 40.745033 ], "pop": 4706, "state": "IL" }, { "_id": "61740", "city": "FLANAGAN", "loc": [ -88.86196, 40.879003 ], "pop": 1424, "state": "IL" }, { "_id": "61741", "city": "FORREST", "loc": [ -88.411143, 40.751324 ], "pop": 1809, "state": "IL" }, { "_id": "61743", "city": "GRAYMONT", "loc": [ -88.760299, 40.90663 ], "pop": 180, "state": "IL" }, { "_id": "61744", "city": "GRIDLEY", "loc": [ -88.884044, 40.74387 ], "pop": 2142, "state": "IL" }, { "_id": "61745", "city": "HEYWORTH", "loc": [ -88.977608, 40.3307 ], "pop": 2934, "state": "IL" }, { "_id": "61747", "city": "HOPEDALE", "loc": [ -89.421398, 40.427318 ], "pop": 1355, "state": "IL" }, { "_id": "61748", "city": "HUDSON", "loc": [ -88.975931, 40.620485 ], "pop": 1850, "state": "IL" }, { "_id": "61749", "city": "KENNEY", "loc": [ -89.078925, 40.10247 ], "pop": 789, "state": "IL" }, { "_id": "61752", "city": "LE ROY", "loc": [ -88.75981299999999, 40.346781 ], "pop": 3379, "state": "IL" }, { "_id": "61753", "city": "LEXINGTON", "loc": [ -88.806203, 40.635685 ], "pop": 3098, "state": "IL" }, { "_id": "61754", "city": "MC LEAN", "loc": [ -89.164483, 40.328159 ], "pop": 1432, "state": "IL" }, { "_id": "61755", "city": "MACKINAW", "loc": [ -89.345795, 40.539643 ], "pop": 2772, "state": "IL" }, { "_id": "61756", "city": "MAROA", "loc": [ -88.957769, 40.034159 ], "pop": 1883, "state": "IL" }, { "_id": "61759", "city": "MINIER", "loc": [ -89.316484, 40.435889 ], "pop": 1483, "state": "IL" }, { "_id": "61760", "city": "MINONK", "loc": [ -89.034863, 40.898501 ], "pop": 2559, "state": "IL" }, { "_id": "61761", "city": "NORMAL", "loc": [ -88.988287, 40.512446 ], "pop": 40851, "state": "IL" }, { "_id": "61764", "city": "PONTIAC", "loc": [ -88.632775, 40.876404 ], "pop": 14036, "state": "IL" }, { "_id": "61769", "city": "SAUNEMIN", "loc": [ -88.40936000000001, 40.888516 ], "pop": 683, "state": "IL" }, { "_id": "61770", "city": "SAYBROOK", "loc": [ -88.52465599999999, 40.432005 ], "pop": 1051, "state": "IL" }, { "_id": "61771", "city": "SECOR", "loc": [ -89.127065, 40.722402 ], "pop": 952, "state": "IL" }, { "_id": "61772", "city": "SHIRLEY", "loc": [ -89.08218100000001, 40.417437 ], "pop": 332, "state": "IL" }, { "_id": "61773", "city": "SIBLEY", "loc": [ -88.38146, 40.582315 ], "pop": 608, "state": "IL" }, { "_id": "61774", "city": "STANFORD", "loc": [ -89.21643400000001, 40.437575 ], "pop": 996, "state": "IL" }, { "_id": "61775", "city": "STRAWN", "loc": [ -88.404036, 40.647615 ], "pop": 322, "state": "IL" }, { "_id": "61776", "city": "TOWANDA", "loc": [ -88.88865, 40.553326 ], "pop": 1191, "state": "IL" }, { "_id": "61777", "city": "WAPELLA", "loc": [ -88.967264, 40.232305 ], "pop": 1031, "state": "IL" }, { "_id": "61778", "city": "WAYNESVILLE", "loc": [ -89.114299, 40.243673 ], "pop": 768, "state": "IL" }, { "_id": "61801", "city": "URBANA", "loc": [ -88.203631, 40.109522 ], "pop": 46110, "state": "IL" }, { "_id": "61810", "city": "ALLERTON", "loc": [ -87.931235, 39.918818 ], "pop": 405, "state": "IL" }, { "_id": "61811", "city": "ALVIN", "loc": [ -87.608003, 40.3007 ], "pop": 817, "state": "IL" }, { "_id": "61812", "city": "ARMSTRONG", "loc": [ -87.894256, 40.217548 ], "pop": 247, "state": "IL" }, { "_id": "61813", "city": "BEMENT", "loc": [ -88.56877, 39.922207 ], "pop": 1928, "state": "IL" }, { "_id": "61814", "city": "BISMARCK", "loc": [ -87.613769, 40.255187 ], "pop": 1476, "state": "IL" }, { "_id": "61816", "city": "BROADLANDS", "loc": [ -87.994831, 39.914247 ], "pop": 481, "state": "IL" }, { "_id": "61817", "city": "CATLIN", "loc": [ -87.71125499999999, 40.069922 ], "pop": 3359, "state": "IL" }, { "_id": "61818", "city": "CERRO GORDO", "loc": [ -88.725634, 39.868062 ], "pop": 2060, "state": "IL" }, { "_id": "61820", "city": "CHAMPAIGN", "loc": [ -88.240747, 40.111017 ], "pop": 33409, "state": "IL" }, { "_id": "61821", "city": "CHAMPAIGN", "loc": [ -88.278847, 40.107262 ], "pop": 37547, "state": "IL" }, { "_id": "61830", "city": "CISCO", "loc": [ -88.696153, 39.997164 ], "pop": 732, "state": "IL" }, { "_id": "61831", "city": "COLLISON", "loc": [ -87.798709, 40.220737 ], "pop": 421, "state": "IL" }, { "_id": "61832", "city": "DANVILLE", "loc": [ -87.621737, 40.136976 ], "pop": 49857, "state": "IL" }, { "_id": "61833", "city": "TILTON", "loc": [ -87.644048, 40.096406 ], "pop": 2945, "state": "IL" }, { "_id": "61839", "city": "DE LAND", "loc": [ -88.63919300000001, 40.110656 ], "pop": 848, "state": "IL" }, { "_id": "61840", "city": "DEWEY", "loc": [ -88.276966, 40.313055 ], "pop": 548, "state": "IL" }, { "_id": "61841", "city": "FAIRMOUNT", "loc": [ -87.836456, 40.037329 ], "pop": 1317, "state": "IL" }, { "_id": "61842", "city": "FARMER CITY", "loc": [ -88.66338500000001, 40.244689 ], "pop": 2889, "state": "IL" }, { "_id": "61843", "city": "FISHER", "loc": [ -88.355991, 40.299126 ], "pop": 2823, "state": "IL" }, { "_id": "61844", "city": "FITHIAN", "loc": [ -87.879713, 40.11924 ], "pop": 673, "state": "IL" }, { "_id": "61845", "city": "FOOSLAND", "loc": [ -88.420177, 40.35537 ], "pop": 319, "state": "IL" }, { "_id": "61846", "city": "GEORGETOWN", "loc": [ -87.63648000000001, 39.97922 ], "pop": 4534, "state": "IL" }, { "_id": "61847", "city": "GIFFORD", "loc": [ -88.031705, 40.302755 ], "pop": 1459, "state": "IL" }, { "_id": "61849", "city": "HOMER", "loc": [ -87.96274200000001, 40.034619 ], "pop": 1624, "state": "IL" }, { "_id": "61850", "city": "INDIANOLA", "loc": [ -87.73882, 39.926819 ], "pop": 715, "state": "IL" }, { "_id": "61851", "city": "IVESDALE", "loc": [ -88.44509499999999, 39.950233 ], "pop": 596, "state": "IL" }, { "_id": "61852", "city": "LONGVIEW", "loc": [ -88.075282, 39.901241 ], "pop": 555, "state": "IL" }, { "_id": "61853", "city": "MAHOMET", "loc": [ -88.39283, 40.196437 ], "pop": 8734, "state": "IL" }, { "_id": "61854", "city": "MANSFIELD", "loc": [ -88.517895, 40.214697 ], "pop": 1407, "state": "IL" }, { "_id": "61855", "city": "MILMINE", "loc": [ -88.648696, 39.900702 ], "pop": 148, "state": "IL" }, { "_id": "61856", "city": "MONTICELLO", "loc": [ -88.568555, 40.02632 ], "pop": 5339, "state": "IL" }, { "_id": "61858", "city": "OAKWOOD", "loc": [ -87.7825, 40.116656 ], "pop": 2852, "state": "IL" }, { "_id": "61859", "city": "OGDEN", "loc": [ -87.966499, 40.140117 ], "pop": 1397, "state": "IL" }, { "_id": "61862", "city": "PENFIELD", "loc": [ -87.95702, 40.310137 ], "pop": 601, "state": "IL" }, { "_id": "61863", "city": "PESOTUM", "loc": [ -88.274331, 39.9151 ], "pop": 774, "state": "IL" }, { "_id": "61864", "city": "PHILO", "loc": [ -88.15950599999999, 40.005156 ], "pop": 1377, "state": "IL" }, { "_id": "61865", "city": "POTOMAC", "loc": [ -87.82319200000001, 40.309 ], "pop": 1544, "state": "IL" }, { "_id": "61866", "city": "RANTOUL", "loc": [ -88.146179, 40.310742 ], "pop": 11146, "state": "IL" }, { "_id": "61868", "city": "RANTOUL", "loc": [ -88.149884, 40.295886 ], "pop": 7185, "state": "IL" }, { "_id": "61870", "city": "RIDGE FARM", "loc": [ -87.634578, 39.915455 ], "pop": 2094, "state": "IL" }, { "_id": "61872", "city": "SADORUS", "loc": [ -88.344717, 39.961312 ], "pop": 1022, "state": "IL" }, { "_id": "61873", "city": "SAINT JOSEPH", "loc": [ -88.04723199999999, 40.120736 ], "pop": 4168, "state": "IL" }, { "_id": "61874", "city": "SAVOY", "loc": [ -88.252837, 40.065373 ], "pop": 2972, "state": "IL" }, { "_id": "61875", "city": "SEYMOUR", "loc": [ -88.394431, 40.103471 ], "pop": 1135, "state": "IL" }, { "_id": "61876", "city": "SIDELL", "loc": [ -87.82480200000001, 39.911018 ], "pop": 703, "state": "IL" }, { "_id": "61877", "city": "SIDNEY", "loc": [ -88.069029, 40.023206 ], "pop": 1521, "state": "IL" }, { "_id": "61878", "city": "THOMASBORO", "loc": [ -88.18303299999999, 40.240206 ], "pop": 1638, "state": "IL" }, { "_id": "61880", "city": "TOLONO", "loc": [ -88.259641, 39.985006 ], "pop": 2837, "state": "IL" }, { "_id": "61882", "city": "WELDON", "loc": [ -88.753055, 40.117741 ], "pop": 579, "state": "IL" }, { "_id": "61883", "city": "WESTVILLE", "loc": [ -87.635952, 40.045113 ], "pop": 4398, "state": "IL" }, { "_id": "61884", "city": "WHITE HEATH", "loc": [ -88.51929699999999, 40.100911 ], "pop": 1481, "state": "IL" }, { "_id": "61910", "city": "ARCOLA", "loc": [ -88.303679, 39.687001 ], "pop": 3132, "state": "IL" }, { "_id": "61911", "city": "ARTHUR", "loc": [ -88.45550900000001, 39.707679 ], "pop": 4951, "state": "IL" }, { "_id": "61912", "city": "ASHMORE", "loc": [ -88.034097, 39.525428 ], "pop": 1467, "state": "IL" }, { "_id": "61913", "city": "ATWOOD", "loc": [ -88.44944599999999, 39.804368 ], "pop": 2455, "state": "IL" }, { "_id": "61914", "city": "BETHANY", "loc": [ -88.754301, 39.634754 ], "pop": 1983, "state": "IL" }, { "_id": "61917", "city": "BROCTON", "loc": [ -87.926258, 39.692311 ], "pop": 748, "state": "IL" }, { "_id": "61919", "city": "CAMARGO", "loc": [ -88.146815, 39.799955 ], "pop": 1015, "state": "IL" }, { "_id": "61920", "city": "CHARLESTON", "loc": [ -88.176115, 39.486933 ], "pop": 22767, "state": "IL" }, { "_id": "61924", "city": "CHRISMAN", "loc": [ -87.655552, 39.799572 ], "pop": 2269, "state": "IL" }, { "_id": "61925", "city": "DALTON CITY", "loc": [ -88.797459, 39.711943 ], "pop": 715, "state": "IL" }, { "_id": "61928", "city": "GAYS", "loc": [ -88.524153, 39.479553 ], "pop": 678, "state": "IL" }, { "_id": "61929", "city": "HAMMOND", "loc": [ -88.57930500000001, 39.79465 ], "pop": 797, "state": "IL" }, { "_id": "61930", "city": "HINDSBORO", "loc": [ -88.148611, 39.701799 ], "pop": 811, "state": "IL" }, { "_id": "61931", "city": "HUMBOLDT", "loc": [ -88.314089, 39.60118 ], "pop": 856, "state": "IL" }, { "_id": "61932", "city": "HUME", "loc": [ -87.87465899999999, 39.800882 ], "pop": 593, "state": "IL" }, { "_id": "61933", "city": "KANSAS", "loc": [ -87.935238, 39.552533 ], "pop": 1114, "state": "IL" }, { "_id": "61937", "city": "LOVINGTON", "loc": [ -88.64167500000001, 39.719192 ], "pop": 1995, "state": "IL" }, { "_id": "61938", "city": "MATTOON", "loc": [ -88.376152, 39.480184 ], "pop": 23012, "state": "IL" }, { "_id": "61940", "city": "METCALF", "loc": [ -87.795524, 39.800847 ], "pop": 554, "state": "IL" }, { "_id": "61942", "city": "NEWMAN", "loc": [ -88.000055, 39.784788 ], "pop": 1591, "state": "IL" }, { "_id": "61943", "city": "OAKLAND", "loc": [ -88.025325, 39.651618 ], "pop": 1447, "state": "IL" }, { "_id": "61944", "city": "PARIS", "loc": [ -87.697631, 39.613219 ], "pop": 12509, "state": "IL" }, { "_id": "61951", "city": "SULLIVAN", "loc": [ -88.603767, 39.593431 ], "pop": 6946, "state": "IL" }, { "_id": "61953", "city": "TUSCOLA", "loc": [ -88.28158500000001, 39.799509 ], "pop": 5056, "state": "IL" }, { "_id": "61956", "city": "VILLA GROVE", "loc": [ -88.161635, 39.868716 ], "pop": 3259, "state": "IL" }, { "_id": "61957", "city": "WINDSOR", "loc": [ -88.585747, 39.430198 ], "pop": 2019, "state": "IL" }, { "_id": "62001", "city": "ALHAMBRA", "loc": [ -89.744123, 38.882211 ], "pop": 1543, "state": "IL" }, { "_id": "62002", "city": "ALTON", "loc": [ -90.156806, 38.908651 ], "pop": 37541, "state": "IL" }, { "_id": "62006", "city": "BATCHTOWN", "loc": [ -90.659114, 39.072468 ], "pop": 579, "state": "IL" }, { "_id": "62009", "city": "BENLD", "loc": [ -89.803057, 39.093903 ], "pop": 1604, "state": "IL" }, { "_id": "62010", "city": "BETHALTO", "loc": [ -90.034447, 38.907353 ], "pop": 10587, "state": "IL" }, { "_id": "62011", "city": "BINGHAM", "loc": [ -89.195789, 39.14667 ], "pop": 565, "state": "IL" }, { "_id": "62012", "city": "BRIGHTON", "loc": [ -90.144312, 39.036098 ], "pop": 6467, "state": "IL" }, { "_id": "62013", "city": "MEPPEN", "loc": [ -90.59069599999999, 38.937115 ], "pop": 814, "state": "IL" }, { "_id": "62014", "city": "BUNKER HILL", "loc": [ -89.962379, 39.040827 ], "pop": 3052, "state": "IL" }, { "_id": "62015", "city": "BUTLER", "loc": [ -89.530535, 39.211419 ], "pop": 570, "state": "IL" }, { "_id": "62016", "city": "CARROLLTON", "loc": [ -90.409211, 39.300937 ], "pop": 3079, "state": "IL" }, { "_id": "62017", "city": "COFFEEN", "loc": [ -89.39454000000001, 39.090757 ], "pop": 1207, "state": "IL" }, { "_id": "62018", "city": "COTTAGE HILLS", "loc": [ -90.082632, 38.912377 ], "pop": 4437, "state": "IL" }, { "_id": "62019", "city": "DONNELLSON", "loc": [ -89.490858, 39.034422 ], "pop": 1010, "state": "IL" }, { "_id": "62021", "city": "DORSEY", "loc": [ -89.978635, 38.983237 ], "pop": 652, "state": "IL" }, { "_id": "62022", "city": "DOW", "loc": [ -90.301059, 39.031198 ], "pop": 1758, "state": "IL" }, { "_id": "62024", "city": "EAST ALTON", "loc": [ -90.083045, 38.88031 ], "pop": 13839, "state": "IL" }, { "_id": "62025", "city": "EDWARDSVILLE", "loc": [ -89.963697, 38.804967 ], "pop": 19241, "state": "IL" }, { "_id": "62027", "city": "ELDRED", "loc": [ -90.53287400000001, 39.283592 ], "pop": 907, "state": "IL" }, { "_id": "62028", "city": "ELSAH", "loc": [ -90.331913, 38.961297 ], "pop": 2553, "state": "IL" }, { "_id": "62030", "city": "FIDELITY", "loc": [ -90.198803, 39.132286 ], "pop": 655, "state": "IL" }, { "_id": "62031", "city": "FIELDON", "loc": [ -90.529742, 39.108608 ], "pop": 1382, "state": "IL" }, { "_id": "62032", "city": "FILLMORE", "loc": [ -89.294551, 39.103872 ], "pop": 977, "state": "IL" }, { "_id": "62033", "city": "DORCHESTER", "loc": [ -89.818577, 39.136106 ], "pop": 6518, "state": "IL" }, { "_id": "62034", "city": "GLEN CARBON", "loc": [ -89.970583, 38.760871 ], "pop": 9729, "state": "IL" }, { "_id": "62035", "city": "GODFREY", "loc": [ -90.206024, 38.946035 ], "pop": 13959, "state": "IL" }, { "_id": "62036", "city": "GOLDEN EAGLE", "loc": [ -90.560199, 38.896138 ], "pop": 266, "state": "IL" }, { "_id": "62037", "city": "GRAFTON", "loc": [ -90.43233499999999, 39.002134 ], "pop": 2036, "state": "IL" }, { "_id": "62040", "city": "MITCHELL", "loc": [ -90.11582199999999, 38.721572 ], "pop": 48697, "state": "IL" }, { "_id": "62044", "city": "GREENFIELD", "loc": [ -90.208851, 39.349058 ], "pop": 1718, "state": "IL" }, { "_id": "62045", "city": "HAMBURG", "loc": [ -90.699546, 39.223488 ], "pop": 383, "state": "IL" }, { "_id": "62046", "city": "HAMEL", "loc": [ -89.87267799999999, 38.878433 ], "pop": 1685, "state": "IL" }, { "_id": "62047", "city": "HARDIN", "loc": [ -90.624002, 39.154652 ], "pop": 1232, "state": "IL" }, { "_id": "62048", "city": "HARTFORD", "loc": [ -90.074533, 38.829852 ], "pop": 3763, "state": "IL" }, { "_id": "62049", "city": "HILLSBORO", "loc": [ -89.488146, 39.149412 ], "pop": 7916, "state": "IL" }, { "_id": "62050", "city": "HILLVIEW", "loc": [ -90.512837, 39.467373 ], "pop": 795, "state": "IL" }, { "_id": "62051", "city": "IRVING", "loc": [ -89.41043000000001, 39.208903 ], "pop": 909, "state": "IL" }, { "_id": "62052", "city": "JERSEYVILLE", "loc": [ -90.33375700000001, 39.121324 ], "pop": 9439, "state": "IL" }, { "_id": "62053", "city": "KAMPSVILLE", "loc": [ -90.62693400000001, 39.306388 ], "pop": 623, "state": "IL" }, { "_id": "62054", "city": "KANE", "loc": [ -90.37188, 39.203688 ], "pop": 1044, "state": "IL" }, { "_id": "62056", "city": "LITCHFIELD", "loc": [ -89.64991499999999, 39.179345 ], "pop": 9172, "state": "IL" }, { "_id": "62060", "city": "MADISON", "loc": [ -90.15658500000001, 38.68109 ], "pop": 7556, "state": "IL" }, { "_id": "62061", "city": "MARINE", "loc": [ -89.821376, 38.785458 ], "pop": 2020, "state": "IL" }, { "_id": "62063", "city": "MEDORA", "loc": [ -90.154225, 39.198593 ], "pop": 531, "state": "IL" }, { "_id": "62065", "city": "MICHAEL", "loc": [ -90.633498, 39.21821 ], "pop": 343, "state": "IL" }, { "_id": "62067", "city": "MORO", "loc": [ -89.961771, 38.931769 ], "pop": 2775, "state": "IL" }, { "_id": "62069", "city": "MOUNT OLIVE", "loc": [ -89.74484200000001, 39.070504 ], "pop": 3443, "state": "IL" }, { "_id": "62070", "city": "MOZIER", "loc": [ -90.714978, 39.287719 ], "pop": 241, "state": "IL" }, { "_id": "62074", "city": "NEW DOUGLAS", "loc": [ -89.73923499999999, 38.967633 ], "pop": 2464, "state": "IL" }, { "_id": "62075", "city": "NOKOMIS", "loc": [ -89.285297, 39.303642 ], "pop": 4576, "state": "IL" }, { "_id": "62079", "city": "PIASA", "loc": [ -90.131147, 39.151697 ], "pop": 863, "state": "IL" }, { "_id": "62080", "city": "RAMSEY", "loc": [ -89.105147, 39.078123 ], "pop": 4166, "state": "IL" }, { "_id": "62081", "city": "ROCKBRIDGE", "loc": [ -90.255818, 39.283146 ], "pop": 718, "state": "IL" }, { "_id": "62082", "city": "ROODHOUSE", "loc": [ -90.34981399999999, 39.484646 ], "pop": 3020, "state": "IL" }, { "_id": "62083", "city": "ROSAMOND", "loc": [ -89.1846, 39.389229 ], "pop": 443, "state": "IL" }, { "_id": "62084", "city": "ROXANA", "loc": [ -90.07978, 38.848154 ], "pop": 1513, "state": "IL" }, { "_id": "62086", "city": "SORENTO", "loc": [ -89.565347, 38.969342 ], "pop": 2127, "state": "IL" }, { "_id": "62088", "city": "STAUNTON", "loc": [ -89.785697, 39.01348 ], "pop": 5482, "state": "IL" }, { "_id": "62090", "city": "VENICE", "loc": [ -90.16892799999999, 38.67063 ], "pop": 1559, "state": "IL" }, { "_id": "62091", "city": "WALSHVILLE", "loc": [ -89.634968, 39.047257 ], "pop": 359, "state": "IL" }, { "_id": "62092", "city": "WHITE HALL", "loc": [ -90.401899, 39.428804 ], "pop": 3882, "state": "IL" }, { "_id": "62094", "city": "WITT", "loc": [ -89.341426, 39.246919 ], "pop": 1251, "state": "IL" }, { "_id": "62095", "city": "WOOD RIVER", "loc": [ -90.087507, 38.864279 ], "pop": 10817, "state": "IL" }, { "_id": "62097", "city": "WORDEN", "loc": [ -89.85321399999999, 38.944895 ], "pop": 1818, "state": "IL" }, { "_id": "62201", "city": "SAUGET", "loc": [ -90.13806599999999, 38.631538 ], "pop": 11213, "state": "IL" }, { "_id": "62203", "city": "EAST SAINT LOUIS", "loc": [ -90.074449, 38.599191 ], "pop": 12435, "state": "IL" }, { "_id": "62204", "city": "WASHINGTON PARK", "loc": [ -90.102008, 38.631335 ], "pop": 14425, "state": "IL" }, { "_id": "62205", "city": "EAST SAINT LOUIS", "loc": [ -90.12750200000001, 38.614947 ], "pop": 14488, "state": "IL" }, { "_id": "62206", "city": "CAHOKIA", "loc": [ -90.16587, 38.561899 ], "pop": 20356, "state": "IL" }, { "_id": "62207", "city": "ALORTON", "loc": [ -90.12829000000001, 38.58734 ], "pop": 11681, "state": "IL" }, { "_id": "62208", "city": "FAIRVIEW HEIGHTS", "loc": [ -90.007093, 38.596044 ], "pop": 10882, "state": "IL" }, { "_id": "62214", "city": "VENEDY", "loc": [ -89.52273, 38.360422 ], "pop": 539, "state": "IL" }, { "_id": "62215", "city": "ALBERS", "loc": [ -89.62015100000001, 38.531955 ], "pop": 1641, "state": "IL" }, { "_id": "62217", "city": "BALDWIN", "loc": [ -89.841391, 38.175351 ], "pop": 1093, "state": "IL" }, { "_id": "62218", "city": "BARTELSO", "loc": [ -89.457841, 38.53851 ], "pop": 1270, "state": "IL" }, { "_id": "62220", "city": "BELLEVILLE", "loc": [ -89.98469299999999, 38.512677 ], "pop": 23454, "state": "IL" }, { "_id": "62221", "city": "BELLEVILLE", "loc": [ -89.958302, 38.539639 ], "pop": 29321, "state": "IL" }, { "_id": "62223", "city": "BELLEVILLE", "loc": [ -90.037775, 38.545581 ], "pop": 34650, "state": "IL" }, { "_id": "62225", "city": "SCOTT A F B", "loc": [ -89.85877499999999, 38.54692 ], "pop": 7391, "state": "IL" }, { "_id": "62230", "city": "BREESE", "loc": [ -89.52838, 38.618802 ], "pop": 4882, "state": "IL" }, { "_id": "62231", "city": "CARLYLE", "loc": [ -89.380544, 38.606609 ], "pop": 6529, "state": "IL" }, { "_id": "62232", "city": "CASEYVILLE", "loc": [ -90.013486, 38.634458 ], "pop": 7601, "state": "IL" }, { "_id": "62233", "city": "CHESTER", "loc": [ -89.82180700000001, 37.918822 ], "pop": 9436, "state": "IL" }, { "_id": "62234", "city": "COLLINSVILLE", "loc": [ -89.98529000000001, 38.683545 ], "pop": 33686, "state": "IL" }, { "_id": "62236", "city": "COLUMBIA", "loc": [ -90.20271700000001, 38.432469 ], "pop": 8489, "state": "IL" }, { "_id": "62237", "city": "SWANWICK", "loc": [ -89.582064, 38.176401 ], "pop": 2359, "state": "IL" }, { "_id": "62238", "city": "CUTLER", "loc": [ -89.56612699999999, 38.042663 ], "pop": 787, "state": "IL" }, { "_id": "62239", "city": "DUPO", "loc": [ -90.194188, 38.514771 ], "pop": 5663, "state": "IL" }, { "_id": "62240", "city": "EAST CARONDELET", "loc": [ -90.220782, 38.534912 ], "pop": 1579, "state": "IL" }, { "_id": "62241", "city": "ELLIS GROVE", "loc": [ -89.900847, 38.005358 ], "pop": 999, "state": "IL" }, { "_id": "62242", "city": "EVANSVILLE", "loc": [ -89.917028, 38.09258 ], "pop": 1540, "state": "IL" }, { "_id": "62243", "city": "FREEBURG", "loc": [ -89.91806, 38.408016 ], "pop": 5837, "state": "IL" }, { "_id": "62244", "city": "FULTS", "loc": [ -90.19735300000001, 38.179736 ], "pop": 635, "state": "IL" }, { "_id": "62245", "city": "GERMANTOWN", "loc": [ -89.54134000000001, 38.548677 ], "pop": 1773, "state": "IL" }, { "_id": "62246", "city": "GREENVILLE", "loc": [ -89.405185, 38.893338 ], "pop": 7623, "state": "IL" }, { "_id": "62248", "city": "HECKER", "loc": [ -89.983115, 38.281039 ], "pop": 1454, "state": "IL" }, { "_id": "62249", "city": "HIGHLAND", "loc": [ -89.678894, 38.763086 ], "pop": 6772, "state": "IL" }, { "_id": "62253", "city": "KEYESPORT", "loc": [ -89.30632300000001, 38.738773 ], "pop": 1464, "state": "IL" }, { "_id": "62254", "city": "LEBANON", "loc": [ -89.79921299999999, 38.60528 ], "pop": 4950, "state": "IL" }, { "_id": "62255", "city": "LENZBURG", "loc": [ -89.792202, 38.295003 ], "pop": 1316, "state": "IL" }, { "_id": "62256", "city": "MAEYSTOWN", "loc": [ -90.20178, 38.24112 ], "pop": 592, "state": "IL" }, { "_id": "62257", "city": "MARISSA", "loc": [ -89.750119, 38.245455 ], "pop": 2634, "state": "IL" }, { "_id": "62258", "city": "MASCOUTAH", "loc": [ -89.787745, 38.474496 ], "pop": 8151, "state": "IL" }, { "_id": "62260", "city": "MILLSTADT", "loc": [ -90.088818, 38.444264 ], "pop": 4979, "state": "IL" }, { "_id": "62261", "city": "MODOC", "loc": [ -90.016261, 38.050683 ], "pop": 381, "state": "IL" }, { "_id": "62262", "city": "MULBERRY GROVE", "loc": [ -89.246297, 38.931082 ], "pop": 1721, "state": "IL" }, { "_id": "62263", "city": "NASHVILLE", "loc": [ -89.384058, 38.335208 ], "pop": 4546, "state": "IL" }, { "_id": "62264", "city": "NEW ATHENS", "loc": [ -89.872777, 38.315998 ], "pop": 2488, "state": "IL" }, { "_id": "62265", "city": "NEW BADEN", "loc": [ -89.692232, 38.531485 ], "pop": 3455, "state": "IL" }, { "_id": "62268", "city": "OAKDALE", "loc": [ -89.596046, 38.257285 ], "pop": 1348, "state": "IL" }, { "_id": "62269", "city": "SHILOH", "loc": [ -89.9093, 38.59052 ], "pop": 21198, "state": "IL" }, { "_id": "62271", "city": "OKAWVILLE", "loc": [ -89.523045, 38.431862 ], "pop": 2187, "state": "IL" }, { "_id": "62272", "city": "PERCY", "loc": [ -89.616961, 38.01261 ], "pop": 1241, "state": "IL" }, { "_id": "62274", "city": "PINCKNEYVILLE", "loc": [ -89.38578, 38.090327 ], "pop": 7013, "state": "IL" }, { "_id": "62275", "city": "POCAHONTAS", "loc": [ -89.52468399999999, 38.78456 ], "pop": 3279, "state": "IL" }, { "_id": "62277", "city": "PRAIRIE DU ROCHE", "loc": [ -90.090147, 38.085468 ], "pop": 1017, "state": "IL" }, { "_id": "62278", "city": "RED BUD", "loc": [ -89.988356, 38.190738 ], "pop": 4923, "state": "IL" }, { "_id": "62279", "city": "RENAULT", "loc": [ -90.095043, 38.170396 ], "pop": 929, "state": "IL" }, { "_id": "62280", "city": "ROCKWOOD", "loc": [ -89.62144499999999, 37.832201 ], "pop": 770, "state": "IL" }, { "_id": "62281", "city": "SAINT JACOB", "loc": [ -89.669616, 38.72448 ], "pop": 5477, "state": "IL" }, { "_id": "62283", "city": "SHATTUC", "loc": [ -89.20543600000001, 38.643533 ], "pop": 1079, "state": "IL" }, { "_id": "62284", "city": "SMITHBORO", "loc": [ -89.326556, 38.873893 ], "pop": 771, "state": "IL" }, { "_id": "62285", "city": "SMITHTON", "loc": [ -89.989604, 38.423137 ], "pop": 2749, "state": "IL" }, { "_id": "62286", "city": "SPARTA", "loc": [ -89.703458, 38.131815 ], "pop": 8035, "state": "IL" }, { "_id": "62288", "city": "STEELEVILLE", "loc": [ -89.66645800000001, 38.005713 ], "pop": 2951, "state": "IL" }, { "_id": "62293", "city": "TRENTON", "loc": [ -89.644696, 38.619102 ], "pop": 5574, "state": "IL" }, { "_id": "62294", "city": "TROY", "loc": [ -89.870848, 38.724275 ], "pop": 10526, "state": "IL" }, { "_id": "62295", "city": "VALMEYER", "loc": [ -90.309234, 38.295163 ], "pop": 1841, "state": "IL" }, { "_id": "62297", "city": "WALSH", "loc": [ -89.82965799999999, 38.020286 ], "pop": 801, "state": "IL" }, { "_id": "62298", "city": "WATERLOO", "loc": [ -90.147773, 38.322273 ], "pop": 8482, "state": "IL" }, { "_id": "62301", "city": "QUINCY", "loc": [ -91.376284, 39.930701 ], "pop": 52014, "state": "IL" }, { "_id": "62311", "city": "AUGUSTA", "loc": [ -90.955416, 40.234109 ], "pop": 867, "state": "IL" }, { "_id": "62312", "city": "BARRY", "loc": [ -91.026482, 39.704662 ], "pop": 2697, "state": "IL" }, { "_id": "62313", "city": "BASCO", "loc": [ -91.196983, 40.328303 ], "pop": 399, "state": "IL" }, { "_id": "62314", "city": "BAYLIS", "loc": [ -90.883216, 39.761201 ], "pop": 628, "state": "IL" }, { "_id": "62316", "city": "BOWEN", "loc": [ -91.070491, 40.234076 ], "pop": 693, "state": "IL" }, { "_id": "62318", "city": "BURNSIDE", "loc": [ -91.142392, 40.497445 ], "pop": 770, "state": "IL" }, { "_id": "62319", "city": "CAMDEN", "loc": [ -90.75443300000001, 40.151076 ], "pop": 317, "state": "IL" }, { "_id": "62320", "city": "CAMP POINT", "loc": [ -91.076926, 40.029285 ], "pop": 2113, "state": "IL" }, { "_id": "62321", "city": "CARTHAGE", "loc": [ -91.100522, 40.412937 ], "pop": 4171, "state": "IL" }, { "_id": "62323", "city": "CHAMBERSBURG", "loc": [ -90.663017, 39.807058 ], "pop": 203, "state": "IL" }, { "_id": "62324", "city": "CLAYTON", "loc": [ -90.955394, 40.013342 ], "pop": 1354, "state": "IL" }, { "_id": "62325", "city": "COATSBURG", "loc": [ -91.174733, 40.055385 ], "pop": 446, "state": "IL" }, { "_id": "62326", "city": "COLCHESTER", "loc": [ -90.78456, 40.415643 ], "pop": 2470, "state": "IL" }, { "_id": "62330", "city": "PONTOOSUC", "loc": [ -91.163454, 40.620062 ], "pop": 2146, "state": "IL" }, { "_id": "62332", "city": "DETROIT", "loc": [ -90.65449, 39.618307 ], "pop": 353, "state": "IL" }, { "_id": "62334", "city": "ELVASTON", "loc": [ -91.21642, 40.40662 ], "pop": 449, "state": "IL" }, { "_id": "62338", "city": "FOWLER", "loc": [ -91.245226, 39.992504 ], "pop": 508, "state": "IL" }, { "_id": "62339", "city": "GOLDEN", "loc": [ -91.029588, 40.120257 ], "pop": 938, "state": "IL" }, { "_id": "62340", "city": "GRIGGSVILLE", "loc": [ -90.724891, 39.708378 ], "pop": 1611, "state": "IL" }, { "_id": "62341", "city": "HAMILTON", "loc": [ -91.344042, 40.439213 ], "pop": 5574, "state": "IL" }, { "_id": "62343", "city": "HULL", "loc": [ -91.233844, 39.718562 ], "pop": 892, "state": "IL" }, { "_id": "62344", "city": "HUNTSVILLE", "loc": [ -90.85313600000001, 40.154396 ], "pop": 189, "state": "IL" }, { "_id": "62345", "city": "KINDERHOOK", "loc": [ -91.16372800000001, 39.695313 ], "pop": 427, "state": "IL" }, { "_id": "62346", "city": "LA PRAIRIE", "loc": [ -90.984387, 40.157191 ], "pop": 218, "state": "IL" }, { "_id": "62347", "city": "LIBERTY", "loc": [ -91.08687999999999, 39.889176 ], "pop": 1331, "state": "IL" }, { "_id": "62348", "city": "LIMA", "loc": [ -91.38675600000001, 40.170098 ], "pop": 559, "state": "IL" }, { "_id": "62349", "city": "LORAINE", "loc": [ -91.21301, 40.153197 ], "pop": 634, "state": "IL" }, { "_id": "62351", "city": "MENDON", "loc": [ -91.289923, 40.085658 ], "pop": 1462, "state": "IL" }, { "_id": "62352", "city": "MILTON", "loc": [ -90.644346, 39.550811 ], "pop": 548, "state": "IL" }, { "_id": "62353", "city": "MOUNT STERLING", "loc": [ -90.74142399999999, 39.980279 ], "pop": 4058, "state": "IL" }, { "_id": "62355", "city": "NEBO", "loc": [ -90.7692, 39.420181 ], "pop": 1011, "state": "IL" }, { "_id": "62356", "city": "NEW CANTON", "loc": [ -91.088556, 39.634242 ], "pop": 658, "state": "IL" }, { "_id": "62357", "city": "NEW SALEM", "loc": [ -90.843986, 39.699573 ], "pop": 292, "state": "IL" }, { "_id": "62358", "city": "NIOTA", "loc": [ -91.299136, 40.597753 ], "pop": 672, "state": "IL" }, { "_id": "62359", "city": "PALOMA", "loc": [ -91.205287, 40.036616 ], "pop": 254, "state": "IL" }, { "_id": "62360", "city": "PAYSON", "loc": [ -91.262676, 39.815253 ], "pop": 1939, "state": "IL" }, { "_id": "62361", "city": "PEARL", "loc": [ -90.63795399999999, 39.444072 ], "pop": 415, "state": "IL" }, { "_id": "62362", "city": "PERRY", "loc": [ -90.746105, 39.787042 ], "pop": 703, "state": "IL" }, { "_id": "62363", "city": "PITTSFIELD", "loc": [ -90.80726900000001, 39.601306 ], "pop": 5678, "state": "IL" }, { "_id": "62365", "city": "PLAINVILLE", "loc": [ -91.143598, 39.800448 ], "pop": 986, "state": "IL" }, { "_id": "62366", "city": "PLEASANT HILL", "loc": [ -90.877011, 39.446697 ], "pop": 1521, "state": "IL" }, { "_id": "62367", "city": "COLMAR", "loc": [ -90.87381499999999, 40.288493 ], "pop": 1425, "state": "IL" }, { "_id": "62370", "city": "ROCKPORT", "loc": [ -90.972178, 39.532846 ], "pop": 641, "state": "IL" }, { "_id": "62373", "city": "SUTTER", "loc": [ -91.37609399999999, 40.309683 ], "pop": 747, "state": "IL" }, { "_id": "62374", "city": "TENNESSEE", "loc": [ -90.855605, 40.41399 ], "pop": 414, "state": "IL" }, { "_id": "62375", "city": "TIMEWELL", "loc": [ -90.866067, 40.011658 ], "pop": 539, "state": "IL" }, { "_id": "62376", "city": "URSA", "loc": [ -91.373341, 40.080918 ], "pop": 1074, "state": "IL" }, { "_id": "62378", "city": "VERSAILLES", "loc": [ -90.674147, 39.888286 ], "pop": 1136, "state": "IL" }, { "_id": "62379", "city": "WARSAW", "loc": [ -91.434803, 40.354449 ], "pop": 1882, "state": "IL" }, { "_id": "62380", "city": "WEST POINT", "loc": [ -91.249568, 40.245184 ], "pop": 874, "state": "IL" }, { "_id": "62401", "city": "EFFINGHAM", "loc": [ -88.561105, 39.121727 ], "pop": 15524, "state": "IL" }, { "_id": "62410", "city": "ALLENDALE", "loc": [ -87.721901, 38.523236 ], "pop": 1051, "state": "IL" }, { "_id": "62411", "city": "ALTAMONT", "loc": [ -88.748092, 39.063449 ], "pop": 3867, "state": "IL" }, { "_id": "62413", "city": "ANNAPOLIS", "loc": [ -87.802875, 39.117857 ], "pop": 692, "state": "IL" }, { "_id": "62414", "city": "BEECHER CITY", "loc": [ -88.80385, 39.183515 ], "pop": 1968, "state": "IL" }, { "_id": "62415", "city": "BIRDS", "loc": [ -87.681545, 38.812059 ], "pop": 842, "state": "IL" }, { "_id": "62417", "city": "BRIDGEPORT", "loc": [ -87.85492600000001, 38.694506 ], "pop": 2076, "state": "IL" }, { "_id": "62418", "city": "BROWNSTOWN", "loc": [ -88.949438, 38.989118 ], "pop": 2434, "state": "IL" }, { "_id": "62419", "city": "CALHOUN", "loc": [ -88.003745, 38.635116 ], "pop": 715, "state": "IL" }, { "_id": "62420", "city": "CASEY", "loc": [ -87.99130599999999, 39.301716 ], "pop": 5300, "state": "IL" }, { "_id": "62421", "city": "CLAREMONT", "loc": [ -87.972685, 38.742904 ], "pop": 1320, "state": "IL" }, { "_id": "62422", "city": "COWDEN", "loc": [ -88.886799, 39.232643 ], "pop": 1521, "state": "IL" }, { "_id": "62423", "city": "DENNISON", "loc": [ -87.58671, 39.449033 ], "pop": 753, "state": "IL" }, { "_id": "62424", "city": "DIETERICH", "loc": [ -88.407448, 39.031875 ], "pop": 1639, "state": "IL" }, { "_id": "62425", "city": "DUNDAS", "loc": [ -88.097309, 38.830572 ], "pop": 437, "state": "IL" }, { "_id": "62426", "city": "LACLEDE", "loc": [ -88.66386799999999, 38.91318 ], "pop": 772, "state": "IL" }, { "_id": "62427", "city": "FLAT ROCK", "loc": [ -87.683747, 38.909606 ], "pop": 2173, "state": "IL" }, { "_id": "62428", "city": "HAZEL DELL", "loc": [ -88.144502, 39.239454 ], "pop": 2914, "state": "IL" }, { "_id": "62431", "city": "HERRICK", "loc": [ -88.981211, 39.224481 ], "pop": 628, "state": "IL" }, { "_id": "62432", "city": "HIDALGO", "loc": [ -88.139706, 39.122808 ], "pop": 820, "state": "IL" }, { "_id": "62433", "city": "HUTSONVILLE", "loc": [ -87.669455, 39.106357 ], "pop": 1039, "state": "IL" }, { "_id": "62434", "city": "INGRAHAM", "loc": [ -88.320374, 38.828446 ], "pop": 1077, "state": "IL" }, { "_id": "62436", "city": "JEWETT", "loc": [ -88.24744, 39.207596 ], "pop": 402, "state": "IL" }, { "_id": "62438", "city": "LAKEWOOD", "loc": [ -88.87147400000001, 39.313358 ], "pop": 415, "state": "IL" }, { "_id": "62439", "city": "LAWRENCEVILLE", "loc": [ -87.678397, 38.730862 ], "pop": 7833, "state": "IL" }, { "_id": "62440", "city": "LERNA", "loc": [ -88.25302600000001, 39.39579 ], "pop": 1289, "state": "IL" }, { "_id": "62441", "city": "MARSHALL", "loc": [ -87.692261, 39.421999 ], "pop": 8305, "state": "IL" }, { "_id": "62442", "city": "MARTINSVILLE", "loc": [ -87.87073700000001, 39.317443 ], "pop": 1881, "state": "IL" }, { "_id": "62443", "city": "MASON", "loc": [ -88.623396, 38.964453 ], "pop": 1774, "state": "IL" }, { "_id": "62445", "city": "MONTROSE", "loc": [ -88.33497, 39.157274 ], "pop": 1611, "state": "IL" }, { "_id": "62446", "city": "MOUNT ERIE", "loc": [ -88.218521, 38.522151 ], "pop": 470, "state": "IL" }, { "_id": "62447", "city": "NEOGA", "loc": [ -88.450288, 39.322024 ], "pop": 3494, "state": "IL" }, { "_id": "62448", "city": "NEWTON", "loc": [ -88.17038599999999, 38.984678 ], "pop": 5296, "state": "IL" }, { "_id": "62449", "city": "OBLONG", "loc": [ -87.895016, 39.001043 ], "pop": 3508, "state": "IL" }, { "_id": "62450", "city": "OLNEY", "loc": [ -88.08093599999999, 38.733389 ], "pop": 11163, "state": "IL" }, { "_id": "62451", "city": "PALESTINE", "loc": [ -87.615695, 39.002823 ], "pop": 2413, "state": "IL" }, { "_id": "62452", "city": "PARKERSBURG", "loc": [ -88.064722, 38.589998 ], "pop": 485, "state": "IL" }, { "_id": "62454", "city": "ROBINSON", "loc": [ -87.748352, 39.007034 ], "pop": 9243, "state": "IL" }, { "_id": "62458", "city": "SAINT ELMO", "loc": [ -88.855181, 39.031544 ], "pop": 2091, "state": "IL" }, { "_id": "62460", "city": "SAINT FRANCISVIL", "loc": [ -87.67362799999999, 38.612494 ], "pop": 1806, "state": "IL" }, { "_id": "62461", "city": "SHUMWAY", "loc": [ -88.64182599999999, 39.188138 ], "pop": 539, "state": "IL" }, { "_id": "62462", "city": "SIGEL", "loc": [ -88.480301, 39.21762 ], "pop": 2239, "state": "IL" }, { "_id": "62463", "city": "STEWARDSON", "loc": [ -88.63185300000001, 39.27199 ], "pop": 1219, "state": "IL" }, { "_id": "62465", "city": "STRASBURG", "loc": [ -88.62786199999999, 39.364111 ], "pop": 758, "state": "IL" }, { "_id": "62466", "city": "SUMNER", "loc": [ -87.780728, 38.734077 ], "pop": 3517, "state": "IL" }, { "_id": "62467", "city": "TEUTOPOLIS", "loc": [ -88.476741, 39.131978 ], "pop": 3095, "state": "IL" }, { "_id": "62468", "city": "TOLEDO", "loc": [ -88.246821, 39.277223 ], "pop": 2046, "state": "IL" }, { "_id": "62469", "city": "TRILLA", "loc": [ -88.345698, 39.385286 ], "pop": 499, "state": "IL" }, { "_id": "62471", "city": "VANDALIA", "loc": [ -89.104116, 38.94391 ], "pop": 7894, "state": "IL" }, { "_id": "62473", "city": "WATSON", "loc": [ -88.559876, 39.039488 ], "pop": 2740, "state": "IL" }, { "_id": "62474", "city": "WESTFIELD", "loc": [ -88.044799, 39.442369 ], "pop": 1602, "state": "IL" }, { "_id": "62475", "city": "WEST LIBERTY", "loc": [ -88.09792899999999, 38.894989 ], "pop": 593, "state": "IL" }, { "_id": "62476", "city": "WEST SALEM", "loc": [ -88.032297, 38.518267 ], "pop": 1994, "state": "IL" }, { "_id": "62477", "city": "WEST UNION", "loc": [ -87.65121499999999, 39.240185 ], "pop": 993, "state": "IL" }, { "_id": "62478", "city": "WEST YORK", "loc": [ -87.71307299999999, 39.193793 ], "pop": 665, "state": "IL" }, { "_id": "62479", "city": "WHEELER", "loc": [ -88.317536, 39.018185 ], "pop": 809, "state": "IL" }, { "_id": "62480", "city": "WILLOW HILL", "loc": [ -88.017156, 38.975654 ], "pop": 1708, "state": "IL" }, { "_id": "62481", "city": "YALE", "loc": [ -88.01047, 39.129975 ], "pop": 410, "state": "IL" }, { "_id": "62501", "city": "NEWBURG", "loc": [ -88.821371, 39.991581 ], "pop": 1444, "state": "IL" }, { "_id": "62510", "city": "ASSUMPTION", "loc": [ -89.039807, 39.509489 ], "pop": 1949, "state": "IL" }, { "_id": "62511", "city": "ATWATER", "loc": [ -89.763374, 39.310733 ], "pop": 489, "state": "IL" }, { "_id": "62512", "city": "BEASON", "loc": [ -89.194801, 40.143652 ], "pop": 467, "state": "IL" }, { "_id": "62513", "city": "BLUE MOUND", "loc": [ -89.113558, 39.697813 ], "pop": 1488, "state": "IL" }, { "_id": "62514", "city": "BOODY", "loc": [ -89.07206100000001, 39.762824 ], "pop": 541, "state": "IL" }, { "_id": "62515", "city": "BUFFALO HART", "loc": [ -89.388846, 39.847201 ], "pop": 797, "state": "IL" }, { "_id": "62518", "city": "CHESTNUT", "loc": [ -89.19001400000001, 40.058202 ], "pop": 436, "state": "IL" }, { "_id": "62520", "city": "DAWSON", "loc": [ -89.460329, 39.85629 ], "pop": 558, "state": "IL" }, { "_id": "62521", "city": "DECATUR", "loc": [ -88.925984, 39.827137 ], "pop": 39666, "state": "IL" }, { "_id": "62522", "city": "DECATUR", "loc": [ -88.98613899999999, 39.843237 ], "pop": 19224, "state": "IL" }, { "_id": "62523", "city": "DECATUR", "loc": [ -88.953435, 39.841694 ], "pop": 864, "state": "IL" }, { "_id": "62526", "city": "BEARSDALE", "loc": [ -88.953515, 39.877413 ], "pop": 39674, "state": "IL" }, { "_id": "62530", "city": "CIMIC", "loc": [ -89.65465399999999, 39.567684 ], "pop": 1484, "state": "IL" }, { "_id": "62531", "city": "EDINBURG", "loc": [ -89.37788399999999, 39.661223 ], "pop": 1925, "state": "IL" }, { "_id": "62533", "city": "THOMASVILLE", "loc": [ -89.642718, 39.453048 ], "pop": 1047, "state": "IL" }, { "_id": "62534", "city": "BRUNSWICK", "loc": [ -88.756208, 39.503253 ], "pop": 1410, "state": "IL" }, { "_id": "62536", "city": "GLENARM", "loc": [ -89.65814399999999, 39.632713 ], "pop": 739, "state": "IL" }, { "_id": "62538", "city": "HARVEL", "loc": [ -89.53804, 39.371865 ], "pop": 374, "state": "IL" }, { "_id": "62539", "city": "ILLIOPOLIS", "loc": [ -89.251319, 39.849929 ], "pop": 1366, "state": "IL" }, { "_id": "62543", "city": "LATHAM", "loc": [ -89.17249200000001, 39.97111 ], "pop": 857, "state": "IL" }, { "_id": "62544", "city": "MACON", "loc": [ -88.988026, 39.704093 ], "pop": 1737, "state": "IL" }, { "_id": "62545", "city": "BOLIVIA", "loc": [ -89.417692, 39.77771 ], "pop": 2228, "state": "IL" }, { "_id": "62546", "city": "MORRISONVILLE", "loc": [ -89.45407, 39.415336 ], "pop": 1418, "state": "IL" }, { "_id": "62547", "city": "MOUNT AUBURN", "loc": [ -89.23567199999999, 39.762845 ], "pop": 1011, "state": "IL" }, { "_id": "62548", "city": "MOUNT PULASKI", "loc": [ -89.293482, 40.004482 ], "pop": 2500, "state": "IL" }, { "_id": "62549", "city": "HERVEY CITY", "loc": [ -88.87020699999999, 39.778883 ], "pop": 5691, "state": "IL" }, { "_id": "62550", "city": "RADFORD", "loc": [ -89.012776, 39.616135 ], "pop": 3112, "state": "IL" }, { "_id": "62551", "city": "NIANTIC", "loc": [ -89.17007099999999, 39.858175 ], "pop": 850, "state": "IL" }, { "_id": "62552", "city": "CASNER", "loc": [ -88.80559100000001, 39.896897 ], "pop": 810, "state": "IL" }, { "_id": "62553", "city": "OCONEE", "loc": [ -89.083636, 39.288408 ], "pop": 796, "state": "IL" }, { "_id": "62554", "city": "OREANA", "loc": [ -88.854675, 39.935135 ], "pop": 1554, "state": "IL" }, { "_id": "62555", "city": "OWANECO", "loc": [ -89.195071, 39.477508 ], "pop": 540, "state": "IL" }, { "_id": "62556", "city": "CLARKSDALE", "loc": [ -89.425555, 39.470817 ], "pop": 689, "state": "IL" }, { "_id": "62557", "city": "DUNKEL", "loc": [ -89.078165, 39.388124 ], "pop": 7081, "state": "IL" }, { "_id": "62558", "city": "SICILY", "loc": [ -89.57895499999999, 39.590966 ], "pop": 2822, "state": "IL" }, { "_id": "62560", "city": "RAYMOND", "loc": [ -89.58513499999999, 39.310551 ], "pop": 1660, "state": "IL" }, { "_id": "62561", "city": "SPAULDING", "loc": [ -89.54190800000001, 39.855239 ], "pop": 3921, "state": "IL" }, { "_id": "62563", "city": "BERRY", "loc": [ -89.547208, 39.759047 ], "pop": 8726, "state": "IL" }, { "_id": "62565", "city": "CLARKSBURG", "loc": [ -88.804615, 39.404873 ], "pop": 7481, "state": "IL" }, { "_id": "62567", "city": "STONINGTON", "loc": [ -89.191328, 39.640482 ], "pop": 1280, "state": "IL" }, { "_id": "62568", "city": "HEWITTSVILLE", "loc": [ -89.313357, 39.554516 ], "pop": 17182, "state": "IL" }, { "_id": "62571", "city": "DOLLVILLE", "loc": [ -88.97451700000001, 39.36576 ], "pop": 1505, "state": "IL" }, { "_id": "62572", "city": "WAGGONER", "loc": [ -89.647429, 39.38383 ], "pop": 547, "state": "IL" }, { "_id": "62573", "city": "HEMAN", "loc": [ -89.068316, 39.939737 ], "pop": 1780, "state": "IL" }, { "_id": "62601", "city": "ORLEANS", "loc": [ -90.035304, 39.725935 ], "pop": 501, "state": "IL" }, { "_id": "62611", "city": "ARENZVILLE", "loc": [ -90.363595, 39.897927 ], "pop": 1008, "state": "IL" }, { "_id": "62612", "city": "NEWMANSVILLE", "loc": [ -90.028721, 39.89168 ], "pop": 1904, "state": "IL" }, { "_id": "62613", "city": "FANCY PRAIRIE", "loc": [ -89.72108, 39.964813 ], "pop": 2696, "state": "IL" }, { "_id": "62615", "city": "AUBURN", "loc": [ -89.744033, 39.591787 ], "pop": 3934, "state": "IL" }, { "_id": "62617", "city": "LYNCHBURG", "loc": [ -90.148568, 40.161774 ], "pop": 1118, "state": "IL" }, { "_id": "62618", "city": "BEARDSTOWN", "loc": [ -90.42285099999999, 40.004356 ], "pop": 7369, "state": "IL" }, { "_id": "62621", "city": "EXETER", "loc": [ -90.53052700000001, 39.744078 ], "pop": 1101, "state": "IL" }, { "_id": "62624", "city": "BADER", "loc": [ -90.351671, 40.155025 ], "pop": 766, "state": "IL" }, { "_id": "62625", "city": "CANTRALL", "loc": [ -89.66426, 39.911267 ], "pop": 1811, "state": "IL" }, { "_id": "62626", "city": "COMER", "loc": [ -89.888935, 39.279821 ], "pop": 7343, "state": "IL" }, { "_id": "62627", "city": "PANTHER CREEK", "loc": [ -90.147657, 40.038437 ], "pop": 1283, "state": "IL" }, { "_id": "62628", "city": "CHAPIN", "loc": [ -90.411299, 39.771581 ], "pop": 879, "state": "IL" }, { "_id": "62629", "city": "CHATHAM", "loc": [ -89.711212, 39.673679 ], "pop": 4922, "state": "IL" }, { "_id": "62630", "city": "HAGAMAN", "loc": [ -90.076632, 39.270756 ], "pop": 683, "state": "IL" }, { "_id": "62631", "city": "CONCORD", "loc": [ -90.372175, 39.822958 ], "pop": 460, "state": "IL" }, { "_id": "62633", "city": "BIGGS", "loc": [ -89.846447, 40.235482 ], "pop": 1056, "state": "IL" }, { "_id": "62634", "city": "BROADWELL", "loc": [ -89.47493799999999, 40.002394 ], "pop": 922, "state": "IL" }, { "_id": "62635", "city": "EMDEN", "loc": [ -89.51744100000001, 40.294538 ], "pop": 1144, "state": "IL" }, { "_id": "62638", "city": "CLEMENTS", "loc": [ -90.048535, 39.608461 ], "pop": 1280, "state": "IL" }, { "_id": "62639", "city": "FREDERICK", "loc": [ -90.504391, 40.070246 ], "pop": 690, "state": "IL" }, { "_id": "62640", "city": "MCVEY", "loc": [ -89.780535, 39.447182 ], "pop": 2454, "state": "IL" }, { "_id": "62642", "city": "HUBLY", "loc": [ -89.711606, 40.079859 ], "pop": 1499, "state": "IL" }, { "_id": "62643", "city": "HARTSBURG", "loc": [ -89.451944, 40.245073 ], "pop": 602, "state": "IL" }, { "_id": "62644", "city": "ECKARD", "loc": [ -90.04952, 40.295995 ], "pop": 5593, "state": "IL" }, { "_id": "62649", "city": "HETTICK", "loc": [ -90.067161, 39.375217 ], "pop": 518, "state": "IL" }, { "_id": "62650", "city": "ARCADIA", "loc": [ -90.236238, 39.729269 ], "pop": 28240, "state": "IL" }, { "_id": "62655", "city": "KILBOURNE", "loc": [ -90.004279, 40.158696 ], "pop": 633, "state": "IL" }, { "_id": "62656", "city": "LINCOLN", "loc": [ -89.368376, 40.14508 ], "pop": 20130, "state": "IL" }, { "_id": "62661", "city": "LOAMI", "loc": [ -89.858823, 39.670394 ], "pop": 1286, "state": "IL" }, { "_id": "62664", "city": "LUTHER", "loc": [ -89.69925600000001, 40.199938 ], "pop": 2968, "state": "IL" }, { "_id": "62665", "city": "NAPLES", "loc": [ -90.549542, 39.797631 ], "pop": 2215, "state": "IL" }, { "_id": "62666", "city": "MIDDLETOWN", "loc": [ -89.58181999999999, 40.096668 ], "pop": 586, "state": "IL" }, { "_id": "62667", "city": "MODESTO", "loc": [ -89.97938600000001, 39.475965 ], "pop": 564, "state": "IL" }, { "_id": "62668", "city": "NORTONVILLE", "loc": [ -90.231189, 39.572952 ], "pop": 1387, "state": "IL" }, { "_id": "62670", "city": "BATES", "loc": [ -89.905721, 39.736048 ], "pop": 1470, "state": "IL" }, { "_id": "62671", "city": "NEW HOLLAND", "loc": [ -89.56044, 40.168226 ], "pop": 663, "state": "IL" }, { "_id": "62672", "city": "NILWOOD", "loc": [ -89.77841100000001, 39.387199 ], "pop": 633, "state": "IL" }, { "_id": "62673", "city": "OAKFORD", "loc": [ -89.96013499999999, 40.099445 ], "pop": 493, "state": "IL" }, { "_id": "62674", "city": "BARR", "loc": [ -89.95673600000001, 39.41654 ], "pop": 1490, "state": "IL" }, { "_id": "62675", "city": "ATTERBURY", "loc": [ -89.847874, 40.011529 ], "pop": 5049, "state": "IL" }, { "_id": "62676", "city": "PLAINVIEW", "loc": [ -89.97568699999999, 39.128311 ], "pop": 792, "state": "IL" }, { "_id": "62677", "city": "FARMINGDALE", "loc": [ -89.83836100000001, 39.849767 ], "pop": 3081, "state": "IL" }, { "_id": "62681", "city": "LAYTON", "loc": [ -90.560883, 40.124189 ], "pop": 4747, "state": "IL" }, { "_id": "62682", "city": "ALLEN", "loc": [ -89.625029, 40.294466 ], "pop": 669, "state": "IL" }, { "_id": "62683", "city": "SCOTTVILLE", "loc": [ -90.09692099999999, 39.478167 ], "pop": 387, "state": "IL" }, { "_id": "62684", "city": "BARCLAY", "loc": [ -89.60251, 39.889456 ], "pop": 2185, "state": "IL" }, { "_id": "62685", "city": "ROYAL LAKES", "loc": [ -90.048737, 39.124165 ], "pop": 844, "state": "IL" }, { "_id": "62688", "city": "TALLULA", "loc": [ -89.882274, 39.940188 ], "pop": 1427, "state": "IL" }, { "_id": "62690", "city": "VIRDEN", "loc": [ -89.77833200000001, 39.506447 ], "pop": 5939, "state": "IL" }, { "_id": "62691", "city": "LITTLE INDIAN", "loc": [ -90.212681, 39.945475 ], "pop": 2144, "state": "IL" }, { "_id": "62692", "city": "WAVERLY", "loc": [ -89.944903, 39.586983 ], "pop": 1968, "state": "IL" }, { "_id": "62693", "city": "WILLIAMSVILLE", "loc": [ -89.534172, 39.930438 ], "pop": 2320, "state": "IL" }, { "_id": "62694", "city": "GLASGOW", "loc": [ -90.433696, 39.614113 ], "pop": 3909, "state": "IL" }, { "_id": "62701", "city": "SPRINGFIELD", "loc": [ -89.649531, 39.80004 ], "pop": 1155, "state": "IL" }, { "_id": "62702", "city": "GRANDVIEW", "loc": [ -89.644147, 39.816768 ], "pop": 42047, "state": "IL" }, { "_id": "62703", "city": "SOUTHERN VIEW", "loc": [ -89.63333, 39.772401 ], "pop": 32501, "state": "IL" }, { "_id": "62704", "city": "JEROME", "loc": [ -89.681066, 39.780319 ], "pop": 41611, "state": "IL" }, { "_id": "62707", "city": "ANDREW", "loc": [ -89.663991, 39.772842 ], "pop": 16264, "state": "IL" }, { "_id": "62801", "city": "CENTRALIA", "loc": [ -89.136478, 38.524117 ], "pop": 23956, "state": "IL" }, { "_id": "62803", "city": "HOYLETON", "loc": [ -89.306854, 38.445468 ], "pop": 1295, "state": "IL" }, { "_id": "62806", "city": "ALBION", "loc": [ -88.063557, 38.374003 ], "pop": 3162, "state": "IL" }, { "_id": "62807", "city": "ALMA", "loc": [ -88.915695, 38.723089 ], "pop": 1251, "state": "IL" }, { "_id": "62808", "city": "ASHLEY", "loc": [ -89.231115, 38.306002 ], "pop": 1260, "state": "IL" }, { "_id": "62809", "city": "BARNHILL", "loc": [ -88.350831, 38.278144 ], "pop": 165, "state": "IL" }, { "_id": "62810", "city": "BELLE RIVE", "loc": [ -88.75580100000001, 38.215268 ], "pop": 1149, "state": "IL" }, { "_id": "62812", "city": "BENTON", "loc": [ -88.922659, 37.99998 ], "pop": 11419, "state": "IL" }, { "_id": "62814", "city": "BLUFORD", "loc": [ -88.75872, 38.353138 ], "pop": 2622, "state": "IL" }, { "_id": "62815", "city": "BONE GAP", "loc": [ -88.00249100000001, 38.448967 ], "pop": 496, "state": "IL" }, { "_id": "62816", "city": "BONNIE", "loc": [ -88.922884, 38.198017 ], "pop": 994, "state": "IL" }, { "_id": "62817", "city": "BROUGHTON", "loc": [ -88.467775, 37.954554 ], "pop": 732, "state": "IL" }, { "_id": "62818", "city": "BROWNS", "loc": [ -87.992824, 38.376433 ], "pop": 440, "state": "IL" }, { "_id": "62819", "city": "BUCKNER", "loc": [ -88.977993, 37.966881 ], "pop": 278, "state": "IL" }, { "_id": "62820", "city": "BURNT PRAIRIE", "loc": [ -88.214719, 38.208151 ], "pop": 503, "state": "IL" }, { "_id": "62821", "city": "CARMI", "loc": [ -88.16698700000001, 38.080819 ], "pop": 8234, "state": "IL" }, { "_id": "62822", "city": "CHRISTOPHER", "loc": [ -89.057367, 37.984905 ], "pop": 5042, "state": "IL" }, { "_id": "62823", "city": "CISNE", "loc": [ -88.40452399999999, 38.513774 ], "pop": 1403, "state": "IL" }, { "_id": "62824", "city": "CLAY CITY", "loc": [ -88.351641, 38.669501 ], "pop": 1753, "state": "IL" }, { "_id": "62827", "city": "CROSSVILLE", "loc": [ -88.05947399999999, 38.166029 ], "pop": 1388, "state": "IL" }, { "_id": "62828", "city": "DAHLGREN", "loc": [ -88.63631100000001, 38.197479 ], "pop": 1627, "state": "IL" }, { "_id": "62829", "city": "DALE", "loc": [ -88.53423100000001, 37.996585 ], "pop": 594, "state": "IL" }, { "_id": "62830", "city": "DIX", "loc": [ -88.96569700000001, 38.43329 ], "pop": 1552, "state": "IL" }, { "_id": "62831", "city": "DU BOIS", "loc": [ -89.204187, 38.252638 ], "pop": 732, "state": "IL" }, { "_id": "62832", "city": "DU QUOIN", "loc": [ -89.233268, 38.013687 ], "pop": 10061, "state": "IL" }, { "_id": "62833", "city": "ELLERY", "loc": [ -88.133455, 38.365021 ], "pop": 141, "state": "IL" }, { "_id": "62835", "city": "ENFIELD", "loc": [ -88.33254599999999, 38.092746 ], "pop": 1145, "state": "IL" }, { "_id": "62836", "city": "EWING", "loc": [ -88.850441, 38.07021 ], "pop": 1286, "state": "IL" }, { "_id": "62837", "city": "FAIRFIELD", "loc": [ -88.359323, 38.378214 ], "pop": 8723, "state": "IL" }, { "_id": "62838", "city": "FARINA", "loc": [ -88.76141200000001, 38.846902 ], "pop": 925, "state": "IL" }, { "_id": "62839", "city": "FLORA", "loc": [ -88.49186, 38.670337 ], "pop": 6989, "state": "IL" }, { "_id": "62840", "city": "FRANKFORT HEIGHT", "loc": [ -88.845651, 37.901301 ], "pop": 778, "state": "IL" }, { "_id": "62842", "city": "GEFF", "loc": [ -88.414428, 38.441326 ], "pop": 632, "state": "IL" }, { "_id": "62843", "city": "GOLDEN GATE", "loc": [ -88.207466, 38.364514 ], "pop": 733, "state": "IL" }, { "_id": "62844", "city": "GRAYVILLE", "loc": [ -88.003539, 38.262707 ], "pop": 2569, "state": "IL" }, { "_id": "62845", "city": "HERALD", "loc": [ -88.21315199999999, 37.967542 ], "pop": 641, "state": "IL" }, { "_id": "62846", "city": "INA", "loc": [ -88.88936200000001, 38.152743 ], "pop": 800, "state": "IL" }, { "_id": "62849", "city": "IUKA", "loc": [ -88.768925, 38.613563 ], "pop": 965, "state": "IL" }, { "_id": "62850", "city": "JOHNSONVILLE", "loc": [ -88.588701, 38.525628 ], "pop": 1264, "state": "IL" }, { "_id": "62851", "city": "KEENES", "loc": [ -88.64805800000001, 38.369146 ], "pop": 968, "state": "IL" }, { "_id": "62853", "city": "KELL", "loc": [ -88.84110699999999, 38.513256 ], "pop": 1261, "state": "IL" }, { "_id": "62854", "city": "KINMUNDY", "loc": [ -88.812999, 38.755857 ], "pop": 2134, "state": "IL" }, { "_id": "62855", "city": "LANCASTER", "loc": [ -87.871216, 38.537438 ], "pop": 567, "state": "IL" }, { "_id": "62858", "city": "BIBLE GROVE", "loc": [ -88.510046, 38.811856 ], "pop": 3688, "state": "IL" }, { "_id": "62859", "city": "MC LEANSBORO", "loc": [ -88.52855599999999, 38.093861 ], "pop": 4357, "state": "IL" }, { "_id": "62860", "city": "MACEDONIA", "loc": [ -88.696077, 38.013023 ], "pop": 1505, "state": "IL" }, { "_id": "62862", "city": "MILL SHOALS", "loc": [ -88.333817, 38.244675 ], "pop": 412, "state": "IL" }, { "_id": "62863", "city": "MOUNT CARMEL", "loc": [ -87.791107, 38.414727 ], "pop": 11493, "state": "IL" }, { "_id": "62864", "city": "MOUNT VERNON", "loc": [ -88.91052500000001, 38.317014 ], "pop": 23844, "state": "IL" }, { "_id": "62865", "city": "MULKEYTOWN", "loc": [ -89.1159, 37.968712 ], "pop": 474, "state": "IL" }, { "_id": "62866", "city": "NASON", "loc": [ -88.968839, 38.173872 ], "pop": 269, "state": "IL" }, { "_id": "62867", "city": "NEW HAVEN", "loc": [ -88.12845799999999, 37.899907 ], "pop": 558, "state": "IL" }, { "_id": "62868", "city": "NOBLE", "loc": [ -88.219038, 38.711851 ], "pop": 2425, "state": "IL" }, { "_id": "62869", "city": "NORRIS CITY", "loc": [ -88.32434000000001, 37.9773 ], "pop": 2377, "state": "IL" }, { "_id": "62870", "city": "ODIN", "loc": [ -89.055228, 38.608786 ], "pop": 1758, "state": "IL" }, { "_id": "62871", "city": "OMAHA", "loc": [ -88.286484, 37.890423 ], "pop": 638, "state": "IL" }, { "_id": "62872", "city": "OPDYKE", "loc": [ -88.77495500000001, 38.274955 ], "pop": 284, "state": "IL" }, { "_id": "62875", "city": "PATOKA", "loc": [ -89.094188, 38.754852 ], "pop": 857, "state": "IL" }, { "_id": "62877", "city": "RICHVIEW", "loc": [ -89.175572, 38.408227 ], "pop": 1087, "state": "IL" }, { "_id": "62878", "city": "RINARD", "loc": [ -88.464094, 38.580596 ], "pop": 377, "state": "IL" }, { "_id": "62880", "city": "SAINT PETER", "loc": [ -88.855998, 38.869684 ], "pop": 725, "state": "IL" }, { "_id": "62881", "city": "SALEM", "loc": [ -88.948077, 38.626421 ], "pop": 11599, "state": "IL" }, { "_id": "62882", "city": "SANDOVAL", "loc": [ -89.11400999999999, 38.613113 ], "pop": 3145, "state": "IL" }, { "_id": "62883", "city": "SCHELLER", "loc": [ -89.092691, 38.173095 ], "pop": 528, "state": "IL" }, { "_id": "62884", "city": "SESSER", "loc": [ -89.05740400000001, 38.089422 ], "pop": 2844, "state": "IL" }, { "_id": "62885", "city": "SHOBONIER", "loc": [ -89.078959, 38.844584 ], "pop": 219, "state": "IL" }, { "_id": "62886", "city": "SIMS", "loc": [ -88.530642, 38.392318 ], "pop": 868, "state": "IL" }, { "_id": "62887", "city": "SPRINGERTON", "loc": [ -88.37261100000001, 38.169868 ], "pop": 737, "state": "IL" }, { "_id": "62888", "city": "TAMAROA", "loc": [ -89.223091, 38.137969 ], "pop": 1788, "state": "IL" }, { "_id": "62889", "city": "TEXICO", "loc": [ -88.87015100000001, 38.425035 ], "pop": 1159, "state": "IL" }, { "_id": "62890", "city": "THOMPSONVILLE", "loc": [ -88.768394, 37.880438 ], "pop": 2413, "state": "IL" }, { "_id": "62892", "city": "VERNON", "loc": [ -89.083001, 38.803328 ], "pop": 371, "state": "IL" }, { "_id": "62893", "city": "WALNUT HILL", "loc": [ -88.984514, 38.520006 ], "pop": 1386, "state": "IL" }, { "_id": "62894", "city": "WALTONVILLE", "loc": [ -89.006702, 38.246479 ], "pop": 1923, "state": "IL" }, { "_id": "62895", "city": "WAYNE CITY", "loc": [ -88.58331699999999, 38.332808 ], "pop": 1523, "state": "IL" }, { "_id": "62896", "city": "WEST FRANKFORT", "loc": [ -88.930724, 37.897914 ], "pop": 11800, "state": "IL" }, { "_id": "62897", "city": "WHITTINGTON", "loc": [ -88.863456, 38.098937 ], "pop": 370, "state": "IL" }, { "_id": "62898", "city": "WOODLAWN", "loc": [ -89.074457, 38.38444 ], "pop": 1896, "state": "IL" }, { "_id": "62899", "city": "XENIA", "loc": [ -88.63789, 38.669747 ], "pop": 1252, "state": "IL" }, { "_id": "62901", "city": "CARBONDALE", "loc": [ -89.215762, 37.719994 ], "pop": 31742, "state": "IL" }, { "_id": "62905", "city": "ALTO PASS", "loc": [ -89.317179, 37.568142 ], "pop": 912, "state": "IL" }, { "_id": "62906", "city": "ANNA", "loc": [ -89.22068400000001, 37.466777 ], "pop": 8151, "state": "IL" }, { "_id": "62907", "city": "AVA", "loc": [ -89.465366, 37.879286 ], "pop": 1806, "state": "IL" }, { "_id": "62908", "city": "BELKNAP", "loc": [ -88.95065200000001, 37.326584 ], "pop": 188, "state": "IL" }, { "_id": "62910", "city": "NEW LIBERTY", "loc": [ -88.61194399999999, 37.138731 ], "pop": 2565, "state": "IL" }, { "_id": "62912", "city": "BUNCOMBE", "loc": [ -88.980586, 37.463661 ], "pop": 696, "state": "IL" }, { "_id": "62913", "city": "CACHE", "loc": [ -89.298018, 37.114131 ], "pop": 80, "state": "IL" }, { "_id": "62914", "city": "CAIRO", "loc": [ -89.181104, 37.012293 ], "pop": 5439, "state": "IL" }, { "_id": "62916", "city": "CAMPBELL HILL", "loc": [ -89.57990100000001, 37.922778 ], "pop": 976, "state": "IL" }, { "_id": "62917", "city": "CARRIER MILLS", "loc": [ -88.612706, 37.678199 ], "pop": 3355, "state": "IL" }, { "_id": "62918", "city": "CARTERVILLE", "loc": [ -89.097793, 37.774785 ], "pop": 10457, "state": "IL" }, { "_id": "62919", "city": "CAVE IN ROCK", "loc": [ -88.22196099999999, 37.517947 ], "pop": 2266, "state": "IL" }, { "_id": "62920", "city": "COBDEN", "loc": [ -89.245741, 37.542358 ], "pop": 2348, "state": "IL" }, { "_id": "62922", "city": "CREAL SPRINGS", "loc": [ -88.880697, 37.628393 ], "pop": 2743, "state": "IL" }, { "_id": "62923", "city": "CYPRESS", "loc": [ -89.014414, 37.366223 ], "pop": 618, "state": "IL" }, { "_id": "62924", "city": "DE SOTO", "loc": [ -89.221834, 37.81473 ], "pop": 2073, "state": "IL" }, { "_id": "62926", "city": "DONGOLA", "loc": [ -89.134933, 37.371234 ], "pop": 2361, "state": "IL" }, { "_id": "62928", "city": "EDDYVILLE", "loc": [ -88.594893, 37.52439 ], "pop": 677, "state": "IL" }, { "_id": "62930", "city": "ELDORADO", "loc": [ -88.443382, 37.813885 ], "pop": 7036, "state": "IL" }, { "_id": "62931", "city": "ELIZABETHTOWN", "loc": [ -88.28673499999999, 37.466492 ], "pop": 815, "state": "IL" }, { "_id": "62932", "city": "ELKVILLE", "loc": [ -89.233574, 37.915506 ], "pop": 2091, "state": "IL" }, { "_id": "62934", "city": "EQUALITY", "loc": [ -88.3445, 37.727786 ], "pop": 1173, "state": "IL" }, { "_id": "62935", "city": "GALATIA", "loc": [ -88.62348799999999, 37.827444 ], "pop": 2802, "state": "IL" }, { "_id": "62938", "city": "BROWNFIELD", "loc": [ -88.555148, 37.349984 ], "pop": 2997, "state": "IL" }, { "_id": "62939", "city": "GOREVILLE", "loc": [ -88.965524, 37.574985 ], "pop": 2867, "state": "IL" }, { "_id": "62940", "city": "GORHAM", "loc": [ -89.444031, 37.740611 ], "pop": 982, "state": "IL" }, { "_id": "62941", "city": "GRAND CHAIN", "loc": [ -89.008335, 37.251043 ], "pop": 603, "state": "IL" }, { "_id": "62942", "city": "GRAND TOWER", "loc": [ -89.49986, 37.63222 ], "pop": 903, "state": "IL" }, { "_id": "62943", "city": "GRANTSBURG", "loc": [ -88.770489, 37.39672 ], "pop": 2549, "state": "IL" }, { "_id": "62946", "city": "HARRISBURG", "loc": [ -88.54404, 37.725661 ], "pop": 12122, "state": "IL" }, { "_id": "62947", "city": "HEROD", "loc": [ -88.458062, 37.469731 ], "pop": 699, "state": "IL" }, { "_id": "62948", "city": "HERRIN", "loc": [ -89.02316, 37.801884 ], "pop": 13900, "state": "IL" }, { "_id": "62950", "city": "JACOB", "loc": [ -89.544359, 37.743738 ], "pop": 257, "state": "IL" }, { "_id": "62951", "city": "JOHNSTON CITY", "loc": [ -88.920858, 37.824477 ], "pop": 5424, "state": "IL" }, { "_id": "62952", "city": "JONESBORO", "loc": [ -89.291494, 37.446082 ], "pop": 3383, "state": "IL" }, { "_id": "62953", "city": "JOPPA", "loc": [ -88.84819, 37.247192 ], "pop": 1687, "state": "IL" }, { "_id": "62954", "city": "JUNCTION", "loc": [ -88.249071, 37.695206 ], "pop": 581, "state": "IL" }, { "_id": "62955", "city": "KARBERS RIDGE", "loc": [ -88.367893, 37.463071 ], "pop": 686, "state": "IL" }, { "_id": "62956", "city": "KARNAK", "loc": [ -88.97394300000001, 37.291066 ], "pop": 710, "state": "IL" }, { "_id": "62957", "city": "MC CLURE", "loc": [ -89.453119, 37.301983 ], "pop": 1231, "state": "IL" }, { "_id": "62958", "city": "MAKANDA", "loc": [ -89.214232, 37.656396 ], "pop": 3893, "state": "IL" }, { "_id": "62959", "city": "MARION", "loc": [ -88.929447, 37.725662 ], "pop": 20722, "state": "IL" }, { "_id": "62960", "city": "METROPOLIS", "loc": [ -88.725179, 37.175348 ], "pop": 10500, "state": "IL" }, { "_id": "62961", "city": "MILLCREEK", "loc": [ -89.26988900000001, 37.353127 ], "pop": 356, "state": "IL" }, { "_id": "62962", "city": "MILLER CITY", "loc": [ -89.34944299999999, 37.103359 ], "pop": 122, "state": "IL" }, { "_id": "62963", "city": "MOUND CITY", "loc": [ -89.163687, 37.086474 ], "pop": 845, "state": "IL" }, { "_id": "62964", "city": "MOUNDS", "loc": [ -89.200064, 37.11883 ], "pop": 2064, "state": "IL" }, { "_id": "62966", "city": "MURPHYSBORO", "loc": [ -89.331749, 37.765464 ], "pop": 15335, "state": "IL" }, { "_id": "62967", "city": "NEW BURNSIDE", "loc": [ -88.771253, 37.580608 ], "pop": 512, "state": "IL" }, { "_id": "62970", "city": "OLMSTED", "loc": [ -89.093266, 37.193507 ], "pop": 692, "state": "IL" }, { "_id": "62972", "city": "OZARK", "loc": [ -88.768778, 37.536704 ], "pop": 463, "state": "IL" }, { "_id": "62974", "city": "PITTSBURG", "loc": [ -88.87039300000001, 37.78387 ], "pop": 1330, "state": "IL" }, { "_id": "62975", "city": "POMONA", "loc": [ -89.336308, 37.641081 ], "pop": 769, "state": "IL" }, { "_id": "62976", "city": "PULASKI", "loc": [ -89.19680099999999, 37.214575 ], "pop": 663, "state": "IL" }, { "_id": "62977", "city": "RALEIGH", "loc": [ -88.53236800000001, 37.825597 ], "pop": 817, "state": "IL" }, { "_id": "62979", "city": "RIDGWAY", "loc": [ -88.261202, 37.804242 ], "pop": 1686, "state": "IL" }, { "_id": "62982", "city": "ROSICLARE", "loc": [ -88.346189, 37.423987 ], "pop": 1422, "state": "IL" }, { "_id": "62983", "city": "ROYALTON", "loc": [ -89.114149, 37.879033 ], "pop": 1344, "state": "IL" }, { "_id": "62984", "city": "SHAWNEETOWN", "loc": [ -88.17850300000001, 37.713188 ], "pop": 2400, "state": "IL" }, { "_id": "62985", "city": "ROBBS", "loc": [ -88.76245900000001, 37.463032 ], "pop": 507, "state": "IL" }, { "_id": "62987", "city": "STONEFORT", "loc": [ -88.742807, 37.62992 ], "pop": 1255, "state": "IL" }, { "_id": "62988", "city": "TAMMS", "loc": [ -89.276346, 37.234493 ], "pop": 2020, "state": "IL" }, { "_id": "62990", "city": "GALE", "loc": [ -89.396896, 37.191554 ], "pop": 1732, "state": "IL" }, { "_id": "62991", "city": "TUNNEL HILL", "loc": [ -88.883459, 37.573676 ], "pop": 867, "state": "IL" }, { "_id": "62992", "city": "ULLIN", "loc": [ -89.191137, 37.270385 ], "pop": 787, "state": "IL" }, { "_id": "62994", "city": "VERGENNES", "loc": [ -89.326863, 37.905128 ], "pop": 681, "state": "IL" }, { "_id": "62995", "city": "VIENNA", "loc": [ -88.88786899999999, 37.420541 ], "pop": 2767, "state": "IL" }, { "_id": "62996", "city": "VILLA RIDGE", "loc": [ -89.18252200000001, 37.157765 ], "pop": 736, "state": "IL" }, { "_id": "62997", "city": "WILLISVILLE", "loc": [ -89.578487, 37.982142 ], "pop": 912, "state": "IL" }, { "_id": "62998", "city": "WOLF LAKE", "loc": [ -89.44076099999999, 37.511985 ], "pop": 533, "state": "IL" }, { "_id": "62999", "city": "ZEIGLER", "loc": [ -89.06026, 37.906923 ], "pop": 2502, "state": "IL" }, { "_id": "63005", "city": "CHESTERFIELD", "loc": [ -90.61418500000001, 38.631832 ], "pop": 7770, "state": "MO" }, { "_id": "63010", "city": "ARNOLD", "loc": [ -90.387046, 38.430484 ], "pop": 29195, "state": "MO" }, { "_id": "63011", "city": "MANCHESTER", "loc": [ -90.55213000000001, 38.604132 ], "pop": 36722, "state": "MO" }, { "_id": "63012", "city": "BARNHART", "loc": [ -90.41417, 38.338425 ], "pop": 7689, "state": "MO" }, { "_id": "63013", "city": "BEAUFORT", "loc": [ -91.170929, 38.429352 ], "pop": 460, "state": "MO" }, { "_id": "63014", "city": "BERGER", "loc": [ -91.337412, 38.644449 ], "pop": 1092, "state": "MO" }, { "_id": "63015", "city": "CATAWISSA", "loc": [ -90.761703, 38.436161 ], "pop": 831, "state": "MO" }, { "_id": "63016", "city": "CEDAR HILL", "loc": [ -90.649777, 38.357319 ], "pop": 7211, "state": "MO" }, { "_id": "63017", "city": "TOWN AND COUNTRY", "loc": [ -90.53968999999999, 38.647241 ], "pop": 40848, "state": "MO" }, { "_id": "63019", "city": "CRYSTAL CITY", "loc": [ -90.382525, 38.23002 ], "pop": 4112, "state": "MO" }, { "_id": "63020", "city": "DE SOTO", "loc": [ -90.554621, 38.120421 ], "pop": 13331, "state": "MO" }, { "_id": "63021", "city": "BALLWIN", "loc": [ -90.525527, 38.577032 ], "pop": 46397, "state": "MO" }, { "_id": "63023", "city": "DITTMER", "loc": [ -90.691101, 38.315465 ], "pop": 2410, "state": "MO" }, { "_id": "63025", "city": "CRESCENT", "loc": [ -90.626277, 38.484832 ], "pop": 6053, "state": "MO" }, { "_id": "63026", "city": "FENTON", "loc": [ -90.468299, 38.501489 ], "pop": 38020, "state": "MO" }, { "_id": "63028", "city": "FESTUS", "loc": [ -90.42859, 38.187889 ], "pop": 22497, "state": "MO" }, { "_id": "63030", "city": "FLETCHER", "loc": [ -90.73445599999999, 38.180141 ], "pop": 241, "state": "MO" }, { "_id": "63031", "city": "FLORISSANT", "loc": [ -90.340097, 38.806865 ], "pop": 52659, "state": "MO" }, { "_id": "63033", "city": "FLORISSANT", "loc": [ -90.283062, 38.794711 ], "pop": 44480, "state": "MO" }, { "_id": "63034", "city": "FLORISSANT", "loc": [ -90.293617, 38.833841 ], "pop": 13972, "state": "MO" }, { "_id": "63036", "city": "FRENCH VILLAGE", "loc": [ -90.400507, 37.996101 ], "pop": 697, "state": "MO" }, { "_id": "63037", "city": "GERALD", "loc": [ -91.29306200000001, 38.350719 ], "pop": 4664, "state": "MO" }, { "_id": "63038", "city": "GLENCOE", "loc": [ -90.64397099999999, 38.5745 ], "pop": 6093, "state": "MO" }, { "_id": "63039", "city": "GRAY SUMMIT", "loc": [ -90.829184, 38.503044 ], "pop": 752, "state": "MO" }, { "_id": "63040", "city": "GROVER", "loc": [ -90.646112, 38.573316 ], "pop": 497, "state": "MO" }, { "_id": "63042", "city": "HAZELWOOD", "loc": [ -90.36692499999999, 38.780875 ], "pop": 20004, "state": "MO" }, { "_id": "63043", "city": "MARYLAND HEIGHTS", "loc": [ -90.44740299999999, 38.722896 ], "pop": 21268, "state": "MO" }, { "_id": "63044", "city": "BRIDGETON", "loc": [ -90.416101, 38.750627 ], "pop": 17695, "state": "MO" }, { "_id": "63045", "city": "BRIDGETON", "loc": [ -90.458062, 38.7561 ], "pop": 0, "state": "MO" }, { "_id": "63048", "city": "HERCULANEUM", "loc": [ -90.387095, 38.260087 ], "pop": 2490, "state": "MO" }, { "_id": "63049", "city": "HIGH RIDGE", "loc": [ -90.528127, 38.472783 ], "pop": 12915, "state": "MO" }, { "_id": "63050", "city": "HILLSBORO", "loc": [ -90.57819600000001, 38.258582 ], "pop": 14095, "state": "MO" }, { "_id": "63051", "city": "HOUSE SPRINGS", "loc": [ -90.55753900000001, 38.413068 ], "pop": 10035, "state": "MO" }, { "_id": "63052", "city": "ANTONIA", "loc": [ -90.431134, 38.392733 ], "pop": 17913, "state": "MO" }, { "_id": "63055", "city": "LABADIE", "loc": [ -90.876966, 38.520031 ], "pop": 498, "state": "MO" }, { "_id": "63056", "city": "LESLIE", "loc": [ -91.19516400000001, 38.458228 ], "pop": 1238, "state": "MO" }, { "_id": "63060", "city": "LONEDELL", "loc": [ -90.822216, 38.274982 ], "pop": 1153, "state": "MO" }, { "_id": "63061", "city": "LUEBBERING", "loc": [ -90.802713, 38.261499 ], "pop": 224, "state": "MO" }, { "_id": "63068", "city": "NEW HAVEN", "loc": [ -91.22905, 38.573995 ], "pop": 4353, "state": "MO" }, { "_id": "63069", "city": "PACIFIC", "loc": [ -90.747968, 38.492168 ], "pop": 12874, "state": "MO" }, { "_id": "63070", "city": "PEVELY", "loc": [ -90.411075, 38.279911 ], "pop": 5221, "state": "MO" }, { "_id": "63071", "city": "RICHWOODS", "loc": [ -90.83099, 38.149639 ], "pop": 1079, "state": "MO" }, { "_id": "63072", "city": "ROBERTSVILLE", "loc": [ -90.801619, 38.381602 ], "pop": 4250, "state": "MO" }, { "_id": "63074", "city": "SAINT ANN", "loc": [ -90.38641800000001, 38.725928 ], "pop": 16528, "state": "MO" }, { "_id": "63077", "city": "SAINT CLAIR", "loc": [ -90.971346, 38.329927 ], "pop": 10668, "state": "MO" }, { "_id": "63080", "city": "SULLIVAN", "loc": [ -91.156662, 38.230706 ], "pop": 7541, "state": "MO" }, { "_id": "63084", "city": "UNION", "loc": [ -91.020596, 38.445629 ], "pop": 14183, "state": "MO" }, { "_id": "63088", "city": "VALLEY PARK", "loc": [ -90.492422, 38.557619 ], "pop": 5014, "state": "MO" }, { "_id": "63089", "city": "VILLA RIDGE", "loc": [ -90.882198, 38.460108 ], "pop": 4954, "state": "MO" }, { "_id": "63090", "city": "WASHINGTON", "loc": [ -91.019346, 38.545851 ], "pop": 15437, "state": "MO" }, { "_id": "63091", "city": "ROSEBUD", "loc": [ -91.397407, 38.385301 ], "pop": 607, "state": "MO" }, { "_id": "63101", "city": "SAINT LOUIS", "loc": [ -90.19131299999999, 38.634616 ], "pop": 931, "state": "MO" }, { "_id": "63102", "city": "SAINT LOUIS", "loc": [ -90.18736, 38.630803 ], "pop": 731, "state": "MO" }, { "_id": "63103", "city": "SAINT LOUIS", "loc": [ -90.216444, 38.633176 ], "pop": 6710, "state": "MO" }, { "_id": "63104", "city": "SAINT LOUIS", "loc": [ -90.218512, 38.612819 ], "pop": 20885, "state": "MO" }, { "_id": "63105", "city": "CLAYTON", "loc": [ -90.324189, 38.642574 ], "pop": 15732, "state": "MO" }, { "_id": "63106", "city": "SAINT LOUIS", "loc": [ -90.208198, 38.644246 ], "pop": 15156, "state": "MO" }, { "_id": "63107", "city": "SAINT LOUIS", "loc": [ -90.21249, 38.664522 ], "pop": 23263, "state": "MO" }, { "_id": "63108", "city": "SAINT LOUIS", "loc": [ -90.254397, 38.644526 ], "pop": 20993, "state": "MO" }, { "_id": "63109", "city": "SAINT LOUIS", "loc": [ -90.292918, 38.585452 ], "pop": 30029, "state": "MO" }, { "_id": "63110", "city": "SAINT LOUIS", "loc": [ -90.256381, 38.618534 ], "pop": 23697, "state": "MO" }, { "_id": "63111", "city": "SAINT LOUIS", "loc": [ -90.24945200000001, 38.563349 ], "pop": 22733, "state": "MO" }, { "_id": "63112", "city": "SAINT LOUIS", "loc": [ -90.28187, 38.661619 ], "pop": 28841, "state": "MO" }, { "_id": "63113", "city": "SAINT LOUIS", "loc": [ -90.249633, 38.65896 ], "pop": 23360, "state": "MO" }, { "_id": "63114", "city": "OVERLAND", "loc": [ -90.363304, 38.704425 ], "pop": 40522, "state": "MO" }, { "_id": "63115", "city": "SAINT LOUIS", "loc": [ -90.238478, 38.675618 ], "pop": 30748, "state": "MO" }, { "_id": "63116", "city": "SAINT LOUIS", "loc": [ -90.26254299999999, 38.581356 ], "pop": 49014, "state": "MO" }, { "_id": "63117", "city": "RICHMOND HEIGHTS", "loc": [ -90.324817, 38.629202 ], "pop": 10263, "state": "MO" }, { "_id": "63118", "city": "SAINT LOUIS", "loc": [ -90.23091100000001, 38.594265 ], "pop": 33259, "state": "MO" }, { "_id": "63119", "city": "WEBSTER GROVES", "loc": [ -90.350807, 38.588853 ], "pop": 33698, "state": "MO" }, { "_id": "63120", "city": "SAINT LOUIS", "loc": [ -90.25945, 38.690914 ], "pop": 17815, "state": "MO" }, { "_id": "63121", "city": "NORMANDY", "loc": [ -90.296719, 38.705086 ], "pop": 31649, "state": "MO" }, { "_id": "63122", "city": "KIRKWOOD", "loc": [ -90.410042, 38.58486 ], "pop": 39452, "state": "MO" }, { "_id": "63123", "city": "AFFTON", "loc": [ -90.325304, 38.550594 ], "pop": 47127, "state": "MO" }, { "_id": "63124", "city": "LADUE", "loc": [ -90.375468, 38.642383 ], "pop": 9517, "state": "MO" }, { "_id": "63125", "city": "LEMAY", "loc": [ -90.29590899999999, 38.521899 ], "pop": 33874, "state": "MO" }, { "_id": "63126", "city": "SAPPINGTON", "loc": [ -90.37867900000001, 38.550349 ], "pop": 16311, "state": "MO" }, { "_id": "63127", "city": "SAPPINGTON", "loc": [ -90.405967, 38.540369 ], "pop": 4770, "state": "MO" }, { "_id": "63128", "city": "SAPPINGTON", "loc": [ -90.372275, 38.498285 ], "pop": 28366, "state": "MO" }, { "_id": "63129", "city": "SOUTH COUNTY", "loc": [ -90.32138999999999, 38.468864 ], "pop": 45920, "state": "MO" }, { "_id": "63130", "city": "UNIVERSITY CITY", "loc": [ -90.321896, 38.663941 ], "pop": 33986, "state": "MO" }, { "_id": "63131", "city": "DES PERES", "loc": [ -90.44264, 38.612479 ], "pop": 16955, "state": "MO" }, { "_id": "63132", "city": "OLIVETTE", "loc": [ -90.369642, 38.672823 ], "pop": 15193, "state": "MO" }, { "_id": "63133", "city": "SAINT LOUIS", "loc": [ -90.30327200000001, 38.6779 ], "pop": 11141, "state": "MO" }, { "_id": "63134", "city": "BERKELEY", "loc": [ -90.337834, 38.739614 ], "pop": 18068, "state": "MO" }, { "_id": "63135", "city": "FERGUSON", "loc": [ -90.302241, 38.748429 ], "pop": 23173, "state": "MO" }, { "_id": "63136", "city": "JENNINGS", "loc": [ -90.260189, 38.738878 ], "pop": 54994, "state": "MO" }, { "_id": "63137", "city": "NORTH COUNTY", "loc": [ -90.217778, 38.74885 ], "pop": 21055, "state": "MO" }, { "_id": "63138", "city": "NORTH COUNTY", "loc": [ -90.21158200000001, 38.787041 ], "pop": 20801, "state": "MO" }, { "_id": "63139", "city": "SAINT LOUIS", "loc": [ -90.292045, 38.610776 ], "pop": 25310, "state": "MO" }, { "_id": "63140", "city": "BERKELEY", "loc": [ -90.322846, 38.738482 ], "pop": 2478, "state": "MO" }, { "_id": "63141", "city": "CREVE COEUR", "loc": [ -90.457072, 38.661741 ], "pop": 20120, "state": "MO" }, { "_id": "63143", "city": "MAPLEWOOD", "loc": [ -90.31961099999999, 38.613116 ], "pop": 12025, "state": "MO" }, { "_id": "63144", "city": "BRENTWOOD", "loc": [ -90.350944, 38.620839 ], "pop": 9770, "state": "MO" }, { "_id": "63146", "city": "WEST COUNTY", "loc": [ -90.448251, 38.688418 ], "pop": 29946, "state": "MO" }, { "_id": "63147", "city": "SAINT LOUIS", "loc": [ -90.237512, 38.713889 ], "pop": 13186, "state": "MO" }, { "_id": "63301", "city": "SAINT CHARLES", "loc": [ -90.506503, 38.801424 ], "pop": 47255, "state": "MO" }, { "_id": "63303", "city": "SAINT CHARLES", "loc": [ -90.547059, 38.762237 ], "pop": 40675, "state": "MO" }, { "_id": "63304", "city": "SAINT CHARLES", "loc": [ -90.62344299999999, 38.737769 ], "pop": 27477, "state": "MO" }, { "_id": "63330", "city": "ANNADA", "loc": [ -90.822355, 39.255758 ], "pop": 199, "state": "MO" }, { "_id": "63332", "city": "AUGUSTA", "loc": [ -90.881471, 38.572767 ], "pop": 302, "state": "MO" }, { "_id": "63333", "city": "BELLFLOWER", "loc": [ -91.34891500000001, 39.0012 ], "pop": 689, "state": "MO" }, { "_id": "63334", "city": "BOWLING GREEN", "loc": [ -91.19623199999999, 39.334639 ], "pop": 5258, "state": "MO" }, { "_id": "63336", "city": "CLARKSVILLE", "loc": [ -90.936205, 39.346477 ], "pop": 1195, "state": "MO" }, { "_id": "63339", "city": "CURRYVILLE", "loc": [ -91.349301, 39.325702 ], "pop": 1604, "state": "MO" }, { "_id": "63341", "city": "DEFIANCE", "loc": [ -90.830231, 38.661557 ], "pop": 2861, "state": "MO" }, { "_id": "63343", "city": "ELSBERRY", "loc": [ -90.815956, 39.158953 ], "pop": 3739, "state": "MO" }, { "_id": "63344", "city": "EOLIA", "loc": [ -91.009322, 39.243097 ], "pop": 533, "state": "MO" }, { "_id": "63345", "city": "FARBER", "loc": [ -91.579843, 39.27424 ], "pop": 546, "state": "MO" }, { "_id": "63347", "city": "FOLEY", "loc": [ -90.777468, 39.053019 ], "pop": 2518, "state": "MO" }, { "_id": "63348", "city": "FORISTELL", "loc": [ -90.93432799999999, 38.762557 ], "pop": 2993, "state": "MO" }, { "_id": "63349", "city": "HAWK POINT", "loc": [ -91.121067, 38.976576 ], "pop": 1550, "state": "MO" }, { "_id": "63350", "city": "HIGH HILL", "loc": [ -91.37147299999999, 38.890238 ], "pop": 614, "state": "MO" }, { "_id": "63351", "city": "JONESBURG", "loc": [ -91.30193, 38.871658 ], "pop": 1055, "state": "MO" }, { "_id": "63352", "city": "LADDONIA", "loc": [ -91.689348, 39.259328 ], "pop": 1023, "state": "MO" }, { "_id": "63353", "city": "LOUISIANA", "loc": [ -91.066385, 39.43359 ], "pop": 5428, "state": "MO" }, { "_id": "63357", "city": "LAKE SHERWOOD", "loc": [ -91.055459, 38.648619 ], "pop": 3690, "state": "MO" }, { "_id": "63359", "city": "MIDDLETOWN", "loc": [ -91.38731199999999, 39.105494 ], "pop": 853, "state": "MO" }, { "_id": "63361", "city": "MONTGOMERY CITY", "loc": [ -91.508486, 38.983949 ], "pop": 3160, "state": "MO" }, { "_id": "63362", "city": "MOSCOW MILLS", "loc": [ -90.96300100000001, 38.922927 ], "pop": 3538, "state": "MO" }, { "_id": "63363", "city": "NEW FLORENCE", "loc": [ -91.490861, 38.902309 ], "pop": 1745, "state": "MO" }, { "_id": "63364", "city": "NEW HARTFORD", "loc": [ -91.292984, 39.188103 ], "pop": 503, "state": "MO" }, { "_id": "63366", "city": "SAINT PAUL", "loc": [ -90.720159, 38.800101 ], "pop": 28243, "state": "MO" }, { "_id": "63367", "city": "LAKE SAINT LOUIS", "loc": [ -90.78540700000001, 38.79355 ], "pop": 7785, "state": "MO" }, { "_id": "63369", "city": "OLD MONROE", "loc": [ -90.77819599999999, 38.934581 ], "pop": 1591, "state": "MO" }, { "_id": "63370", "city": "OLNEY", "loc": [ -91.211314, 39.087509 ], "pop": 351, "state": "MO" }, { "_id": "63371", "city": "PAYNESVILLE", "loc": [ -90.907268, 39.258679 ], "pop": 182, "state": "MO" }, { "_id": "63373", "city": "PORTAGE DES SIOU", "loc": [ -90.353115, 38.927629 ], "pop": 777, "state": "MO" }, { "_id": "63376", "city": "SAINT PETERS", "loc": [ -90.622765, 38.78024 ], "pop": 43133, "state": "MO" }, { "_id": "63377", "city": "SILEX", "loc": [ -91.03698799999999, 39.116617 ], "pop": 2913, "state": "MO" }, { "_id": "63379", "city": "TROY", "loc": [ -90.96244900000001, 39.001212 ], "pop": 7636, "state": "MO" }, { "_id": "63381", "city": "TRUXTON", "loc": [ -91.21261800000001, 38.967002 ], "pop": 794, "state": "MO" }, { "_id": "63382", "city": "VANDALIA", "loc": [ -91.488299, 39.294937 ], "pop": 3441, "state": "MO" }, { "_id": "63383", "city": "WARRENTON", "loc": [ -91.174047, 38.805042 ], "pop": 9464, "state": "MO" }, { "_id": "63384", "city": "WELLSVILLE", "loc": [ -91.564519, 39.076482 ], "pop": 1899, "state": "MO" }, { "_id": "63385", "city": "WENTZVILLE", "loc": [ -90.85344000000001, 38.801963 ], "pop": 10238, "state": "MO" }, { "_id": "63386", "city": "WEST ALTON", "loc": [ -90.23836300000001, 38.875796 ], "pop": 1172, "state": "MO" }, { "_id": "63388", "city": "WILLIAMSBURG", "loc": [ -91.679188, 38.898143 ], "pop": 228, "state": "MO" }, { "_id": "63389", "city": "WINFIELD", "loc": [ -90.821319, 38.989727 ], "pop": 4791, "state": "MO" }, { "_id": "63390", "city": "WRIGHT CITY", "loc": [ -91.03292999999999, 38.809677 ], "pop": 5852, "state": "MO" }, { "_id": "63401", "city": "HANNIBAL", "loc": [ -91.38387, 39.70636 ], "pop": 20086, "state": "MO" }, { "_id": "63430", "city": "ALEXANDRIA", "loc": [ -91.51543700000001, 40.344514 ], "pop": 753, "state": "MO" }, { "_id": "63431", "city": "ANABEL", "loc": [ -92.351142, 39.736793 ], "pop": 289, "state": "MO" }, { "_id": "63432", "city": "ARBELA", "loc": [ -92.004741, 40.486299 ], "pop": 564, "state": "MO" }, { "_id": "63433", "city": "ASHBURN", "loc": [ -91.187651, 39.52904 ], "pop": 235, "state": "MO" }, { "_id": "63434", "city": "BETHEL", "loc": [ -92.03161900000001, 39.892199 ], "pop": 377, "state": "MO" }, { "_id": "63435", "city": "CANTON", "loc": [ -91.54798700000001, 40.143695 ], "pop": 3822, "state": "MO" }, { "_id": "63436", "city": "CENTER", "loc": [ -91.53984199999999, 39.515397 ], "pop": 971, "state": "MO" }, { "_id": "63437", "city": "CLARENCE", "loc": [ -92.25297, 39.736648 ], "pop": 1600, "state": "MO" }, { "_id": "63438", "city": "DURHAM", "loc": [ -91.67041500000001, 39.962486 ], "pop": 548, "state": "MO" }, { "_id": "63439", "city": "EMDEN", "loc": [ -91.880926, 39.85013 ], "pop": 364, "state": "MO" }, { "_id": "63440", "city": "EWING", "loc": [ -91.721627, 39.996237 ], "pop": 1142, "state": "MO" }, { "_id": "63441", "city": "FRANKFORD", "loc": [ -91.30308599999999, 39.489246 ], "pop": 831, "state": "MO" }, { "_id": "63443", "city": "HUNNEWELL", "loc": [ -91.88323099999999, 39.701831 ], "pop": 528, "state": "MO" }, { "_id": "63445", "city": "KAHOKA", "loc": [ -91.725033, 40.426576 ], "pop": 3922, "state": "MO" }, { "_id": "63446", "city": "KNOX CITY", "loc": [ -92.00770300000001, 40.138357 ], "pop": 547, "state": "MO" }, { "_id": "63447", "city": "LA BELLE", "loc": [ -91.917125, 40.116383 ], "pop": 893, "state": "MO" }, { "_id": "63448", "city": "LA GRANGE", "loc": [ -91.518247, 40.039126 ], "pop": 1715, "state": "MO" }, { "_id": "63450", "city": "LENTNER", "loc": [ -92.148916, 39.712269 ], "pop": 198, "state": "MO" }, { "_id": "63451", "city": "LEONARD", "loc": [ -92.19467899999999, 39.907577 ], "pop": 312, "state": "MO" }, { "_id": "63452", "city": "LEWISTOWN", "loc": [ -91.815663, 40.086666 ], "pop": 824, "state": "MO" }, { "_id": "63453", "city": "LURAY", "loc": [ -91.891227, 40.493096 ], "pop": 523, "state": "MO" }, { "_id": "63454", "city": "MAYWOOD", "loc": [ -91.614769, 39.933289 ], "pop": 939, "state": "MO" }, { "_id": "63456", "city": "MONROE CITY", "loc": [ -91.722999, 39.654586 ], "pop": 4039, "state": "MO" }, { "_id": "63457", "city": "MONTICELLO", "loc": [ -91.712267, 40.10402 ], "pop": 515, "state": "MO" }, { "_id": "63458", "city": "NEWARK", "loc": [ -91.99236000000001, 39.997428 ], "pop": 195, "state": "MO" }, { "_id": "63459", "city": "NEW LONDON", "loc": [ -91.39599, 39.591672 ], "pop": 4801, "state": "MO" }, { "_id": "63460", "city": "NOVELTY", "loc": [ -92.24378299999999, 40.035997 ], "pop": 542, "state": "MO" }, { "_id": "63461", "city": "PALMYRA", "loc": [ -91.536817, 39.791309 ], "pop": 5344, "state": "MO" }, { "_id": "63462", "city": "PERRY", "loc": [ -91.664125, 39.420721 ], "pop": 1268, "state": "MO" }, { "_id": "63463", "city": "PHILADELPHIA", "loc": [ -91.753803, 39.835931 ], "pop": 674, "state": "MO" }, { "_id": "63464", "city": "PLEVNA", "loc": [ -92.111716, 39.992561 ], "pop": 149, "state": "MO" }, { "_id": "63466", "city": "SAINT PATRICK", "loc": [ -91.65467700000001, 40.319851 ], "pop": 455, "state": "MO" }, { "_id": "63468", "city": "SHELBINA", "loc": [ -92.03706, 39.694718 ], "pop": 2714, "state": "MO" }, { "_id": "63469", "city": "SHELBYVILLE", "loc": [ -92.04978199999999, 39.810792 ], "pop": 929, "state": "MO" }, { "_id": "63470", "city": "STEFFENVILLE", "loc": [ -91.85945, 39.993976 ], "pop": 310, "state": "MO" }, { "_id": "63471", "city": "TAYLOR", "loc": [ -91.527834, 39.914486 ], "pop": 667, "state": "MO" }, { "_id": "63472", "city": "WAYLAND", "loc": [ -91.60786400000001, 40.442574 ], "pop": 1252, "state": "MO" }, { "_id": "63473", "city": "WILLIAMSTOWN", "loc": [ -91.854809, 40.21559 ], "pop": 343, "state": "MO" }, { "_id": "63474", "city": "WYACONDA", "loc": [ -91.907077, 40.372083 ], "pop": 642, "state": "MO" }, { "_id": "63501", "city": "KIRKSVILLE", "loc": [ -92.585634, 40.190765 ], "pop": 20717, "state": "MO" }, { "_id": "63530", "city": "ATLANTA", "loc": [ -92.475019, 39.914639 ], "pop": 977, "state": "MO" }, { "_id": "63531", "city": "BARING", "loc": [ -92.23107400000001, 40.250864 ], "pop": 440, "state": "MO" }, { "_id": "63532", "city": "BEVIER", "loc": [ -92.561925, 39.749707 ], "pop": 1273, "state": "MO" }, { "_id": "63533", "city": "BRASHEAR", "loc": [ -92.43325299999999, 40.195891 ], "pop": 1444, "state": "MO" }, { "_id": "63534", "city": "CALLAO", "loc": [ -92.635144, 39.744849 ], "pop": 878, "state": "MO" }, { "_id": "63535", "city": "COATSVILLE", "loc": [ -92.638801, 40.566473 ], "pop": 148, "state": "MO" }, { "_id": "63536", "city": "DOWNING", "loc": [ -92.391762, 40.479828 ], "pop": 953, "state": "MO" }, { "_id": "63537", "city": "EDINA", "loc": [ -92.145549, 40.179452 ], "pop": 2101, "state": "MO" }, { "_id": "63538", "city": "ELMER", "loc": [ -92.642413, 39.941456 ], "pop": 308, "state": "MO" }, { "_id": "63539", "city": "ETHEL", "loc": [ -92.766396, 39.914605 ], "pop": 374, "state": "MO" }, { "_id": "63540", "city": "GIBBS", "loc": [ -92.443495, 40.083962 ], "pop": 389, "state": "MO" }, { "_id": "63541", "city": "GLENWOOD", "loc": [ -92.58864199999999, 40.514935 ], "pop": 333, "state": "MO" }, { "_id": "63543", "city": "GORIN", "loc": [ -92.01397, 40.362217 ], "pop": 428, "state": "MO" }, { "_id": "63544", "city": "GREEN CASTLE", "loc": [ -92.877966, 40.270325 ], "pop": 335, "state": "MO" }, { "_id": "63545", "city": "GREEN CITY", "loc": [ -92.953244, 40.260125 ], "pop": 1189, "state": "MO" }, { "_id": "63546", "city": "GREENTOP", "loc": [ -92.55667, 40.344593 ], "pop": 859, "state": "MO" }, { "_id": "63547", "city": "HURDLAND", "loc": [ -92.279066, 40.160909 ], "pop": 508, "state": "MO" }, { "_id": "63548", "city": "LANCASTER", "loc": [ -92.526403, 40.525265 ], "pop": 1060, "state": "MO" }, { "_id": "63549", "city": "LA PLATA", "loc": [ -92.50766900000001, 40.020831 ], "pop": 2022, "state": "MO" }, { "_id": "63551", "city": "LIVONIA", "loc": [ -92.724084, 40.511237 ], "pop": 398, "state": "MO" }, { "_id": "63552", "city": "MACON", "loc": [ -92.462163, 39.748089 ], "pop": 7557, "state": "MO" }, { "_id": "63555", "city": "MEMPHIS", "loc": [ -92.18508300000001, 40.46191 ], "pop": 3546, "state": "MO" }, { "_id": "63556", "city": "MILAN", "loc": [ -93.136149, 40.184435 ], "pop": 3171, "state": "MO" }, { "_id": "63557", "city": "NEW BOSTON", "loc": [ -92.91596699999999, 39.933234 ], "pop": 184, "state": "MO" }, { "_id": "63558", "city": "NEW CAMBRIA", "loc": [ -92.769469, 39.75509 ], "pop": 953, "state": "MO" }, { "_id": "63559", "city": "NOVINGER", "loc": [ -92.717236, 40.268513 ], "pop": 1770, "state": "MO" }, { "_id": "63560", "city": "POLLOCK", "loc": [ -93.11150600000001, 40.33852 ], "pop": 638, "state": "MO" }, { "_id": "63561", "city": "QUEEN CITY", "loc": [ -92.56626300000001, 40.415175 ], "pop": 1269, "state": "MO" }, { "_id": "63563", "city": "RUTLEDGE", "loc": [ -92.097559, 40.328984 ], "pop": 284, "state": "MO" }, { "_id": "63565", "city": "UNIONVILLE", "loc": [ -92.99509399999999, 40.481464 ], "pop": 3515, "state": "MO" }, { "_id": "63566", "city": "WINIGAN", "loc": [ -92.93007, 40.03706 ], "pop": 335, "state": "MO" }, { "_id": "63567", "city": "WORTHINGTON", "loc": [ -92.740139, 40.424001 ], "pop": 438, "state": "MO" }, { "_id": "63601", "city": "DESLOGE", "loc": [ -90.52735, 37.85555 ], "pop": 14716, "state": "MO" }, { "_id": "63620", "city": "ANNAPOLIS", "loc": [ -90.67023500000001, 37.39809 ], "pop": 1282, "state": "MO" }, { "_id": "63621", "city": "ARCADIA", "loc": [ -90.59276800000001, 37.570054 ], "pop": 896, "state": "MO" }, { "_id": "63622", "city": "BELGRADE", "loc": [ -90.86130799999999, 37.78886 ], "pop": 1000, "state": "MO" }, { "_id": "63623", "city": "BELLEVIEW", "loc": [ -90.799075, 37.681981 ], "pop": 1206, "state": "MO" }, { "_id": "63624", "city": "DESLOGE", "loc": [ -90.620732, 37.769865 ], "pop": 2282, "state": "MO" }, { "_id": "63625", "city": "BLACK", "loc": [ -90.99173500000001, 37.547275 ], "pop": 671, "state": "MO" }, { "_id": "63626", "city": "BLACKWELL", "loc": [ -90.70953799999999, 38.071694 ], "pop": 1012, "state": "MO" }, { "_id": "63627", "city": "BLOOMSDALE", "loc": [ -90.280548, 38.045112 ], "pop": 3035, "state": "MO" }, { "_id": "63628", "city": "BONNE TERRE", "loc": [ -90.525052, 37.931423 ], "pop": 10579, "state": "MO" }, { "_id": "63629", "city": "BUNKER", "loc": [ -91.192735, 37.477227 ], "pop": 882, "state": "MO" }, { "_id": "63630", "city": "CADET", "loc": [ -90.743932, 38.012534 ], "pop": 3277, "state": "MO" }, { "_id": "63631", "city": "CALEDONIA", "loc": [ -90.740936, 37.763881 ], "pop": 808, "state": "MO" }, { "_id": "63633", "city": "CENTERVILLE", "loc": [ -90.975657, 37.428537 ], "pop": 505, "state": "MO" }, { "_id": "63636", "city": "DES ARC", "loc": [ -90.62787, 37.29546 ], "pop": 640, "state": "MO" }, { "_id": "63637", "city": "DOE RUN", "loc": [ -90.496842, 37.734818 ], "pop": 1866, "state": "MO" }, { "_id": "63638", "city": "ELLINGTON", "loc": [ -90.958851, 37.239797 ], "pop": 3329, "state": "MO" }, { "_id": "63640", "city": "FARMINGTON", "loc": [ -90.40937700000001, 37.777299 ], "pop": 19031, "state": "MO" }, { "_id": "63645", "city": "MILLCREEK", "loc": [ -90.31052699999999, 37.543716 ], "pop": 10043, "state": "MO" }, { "_id": "63648", "city": "IRONDALE", "loc": [ -90.69838900000001, 37.82962 ], "pop": 1793, "state": "MO" }, { "_id": "63650", "city": "IRON MOUNTAIN", "loc": [ -90.63563499999999, 37.614702 ], "pop": 5610, "state": "MO" }, { "_id": "63653", "city": "LEADWOOD", "loc": [ -90.591007, 37.864081 ], "pop": 1331, "state": "MO" }, { "_id": "63654", "city": "LESTERVILLE", "loc": [ -90.842544, 37.482004 ], "pop": 733, "state": "MO" }, { "_id": "63655", "city": "MARQUAND", "loc": [ -90.174092, 37.427403 ], "pop": 1296, "state": "MO" }, { "_id": "63656", "city": "MIDDLE BROOK", "loc": [ -90.67350399999999, 37.670161 ], "pop": 509, "state": "MO" }, { "_id": "63660", "city": "MINERAL POINT", "loc": [ -90.719324, 37.915555 ], "pop": 4032, "state": "MO" }, { "_id": "63662", "city": "PATTON", "loc": [ -90.050045, 37.473347 ], "pop": 1622, "state": "MO" }, { "_id": "63664", "city": "POTOSI", "loc": [ -90.84146699999999, 37.954942 ], "pop": 7274, "state": "MO" }, { "_id": "63665", "city": "REDFORD", "loc": [ -90.921994, 37.323518 ], "pop": 407, "state": "MO" }, { "_id": "63670", "city": "LAKE FOREST ESTA", "loc": [ -90.09604, 37.950356 ], "pop": 9405, "state": "MO" }, { "_id": "63673", "city": "SAINT MARY", "loc": [ -89.92926799999999, 37.914034 ], "pop": 130, "state": "IL" }, { "_id": "63675", "city": "VULCAN", "loc": [ -90.71060799999999, 37.305963 ], "pop": 153, "state": "MO" }, { "_id": "63701", "city": "CAPE GIRARDEAU", "loc": [ -89.545861, 37.31685 ], "pop": 37993, "state": "MO" }, { "_id": "63730", "city": "ADVANCE", "loc": [ -89.910614, 37.092219 ], "pop": 2448, "state": "MO" }, { "_id": "63732", "city": "NEW WELLS", "loc": [ -89.581453, 37.630633 ], "pop": 576, "state": "MO" }, { "_id": "63733", "city": "ARAB", "loc": [ -90.080448, 37.064804 ], "pop": 139, "state": "MO" }, { "_id": "63735", "city": "BELL CITY", "loc": [ -89.798417, 37.011608 ], "pop": 1219, "state": "MO" }, { "_id": "63736", "city": "BENTON", "loc": [ -89.56640400000001, 37.069674 ], "pop": 3349, "state": "MO" }, { "_id": "63739", "city": "BURFORDVILLE", "loc": [ -89.820632, 37.363231 ], "pop": 819, "state": "MO" }, { "_id": "63740", "city": "CHAFFEE", "loc": [ -89.64565, 37.172612 ], "pop": 4830, "state": "MO" }, { "_id": "63743", "city": "DAISY", "loc": [ -89.821327, 37.515064 ], "pop": 100, "state": "MO" }, { "_id": "63744", "city": "DELTA", "loc": [ -89.76085999999999, 37.184417 ], "pop": 1418, "state": "MO" }, { "_id": "63747", "city": "FRIEDHEIM", "loc": [ -89.837552, 37.566904 ], "pop": 133, "state": "MO" }, { "_id": "63748", "city": "FROHNA", "loc": [ -89.661903, 37.66855 ], "pop": 1012, "state": "MO" }, { "_id": "63750", "city": "GIPSY", "loc": [ -90.19407699999999, 37.131092 ], "pop": 92, "state": "MO" }, { "_id": "63751", "city": "GLENALLEN", "loc": [ -90.051495, 37.323119 ], "pop": 572, "state": "MO" }, { "_id": "63753", "city": "GRASSY", "loc": [ -90.160838, 37.259347 ], "pop": 375, "state": "MO" }, { "_id": "63755", "city": "JACKSON", "loc": [ -89.651939, 37.387885 ], "pop": 14335, "state": "MO" }, { "_id": "63760", "city": "LEOPOLD", "loc": [ -89.922735, 37.260903 ], "pop": 303, "state": "MO" }, { "_id": "63763", "city": "MC GEE", "loc": [ -90.19084700000001, 37.044139 ], "pop": 308, "state": "MO" }, { "_id": "63764", "city": "SCOPUS", "loc": [ -89.962732, 37.313464 ], "pop": 5211, "state": "MO" }, { "_id": "63766", "city": "MILLERSVILLE", "loc": [ -89.795035, 37.440138 ], "pop": 1060, "state": "MO" }, { "_id": "63769", "city": "OAK RIDGE", "loc": [ -89.750818, 37.525787 ], "pop": 1184, "state": "MO" }, { "_id": "63770", "city": "OLD APPLETON", "loc": [ -89.70709100000001, 37.583014 ], "pop": 200, "state": "MO" }, { "_id": "63771", "city": "ORAN", "loc": [ -89.67336400000001, 37.086977 ], "pop": 1827, "state": "MO" }, { "_id": "63775", "city": "PERRYVILLE", "loc": [ -89.87366400000001, 37.717437 ], "pop": 13296, "state": "MO" }, { "_id": "63780", "city": "SCOTT CITY", "loc": [ -89.518081, 37.20771 ], "pop": 6340, "state": "MO" }, { "_id": "63781", "city": "SEDGEWICKVILLE", "loc": [ -89.927246, 37.536962 ], "pop": 772, "state": "MO" }, { "_id": "63782", "city": "STURDIVANT", "loc": [ -90.009215, 37.071011 ], "pop": 220, "state": "MO" }, { "_id": "63783", "city": "UNIONTOWN", "loc": [ -89.723744, 37.610708 ], "pop": 440, "state": "MO" }, { "_id": "63785", "city": "WHITEWATER", "loc": [ -89.736338, 37.286495 ], "pop": 1906, "state": "MO" }, { "_id": "63786", "city": "WITTENBERG", "loc": [ -89.564261, 37.679256 ], "pop": 140, "state": "MO" }, { "_id": "63787", "city": "ZALMA", "loc": [ -90.075711, 37.13648 ], "pop": 898, "state": "MO" }, { "_id": "63801", "city": "SIKESTON", "loc": [ -89.58197, 36.891111 ], "pop": 22618, "state": "MO" }, { "_id": "63821", "city": "ARBYRD", "loc": [ -90.22835499999999, 36.050104 ], "pop": 891, "state": "MO" }, { "_id": "63822", "city": "BERNIE", "loc": [ -89.987758, 36.672703 ], "pop": 3200, "state": "MO" }, { "_id": "63823", "city": "BERTRAND", "loc": [ -89.44825899999999, 36.892746 ], "pop": 1455, "state": "MO" }, { "_id": "63825", "city": "BLOOMFIELD", "loc": [ -89.945564, 36.898892 ], "pop": 5938, "state": "MO" }, { "_id": "63827", "city": "BRAGG CITY", "loc": [ -89.87362400000001, 36.273236 ], "pop": 711, "state": "MO" }, { "_id": "63829", "city": "CARDWELL", "loc": [ -90.290696, 36.04345 ], "pop": 1552, "state": "MO" }, { "_id": "63830", "city": "CARUTHERSVILLE", "loc": [ -89.668306, 36.180237 ], "pop": 8376, "state": "MO" }, { "_id": "63833", "city": "CATRON", "loc": [ -89.770647, 36.687578 ], "pop": 174, "state": "MO" }, { "_id": "63834", "city": "CHARLESTON", "loc": [ -89.33420700000001, 36.921341 ], "pop": 7209, "state": "MO" }, { "_id": "63837", "city": "CLARKTON", "loc": [ -89.972852, 36.447812 ], "pop": 1672, "state": "MO" }, { "_id": "63841", "city": "DEXTER", "loc": [ -89.963933, 36.788458 ], "pop": 11641, "state": "MO" }, { "_id": "63845", "city": "EAST PRAIRIE", "loc": [ -89.372629, 36.777609 ], "pop": 6184, "state": "MO" }, { "_id": "63846", "city": "ESSEX", "loc": [ -89.83664899999999, 36.810859 ], "pop": 1212, "state": "MO" }, { "_id": "63848", "city": "GIDEON", "loc": [ -89.913546, 36.45378 ], "pop": 1599, "state": "MO" }, { "_id": "63849", "city": "GOBLER", "loc": [ -89.934907, 36.158987 ], "pop": 144, "state": "MO" }, { "_id": "63851", "city": "HAYTI HEIGHTS", "loc": [ -89.75160700000001, 36.239475 ], "pop": 5073, "state": "MO" }, { "_id": "63852", "city": "HOLCOMB", "loc": [ -90.02079500000001, 36.38846 ], "pop": 1335, "state": "MO" }, { "_id": "63855", "city": "HORNERSVILLE", "loc": [ -90.081643, 36.062694 ], "pop": 1685, "state": "MO" }, { "_id": "63857", "city": "KENNETT", "loc": [ -90.049057, 36.240656 ], "pop": 12742, "state": "MO" }, { "_id": "63862", "city": "LILBOURN", "loc": [ -89.61124100000001, 36.585313 ], "pop": 2258, "state": "MO" }, { "_id": "63863", "city": "MALDEN", "loc": [ -89.973679, 36.567209 ], "pop": 6735, "state": "MO" }, { "_id": "63866", "city": "MARSTON", "loc": [ -89.62881899999999, 36.508448 ], "pop": 1160, "state": "MO" }, { "_id": "63867", "city": "MATTHEWS", "loc": [ -89.57683299999999, 36.807528 ], "pop": 2675, "state": "MO" }, { "_id": "63868", "city": "MOREHOUSE", "loc": [ -89.685191, 36.819041 ], "pop": 1856, "state": "MO" }, { "_id": "63869", "city": "NEW MADRID", "loc": [ -89.53664499999999, 36.607284 ], "pop": 4289, "state": "MO" }, { "_id": "63870", "city": "PARMA", "loc": [ -89.818971, 36.585629 ], "pop": 2308, "state": "MO" }, { "_id": "63873", "city": "PORTAGEVILLE", "loc": [ -89.70023399999999, 36.427945 ], "pop": 5400, "state": "MO" }, { "_id": "63876", "city": "SENATH", "loc": [ -90.163224, 36.132428 ], "pop": 2234, "state": "MO" }, { "_id": "63877", "city": "STEELE", "loc": [ -89.834585, 36.091528 ], "pop": 5905, "state": "MO" }, { "_id": "63879", "city": "HOMESTOWN", "loc": [ -89.816362, 36.347215 ], "pop": 1003, "state": "MO" }, { "_id": "63901", "city": "POPLAR BLUFF", "loc": [ -90.416647, 36.766235 ], "pop": 31363, "state": "MO" }, { "_id": "63931", "city": "BRIAR", "loc": [ -90.92777, 36.639115 ], "pop": 617, "state": "MO" }, { "_id": "63932", "city": "BROSELEY", "loc": [ -90.240472, 36.707553 ], "pop": 2173, "state": "MO" }, { "_id": "63933", "city": "CAMPBELL", "loc": [ -90.082859, 36.519714 ], "pop": 4358, "state": "MO" }, { "_id": "63934", "city": "CLUBB", "loc": [ -90.359638, 37.2302 ], "pop": 88, "state": "MO" }, { "_id": "63935", "city": "POYNOR", "loc": [ -90.81953, 36.621094 ], "pop": 7690, "state": "MO" }, { "_id": "63936", "city": "DUDLEY", "loc": [ -90.120974, 36.810981 ], "pop": 1061, "state": "MO" }, { "_id": "63937", "city": "ELLSINORE", "loc": [ -90.74853, 36.945263 ], "pop": 1573, "state": "MO" }, { "_id": "63939", "city": "FAIRDEALING", "loc": [ -90.633515, 36.670404 ], "pop": 617, "state": "MO" }, { "_id": "63940", "city": "FISK", "loc": [ -90.216758, 36.783625 ], "pop": 590, "state": "MO" }, { "_id": "63941", "city": "FREMONT", "loc": [ -91.143984, 36.917164 ], "pop": 570, "state": "MO" }, { "_id": "63942", "city": "GATEWOOD", "loc": [ -91.07033300000001, 36.562608 ], "pop": 342, "state": "MO" }, { "_id": "63943", "city": "GRANDIN", "loc": [ -90.794175, 36.827961 ], "pop": 2228, "state": "MO" }, { "_id": "63944", "city": "GREENVILLE", "loc": [ -90.451362, 37.110838 ], "pop": 1012, "state": "MO" }, { "_id": "63945", "city": "HARVIELL", "loc": [ -90.55830400000001, 36.672318 ], "pop": 726, "state": "MO" }, { "_id": "63947", "city": "HIRAM", "loc": [ -90.289556, 37.228158 ], "pop": 467, "state": "MO" }, { "_id": "63950", "city": "LODI", "loc": [ -90.46322499999999, 37.242046 ], "pop": 52, "state": "MO" }, { "_id": "63951", "city": "LOWNDES", "loc": [ -90.254437, 37.134318 ], "pop": 101, "state": "MO" }, { "_id": "63952", "city": "MILL SPRING", "loc": [ -90.67462500000001, 37.067477 ], "pop": 732, "state": "MO" }, { "_id": "63953", "city": "NAYLOR", "loc": [ -90.612354, 36.584337 ], "pop": 1390, "state": "MO" }, { "_id": "63954", "city": "NEELYVILLE", "loc": [ -90.49949100000001, 36.571005 ], "pop": 1556, "state": "MO" }, { "_id": "63955", "city": "OXLY", "loc": [ -90.691973, 36.587385 ], "pop": 596, "state": "MO" }, { "_id": "63956", "city": "PATTERSON", "loc": [ -90.57717100000001, 37.195992 ], "pop": 1378, "state": "MO" }, { "_id": "63957", "city": "PIEDMONT", "loc": [ -90.69902, 37.15727 ], "pop": 3719, "state": "MO" }, { "_id": "63960", "city": "PUXICO", "loc": [ -90.16225799999999, 36.942163 ], "pop": 2085, "state": "MO" }, { "_id": "63961", "city": "QULIN", "loc": [ -90.261674, 36.581769 ], "pop": 1646, "state": "MO" }, { "_id": "63963", "city": "SHOOK", "loc": [ -90.30059, 37.076976 ], "pop": 222, "state": "MO" }, { "_id": "63964", "city": "SILVA", "loc": [ -90.437472, 37.211892 ], "pop": 933, "state": "MO" }, { "_id": "63965", "city": "VAN BUREN", "loc": [ -91.000681, 37.00153 ], "pop": 2417, "state": "MO" }, { "_id": "63966", "city": "WAPPAPELLO", "loc": [ -90.28480500000001, 36.976566 ], "pop": 1353, "state": "MO" }, { "_id": "63967", "city": "WILLIAMSVILLE", "loc": [ -90.48785100000001, 36.963789 ], "pop": 1657, "state": "MO" }, { "_id": "64001", "city": "ALMA", "loc": [ -93.54285299999999, 39.10484 ], "pop": 718, "state": "MO" }, { "_id": "64011", "city": "BATES CITY", "loc": [ -94.07984, 39.021887 ], "pop": 1393, "state": "MO" }, { "_id": "64012", "city": "BELTON", "loc": [ -94.532785, 38.816118 ], "pop": 20208, "state": "MO" }, { "_id": "64014", "city": "BLUE SPRINGS", "loc": [ -94.260429, 39.015186 ], "pop": 19140, "state": "MO" }, { "_id": "64015", "city": "LAKE TAPAWINGO", "loc": [ -94.29284800000001, 39.018378 ], "pop": 23758, "state": "MO" }, { "_id": "64016", "city": "BUCKNER", "loc": [ -94.206219, 39.130328 ], "pop": 4156, "state": "MO" }, { "_id": "64017", "city": "CAMDEN", "loc": [ -94.025913, 39.204806 ], "pop": 641, "state": "MO" }, { "_id": "64018", "city": "CAMDEN POINT", "loc": [ -94.744438, 39.451549 ], "pop": 678, "state": "MO" }, { "_id": "64019", "city": "CENTERVIEW", "loc": [ -93.870234, 38.78971 ], "pop": 1890, "state": "MO" }, { "_id": "64020", "city": "CONCORDIA", "loc": [ -93.581205, 38.977553 ], "pop": 3240, "state": "MO" }, { "_id": "64021", "city": "CORDER", "loc": [ -93.639127, 39.102401 ], "pop": 649, "state": "MO" }, { "_id": "64022", "city": "DOVER", "loc": [ -93.66837700000001, 39.192619 ], "pop": 512, "state": "MO" }, { "_id": "64024", "city": "EXCELSIOR SPRING", "loc": [ -94.223614, 39.33491 ], "pop": 18308, "state": "MO" }, { "_id": "64029", "city": "GRAIN VALLEY", "loc": [ -94.20874000000001, 39.027361 ], "pop": 2865, "state": "MO" }, { "_id": "64030", "city": "GRANDVIEW", "loc": [ -94.52054200000001, 38.881936 ], "pop": 24926, "state": "MO" }, { "_id": "64034", "city": "LAKE WINNEBAGO", "loc": [ -94.334767, 38.842813 ], "pop": 5578, "state": "MO" }, { "_id": "64035", "city": "HARDIN", "loc": [ -93.840869, 39.350433 ], "pop": 2019, "state": "MO" }, { "_id": "64036", "city": "HENRIETTA", "loc": [ -93.93687300000001, 39.236732 ], "pop": 438, "state": "MO" }, { "_id": "64037", "city": "HIGGINSVILLE", "loc": [ -93.71326500000001, 39.070504 ], "pop": 5994, "state": "MO" }, { "_id": "64040", "city": "HOLDEN", "loc": [ -93.98557099999999, 38.718595 ], "pop": 3088, "state": "MO" }, { "_id": "64048", "city": "HOLT", "loc": [ -94.368876, 39.428867 ], "pop": 1712, "state": "MO" }, { "_id": "64050", "city": "INDEPENDENCE", "loc": [ -94.411072, 39.098288 ], "pop": 24188, "state": "MO" }, { "_id": "64052", "city": "INDEPENDENCE", "loc": [ -94.449945, 39.074984 ], "pop": 22793, "state": "MO" }, { "_id": "64053", "city": "INDEPENDENCE", "loc": [ -94.462461, 39.105041 ], "pop": 6152, "state": "MO" }, { "_id": "64054", "city": "SUGAR CREEK", "loc": [ -94.441496, 39.107234 ], "pop": 4574, "state": "MO" }, { "_id": "64055", "city": "INDEPENDENCE", "loc": [ -94.403902, 39.054504 ], "pop": 30654, "state": "MO" }, { "_id": "64056", "city": "INDEPENDENCE", "loc": [ -94.35963700000001, 39.11773 ], "pop": 14962, "state": "MO" }, { "_id": "64057", "city": "INDEPENDENCE", "loc": [ -94.353284, 39.073099 ], "pop": 9209, "state": "MO" }, { "_id": "64058", "city": "INDEPENDENCE", "loc": [ -94.35152600000001, 39.141233 ], "pop": 5752, "state": "MO" }, { "_id": "64060", "city": "KEARNEY", "loc": [ -94.362104, 39.365175 ], "pop": 4419, "state": "MO" }, { "_id": "64061", "city": "KINGSVILLE", "loc": [ -94.046188, 38.817755 ], "pop": 3447, "state": "MO" }, { "_id": "64062", "city": "LAWSON", "loc": [ -94.19658800000001, 39.440129 ], "pop": 4898, "state": "MO" }, { "_id": "64063", "city": "LAKE LOTAWANA", "loc": [ -94.348744, 38.921094 ], "pop": 30114, "state": "MO" }, { "_id": "64064", "city": "LEES SUMMIT", "loc": [ -94.36519199999999, 38.995336 ], "pop": 10649, "state": "MO" }, { "_id": "64067", "city": "LEXINGTON", "loc": [ -93.871438, 39.174249 ], "pop": 6294, "state": "MO" }, { "_id": "64068", "city": "PLEASANT VALLEY", "loc": [ -94.43366399999999, 39.241916 ], "pop": 25473, "state": "MO" }, { "_id": "64070", "city": "LONE JACK", "loc": [ -94.16145299999999, 38.891837 ], "pop": 1918, "state": "MO" }, { "_id": "64071", "city": "MAYVIEW", "loc": [ -93.835306, 39.045898 ], "pop": 746, "state": "MO" }, { "_id": "64074", "city": "NAPOLEON", "loc": [ -94.070911, 39.114034 ], "pop": 545, "state": "MO" }, { "_id": "64075", "city": "OAK GROVE", "loc": [ -94.13994599999999, 38.998456 ], "pop": 7851, "state": "MO" }, { "_id": "64076", "city": "ODESSA", "loc": [ -93.975731, 38.982938 ], "pop": 8790, "state": "MO" }, { "_id": "64077", "city": "ORRICK", "loc": [ -94.123863, 39.211577 ], "pop": 1186, "state": "MO" }, { "_id": "64078", "city": "PECULIAR", "loc": [ -94.44053, 38.716453 ], "pop": 5207, "state": "MO" }, { "_id": "64079", "city": "PLATTE CITY", "loc": [ -94.788972, 39.360171 ], "pop": 4280, "state": "MO" }, { "_id": "64080", "city": "PLEASANT HILL", "loc": [ -94.243961, 38.785856 ], "pop": 6057, "state": "MO" }, { "_id": "64081", "city": "LEES SUMMIT", "loc": [ -94.407302, 38.914169 ], "pop": 9637, "state": "MO" }, { "_id": "64082", "city": "LEES SUMMIT", "loc": [ -94.394368, 38.851803 ], "pop": 2580, "state": "MO" }, { "_id": "64083", "city": "RAYMORE", "loc": [ -94.452893, 38.801896 ], "pop": 8112, "state": "MO" }, { "_id": "64084", "city": "RAYVILLE", "loc": [ -94.02840999999999, 39.385291 ], "pop": 1727, "state": "MO" }, { "_id": "64085", "city": "RICHMOND", "loc": [ -93.979163, 39.279298 ], "pop": 7080, "state": "MO" }, { "_id": "64088", "city": "SIBLEY", "loc": [ -94.19901900000001, 39.162658 ], "pop": 1527, "state": "MO" }, { "_id": "64089", "city": "SMITHVILLE", "loc": [ -94.55923900000001, 39.391739 ], "pop": 3469, "state": "MO" }, { "_id": "64093", "city": "WARRENSBURG", "loc": [ -93.727341, 38.766695 ], "pop": 21993, "state": "MO" }, { "_id": "64096", "city": "WAVERLY", "loc": [ -93.52565199999999, 39.205523 ], "pop": 1036, "state": "MO" }, { "_id": "64097", "city": "WELLINGTON", "loc": [ -93.985513, 39.125845 ], "pop": 1167, "state": "MO" }, { "_id": "64098", "city": "WESTON", "loc": [ -94.91445299999999, 39.445294 ], "pop": 3269, "state": "MO" }, { "_id": "64101", "city": "KANSAS CITY", "loc": [ -94.601849, 39.10005 ], "pop": 0, "state": "MO" }, { "_id": "64102", "city": "KANSAS CITY", "loc": [ -94.606596, 39.086067 ], "pop": 0, "state": "MO" }, { "_id": "64105", "city": "KANSAS CITY", "loc": [ -94.590092, 39.102459 ], "pop": 1733, "state": "MO" }, { "_id": "64106", "city": "KANSAS CITY", "loc": [ -94.569858, 39.105186 ], "pop": 7323, "state": "MO" }, { "_id": "64108", "city": "KANSAS CITY", "loc": [ -94.586826, 39.0837 ], "pop": 7167, "state": "MO" }, { "_id": "64109", "city": "KANSAS CITY", "loc": [ -94.56737200000001, 39.066286 ], "pop": 13553, "state": "MO" }, { "_id": "64110", "city": "KANSAS CITY", "loc": [ -94.57220599999999, 39.036088 ], "pop": 19532, "state": "MO" }, { "_id": "64111", "city": "KANSAS CITY", "loc": [ -94.59294199999999, 39.056483 ], "pop": 19929, "state": "MO" }, { "_id": "64112", "city": "KANSAS CITY", "loc": [ -94.592873, 39.038191 ], "pop": 8891, "state": "MO" }, { "_id": "64113", "city": "KANSAS CITY", "loc": [ -94.593828, 39.01234 ], "pop": 11744, "state": "MO" }, { "_id": "64114", "city": "KANSAS CITY", "loc": [ -94.595941, 38.962147 ], "pop": 24416, "state": "MO" }, { "_id": "64116", "city": "NORTH KANSAS CIT", "loc": [ -94.56988200000001, 39.163189 ], "pop": 14697, "state": "MO" }, { "_id": "64117", "city": "RANDOLPH", "loc": [ -94.527367, 39.168111 ], "pop": 14295, "state": "MO" }, { "_id": "64118", "city": "GLADSTONE", "loc": [ -94.570448, 39.213842 ], "pop": 35772, "state": "MO" }, { "_id": "64119", "city": "KANSAS CITY", "loc": [ -94.519873, 39.19785 ], "pop": 24046, "state": "MO" }, { "_id": "64120", "city": "KANSAS CITY", "loc": [ -94.54873000000001, 39.122206 ], "pop": 731, "state": "MO" }, { "_id": "64123", "city": "KANSAS CITY", "loc": [ -94.523545, 39.113593 ], "pop": 9910, "state": "MO" }, { "_id": "64124", "city": "KANSAS CITY", "loc": [ -94.539402, 39.106832 ], "pop": 11683, "state": "MO" }, { "_id": "64125", "city": "KANSAS CITY", "loc": [ -94.492328, 39.104157 ], "pop": 2011, "state": "MO" }, { "_id": "64126", "city": "KANSAS CITY", "loc": [ -94.50466, 39.092255 ], "pop": 6929, "state": "MO" }, { "_id": "64127", "city": "KANSAS CITY", "loc": [ -94.536636, 39.088303 ], "pop": 22469, "state": "MO" }, { "_id": "64128", "city": "KANSAS CITY", "loc": [ -94.538634, 39.065932 ], "pop": 18185, "state": "MO" }, { "_id": "64129", "city": "KANSAS CITY", "loc": [ -94.49513, 39.040093 ], "pop": 12006, "state": "MO" }, { "_id": "64130", "city": "KANSAS CITY", "loc": [ -94.546674, 39.035106 ], "pop": 30403, "state": "MO" }, { "_id": "64131", "city": "KANSAS CITY", "loc": [ -94.57741, 38.971303 ], "pop": 24033, "state": "MO" }, { "_id": "64132", "city": "KANSAS CITY", "loc": [ -94.552156, 38.991073 ], "pop": 17552, "state": "MO" }, { "_id": "64133", "city": "RAYTOWN", "loc": [ -94.45922899999999, 39.014909 ], "pop": 33484, "state": "MO" }, { "_id": "64134", "city": "KANSAS CITY", "loc": [ -94.500908, 38.929633 ], "pop": 23346, "state": "MO" }, { "_id": "64136", "city": "KANSAS CITY", "loc": [ -94.400774, 39.018684 ], "pop": 1033, "state": "MO" }, { "_id": "64137", "city": "KANSAS CITY", "loc": [ -94.540487, 38.92988 ], "pop": 11216, "state": "MO" }, { "_id": "64138", "city": "RAYTOWN", "loc": [ -94.479361, 38.96871 ], "pop": 25590, "state": "MO" }, { "_id": "64139", "city": "KANSAS CITY", "loc": [ -94.406086, 38.965891 ], "pop": 465, "state": "MO" }, { "_id": "64145", "city": "KANSAS CITY", "loc": [ -94.597607, 38.89767 ], "pop": 4830, "state": "MO" }, { "_id": "64146", "city": "KANSAS CITY", "loc": [ -94.57638, 38.897264 ], "pop": 1417, "state": "MO" }, { "_id": "64147", "city": "MARTIN CITY", "loc": [ -94.52971700000001, 38.861352 ], "pop": 600, "state": "MO" }, { "_id": "64149", "city": "KANSAS CITY", "loc": [ -94.463554, 38.860646 ], "pop": 314, "state": "MO" }, { "_id": "64150", "city": "KANSAS CITY", "loc": [ -94.616669, 39.177927 ], "pop": 2140, "state": "MO" }, { "_id": "64151", "city": "LAKE WAUKOMIS", "loc": [ -94.63318, 39.213876 ], "pop": 18196, "state": "MO" }, { "_id": "64152", "city": "PARKVILLE", "loc": [ -94.69131299999999, 39.220954 ], "pop": 18719, "state": "MO" }, { "_id": "64153", "city": "KANSAS CITY", "loc": [ -94.697008, 39.262746 ], "pop": 1582, "state": "MO" }, { "_id": "64154", "city": "KANSAS CITY", "loc": [ -94.63544400000001, 39.254728 ], "pop": 3379, "state": "MO" }, { "_id": "64155", "city": "KANSAS CITY", "loc": [ -94.570401, 39.275831 ], "pop": 11562, "state": "MO" }, { "_id": "64156", "city": "KANSAS CITY", "loc": [ -94.533614, 39.290052 ], "pop": 921, "state": "MO" }, { "_id": "64157", "city": "KANSAS CITY", "loc": [ -94.459456, 39.276673 ], "pop": 1084, "state": "MO" }, { "_id": "64158", "city": "KANSAS CITY", "loc": [ -94.472036, 39.228428 ], "pop": 158, "state": "MO" }, { "_id": "64161", "city": "RANDOLPH", "loc": [ -94.459829, 39.161506 ], "pop": 470, "state": "MO" }, { "_id": "64163", "city": "FERRELVIEW", "loc": [ -94.71931499999999, 39.359756 ], "pop": 1479, "state": "MO" }, { "_id": "64164", "city": "KANSAS CITY", "loc": [ -94.644643, 39.3426 ], "pop": 1459, "state": "MO" }, { "_id": "64165", "city": "KANSAS CITY", "loc": [ -94.57296599999999, 39.340054 ], "pop": 320, "state": "MO" }, { "_id": "64166", "city": "KANSAS CITY", "loc": [ -94.519858, 39.329399 ], "pop": 466, "state": "MO" }, { "_id": "64167", "city": "KANSAS CITY", "loc": [ -94.46529099999999, 39.309643 ], "pop": 244, "state": "MO" }, { "_id": "64401", "city": "AGENCY", "loc": [ -94.717017, 39.666229 ], "pop": 1773, "state": "MO" }, { "_id": "64402", "city": "ALBANY", "loc": [ -94.326977, 40.251282 ], "pop": 2600, "state": "MO" }, { "_id": "64421", "city": "AMAZONIA", "loc": [ -94.911344, 39.909197 ], "pop": 864, "state": "MO" }, { "_id": "64422", "city": "AMITY", "loc": [ -94.513558, 39.883697 ], "pop": 651, "state": "MO" }, { "_id": "64423", "city": "BARNARD", "loc": [ -94.805558, 40.186176 ], "pop": 561, "state": "MO" }, { "_id": "64424", "city": "BETHANY", "loc": [ -94.018863, 40.260055 ], "pop": 4148, "state": "MO" }, { "_id": "64426", "city": "BLYTHEDALE", "loc": [ -93.895447, 40.502352 ], "pop": 335, "state": "MO" }, { "_id": "64427", "city": "BOLCKOW", "loc": [ -94.88474100000001, 40.100673 ], "pop": 684, "state": "MO" }, { "_id": "64428", "city": "BURLINGTON JUNCT", "loc": [ -95.051663, 40.442125 ], "pop": 922, "state": "MO" }, { "_id": "64429", "city": "CAMERON", "loc": [ -94.243723, 39.730892 ], "pop": 4660, "state": "MO" }, { "_id": "64430", "city": "CLARKSDALE", "loc": [ -94.54212, 39.813675 ], "pop": 546, "state": "MO" }, { "_id": "64431", "city": "CLEARMONT", "loc": [ -95.005478, 40.517489 ], "pop": 524, "state": "MO" }, { "_id": "64432", "city": "CLYDE", "loc": [ -94.654563, 40.264475 ], "pop": 221, "state": "MO" }, { "_id": "64433", "city": "CONCEPTION", "loc": [ -94.684302, 40.230929 ], "pop": 281, "state": "MO" }, { "_id": "64434", "city": "CONCEPTION JUNCT", "loc": [ -94.696797, 40.266017 ], "pop": 334, "state": "MO" }, { "_id": "64435", "city": "CORNING", "loc": [ -95.436128, 40.24463 ], "pop": 178, "state": "MO" }, { "_id": "64436", "city": "COSBY", "loc": [ -94.697678, 39.855534 ], "pop": 727, "state": "MO" }, { "_id": "64437", "city": "BIGELOW", "loc": [ -95.377047, 40.193873 ], "pop": 580, "state": "MO" }, { "_id": "64438", "city": "DARLINGTON", "loc": [ -94.404899, 40.195517 ], "pop": 184, "state": "MO" }, { "_id": "64439", "city": "DEARBORN", "loc": [ -94.766368, 39.517248 ], "pop": 1556, "state": "MO" }, { "_id": "64440", "city": "DE KALB", "loc": [ -94.927027, 39.583361 ], "pop": 584, "state": "MO" }, { "_id": "64441", "city": "DENVER", "loc": [ -94.306624, 40.418074 ], "pop": 181, "state": "MO" }, { "_id": "64442", "city": "EAGLEVILLE", "loc": [ -93.995058, 40.491197 ], "pop": 669, "state": "MO" }, { "_id": "64443", "city": "EASTON", "loc": [ -94.65819399999999, 39.751709 ], "pop": 1189, "state": "MO" }, { "_id": "64444", "city": "EDGERTON", "loc": [ -94.635217, 39.474213 ], "pop": 1427, "state": "MO" }, { "_id": "64445", "city": "ELMO", "loc": [ -95.123564, 40.518492 ], "pop": 481, "state": "MO" }, { "_id": "64446", "city": "FAIRFAX", "loc": [ -95.375075, 40.330193 ], "pop": 1413, "state": "MO" }, { "_id": "64448", "city": "FAUCETT", "loc": [ -94.791276, 39.589124 ], "pop": 1077, "state": "MO" }, { "_id": "64449", "city": "FILLMORE", "loc": [ -94.955496, 40.014212 ], "pop": 514, "state": "MO" }, { "_id": "64451", "city": "FOREST CITY", "loc": [ -95.19159399999999, 39.989708 ], "pop": 450, "state": "MO" }, { "_id": "64452", "city": "FORTESCUE", "loc": [ -95.33158400000001, 40.054712 ], "pop": 208, "state": "MO" }, { "_id": "64453", "city": "GENTRY", "loc": [ -94.414198, 40.341112 ], "pop": 256, "state": "MO" }, { "_id": "64454", "city": "GOWER", "loc": [ -94.596526, 39.602009 ], "pop": 2115, "state": "MO" }, { "_id": "64455", "city": "GRAHAM", "loc": [ -95.012118, 40.201204 ], "pop": 543, "state": "MO" }, { "_id": "64456", "city": "GRANT CITY", "loc": [ -94.397908, 40.492358 ], "pop": 1401, "state": "MO" }, { "_id": "64457", "city": "GUILFORD", "loc": [ -94.695076, 40.174614 ], "pop": 388, "state": "MO" }, { "_id": "64458", "city": "HATFIELD", "loc": [ -94.169059, 40.521853 ], "pop": 141, "state": "MO" }, { "_id": "64459", "city": "HELENA", "loc": [ -94.69212, 39.925122 ], "pop": 1218, "state": "MO" }, { "_id": "64461", "city": "HOPKINS", "loc": [ -94.81894800000001, 40.548328 ], "pop": 869, "state": "MO" }, { "_id": "64463", "city": "KING CITY", "loc": [ -94.52341199999999, 40.065184 ], "pop": 1382, "state": "MO" }, { "_id": "64465", "city": "LATHROP", "loc": [ -94.309271, 39.517727 ], "pop": 4461, "state": "MO" }, { "_id": "64466", "city": "MAITLAND", "loc": [ -95.09270600000001, 40.199111 ], "pop": 582, "state": "MO" }, { "_id": "64467", "city": "MARTINSVILLE", "loc": [ -94.164463, 40.366206 ], "pop": 271, "state": "MO" }, { "_id": "64468", "city": "MARYVILLE", "loc": [ -94.873479, 40.343399 ], "pop": 13687, "state": "MO" }, { "_id": "64469", "city": "MAYSVILLE", "loc": [ -94.354821, 39.911189 ], "pop": 1948, "state": "MO" }, { "_id": "64470", "city": "MOUND CITY", "loc": [ -95.213837, 40.136238 ], "pop": 2166, "state": "MO" }, { "_id": "64471", "city": "NEW HAMPTON", "loc": [ -94.17856500000001, 40.244439 ], "pop": 666, "state": "MO" }, { "_id": "64473", "city": "OREGON", "loc": [ -95.123358, 39.980906 ], "pop": 1601, "state": "MO" }, { "_id": "64474", "city": "OSBORN", "loc": [ -94.247677, 39.768436 ], "pop": 4084, "state": "MO" }, { "_id": "64475", "city": "PARNELL", "loc": [ -94.659519, 40.472288 ], "pop": 456, "state": "MO" }, { "_id": "64476", "city": "PICKERING", "loc": [ -94.84111900000001, 40.459073 ], "pop": 525, "state": "MO" }, { "_id": "64477", "city": "PLATTSBURG", "loc": [ -94.433814, 39.57047 ], "pop": 3786, "state": "MO" }, { "_id": "64478", "city": "QUITMAN", "loc": [ -95.072909, 40.3701 ], "pop": 302, "state": "MO" }, { "_id": "64479", "city": "RAVENWOOD", "loc": [ -94.68051, 40.357902 ], "pop": 942, "state": "MO" }, { "_id": "64480", "city": "REA", "loc": [ -94.70018399999999, 40.059263 ], "pop": 690, "state": "MO" }, { "_id": "64481", "city": "RIDGEWAY", "loc": [ -93.957527, 40.399896 ], "pop": 870, "state": "MO" }, { "_id": "64482", "city": "ROCK PORT", "loc": [ -95.52740300000001, 40.430581 ], "pop": 2704, "state": "MO" }, { "_id": "64483", "city": "ROSENDALE", "loc": [ -94.832808, 40.039853 ], "pop": 630, "state": "MO" }, { "_id": "64484", "city": "RUSHVILLE", "loc": [ -95.041259, 39.565272 ], "pop": 1068, "state": "MO" }, { "_id": "64485", "city": "SAVANNAH", "loc": [ -94.826733, 39.916774 ], "pop": 7599, "state": "MO" }, { "_id": "64486", "city": "SHERIDAN", "loc": [ -94.570149, 40.492822 ], "pop": 664, "state": "MO" }, { "_id": "64487", "city": "SKIDMORE", "loc": [ -95.079241, 40.28961 ], "pop": 638, "state": "MO" }, { "_id": "64489", "city": "STANBERRY", "loc": [ -94.538691, 40.229285 ], "pop": 1879, "state": "MO" }, { "_id": "64490", "city": "HEMPLE", "loc": [ -94.51779000000001, 39.745465 ], "pop": 2110, "state": "MO" }, { "_id": "64491", "city": "TARKIO", "loc": [ -95.378586, 40.441841 ], "pop": 2553, "state": "MO" }, { "_id": "64492", "city": "TRIMBLE", "loc": [ -94.55123399999999, 39.487067 ], "pop": 944, "state": "MO" }, { "_id": "64493", "city": "TURNEY", "loc": [ -94.297241, 39.631772 ], "pop": 319, "state": "MO" }, { "_id": "64494", "city": "UNION STAR", "loc": [ -94.578732, 39.984645 ], "pop": 745, "state": "MO" }, { "_id": "64496", "city": "WATSON", "loc": [ -95.61931, 40.477985 ], "pop": 215, "state": "MO" }, { "_id": "64497", "city": "WEATHERBY", "loc": [ -94.254959, 39.888699 ], "pop": 584, "state": "MO" }, { "_id": "64498", "city": "WESTBORO", "loc": [ -95.313419, 40.535748 ], "pop": 572, "state": "MO" }, { "_id": "64499", "city": "WORTH", "loc": [ -94.437084, 40.4173 ], "pop": 229, "state": "MO" }, { "_id": "64501", "city": "SAINT JOSEPH", "loc": [ -94.838488, 39.768755 ], "pop": 12978, "state": "MO" }, { "_id": "64503", "city": "SAINT JOSEPH", "loc": [ -94.817125, 39.733987 ], "pop": 14190, "state": "MO" }, { "_id": "64504", "city": "SAINT JOSEPH", "loc": [ -94.867749, 39.707566 ], "pop": 11412, "state": "MO" }, { "_id": "64505", "city": "SAINT JOSEPH", "loc": [ -94.844341, 39.796532 ], "pop": 10627, "state": "MO" }, { "_id": "64506", "city": "SAINT JOSEPH", "loc": [ -94.80431400000001, 39.789292 ], "pop": 18009, "state": "MO" }, { "_id": "64507", "city": "SAINT JOSEPH", "loc": [ -94.817303, 39.755052 ], "pop": 11194, "state": "MO" }, { "_id": "64601", "city": "CHILLICOTHE", "loc": [ -93.550887, 39.796569 ], "pop": 11189, "state": "MO" }, { "_id": "64620", "city": "ALTAMONT", "loc": [ -94.12815500000001, 39.905017 ], "pop": 533, "state": "MO" }, { "_id": "64621", "city": "AVALON", "loc": [ -93.47288, 39.668183 ], "pop": 388, "state": "MO" }, { "_id": "64622", "city": "BOGARD", "loc": [ -93.537387, 39.499354 ], "pop": 831, "state": "MO" }, { "_id": "64623", "city": "BOSWORTH", "loc": [ -93.333521, 39.476692 ], "pop": 583, "state": "MO" }, { "_id": "64624", "city": "BRAYMER", "loc": [ -93.78868, 39.591454 ], "pop": 1671, "state": "MO" }, { "_id": "64625", "city": "BRECKENRIDGE", "loc": [ -93.806794, 39.758205 ], "pop": 608, "state": "MO" }, { "_id": "64628", "city": "BROOKFIELD", "loc": [ -93.07194800000001, 39.784612 ], "pop": 5564, "state": "MO" }, { "_id": "64630", "city": "BROWNING", "loc": [ -93.160661, 40.028983 ], "pop": 360, "state": "MO" }, { "_id": "64631", "city": "BUCKLIN", "loc": [ -92.89281, 39.800563 ], "pop": 969, "state": "MO" }, { "_id": "64632", "city": "CAINSVILLE", "loc": [ -93.759047, 40.457768 ], "pop": 870, "state": "MO" }, { "_id": "64633", "city": "CARROLLTON", "loc": [ -93.492626, 39.367334 ], "pop": 5694, "state": "MO" }, { "_id": "64635", "city": "CHULA", "loc": [ -93.484095, 39.922606 ], "pop": 685, "state": "MO" }, { "_id": "64636", "city": "COFFEY", "loc": [ -94.02515099999999, 40.099928 ], "pop": 359, "state": "MO" }, { "_id": "64637", "city": "COWGILL", "loc": [ -93.929469, 39.564314 ], "pop": 532, "state": "MO" }, { "_id": "64638", "city": "DAWN", "loc": [ -93.596405, 39.666506 ], "pop": 468, "state": "MO" }, { "_id": "64639", "city": "DE WITT", "loc": [ -93.30158299999999, 39.358978 ], "pop": 592, "state": "MO" }, { "_id": "64640", "city": "GALLATIN", "loc": [ -93.978748, 39.902486 ], "pop": 3260, "state": "MO" }, { "_id": "64641", "city": "GALT", "loc": [ -93.395261, 40.14398 ], "pop": 607, "state": "MO" }, { "_id": "64642", "city": "GILMAN CITY", "loc": [ -93.831979, 40.145005 ], "pop": 680, "state": "MO" }, { "_id": "64643", "city": "HALE", "loc": [ -93.34448, 39.595302 ], "pop": 771, "state": "MO" }, { "_id": "64644", "city": "HAMILTON", "loc": [ -93.990898, 39.736412 ], "pop": 2706, "state": "MO" }, { "_id": "64645", "city": "HARRIS", "loc": [ -93.350106, 40.307519 ], "pop": 127, "state": "MO" }, { "_id": "64646", "city": "HUMPHREYS", "loc": [ -93.301455, 40.114448 ], "pop": 368, "state": "MO" }, { "_id": "64647", "city": "JAMESON", "loc": [ -93.95974699999999, 40.004615 ], "pop": 401, "state": "MO" }, { "_id": "64648", "city": "JAMESPORT", "loc": [ -93.78004799999999, 39.983724 ], "pop": 1933, "state": "MO" }, { "_id": "64649", "city": "KIDDER", "loc": [ -94.130005, 39.757039 ], "pop": 708, "state": "MO" }, { "_id": "64650", "city": "KINGSTON", "loc": [ -94.082694, 39.6508 ], "pop": 868, "state": "MO" }, { "_id": "64651", "city": "LACLEDE", "loc": [ -93.16797099999999, 39.7837 ], "pop": 744, "state": "MO" }, { "_id": "64652", "city": "LAREDO", "loc": [ -93.440676, 40.014397 ], "pop": 485, "state": "MO" }, { "_id": "64653", "city": "LINNEUS", "loc": [ -93.188529, 39.909945 ], "pop": 1421, "state": "MO" }, { "_id": "64654", "city": "LOCK SPRINGS", "loc": [ -93.797697, 39.907396 ], "pop": 576, "state": "MO" }, { "_id": "64655", "city": "LUCERNE", "loc": [ -93.286654, 40.438182 ], "pop": 206, "state": "MO" }, { "_id": "64656", "city": "LUDLOW", "loc": [ -93.704578, 39.655064 ], "pop": 355, "state": "MO" }, { "_id": "64657", "city": "MC FALL", "loc": [ -94.300259, 40.105071 ], "pop": 547, "state": "MO" }, { "_id": "64658", "city": "MARCELINE", "loc": [ -92.945502, 39.712485 ], "pop": 3517, "state": "MO" }, { "_id": "64659", "city": "MEADVILLE", "loc": [ -93.301389, 39.779468 ], "pop": 774, "state": "MO" }, { "_id": "64660", "city": "MENDON", "loc": [ -93.089168, 39.582849 ], "pop": 568, "state": "MO" }, { "_id": "64661", "city": "MERCER", "loc": [ -93.524197, 40.516917 ], "pop": 975, "state": "MO" }, { "_id": "64664", "city": "MOORESVILLE", "loc": [ -93.71693, 39.74249 ], "pop": 320, "state": "MO" }, { "_id": "64665", "city": "MOUNT MORIAH", "loc": [ -93.814252, 40.329164 ], "pop": 247, "state": "MO" }, { "_id": "64667", "city": "NEWTOWN", "loc": [ -93.30727899999999, 40.361227 ], "pop": 313, "state": "MO" }, { "_id": "64668", "city": "NORBORNE", "loc": [ -93.67609, 39.329903 ], "pop": 1669, "state": "MO" }, { "_id": "64670", "city": "PATTONSBURG", "loc": [ -94.13429499999999, 40.042756 ], "pop": 855, "state": "MO" }, { "_id": "64671", "city": "POLO", "loc": [ -94.074303, 39.564697 ], "pop": 1496, "state": "MO" }, { "_id": "64672", "city": "POWERSVILLE", "loc": [ -93.284436, 40.527155 ], "pop": 284, "state": "MO" }, { "_id": "64673", "city": "PRINCETON", "loc": [ -93.577394, 40.385533 ], "pop": 2467, "state": "MO" }, { "_id": "64674", "city": "PURDIN", "loc": [ -93.17001999999999, 39.952948 ], "pop": 297, "state": "MO" }, { "_id": "64676", "city": "ROTHVILLE", "loc": [ -93.046683, 39.662666 ], "pop": 440, "state": "MO" }, { "_id": "64677", "city": "SAINT CATHARINE", "loc": [ -92.99294999999999, 39.800017 ], "pop": 288, "state": "MO" }, { "_id": "64679", "city": "SPICKARD", "loc": [ -93.550291, 40.239985 ], "pop": 659, "state": "MO" }, { "_id": "64681", "city": "SUMNER", "loc": [ -93.22412799999999, 39.654992 ], "pop": 307, "state": "MO" }, { "_id": "64682", "city": "TINA", "loc": [ -93.46475, 39.551751 ], "pop": 399, "state": "MO" }, { "_id": "64683", "city": "TRENTON", "loc": [ -93.608634, 40.082335 ], "pop": 8465, "state": "MO" }, { "_id": "64686", "city": "UTICA", "loc": [ -93.62889699999999, 39.741742 ], "pop": 361, "state": "MO" }, { "_id": "64688", "city": "WHEELING", "loc": [ -93.386835, 39.801137 ], "pop": 481, "state": "MO" }, { "_id": "64689", "city": "WINSTON", "loc": [ -94.148747, 39.84995 ], "pop": 567, "state": "MO" }, { "_id": "64701", "city": "HARRISONVILLE", "loc": [ -94.32852, 38.64193 ], "pop": 12242, "state": "MO" }, { "_id": "64720", "city": "ADRIAN", "loc": [ -94.368336, 38.412473 ], "pop": 2254, "state": "MO" }, { "_id": "64722", "city": "AMORET", "loc": [ -94.57342300000001, 38.260508 ], "pop": 409, "state": "MO" }, { "_id": "64723", "city": "AMSTERDAM", "loc": [ -94.57628200000001, 38.395385 ], "pop": 884, "state": "MO" }, { "_id": "64724", "city": "APPLETON CITY", "loc": [ -94.02290000000001, 38.184779 ], "pop": 1584, "state": "MO" }, { "_id": "64725", "city": "ARCHIE", "loc": [ -94.36299200000001, 38.498612 ], "pop": 1912, "state": "MO" }, { "_id": "64726", "city": "BLAIRSTOWN", "loc": [ -93.964102, 38.522701 ], "pop": 803, "state": "MO" }, { "_id": "64728", "city": "BRONAUGH", "loc": [ -94.48603, 37.69 ], "pop": 493, "state": "MO" }, { "_id": "64730", "city": "BUTLER", "loc": [ -94.31375, 38.271245 ], "pop": 8449, "state": "MO" }, { "_id": "64733", "city": "CHILHOWEE", "loc": [ -93.865325, 38.612604 ], "pop": 951, "state": "MO" }, { "_id": "64734", "city": "CLEVELAND", "loc": [ -94.56950000000001, 38.68977 ], "pop": 2586, "state": "MO" }, { "_id": "64735", "city": "TIGHTWAD", "loc": [ -93.758906, 38.368811 ], "pop": 12259, "state": "MO" }, { "_id": "64738", "city": "COLLINS", "loc": [ -93.660849, 37.880998 ], "pop": 844, "state": "MO" }, { "_id": "64739", "city": "CREIGHTON", "loc": [ -94.09260399999999, 38.507754 ], "pop": 711, "state": "MO" }, { "_id": "64740", "city": "DEEPWATER", "loc": [ -93.73028100000001, 38.243164 ], "pop": 1233, "state": "MO" }, { "_id": "64741", "city": "DEERFIELD", "loc": [ -94.48484500000001, 37.82109 ], "pop": 966, "state": "MO" }, { "_id": "64742", "city": "DREXEL", "loc": [ -94.592765, 38.495625 ], "pop": 1181, "state": "MO" }, { "_id": "64744", "city": "EL DORADO SPRING", "loc": [ -94.030091, 37.858517 ], "pop": 6787, "state": "MO" }, { "_id": "64745", "city": "FOSTER", "loc": [ -94.53706699999999, 38.17338 ], "pop": 464, "state": "MO" }, { "_id": "64746", "city": "FREEMAN", "loc": [ -94.495561, 38.624549 ], "pop": 1509, "state": "MO" }, { "_id": "64747", "city": "GARDEN CITY", "loc": [ -94.18253199999999, 38.568082 ], "pop": 1837, "state": "MO" }, { "_id": "64748", "city": "GOLDEN CITY", "loc": [ -94.102683, 37.399535 ], "pop": 1127, "state": "MO" }, { "_id": "64750", "city": "HARWOOD", "loc": [ -94.14019399999999, 37.953028 ], "pop": 189, "state": "MO" }, { "_id": "64751", "city": "HORTON", "loc": [ -94.396438, 37.995078 ], "pop": 551, "state": "MO" }, { "_id": "64752", "city": "STOTESBURY", "loc": [ -94.56100000000001, 38.059635 ], "pop": 728, "state": "MO" }, { "_id": "64755", "city": "JASPER", "loc": [ -94.273126, 37.318224 ], "pop": 2085, "state": "MO" }, { "_id": "64756", "city": "JERICO SPRINGS", "loc": [ -94.012912, 37.661343 ], "pop": 966, "state": "MO" }, { "_id": "64759", "city": "IANTHA", "loc": [ -94.270253, 37.500221 ], "pop": 7847, "state": "MO" }, { "_id": "64760", "city": "LATOUR", "loc": [ -94.045721, 38.634847 ], "pop": 745, "state": "MO" }, { "_id": "64761", "city": "LEETON", "loc": [ -93.712321, 38.614113 ], "pop": 1723, "state": "MO" }, { "_id": "64762", "city": "LIBERAL", "loc": [ -94.520377, 37.572453 ], "pop": 1448, "state": "MO" }, { "_id": "64763", "city": "LOWRY CITY", "loc": [ -93.71135200000001, 38.140443 ], "pop": 1345, "state": "MO" }, { "_id": "64767", "city": "MILO", "loc": [ -94.304632, 37.744559 ], "pop": 439, "state": "MO" }, { "_id": "64769", "city": "MINDENMINES", "loc": [ -94.57557300000001, 37.451987 ], "pop": 544, "state": "MO" }, { "_id": "64770", "city": "MONTROSE", "loc": [ -93.995239, 38.259702 ], "pop": 643, "state": "MO" }, { "_id": "64771", "city": "MOUNDVILLE", "loc": [ -94.449645, 37.747637 ], "pop": 478, "state": "MO" }, { "_id": "64772", "city": "NEVADA", "loc": [ -94.35712700000001, 37.840853 ], "pop": 11918, "state": "MO" }, { "_id": "64776", "city": "OSCEOLA", "loc": [ -93.753621, 38.028553 ], "pop": 4684, "state": "MO" }, { "_id": "64778", "city": "RICHARDS", "loc": [ -94.55922700000001, 37.906111 ], "pop": 207, "state": "MO" }, { "_id": "64779", "city": "RICH HILL", "loc": [ -94.363454, 38.09438 ], "pop": 1630, "state": "MO" }, { "_id": "64780", "city": "ROCKVILLE", "loc": [ -94.129904, 38.076583 ], "pop": 456, "state": "MO" }, { "_id": "64783", "city": "SCHELL CITY", "loc": [ -94.15791, 38.009403 ], "pop": 809, "state": "MO" }, { "_id": "64784", "city": "SHELDON", "loc": [ -94.254835, 37.683969 ], "pop": 1281, "state": "MO" }, { "_id": "64788", "city": "URICH", "loc": [ -93.97847, 38.44489 ], "pop": 949, "state": "MO" }, { "_id": "64790", "city": "WALKER", "loc": [ -94.22930100000001, 37.893023 ], "pop": 544, "state": "MO" }, { "_id": "64801", "city": "JOPLIN", "loc": [ -94.505144, 37.096858 ], "pop": 29617, "state": "MO" }, { "_id": "64804", "city": "JOPLIN", "loc": [ -94.51025199999999, 37.046454 ], "pop": 30661, "state": "MO" }, { "_id": "64831", "city": "ANDERSON", "loc": [ -94.476648, 36.669224 ], "pop": 4477, "state": "MO" }, { "_id": "64832", "city": "ASBURY", "loc": [ -94.565484, 37.294168 ], "pop": 603, "state": "MO" }, { "_id": "64833", "city": "AVILLA", "loc": [ -94.117043, 37.194709 ], "pop": 678, "state": "MO" }, { "_id": "64834", "city": "CARL JUNCTION", "loc": [ -94.55502, 37.179479 ], "pop": 4158, "state": "MO" }, { "_id": "64835", "city": "CARTERVILLE", "loc": [ -94.43593799999999, 37.150734 ], "pop": 2397, "state": "MO" }, { "_id": "64836", "city": "CARTHAGE", "loc": [ -94.311232, 37.159686 ], "pop": 19516, "state": "MO" }, { "_id": "64840", "city": "DIAMOND", "loc": [ -94.32041, 37.005993 ], "pop": 2736, "state": "MO" }, { "_id": "64842", "city": "FAIRVIEW", "loc": [ -94.09120299999999, 36.825419 ], "pop": 568, "state": "MO" }, { "_id": "64843", "city": "GOODMAN", "loc": [ -94.39855, 36.732335 ], "pop": 2025, "state": "MO" }, { "_id": "64844", "city": "GRANBY", "loc": [ -94.264349, 36.906562 ], "pop": 3571, "state": "MO" }, { "_id": "64847", "city": "LANAGAN", "loc": [ -94.4551, 36.605956 ], "pop": 755, "state": "MO" }, { "_id": "64848", "city": "LA RUSSELL", "loc": [ -94.03287400000001, 37.17387 ], "pop": 817, "state": "MO" }, { "_id": "64850", "city": "NEOSHO", "loc": [ -94.386218, 36.870634 ], "pop": 15863, "state": "MO" }, { "_id": "64854", "city": "NOEL", "loc": [ -94.490627, 36.541668 ], "pop": 2239, "state": "MO" }, { "_id": "64855", "city": "ORONOGO", "loc": [ -94.446246, 37.243288 ], "pop": 3942, "state": "MO" }, { "_id": "64856", "city": "JANE", "loc": [ -94.351461, 36.580243 ], "pop": 2783, "state": "MO" }, { "_id": "64859", "city": "REEDS", "loc": [ -94.161272, 37.122477 ], "pop": 222, "state": "MO" }, { "_id": "64861", "city": "ROCKY COMFORT", "loc": [ -94.109066, 36.717546 ], "pop": 543, "state": "MO" }, { "_id": "64862", "city": "SARCOXIE", "loc": [ -94.11514, 37.072382 ], "pop": 2133, "state": "MO" }, { "_id": "64863", "city": "SOUTH WEST CITY", "loc": [ -94.596141, 36.531924 ], "pop": 1201, "state": "MO" }, { "_id": "64865", "city": "SENECA", "loc": [ -94.55936699999999, 36.844169 ], "pop": 5419, "state": "MO" }, { "_id": "64866", "city": "STARK CITY", "loc": [ -94.154811, 36.878538 ], "pop": 967, "state": "MO" }, { "_id": "64867", "city": "STELLA", "loc": [ -94.20858, 36.751553 ], "pop": 2154, "state": "MO" }, { "_id": "64868", "city": "TIFF CITY", "loc": [ -94.59343699999999, 36.664447 ], "pop": 364, "state": "MO" }, { "_id": "64870", "city": "WEBB CITY", "loc": [ -94.472683, 37.144 ], "pop": 7474, "state": "MO" }, { "_id": "64873", "city": "WENTWORTH", "loc": [ -94.132169, 36.980702 ], "pop": 1211, "state": "MO" }, { "_id": "64874", "city": "WHEATON", "loc": [ -94.04916, 36.765145 ], "pop": 970, "state": "MO" }, { "_id": "65001", "city": "ARGYLE", "loc": [ -92.015456, 38.298619 ], "pop": 384, "state": "MO" }, { "_id": "65010", "city": "ASHLAND", "loc": [ -92.25366200000001, 38.787771 ], "pop": 2989, "state": "MO" }, { "_id": "65011", "city": "BARNETT", "loc": [ -92.668594, 38.396696 ], "pop": 660, "state": "MO" }, { "_id": "65013", "city": "BELLE", "loc": [ -91.730299, 38.271108 ], "pop": 2874, "state": "MO" }, { "_id": "65014", "city": "BLAND", "loc": [ -91.626334, 38.307383 ], "pop": 2284, "state": "MO" }, { "_id": "65016", "city": "BONNOTS MILL", "loc": [ -91.92934099999999, 38.553282 ], "pop": 1373, "state": "MO" }, { "_id": "65017", "city": "BRUMLEY", "loc": [ -92.474732, 38.070914 ], "pop": 1127, "state": "MO" }, { "_id": "65018", "city": "CALIFORNIA", "loc": [ -92.545558, 38.622369 ], "pop": 6224, "state": "MO" }, { "_id": "65020", "city": "CAMDENTON", "loc": [ -92.76774399999999, 38.018534 ], "pop": 8006, "state": "MO" }, { "_id": "65023", "city": "CENTERTOWN", "loc": [ -92.39952099999999, 38.629705 ], "pop": 1184, "state": "MO" }, { "_id": "65024", "city": "CHAMOIS", "loc": [ -91.76967999999999, 38.652683 ], "pop": 986, "state": "MO" }, { "_id": "65025", "city": "CLARKSBURG", "loc": [ -92.67292500000001, 38.643156 ], "pop": 784, "state": "MO" }, { "_id": "65026", "city": "ELDON", "loc": [ -92.57361899999999, 38.340127 ], "pop": 8673, "state": "MO" }, { "_id": "65032", "city": "EUGENE", "loc": [ -92.368853, 38.359849 ], "pop": 1181, "state": "MO" }, { "_id": "65034", "city": "FORTUNA", "loc": [ -92.784948, 38.574391 ], "pop": 310, "state": "MO" }, { "_id": "65035", "city": "FREEBURG", "loc": [ -91.927605, 38.355085 ], "pop": 1373, "state": "MO" }, { "_id": "65037", "city": "GRAVOIS MILLS", "loc": [ -92.82302900000001, 38.258445 ], "pop": 5653, "state": "MO" }, { "_id": "65039", "city": "HARTSBURG", "loc": [ -92.286377, 38.715902 ], "pop": 1945, "state": "MO" }, { "_id": "65040", "city": "HENLEY", "loc": [ -92.312303, 38.388133 ], "pop": 952, "state": "MO" }, { "_id": "65041", "city": "BAY", "loc": [ -91.46771699999999, 38.668381 ], "pop": 4842, "state": "MO" }, { "_id": "65042", "city": "HIGH POINT", "loc": [ -92.600514, 38.478237 ], "pop": 509, "state": "MO" }, { "_id": "65043", "city": "HOLTS SUMMIT", "loc": [ -92.116345, 38.632784 ], "pop": 6642, "state": "MO" }, { "_id": "65046", "city": "JAMESTOWN", "loc": [ -92.48065099999999, 38.779292 ], "pop": 1018, "state": "MO" }, { "_id": "65047", "city": "KAISER", "loc": [ -92.579869, 38.163673 ], "pop": 1213, "state": "MO" }, { "_id": "65048", "city": "KOELTZTOWN", "loc": [ -92.048365, 38.323526 ], "pop": 185, "state": "MO" }, { "_id": "65049", "city": "FOUR SEASONS", "loc": [ -92.677555, 38.209127 ], "pop": 4404, "state": "MO" }, { "_id": "65050", "city": "LATHAM", "loc": [ -92.65364700000001, 38.550035 ], "pop": 937, "state": "MO" }, { "_id": "65051", "city": "LINN", "loc": [ -91.81945, 38.473855 ], "pop": 3836, "state": "MO" }, { "_id": "65052", "city": "LINN CREEK", "loc": [ -92.683077, 38.060524 ], "pop": 2308, "state": "MO" }, { "_id": "65053", "city": "LOHMAN", "loc": [ -92.384216, 38.548434 ], "pop": 356, "state": "MO" }, { "_id": "65054", "city": "LOOSE CREEK", "loc": [ -91.959126, 38.471715 ], "pop": 1089, "state": "MO" }, { "_id": "65058", "city": "META", "loc": [ -92.135797, 38.250039 ], "pop": 1003, "state": "MO" }, { "_id": "65059", "city": "MOKANE", "loc": [ -91.886815, 38.699839 ], "pop": 881, "state": "MO" }, { "_id": "65061", "city": "MORRISON", "loc": [ -91.657972, 38.605967 ], "pop": 267, "state": "MO" }, { "_id": "65062", "city": "MOUNT STERLING", "loc": [ -91.610315, 38.538786 ], "pop": 285, "state": "MO" }, { "_id": "65063", "city": "NEW BLOOMFIELD", "loc": [ -92.082983, 38.709996 ], "pop": 2588, "state": "MO" }, { "_id": "65064", "city": "OLEAN", "loc": [ -92.53031, 38.400059 ], "pop": 882, "state": "MO" }, { "_id": "65065", "city": "OSAGE BEACH", "loc": [ -92.666427, 38.13805 ], "pop": 3601, "state": "MO" }, { "_id": "65066", "city": "OWENSVILLE", "loc": [ -91.486679, 38.351119 ], "pop": 5980, "state": "MO" }, { "_id": "65067", "city": "PORTLAND", "loc": [ -91.70056700000001, 38.784701 ], "pop": 439, "state": "MO" }, { "_id": "65068", "city": "PRAIRIE HOME", "loc": [ -92.597376, 38.825331 ], "pop": 533, "state": "MO" }, { "_id": "65069", "city": "RHINELAND", "loc": [ -91.51510500000001, 38.763811 ], "pop": 1340, "state": "MO" }, { "_id": "65072", "city": "ROCKY MOUNT", "loc": [ -92.705921, 38.291057 ], "pop": 157, "state": "MO" }, { "_id": "65074", "city": "RUSSELLVILLE", "loc": [ -92.42912200000001, 38.500534 ], "pop": 2043, "state": "MO" }, { "_id": "65075", "city": "SAINT ELIZABETH", "loc": [ -92.263503, 38.271244 ], "pop": 701, "state": "MO" }, { "_id": "65076", "city": "SAINT THOMAS", "loc": [ -92.18938199999999, 38.391246 ], "pop": 1232, "state": "MO" }, { "_id": "65077", "city": "STEEDMAN", "loc": [ -91.788837, 38.756604 ], "pop": 458, "state": "MO" }, { "_id": "65078", "city": "STOVER", "loc": [ -92.99466700000001, 38.441352 ], "pop": 1946, "state": "MO" }, { "_id": "65079", "city": "SUNRISE BEACH", "loc": [ -92.78539499999999, 38.155845 ], "pop": 3635, "state": "MO" }, { "_id": "65080", "city": "TEBBETTS", "loc": [ -91.967316, 38.640193 ], "pop": 413, "state": "MO" }, { "_id": "65081", "city": "TIPTON", "loc": [ -92.781448, 38.654839 ], "pop": 2516, "state": "MO" }, { "_id": "65082", "city": "TUSCUMBIA", "loc": [ -92.491739, 38.238881 ], "pop": 1181, "state": "MO" }, { "_id": "65083", "city": "ULMAN", "loc": [ -92.46397899999999, 38.134141 ], "pop": 517, "state": "MO" }, { "_id": "65084", "city": "VERSAILLES", "loc": [ -92.825835, 38.436491 ], "pop": 5581, "state": "MO" }, { "_id": "65085", "city": "WESTPHALIA", "loc": [ -92.039221, 38.426968 ], "pop": 992, "state": "MO" }, { "_id": "65101", "city": "JEFFERSON CITY", "loc": [ -92.152462, 38.546212 ], "pop": 25992, "state": "MO" }, { "_id": "65109", "city": "JEFFERSON CITY", "loc": [ -92.244298, 38.577272 ], "pop": 31418, "state": "MO" }, { "_id": "65201", "city": "COLUMBIA", "loc": [ -92.30486500000001, 38.938176 ], "pop": 33668, "state": "MO" }, { "_id": "65202", "city": "COLUMBIA", "loc": [ -92.311204, 38.995019 ], "pop": 27394, "state": "MO" }, { "_id": "65203", "city": "COLUMBIA", "loc": [ -92.363865, 38.93482 ], "pop": 34914, "state": "MO" }, { "_id": "65230", "city": "ARMSTRONG", "loc": [ -92.70897600000001, 39.256585 ], "pop": 736, "state": "MO" }, { "_id": "65231", "city": "AUXVASSE", "loc": [ -91.885801, 39.012184 ], "pop": 2698, "state": "MO" }, { "_id": "65232", "city": "BENTON CITY", "loc": [ -91.766124, 39.120886 ], "pop": 300, "state": "MO" }, { "_id": "65233", "city": "BOONVILLE", "loc": [ -92.744973, 38.95364 ], "pop": 9330, "state": "MO" }, { "_id": "65236", "city": "BRUNSWICK", "loc": [ -93.118694, 39.437424 ], "pop": 1610, "state": "MO" }, { "_id": "65237", "city": "BUNCETON", "loc": [ -92.79269499999999, 38.746754 ], "pop": 1343, "state": "MO" }, { "_id": "65239", "city": "CAIRO", "loc": [ -92.440027, 39.51141 ], "pop": 1143, "state": "MO" }, { "_id": "65240", "city": "CENTRALIA", "loc": [ -92.147244, 39.196089 ], "pop": 5171, "state": "MO" }, { "_id": "65243", "city": "CLARK", "loc": [ -92.382706, 39.315293 ], "pop": 4672, "state": "MO" }, { "_id": "65244", "city": "CLIFTON HILL", "loc": [ -92.667676, 39.425985 ], "pop": 341, "state": "MO" }, { "_id": "65246", "city": "DALTON", "loc": [ -92.994366, 39.40346 ], "pop": 209, "state": "MO" }, { "_id": "65247", "city": "EXCELLO", "loc": [ -92.475705, 39.645543 ], "pop": 873, "state": "MO" }, { "_id": "65248", "city": "FAYETTE", "loc": [ -92.658287, 39.143041 ], "pop": 4805, "state": "MO" }, { "_id": "65250", "city": "FRANKLIN", "loc": [ -92.831596, 39.066818 ], "pop": 680, "state": "MO" }, { "_id": "65251", "city": "FULTON", "loc": [ -91.96055, 38.851821 ], "pop": 17506, "state": "MO" }, { "_id": "65254", "city": "GLASGOW", "loc": [ -92.831812, 39.225736 ], "pop": 1757, "state": "MO" }, { "_id": "65255", "city": "HALLSVILLE", "loc": [ -92.223855, 39.105429 ], "pop": 2476, "state": "MO" }, { "_id": "65256", "city": "HARRISBURG", "loc": [ -92.440955, 39.120312 ], "pop": 928, "state": "MO" }, { "_id": "65257", "city": "HIGBEE", "loc": [ -92.51630900000001, 39.305521 ], "pop": 932, "state": "MO" }, { "_id": "65258", "city": "HOLLIDAY", "loc": [ -92.131759, 39.490436 ], "pop": 286, "state": "MO" }, { "_id": "65259", "city": "HUNTSVILLE", "loc": [ -92.552992, 39.435371 ], "pop": 3210, "state": "MO" }, { "_id": "65260", "city": "JACKSONVILLE", "loc": [ -92.43153599999999, 39.579076 ], "pop": 473, "state": "MO" }, { "_id": "65261", "city": "KEYTESVILLE", "loc": [ -92.930187, 39.479388 ], "pop": 1354, "state": "MO" }, { "_id": "65262", "city": "KINGDOM CITY", "loc": [ -91.95200800000001, 38.95508 ], "pop": 322, "state": "MO" }, { "_id": "65263", "city": "MADISON", "loc": [ -92.22871499999999, 39.461543 ], "pop": 2000, "state": "MO" }, { "_id": "65264", "city": "MARTINSBURG", "loc": [ -91.66463, 39.09675 ], "pop": 644, "state": "MO" }, { "_id": "65265", "city": "MEXICO", "loc": [ -91.889473, 39.171233 ], "pop": 14785, "state": "MO" }, { "_id": "65270", "city": "MOBERLY", "loc": [ -92.435793, 39.420239 ], "pop": 14884, "state": "MO" }, { "_id": "65274", "city": "NEW FRANKLIN", "loc": [ -92.738601, 39.020042 ], "pop": 1595, "state": "MO" }, { "_id": "65275", "city": "PARIS", "loc": [ -92.011323, 39.493219 ], "pop": 3157, "state": "MO" }, { "_id": "65276", "city": "PILOT GROVE", "loc": [ -92.93046099999999, 38.871168 ], "pop": 1492, "state": "MO" }, { "_id": "65279", "city": "ROCHEPORT", "loc": [ -92.50785399999999, 38.975578 ], "pop": 1437, "state": "MO" }, { "_id": "65280", "city": "RUSH HILL", "loc": [ -91.68882499999999, 39.193163 ], "pop": 646, "state": "MO" }, { "_id": "65281", "city": "SALISBURY", "loc": [ -92.80144, 39.431853 ], "pop": 4022, "state": "MO" }, { "_id": "65282", "city": "SANTA FE", "loc": [ -91.82937699999999, 39.398929 ], "pop": 712, "state": "MO" }, { "_id": "65283", "city": "STOUTSVILLE", "loc": [ -91.829661, 39.559425 ], "pop": 361, "state": "MO" }, { "_id": "65284", "city": "STURGEON", "loc": [ -92.295264, 39.205705 ], "pop": 1812, "state": "MO" }, { "_id": "65285", "city": "THOMPSON", "loc": [ -92.02594499999999, 39.20258 ], "pop": 1230, "state": "MO" }, { "_id": "65286", "city": "TRIPLETT", "loc": [ -93.19277099999999, 39.501098 ], "pop": 192, "state": "MO" }, { "_id": "65287", "city": "WOOLDRIDGE", "loc": [ -92.582584, 38.919475 ], "pop": 571, "state": "MO" }, { "_id": "65301", "city": "SEDALIA", "loc": [ -93.232268, 38.696076 ], "pop": 28813, "state": "MO" }, { "_id": "65305", "city": "WHITEMAN AFB", "loc": [ -93.572514, 38.731683 ], "pop": 4222, "state": "MO" }, { "_id": "65321", "city": "BLACKBURN", "loc": [ -93.428124, 39.098776 ], "pop": 777, "state": "MO" }, { "_id": "65322", "city": "BLACKWATER", "loc": [ -92.96829099999999, 38.972659 ], "pop": 713, "state": "MO" }, { "_id": "65323", "city": "CALHOUN", "loc": [ -93.645929, 38.485842 ], "pop": 795, "state": "MO" }, { "_id": "65324", "city": "CLIMAX SPRINGS", "loc": [ -92.95371, 38.139586 ], "pop": 1840, "state": "MO" }, { "_id": "65325", "city": "COLE CAMP", "loc": [ -93.191529, 38.453124 ], "pop": 2570, "state": "MO" }, { "_id": "65326", "city": "EDWARDS", "loc": [ -93.147104, 38.190564 ], "pop": 1320, "state": "MO" }, { "_id": "65329", "city": "FLORENCE", "loc": [ -92.998606, 38.610056 ], "pop": 847, "state": "MO" }, { "_id": "65330", "city": "GILLIAM", "loc": [ -92.993222, 39.244708 ], "pop": 476, "state": "MO" }, { "_id": "65332", "city": "GREEN RIDGE", "loc": [ -93.437395, 38.618983 ], "pop": 1198, "state": "MO" }, { "_id": "65333", "city": "HOUSTONIA", "loc": [ -93.332531, 38.910581 ], "pop": 699, "state": "MO" }, { "_id": "65334", "city": "HUGHESVILLE", "loc": [ -93.215895, 38.84944 ], "pop": 1279, "state": "MO" }, { "_id": "65335", "city": "IONIA", "loc": [ -93.32235799999999, 38.501887 ], "pop": 175, "state": "MO" }, { "_id": "65336", "city": "KNOB NOSTER", "loc": [ -93.556422, 38.746932 ], "pop": 4455, "state": "MO" }, { "_id": "65337", "city": "LA MONTE", "loc": [ -93.43126599999999, 38.775256 ], "pop": 1570, "state": "MO" }, { "_id": "65338", "city": "LINCOLN", "loc": [ -93.3668, 38.407271 ], "pop": 1810, "state": "MO" }, { "_id": "65339", "city": "GRAND PASS", "loc": [ -93.381325, 39.195108 ], "pop": 622, "state": "MO" }, { "_id": "65340", "city": "NAPTON", "loc": [ -93.196017, 39.10983 ], "pop": 15086, "state": "MO" }, { "_id": "65344", "city": "MIAMI", "loc": [ -93.19678, 39.282095 ], "pop": 569, "state": "MO" }, { "_id": "65345", "city": "MORA", "loc": [ -93.227232, 38.520726 ], "pop": 132, "state": "MO" }, { "_id": "65347", "city": "NELSON", "loc": [ -93.031102, 39.010447 ], "pop": 836, "state": "MO" }, { "_id": "65348", "city": "OTTERVILLE", "loc": [ -93.010819, 38.71607 ], "pop": 853, "state": "MO" }, { "_id": "65349", "city": "SLATER", "loc": [ -93.05467400000001, 39.216273 ], "pop": 2872, "state": "MO" }, { "_id": "65350", "city": "SMITHTON", "loc": [ -93.10807200000001, 38.649973 ], "pop": 1669, "state": "MO" }, { "_id": "65351", "city": "SWEET SPRINGS", "loc": [ -93.424683, 38.965953 ], "pop": 2385, "state": "MO" }, { "_id": "65354", "city": "SYRACUSE", "loc": [ -92.882265, 38.637423 ], "pop": 730, "state": "MO" }, { "_id": "65355", "city": "WARSAW", "loc": [ -93.337279, 38.250186 ], "pop": 8108, "state": "MO" }, { "_id": "65360", "city": "WINDSOR", "loc": [ -93.526864, 38.52719 ], "pop": 3453, "state": "MO" }, { "_id": "65401", "city": "ROLLA", "loc": [ -91.76034799999999, 37.948527 ], "pop": 24377, "state": "MO" }, { "_id": "65433", "city": "BENDAVIS", "loc": [ -92.228174, 37.246803 ], "pop": 44, "state": "MO" }, { "_id": "65436", "city": "BEULAH", "loc": [ -91.878714, 37.644469 ], "pop": 546, "state": "MO" }, { "_id": "65438", "city": "BIRCH TREE", "loc": [ -91.50082, 36.947589 ], "pop": 2586, "state": "MO" }, { "_id": "65439", "city": "BIXBY", "loc": [ -91.083461, 37.672244 ], "pop": 464, "state": "MO" }, { "_id": "65440", "city": "BOSS", "loc": [ -91.210905, 37.637282 ], "pop": 457, "state": "MO" }, { "_id": "65441", "city": "BOURBON", "loc": [ -91.22254, 38.172039 ], "pop": 4456, "state": "MO" }, { "_id": "65443", "city": "BRINKTOWN", "loc": [ -92.12310600000001, 38.067282 ], "pop": 946, "state": "MO" }, { "_id": "65444", "city": "BUCYRUS", "loc": [ -92.046536, 37.397197 ], "pop": 1416, "state": "MO" }, { "_id": "65446", "city": "CHERRYVILLE", "loc": [ -91.234807, 37.806601 ], "pop": 861, "state": "MO" }, { "_id": "65449", "city": "COOK STATION", "loc": [ -91.461631, 37.855234 ], "pop": 347, "state": "MO" }, { "_id": "65452", "city": "CROCKER", "loc": [ -92.269998, 37.944611 ], "pop": 2954, "state": "MO" }, { "_id": "65453", "city": "CUBA", "loc": [ -91.40814, 38.092553 ], "pop": 7466, "state": "MO" }, { "_id": "65456", "city": "DAVISVILLE", "loc": [ -91.13287200000001, 37.792596 ], "pop": 286, "state": "MO" }, { "_id": "65457", "city": "DEVILS ELBOW", "loc": [ -92.08569300000001, 37.85026 ], "pop": 1717, "state": "MO" }, { "_id": "65459", "city": "DIXON", "loc": [ -92.089662, 37.984766 ], "pop": 4779, "state": "MO" }, { "_id": "65461", "city": "DUKE", "loc": [ -91.99306300000001, 37.655001 ], "pop": 166, "state": "MO" }, { "_id": "65462", "city": "EDGAR SPRINGS", "loc": [ -91.890579, 37.736505 ], "pop": 1026, "state": "MO" }, { "_id": "65463", "city": "ELDRIDGE", "loc": [ -92.738202, 37.83456 ], "pop": 892, "state": "MO" }, { "_id": "65464", "city": "ELK CREEK", "loc": [ -91.998812, 37.217087 ], "pop": 540, "state": "MO" }, { "_id": "65466", "city": "EMINENCE", "loc": [ -91.451933, 37.162556 ], "pop": 2450, "state": "MO" }, { "_id": "65468", "city": "EUNICE", "loc": [ -91.723191, 37.212277 ], "pop": 215, "state": "MO" }, { "_id": "65470", "city": "FALCON", "loc": [ -92.34656200000001, 37.606099 ], "pop": 561, "state": "MO" }, { "_id": "65473", "city": "FORT LEONARD WOO", "loc": [ -92.126345, 37.759856 ], "pop": 16140, "state": "MO" }, { "_id": "65479", "city": "HARTSHORN", "loc": [ -91.683418, 37.284306 ], "pop": 306, "state": "MO" }, { "_id": "65483", "city": "HOUSTON", "loc": [ -91.95298200000001, 37.321829 ], "pop": 4497, "state": "MO" }, { "_id": "65484", "city": "HUGGINS", "loc": [ -92.148605, 37.266224 ], "pop": 593, "state": "MO" }, { "_id": "65486", "city": "IBERIA", "loc": [ -92.298897, 38.121926 ], "pop": 3704, "state": "MO" }, { "_id": "65501", "city": "JADWIN", "loc": [ -91.51588700000001, 37.473619 ], "pop": 374, "state": "MO" }, { "_id": "65529", "city": "JEROME", "loc": [ -91.99057000000001, 37.92543 ], "pop": 391, "state": "MO" }, { "_id": "65534", "city": "LAQUEY", "loc": [ -92.337901, 37.749378 ], "pop": 798, "state": "MO" }, { "_id": "65535", "city": "LEASBURG", "loc": [ -91.2488, 38.081054 ], "pop": 1061, "state": "MO" }, { "_id": "65536", "city": "LEBANON", "loc": [ -92.655029, 37.685049 ], "pop": 20859, "state": "MO" }, { "_id": "65540", "city": "ANUTT", "loc": [ -91.715862, 37.743731 ], "pop": 635, "state": "MO" }, { "_id": "65541", "city": "LENOX", "loc": [ -91.727735, 37.640757 ], "pop": 640, "state": "MO" }, { "_id": "65542", "city": "LICKING", "loc": [ -91.855585, 37.509082 ], "pop": 3545, "state": "MO" }, { "_id": "65543", "city": "LYNCHBURG", "loc": [ -92.320196, 37.505357 ], "pop": 297, "state": "MO" }, { "_id": "65548", "city": "MOUNTAIN VIEW", "loc": [ -91.709937, 36.989197 ], "pop": 3721, "state": "MO" }, { "_id": "65550", "city": "NEWBURG", "loc": [ -91.880683, 37.900778 ], "pop": 2972, "state": "MO" }, { "_id": "65552", "city": "PLATO", "loc": [ -92.170913, 37.512231 ], "pop": 1479, "state": "MO" }, { "_id": "65555", "city": "RAYMONDVILLE", "loc": [ -91.81308900000001, 37.356913 ], "pop": 1145, "state": "MO" }, { "_id": "65556", "city": "RICHLAND", "loc": [ -92.39624499999999, 37.852752 ], "pop": 3643, "state": "MO" }, { "_id": "65557", "city": "ROBY", "loc": [ -92.12218799999999, 37.496993 ], "pop": 184, "state": "MO" }, { "_id": "65559", "city": "SAINT JAMES", "loc": [ -91.60756499999999, 38.005622 ], "pop": 6315, "state": "MO" }, { "_id": "65560", "city": "SALEM", "loc": [ -91.525809, 37.616952 ], "pop": 12088, "state": "MO" }, { "_id": "65564", "city": "SOLO", "loc": [ -91.95990500000001, 37.167052 ], "pop": 309, "state": "MO" }, { "_id": "65565", "city": "BERRYMAN", "loc": [ -91.329337, 37.962998 ], "pop": 4323, "state": "MO" }, { "_id": "65566", "city": "VIBURNUM", "loc": [ -91.128922, 37.715066 ], "pop": 844, "state": "MO" }, { "_id": "65567", "city": "STOUTLAND", "loc": [ -92.51137300000001, 37.869338 ], "pop": 1637, "state": "MO" }, { "_id": "65570", "city": "SUCCESS", "loc": [ -92.003621, 37.480533 ], "pop": 210, "state": "MO" }, { "_id": "65571", "city": "SUMMERSVILLE", "loc": [ -91.68277, 37.148352 ], "pop": 1199, "state": "MO" }, { "_id": "65573", "city": "TERESITA", "loc": [ -91.596553, 36.999728 ], "pop": 573, "state": "MO" }, { "_id": "65580", "city": "VICHY", "loc": [ -91.77875, 38.097958 ], "pop": 977, "state": "MO" }, { "_id": "65582", "city": "VIENNA", "loc": [ -91.94220799999999, 38.191926 ], "pop": 1956, "state": "MO" }, { "_id": "65583", "city": "SAINT ROBERT", "loc": [ -92.198944, 37.817515 ], "pop": 12431, "state": "MO" }, { "_id": "65586", "city": "WESCO", "loc": [ -91.349028, 37.873185 ], "pop": 460, "state": "MO" }, { "_id": "65588", "city": "WINONA", "loc": [ -91.312059, 37.016869 ], "pop": 2065, "state": "MO" }, { "_id": "65589", "city": "YUKON", "loc": [ -91.824377, 37.231108 ], "pop": 476, "state": "MO" }, { "_id": "65590", "city": "LONG LANE", "loc": [ -92.930853, 37.580769 ], "pop": 1589, "state": "MO" }, { "_id": "65591", "city": "MONTREAL", "loc": [ -92.547031, 37.985108 ], "pop": 759, "state": "MO" }, { "_id": "65601", "city": "ALDRICH", "loc": [ -93.557642, 37.505667 ], "pop": 1006, "state": "MO" }, { "_id": "65603", "city": "ARCOLA", "loc": [ -93.858718, 37.531254 ], "pop": 420, "state": "MO" }, { "_id": "65604", "city": "ASH GROVE", "loc": [ -93.57813, 37.315972 ], "pop": 1909, "state": "MO" }, { "_id": "65605", "city": "JENKINS", "loc": [ -93.71238, 36.947661 ], "pop": 10006, "state": "MO" }, { "_id": "65606", "city": "RIVERTON", "loc": [ -91.392743, 36.702543 ], "pop": 3224, "state": "MO" }, { "_id": "65608", "city": "AVA", "loc": [ -92.67654400000001, 36.940717 ], "pop": 8246, "state": "MO" }, { "_id": "65609", "city": "BAKERSFIELD", "loc": [ -92.150679, 36.53323 ], "pop": 560, "state": "MO" }, { "_id": "65610", "city": "BILLINGS", "loc": [ -93.547629, 37.062841 ], "pop": 2408, "state": "MO" }, { "_id": "65611", "city": "BLUE EYE", "loc": [ -93.42994400000001, 36.54321 ], "pop": 2148, "state": "MO" }, { "_id": "65612", "city": "BOIS D ARC", "loc": [ -93.54472199999999, 37.221417 ], "pop": 2410, "state": "MO" }, { "_id": "65613", "city": "BOLIVAR", "loc": [ -93.412631, 37.608502 ], "pop": 10671, "state": "MO" }, { "_id": "65614", "city": "BRADLEYVILLE", "loc": [ -92.915116, 36.765908 ], "pop": 428, "state": "MO" }, { "_id": "65616", "city": "MARVEL CAVE PARK", "loc": [ -93.24378900000001, 36.655755 ], "pop": 7658, "state": "MO" }, { "_id": "65617", "city": "BRIGHTON", "loc": [ -93.36027900000001, 37.472807 ], "pop": 920, "state": "MO" }, { "_id": "65618", "city": "BRIXEY", "loc": [ -92.40264500000001, 36.758966 ], "pop": 198, "state": "MO" }, { "_id": "65619", "city": "BROOKLINE STATIO", "loc": [ -93.383467, 37.127184 ], "pop": 4541, "state": "MO" }, { "_id": "65620", "city": "BRUNER", "loc": [ -92.969241, 36.999002 ], "pop": 737, "state": "MO" }, { "_id": "65622", "city": "BUFFALO", "loc": [ -93.10422800000001, 37.549842 ], "pop": 4176, "state": "MO" }, { "_id": "65623", "city": "BUTTERFIELD", "loc": [ -93.912609, 36.745066 ], "pop": 684, "state": "MO" }, { "_id": "65624", "city": "CAPE FAIR", "loc": [ -93.524255, 36.693776 ], "pop": 1783, "state": "MO" }, { "_id": "65625", "city": "CASSVILLE", "loc": [ -93.84667, 36.678386 ], "pop": 5416, "state": "MO" }, { "_id": "65626", "city": "CAULFIELD", "loc": [ -92.067773, 36.60353 ], "pop": 1941, "state": "MO" }, { "_id": "65627", "city": "CEDARCREEK", "loc": [ -93.017239, 36.571013 ], "pop": 407, "state": "MO" }, { "_id": "65629", "city": "CHADWICK", "loc": [ -93.04508199999999, 36.922041 ], "pop": 326, "state": "MO" }, { "_id": "65630", "city": "CHESTNUTRIDGE", "loc": [ -93.10121700000001, 36.835283 ], "pop": 188, "state": "MO" }, { "_id": "65631", "city": "CLEVER", "loc": [ -93.44747, 37.034796 ], "pop": 1728, "state": "MO" }, { "_id": "65632", "city": "CONWAY", "loc": [ -92.7891, 37.508472 ], "pop": 1451, "state": "MO" }, { "_id": "65633", "city": "CRANE", "loc": [ -93.530339, 36.925771 ], "pop": 2918, "state": "MO" }, { "_id": "65634", "city": "CROSS TIMBERS", "loc": [ -93.19781, 38.023873 ], "pop": 612, "state": "MO" }, { "_id": "65635", "city": "DADEVILLE", "loc": [ -93.695562, 37.510458 ], "pop": 774, "state": "MO" }, { "_id": "65637", "city": "DORA", "loc": [ -92.237796, 36.756009 ], "pop": 1163, "state": "MO" }, { "_id": "65638", "city": "DRURY", "loc": [ -92.36639599999999, 36.93193 ], "pop": 735, "state": "MO" }, { "_id": "65640", "city": "DUNNEGAN", "loc": [ -93.52160499999999, 37.703137 ], "pop": 755, "state": "MO" }, { "_id": "65641", "city": "EAGLE ROCK", "loc": [ -93.733609, 36.548035 ], "pop": 1062, "state": "MO" }, { "_id": "65644", "city": "ELKLAND", "loc": [ -93.020983, 37.433591 ], "pop": 1136, "state": "MO" }, { "_id": "65646", "city": "EVERTON", "loc": [ -93.68943400000001, 37.235428 ], "pop": 675, "state": "MO" }, { "_id": "65647", "city": "EXETER", "loc": [ -93.970209, 36.681498 ], "pop": 2264, "state": "MO" }, { "_id": "65648", "city": "FAIR GROVE", "loc": [ -93.142824, 37.372143 ], "pop": 2079, "state": "MO" }, { "_id": "65649", "city": "FAIR PLAY", "loc": [ -93.60635499999999, 37.633496 ], "pop": 1533, "state": "MO" }, { "_id": "65650", "city": "FLEMINGTON", "loc": [ -93.447131, 37.780268 ], "pop": 642, "state": "MO" }, { "_id": "65652", "city": "FORDLAND", "loc": [ -92.911148, 37.14474 ], "pop": 2080, "state": "MO" }, { "_id": "65653", "city": "FORSYTH", "loc": [ -93.114968, 36.69548 ], "pop": 3870, "state": "MO" }, { "_id": "65654", "city": "FREISTATT", "loc": [ -93.89614400000001, 37.017563 ], "pop": 515, "state": "MO" }, { "_id": "65655", "city": "GAINESVILLE", "loc": [ -92.416151, 36.590101 ], "pop": 1987, "state": "MO" }, { "_id": "65656", "city": "GALENA", "loc": [ -93.48112999999999, 36.819835 ], "pop": 2307, "state": "MO" }, { "_id": "65657", "city": "GARRISON", "loc": [ -92.99850000000001, 36.860997 ], "pop": 362, "state": "MO" }, { "_id": "65658", "city": "GOLDEN", "loc": [ -93.62298800000001, 36.562486 ], "pop": 1663, "state": "MO" }, { "_id": "65659", "city": "GOODSON", "loc": [ -93.237528, 37.707534 ], "pop": 379, "state": "MO" }, { "_id": "65660", "city": "GRAFF", "loc": [ -92.264726, 37.326214 ], "pop": 271, "state": "MO" }, { "_id": "65661", "city": "GREENFIELD", "loc": [ -93.840689, 37.419662 ], "pop": 2041, "state": "MO" }, { "_id": "65662", "city": "GROVESPRING", "loc": [ -92.60014099999999, 37.494667 ], "pop": 2121, "state": "MO" }, { "_id": "65663", "city": "HALF WAY", "loc": [ -93.241989, 37.601795 ], "pop": 1270, "state": "MO" }, { "_id": "65666", "city": "HARDENVILLE", "loc": [ -92.367766, 36.592625 ], "pop": 267, "state": "MO" }, { "_id": "65667", "city": "HARTVILLE", "loc": [ -92.518058, 37.273453 ], "pop": 3040, "state": "MO" }, { "_id": "65668", "city": "HERMITAGE", "loc": [ -93.29790199999999, 37.896853 ], "pop": 2575, "state": "MO" }, { "_id": "65669", "city": "HIGHLANDVILLE", "loc": [ -93.26802000000001, 36.94077 ], "pop": 2106, "state": "MO" }, { "_id": "65672", "city": "HOLLISTER", "loc": [ -93.228585, 36.610727 ], "pop": 5515, "state": "MO" }, { "_id": "65674", "city": "HUMANSVILLE", "loc": [ -93.579531, 37.792282 ], "pop": 1541, "state": "MO" }, { "_id": "65675", "city": "HURLEY", "loc": [ -93.476803, 36.925425 ], "pop": 766, "state": "MO" }, { "_id": "65676", "city": "ISABELLA", "loc": [ -92.605277, 36.574924 ], "pop": 563, "state": "MO" }, { "_id": "65679", "city": "KIRBYVILLE", "loc": [ -93.168256, 36.642615 ], "pop": 1794, "state": "MO" }, { "_id": "65680", "city": "KISSEE MILLS", "loc": [ -93.037733, 36.670446 ], "pop": 826, "state": "MO" }, { "_id": "65681", "city": "LAMPE", "loc": [ -93.45160199999999, 36.576725 ], "pop": 1087, "state": "MO" }, { "_id": "65682", "city": "LOCKWOOD", "loc": [ -93.86715, 37.386605 ], "pop": 4042, "state": "MO" }, { "_id": "65685", "city": "LOUISBURG", "loc": [ -93.10069900000001, 37.682843 ], "pop": 4530, "state": "MO" }, { "_id": "65686", "city": "KIMBERLING CITY", "loc": [ -93.43720999999999, 36.63928 ], "pop": 3208, "state": "MO" }, { "_id": "65688", "city": "BRANDSVILLE", "loc": [ -91.735536, 36.584925 ], "pop": 794, "state": "MO" }, { "_id": "65689", "city": "CABOOL", "loc": [ -92.11440899999999, 37.131366 ], "pop": 4127, "state": "MO" }, { "_id": "65690", "city": "COUCH", "loc": [ -91.330991, 36.565268 ], "pop": 995, "state": "MO" }, { "_id": "65692", "city": "KOSHKONONG", "loc": [ -91.630411, 36.605553 ], "pop": 727, "state": "MO" }, { "_id": "65701", "city": "MC CLURG", "loc": [ -92.818018, 36.751465 ], "pop": 76, "state": "MO" }, { "_id": "65702", "city": "MACOMB", "loc": [ -92.48206999999999, 37.104947 ], "pop": 533, "state": "MO" }, { "_id": "65704", "city": "MANSFIELD", "loc": [ -92.593553, 37.1273 ], "pop": 3368, "state": "MO" }, { "_id": "65705", "city": "MARIONVILLE", "loc": [ -93.641345, 37.000906 ], "pop": 3305, "state": "MO" }, { "_id": "65706", "city": "MARSHFIELD", "loc": [ -92.925033, 37.331178 ], "pop": 10026, "state": "MO" }, { "_id": "65707", "city": "MILLER", "loc": [ -93.84218799999999, 37.222454 ], "pop": 1986, "state": "MO" }, { "_id": "65708", "city": "MONETT", "loc": [ -93.925766, 36.921242 ], "pop": 9297, "state": "MO" }, { "_id": "65710", "city": "MORRISVILLE", "loc": [ -93.427486, 37.468588 ], "pop": 689, "state": "MO" }, { "_id": "65711", "city": "MOUNTAIN GROVE", "loc": [ -92.28389300000001, 37.162638 ], "pop": 7623, "state": "MO" }, { "_id": "65712", "city": "MOUNT VERNON", "loc": [ -93.79763199999999, 37.104466 ], "pop": 6685, "state": "MO" }, { "_id": "65713", "city": "NIANGUA", "loc": [ -92.776337, 37.398537 ], "pop": 2628, "state": "MO" }, { "_id": "65714", "city": "NIXA", "loc": [ -93.29717599999999, 37.051154 ], "pop": 11346, "state": "MO" }, { "_id": "65715", "city": "NOBLE", "loc": [ -92.57686, 36.744052 ], "pop": 103, "state": "MO" }, { "_id": "65717", "city": "NORWOOD", "loc": [ -92.408209, 37.068696 ], "pop": 1535, "state": "MO" }, { "_id": "65720", "city": "OLDFIELD", "loc": [ -93.032526, 36.970416 ], "pop": 409, "state": "MO" }, { "_id": "65721", "city": "OZARK", "loc": [ -93.20221100000001, 37.016926 ], "pop": 8437, "state": "MO" }, { "_id": "65722", "city": "PHILLIPSBURG", "loc": [ -92.741631, 37.583177 ], "pop": 1369, "state": "MO" }, { "_id": "65723", "city": "PIERCE CITY", "loc": [ -94.00241, 36.972992 ], "pop": 2795, "state": "MO" }, { "_id": "65724", "city": "PITTSBURG", "loc": [ -93.335615, 37.8442 ], "pop": 610, "state": "MO" }, { "_id": "65725", "city": "PLEASANT HOPE", "loc": [ -93.26173300000001, 37.4615 ], "pop": 2079, "state": "MO" }, { "_id": "65727", "city": "POLK", "loc": [ -93.294065, 37.752928 ], "pop": 725, "state": "MO" }, { "_id": "65728", "city": "PONCE DE LEON", "loc": [ -93.36705499999999, 36.89054 ], "pop": 435, "state": "MO" }, { "_id": "65729", "city": "PONTIAC", "loc": [ -92.561221, 36.524804 ], "pop": 293, "state": "MO" }, { "_id": "65730", "city": "POWELL", "loc": [ -94.167541, 36.556252 ], "pop": 1681, "state": "MO" }, { "_id": "65731", "city": "POWERSITE", "loc": [ -93.09001499999999, 36.630656 ], "pop": 742, "state": "MO" }, { "_id": "65732", "city": "PRESTON", "loc": [ -93.171295, 37.939025 ], "pop": 753, "state": "MO" }, { "_id": "65733", "city": "PROTEM", "loc": [ -92.829689, 36.546336 ], "pop": 375, "state": "MO" }, { "_id": "65734", "city": "PURDY", "loc": [ -93.916376, 36.806917 ], "pop": 2906, "state": "MO" }, { "_id": "65735", "city": "QUINCY", "loc": [ -93.471281, 38.002925 ], "pop": 241, "state": "MO" }, { "_id": "65737", "city": "BRANSON WEST", "loc": [ -93.372182, 36.694658 ], "pop": 4426, "state": "MO" }, { "_id": "65738", "city": "REPUBLIC", "loc": [ -93.480041, 37.123017 ], "pop": 8312, "state": "MO" }, { "_id": "65739", "city": "RIDGEDALE", "loc": [ -93.27780799999999, 36.524662 ], "pop": 809, "state": "MO" }, { "_id": "65740", "city": "ROCKAWAY BEACH", "loc": [ -93.17153500000001, 36.713686 ], "pop": 1354, "state": "MO" }, { "_id": "65742", "city": "ROGERSVILLE", "loc": [ -93.09644900000001, 37.131047 ], "pop": 9409, "state": "MO" }, { "_id": "65744", "city": "RUETER", "loc": [ -92.918792, 36.631415 ], "pop": 180, "state": "MO" }, { "_id": "65745", "city": "SELIGMAN", "loc": [ -93.935851, 36.527593 ], "pop": 1392, "state": "MO" }, { "_id": "65746", "city": "SEYMOUR", "loc": [ -92.785659, 37.166726 ], "pop": 5311, "state": "MO" }, { "_id": "65747", "city": "SHELL KNOB", "loc": [ -93.624855, 36.616672 ], "pop": 821, "state": "MO" }, { "_id": "65752", "city": "SOUTH GREENFIELD", "loc": [ -93.844482, 37.374256 ], "pop": 248, "state": "MO" }, { "_id": "65753", "city": "SPARTA", "loc": [ -93.106483, 36.977524 ], "pop": 1879, "state": "MO" }, { "_id": "65754", "city": "SPOKANE", "loc": [ -93.275447, 36.863639 ], "pop": 968, "state": "MO" }, { "_id": "65755", "city": "SQUIRES", "loc": [ -92.58444299999999, 36.850406 ], "pop": 536, "state": "MO" }, { "_id": "65756", "city": "STOTTS CITY", "loc": [ -93.954329, 37.103148 ], "pop": 497, "state": "MO" }, { "_id": "65757", "city": "STRAFFORD", "loc": [ -93.10663, 37.279718 ], "pop": 3226, "state": "MO" }, { "_id": "65758", "city": "SYCAMORE", "loc": [ -92.354355, 36.67179 ], "pop": 97, "state": "MO" }, { "_id": "65759", "city": "TANEYVILLE", "loc": [ -93.027951, 36.740497 ], "pop": 731, "state": "MO" }, { "_id": "65760", "city": "TECUMSEH", "loc": [ -92.259782, 36.58751 ], "pop": 444, "state": "MO" }, { "_id": "65761", "city": "DUGGINSVILLE", "loc": [ -92.70186099999999, 36.569019 ], "pop": 962, "state": "MO" }, { "_id": "65762", "city": "NOTTINGHILL", "loc": [ -92.65778899999999, 36.707546 ], "pop": 617, "state": "MO" }, { "_id": "65764", "city": "TUNAS", "loc": [ -92.980788, 37.839196 ], "pop": 827, "state": "MO" }, { "_id": "65766", "city": "UDALL", "loc": [ -92.23345, 36.525291 ], "pop": 184, "state": "MO" }, { "_id": "65767", "city": "URBANA", "loc": [ -93.150972, 37.85233 ], "pop": 755, "state": "MO" }, { "_id": "65768", "city": "VANZANT", "loc": [ -92.21006800000001, 36.977829 ], "pop": 1048, "state": "MO" }, { "_id": "65769", "city": "VERONA", "loc": [ -93.800505, 36.936964 ], "pop": 2021, "state": "MO" }, { "_id": "65770", "city": "WALNUT GROVE", "loc": [ -93.504356, 37.394253 ], "pop": 2374, "state": "MO" }, { "_id": "65771", "city": "WALNUT SHADE", "loc": [ -93.21482399999999, 36.770395 ], "pop": 722, "state": "MO" }, { "_id": "65772", "city": "WASHBURN", "loc": [ -93.991974, 36.580703 ], "pop": 1526, "state": "MO" }, { "_id": "65773", "city": "SOUDER", "loc": [ -92.58991, 36.782631 ], "pop": 215, "state": "MO" }, { "_id": "65774", "city": "WEAUBLEAU", "loc": [ -93.53435500000001, 37.880393 ], "pop": 814, "state": "MO" }, { "_id": "65775", "city": "WEST PLAINS", "loc": [ -91.871681, 36.728418 ], "pop": 16362, "state": "MO" }, { "_id": "65776", "city": "SOUTH FORK", "loc": [ -91.91248400000001, 36.629312 ], "pop": 194, "state": "MO" }, { "_id": "65777", "city": "MOODY", "loc": [ -91.989756, 36.533018 ], "pop": 328, "state": "MO" }, { "_id": "65778", "city": "MYRTLE", "loc": [ -91.270584, 36.521697 ], "pop": 404, "state": "MO" }, { "_id": "65779", "city": "WHEATLAND", "loc": [ -93.398129, 37.910283 ], "pop": 1730, "state": "MO" }, { "_id": "65781", "city": "WILLARD", "loc": [ -93.425861, 37.296153 ], "pop": 3690, "state": "MO" }, { "_id": "65783", "city": "WINDYVILLE", "loc": [ -92.93789099999999, 37.718209 ], "pop": 769, "state": "MO" }, { "_id": "65784", "city": "ZANONI", "loc": [ -92.304677, 36.692518 ], "pop": 274, "state": "MO" }, { "_id": "65785", "city": "STOCKTON", "loc": [ -93.796013, 37.72408 ], "pop": 4635, "state": "MO" }, { "_id": "65786", "city": "MACKS CREEK", "loc": [ -92.96034899999999, 37.961563 ], "pop": 1741, "state": "MO" }, { "_id": "65787", "city": "ROACH", "loc": [ -92.807456, 38.008825 ], "pop": 1542, "state": "MO" }, { "_id": "65788", "city": "PEACE VALLEY", "loc": [ -91.769598, 36.837974 ], "pop": 1074, "state": "MO" }, { "_id": "65789", "city": "POMONA", "loc": [ -91.913668, 36.84409 ], "pop": 1309, "state": "MO" }, { "_id": "65790", "city": "POTTERSVILLE", "loc": [ -92.044044, 36.706822 ], "pop": 1227, "state": "MO" }, { "_id": "65791", "city": "THAYER", "loc": [ -91.541803, 36.532714 ], "pop": 3473, "state": "MO" }, { "_id": "65793", "city": "WILLOW SPRINGS", "loc": [ -91.940545, 36.995812 ], "pop": 5968, "state": "MO" }, { "_id": "65802", "city": "SPRINGFIELD", "loc": [ -93.29903, 37.211663 ], "pop": 33216, "state": "MO" }, { "_id": "65803", "city": "SPRINGFIELD", "loc": [ -93.29123199999999, 37.259327 ], "pop": 41361, "state": "MO" }, { "_id": "65804", "city": "SPRINGFIELD", "loc": [ -93.252154, 37.165361 ], "pop": 33507, "state": "MO" }, { "_id": "65806", "city": "SPRINGFIELD", "loc": [ -93.29710799999999, 37.203057 ], "pop": 11386, "state": "MO" }, { "_id": "65807", "city": "SPRINGFIELD", "loc": [ -93.308457, 37.166799 ], "pop": 46691, "state": "MO" }, { "_id": "65809", "city": "SPRINGFIELD", "loc": [ -93.205742, 37.185223 ], "pop": 5606, "state": "MO" }, { "_id": "65810", "city": "SPRINGFIELD", "loc": [ -93.28959399999999, 37.113647 ], "pop": 3982, "state": "MO" }, { "_id": "66002", "city": "ATCHISON", "loc": [ -95.130408, 39.559411 ], "pop": 13463, "state": "KS" }, { "_id": "66006", "city": "BALDWIN CITY", "loc": [ -95.227621, 38.795308 ], "pop": 6990, "state": "KS" }, { "_id": "66007", "city": "BASEHOR", "loc": [ -94.95703399999999, 39.128137 ], "pop": 5182, "state": "KS" }, { "_id": "66008", "city": "BENDENA", "loc": [ -95.176458, 39.717379 ], "pop": 334, "state": "KS" }, { "_id": "66010", "city": "BLUE MOUND", "loc": [ -95.005269, 38.090772 ], "pop": 484, "state": "KS" }, { "_id": "66012", "city": "LAKE OF THE FORE", "loc": [ -94.886098, 39.068455 ], "pop": 6315, "state": "KS" }, { "_id": "66013", "city": "BUCYRUS", "loc": [ -94.742947, 38.687017 ], "pop": 989, "state": "KS" }, { "_id": "66014", "city": "CENTERVILLE", "loc": [ -94.993431, 38.213032 ], "pop": 381, "state": "KS" }, { "_id": "66015", "city": "COLONY", "loc": [ -95.328705, 38.076147 ], "pop": 806, "state": "KS" }, { "_id": "66016", "city": "CUMMINGS", "loc": [ -95.286281, 39.482976 ], "pop": 647, "state": "KS" }, { "_id": "66017", "city": "DENTON", "loc": [ -95.274377, 39.715358 ], "pop": 378, "state": "KS" }, { "_id": "66018", "city": "DE SOTO", "loc": [ -94.964713, 38.956563 ], "pop": 4167, "state": "KS" }, { "_id": "66020", "city": "EASTON", "loc": [ -95.05435199999999, 39.362054 ], "pop": 2801, "state": "KS" }, { "_id": "66021", "city": "EDGERTON", "loc": [ -95.009377, 38.781084 ], "pop": 2101, "state": "KS" }, { "_id": "66023", "city": "EFFINGHAM", "loc": [ -95.41982, 39.502259 ], "pop": 1303, "state": "KS" }, { "_id": "66025", "city": "EUDORA", "loc": [ -95.102206, 38.933043 ], "pop": 4011, "state": "KS" }, { "_id": "66026", "city": "FONTANA", "loc": [ -94.871788, 38.410153 ], "pop": 774, "state": "KS" }, { "_id": "66027", "city": "FORT LEAVENWORTH", "loc": [ -94.926547, 39.348508 ], "pop": 12630, "state": "KS" }, { "_id": "66030", "city": "GARDNER", "loc": [ -94.91567499999999, 38.80754 ], "pop": 5356, "state": "KS" }, { "_id": "66031", "city": "INDUSTRIAL AIRPO", "loc": [ -94.93226300000001, 38.850264 ], "pop": 723, "state": "KS" }, { "_id": "66032", "city": "GARNETT", "loc": [ -95.25936799999999, 38.285907 ], "pop": 5081, "state": "KS" }, { "_id": "66033", "city": "GREELEY", "loc": [ -95.11875999999999, 38.352428 ], "pop": 671, "state": "KS" }, { "_id": "66035", "city": "HIGHLAND", "loc": [ -95.258335, 39.860752 ], "pop": 1369, "state": "KS" }, { "_id": "66036", "city": "HILLSDALE", "loc": [ -94.85836999999999, 38.684463 ], "pop": 1969, "state": "KS" }, { "_id": "66039", "city": "MILDRED", "loc": [ -95.145167, 38.091497 ], "pop": 441, "state": "KS" }, { "_id": "66040", "city": "LA CYGNE", "loc": [ -94.759264, 38.343402 ], "pop": 1958, "state": "KS" }, { "_id": "66041", "city": "HURON", "loc": [ -95.308902, 39.591202 ], "pop": 890, "state": "KS" }, { "_id": "66042", "city": "LANE", "loc": [ -95.097886, 38.437499 ], "pop": 582, "state": "KS" }, { "_id": "66043", "city": "LANSING", "loc": [ -94.899379, 39.250191 ], "pop": 8145, "state": "KS" }, { "_id": "66044", "city": "LAWRENCE", "loc": [ -95.241789, 38.964402 ], "pop": 29968, "state": "KS" }, { "_id": "66046", "city": "LAWRENCE", "loc": [ -95.24203, 38.936925 ], "pop": 16411, "state": "KS" }, { "_id": "66047", "city": "LAWRENCE", "loc": [ -95.27786500000001, 38.940714 ], "pop": 9234, "state": "KS" }, { "_id": "66048", "city": "LEAVENWORTH", "loc": [ -94.933865, 39.301546 ], "pop": 28028, "state": "KS" }, { "_id": "66049", "city": "LAWRENCE", "loc": [ -95.27686199999999, 38.970433 ], "pop": 12600, "state": "KS" }, { "_id": "66050", "city": "LECOMPTON", "loc": [ -95.402519, 39.000125 ], "pop": 2701, "state": "KS" }, { "_id": "66052", "city": "LINWOOD", "loc": [ -94.991388, 39.020627 ], "pop": 2036, "state": "KS" }, { "_id": "66053", "city": "LOUISBURG", "loc": [ -94.68290500000001, 38.607341 ], "pop": 4720, "state": "KS" }, { "_id": "66054", "city": "MC LOUTH", "loc": [ -95.218295, 39.166763 ], "pop": 2139, "state": "KS" }, { "_id": "66056", "city": "MOUND CITY", "loc": [ -94.81863199999999, 38.155954 ], "pop": 1644, "state": "KS" }, { "_id": "66058", "city": "MUSCOTAH", "loc": [ -95.49845000000001, 39.588046 ], "pop": 631, "state": "KS" }, { "_id": "66060", "city": "NORTONVILLE", "loc": [ -95.32357, 39.409532 ], "pop": 932, "state": "KS" }, { "_id": "66061", "city": "OLATHE", "loc": [ -94.820359, 38.886548 ], "pop": 31694, "state": "KS" }, { "_id": "66062", "city": "OLATHE", "loc": [ -94.77516799999999, 38.873287 ], "pop": 32845, "state": "KS" }, { "_id": "66064", "city": "OSAWATOMIE", "loc": [ -94.96199, 38.488803 ], "pop": 5887, "state": "KS" }, { "_id": "66066", "city": "OSKALOOSA", "loc": [ -95.313546, 39.215183 ], "pop": 1832, "state": "KS" }, { "_id": "66067", "city": "OTTAWA", "loc": [ -95.274519, 38.614247 ], "pop": 13830, "state": "KS" }, { "_id": "66070", "city": "OZAWKIE", "loc": [ -95.44038999999999, 39.213648 ], "pop": 2123, "state": "KS" }, { "_id": "66071", "city": "PAOLA", "loc": [ -94.893694, 38.571999 ], "pop": 9325, "state": "KS" }, { "_id": "66072", "city": "PARKER", "loc": [ -94.98707400000001, 38.330311 ], "pop": 830, "state": "KS" }, { "_id": "66073", "city": "PERRY", "loc": [ -95.373122, 39.087524 ], "pop": 2031, "state": "KS" }, { "_id": "66075", "city": "PLEASANTON", "loc": [ -94.70567, 38.182285 ], "pop": 2050, "state": "KS" }, { "_id": "66076", "city": "POMONA", "loc": [ -95.448915, 38.615255 ], "pop": 1680, "state": "KS" }, { "_id": "66078", "city": "PRINCETON", "loc": [ -95.276444, 38.484684 ], "pop": 650, "state": "KS" }, { "_id": "66079", "city": "RANTOUL", "loc": [ -95.12342099999999, 38.566594 ], "pop": 1195, "state": "KS" }, { "_id": "66080", "city": "RICHMOND", "loc": [ -95.24887099999999, 38.407434 ], "pop": 833, "state": "KS" }, { "_id": "66083", "city": "SPRING HILL", "loc": [ -94.82459299999999, 38.763088 ], "pop": 4024, "state": "KS" }, { "_id": "66085", "city": "STILWELL", "loc": [ -94.664282, 38.790157 ], "pop": 4836, "state": "KS" }, { "_id": "66086", "city": "TONGANOXIE", "loc": [ -95.10505499999999, 39.102614 ], "pop": 5556, "state": "KS" }, { "_id": "66087", "city": "SEVERANCE", "loc": [ -95.066345, 39.778746 ], "pop": 2422, "state": "KS" }, { "_id": "66088", "city": "VALLEY FALLS", "loc": [ -95.46699599999999, 39.34843 ], "pop": 2000, "state": "KS" }, { "_id": "66090", "city": "WATHENA", "loc": [ -94.92546, 39.762505 ], "pop": 2825, "state": "KS" }, { "_id": "66091", "city": "WELDA", "loc": [ -95.309606, 38.168615 ], "pop": 286, "state": "KS" }, { "_id": "66092", "city": "WELLSVILLE", "loc": [ -95.091573, 38.713676 ], "pop": 2178, "state": "KS" }, { "_id": "66093", "city": "WESTPHALIA", "loc": [ -95.46651199999999, 38.171792 ], "pop": 518, "state": "KS" }, { "_id": "66094", "city": "WHITE CLOUD", "loc": [ -95.298203, 39.962717 ], "pop": 379, "state": "KS" }, { "_id": "66095", "city": "WILLIAMSBURG", "loc": [ -95.42261499999999, 38.490166 ], "pop": 929, "state": "KS" }, { "_id": "66097", "city": "WINCHESTER", "loc": [ -95.26958399999999, 39.324531 ], "pop": 1191, "state": "KS" }, { "_id": "66101", "city": "KANSAS CITY", "loc": [ -94.627139, 39.115733 ], "pop": 16147, "state": "KS" }, { "_id": "66102", "city": "KANSAS CITY", "loc": [ -94.669337, 39.113247 ], "pop": 27909, "state": "KS" }, { "_id": "66103", "city": "ROSEDALE", "loc": [ -94.625105, 39.056193 ], "pop": 14477, "state": "KS" }, { "_id": "66104", "city": "KANSAS CITY", "loc": [ -94.679158, 39.137512 ], "pop": 32071, "state": "KS" }, { "_id": "66105", "city": "KANSAS CITY", "loc": [ -94.63564599999999, 39.085025 ], "pop": 3478, "state": "KS" }, { "_id": "66106", "city": "LAKE QUIVIRA", "loc": [ -94.68739600000001, 39.061187 ], "pop": 25298, "state": "KS" }, { "_id": "66109", "city": "KANSAS CITY", "loc": [ -94.78559799999999, 39.143376 ], "pop": 14656, "state": "KS" }, { "_id": "66111", "city": "KANSAS CITY", "loc": [ -94.780593, 39.080332 ], "pop": 11189, "state": "KS" }, { "_id": "66112", "city": "KANSAS CITY", "loc": [ -94.76402400000001, 39.115999 ], "pop": 11461, "state": "KS" }, { "_id": "66115", "city": "KANSAS CITY", "loc": [ -94.61464700000001, 39.114534 ], "pop": 0, "state": "KS" }, { "_id": "66118", "city": "KANSAS CITY", "loc": [ -94.608361, 39.096867 ], "pop": 0, "state": "KS" }, { "_id": "66202", "city": "COUNTRYSIDE", "loc": [ -94.66699800000001, 39.025376 ], "pop": 17916, "state": "KS" }, { "_id": "66203", "city": "SHAWNEE", "loc": [ -94.708303, 39.019802 ], "pop": 20922, "state": "KS" }, { "_id": "66204", "city": "OVERLAND PARK", "loc": [ -94.674769, 38.992488 ], "pop": 18226, "state": "KS" }, { "_id": "66205", "city": "MISSION", "loc": [ -94.631806, 39.031944 ], "pop": 14871, "state": "KS" }, { "_id": "66206", "city": "LEAWOOD", "loc": [ -94.61964399999999, 38.960567 ], "pop": 9797, "state": "KS" }, { "_id": "66207", "city": "SHAWNEE MISSION", "loc": [ -94.64519300000001, 38.957472 ], "pop": 13863, "state": "KS" }, { "_id": "66208", "city": "PRAIRIE VILLAGE", "loc": [ -94.631513, 38.996812 ], "pop": 22047, "state": "KS" }, { "_id": "66209", "city": "LEAWOOD", "loc": [ -94.634047, 38.901798 ], "pop": 12176, "state": "KS" }, { "_id": "66210", "city": "LENEXA", "loc": [ -94.70478799999999, 38.922007 ], "pop": 17576, "state": "KS" }, { "_id": "66211", "city": "LEAWOOD", "loc": [ -94.637991, 38.925956 ], "pop": 2155, "state": "KS" }, { "_id": "66212", "city": "OVERLAND PARK", "loc": [ -94.68414, 38.958954 ], "pop": 36187, "state": "KS" }, { "_id": "66213", "city": "OVERLAND PARK", "loc": [ -94.700344, 38.904899 ], "pop": 7368, "state": "KS" }, { "_id": "66214", "city": "LENEXA", "loc": [ -94.71326500000001, 38.959929 ], "pop": 12365, "state": "KS" }, { "_id": "66215", "city": "LENEXA", "loc": [ -94.739947, 38.963028 ], "pop": 24051, "state": "KS" }, { "_id": "66216", "city": "SHAWNEE", "loc": [ -94.73823400000001, 39.009289 ], "pop": 19644, "state": "KS" }, { "_id": "66217", "city": "SHAWNEE", "loc": [ -94.779663, 39.004835 ], "pop": 2261, "state": "KS" }, { "_id": "66218", "city": "SHAWNEE", "loc": [ -94.823913, 39.017431 ], "pop": 1828, "state": "KS" }, { "_id": "66219", "city": "LENEXA", "loc": [ -94.773145, 38.961896 ], "pop": 6090, "state": "KS" }, { "_id": "66220", "city": "LENEXA", "loc": [ -94.82999700000001, 38.96884 ], "pop": 626, "state": "KS" }, { "_id": "66221", "city": "STANLEY", "loc": [ -94.706745, 38.85272 ], "pop": 1186, "state": "KS" }, { "_id": "66223", "city": "STANLEY", "loc": [ -94.664467, 38.848477 ], "pop": 3539, "state": "KS" }, { "_id": "66224", "city": "STANLEY", "loc": [ -94.62890299999999, 38.867526 ], "pop": 713, "state": "KS" }, { "_id": "66226", "city": "SHAWNEE", "loc": [ -94.873017, 38.997764 ], "pop": 2613, "state": "KS" }, { "_id": "66227", "city": "LENEXA", "loc": [ -94.840082, 38.99416 ], "pop": 273, "state": "KS" }, { "_id": "66401", "city": "ALMA", "loc": [ -96.292323, 39.009206 ], "pop": 2186, "state": "KS" }, { "_id": "66402", "city": "AUBURN", "loc": [ -95.81993799999999, 38.916673 ], "pop": 2157, "state": "KS" }, { "_id": "66403", "city": "AXTELL", "loc": [ -96.26755900000001, 39.870676 ], "pop": 669, "state": "KS" }, { "_id": "66404", "city": "BAILEYVILLE", "loc": [ -96.180136, 39.881621 ], "pop": 613, "state": "KS" }, { "_id": "66406", "city": "BEATTIE", "loc": [ -96.428618, 39.89884 ], "pop": 739, "state": "KS" }, { "_id": "66407", "city": "BELVUE", "loc": [ -96.186635, 39.2273 ], "pop": 321, "state": "KS" }, { "_id": "66408", "city": "BERN", "loc": [ -95.961028, 39.957051 ], "pop": 457, "state": "KS" }, { "_id": "66409", "city": "BERRYTON", "loc": [ -95.582487, 38.944182 ], "pop": 1939, "state": "KS" }, { "_id": "66411", "city": "BLUE RAPIDS", "loc": [ -96.63594999999999, 39.674974 ], "pop": 1552, "state": "KS" }, { "_id": "66412", "city": "BREMEN", "loc": [ -96.745846, 39.877473 ], "pop": 347, "state": "KS" }, { "_id": "66413", "city": "BURLINGAME", "loc": [ -95.840017, 38.763395 ], "pop": 1994, "state": "KS" }, { "_id": "66414", "city": "CARBONDALE", "loc": [ -95.687083, 38.820622 ], "pop": 2502, "state": "KS" }, { "_id": "66415", "city": "CENTRALIA", "loc": [ -96.14860400000001, 39.738051 ], "pop": 782, "state": "KS" }, { "_id": "66416", "city": "CIRCLEVILLE", "loc": [ -95.851708, 39.515472 ], "pop": 466, "state": "KS" }, { "_id": "66417", "city": "CORNING", "loc": [ -96.077589, 39.657015 ], "pop": 656, "state": "KS" }, { "_id": "66418", "city": "DELIA", "loc": [ -95.96080499999999, 39.265453 ], "pop": 557, "state": "KS" }, { "_id": "66419", "city": "DENISON", "loc": [ -95.632851, 39.415307 ], "pop": 604, "state": "KS" }, { "_id": "66420", "city": "DOVER", "loc": [ -95.89854699999999, 39.019223 ], "pop": 1220, "state": "KS" }, { "_id": "66422", "city": "EMMETT", "loc": [ -96.059325, 39.304819 ], "pop": 342, "state": "KS" }, { "_id": "66423", "city": "ESKRIDGE", "loc": [ -96.10158300000001, 38.851361 ], "pop": 771, "state": "KS" }, { "_id": "66424", "city": "EVEREST", "loc": [ -95.413802, 39.687972 ], "pop": 525, "state": "KS" }, { "_id": "66425", "city": "FAIRVIEW", "loc": [ -95.711012, 39.844504 ], "pop": 712, "state": "KS" }, { "_id": "66427", "city": "WINIFRED", "loc": [ -96.42832300000001, 39.718996 ], "pop": 1418, "state": "KS" }, { "_id": "66428", "city": "GOFF", "loc": [ -95.95739399999999, 39.665388 ], "pop": 537, "state": "KS" }, { "_id": "66429", "city": "GRANTVILLE", "loc": [ -95.539733, 39.097208 ], "pop": 753, "state": "KS" }, { "_id": "66431", "city": "HARVEYVILLE", "loc": [ -95.996239, 38.857413 ], "pop": 1065, "state": "KS" }, { "_id": "66432", "city": "HAVENSVILLE", "loc": [ -96.07688400000001, 39.494197 ], "pop": 417, "state": "KS" }, { "_id": "66433", "city": "HERKIMER", "loc": [ -96.746861, 39.956337 ], "pop": 270, "state": "KS" }, { "_id": "66434", "city": "RESERVE", "loc": [ -95.52890499999999, 39.871563 ], "pop": 5297, "state": "KS" }, { "_id": "66436", "city": "HOLTON", "loc": [ -95.752498, 39.443624 ], "pop": 5625, "state": "KS" }, { "_id": "66438", "city": "HOME", "loc": [ -96.529201, 39.854542 ], "pop": 362, "state": "KS" }, { "_id": "66439", "city": "HORTON", "loc": [ -95.529858, 39.678883 ], "pop": 2556, "state": "KS" }, { "_id": "66440", "city": "HOYT", "loc": [ -95.686742, 39.255249 ], "pop": 1812, "state": "KS" }, { "_id": "66441", "city": "JUNCTION CITY", "loc": [ -96.839553, 39.029913 ], "pop": 24386, "state": "KS" }, { "_id": "66442", "city": "FORT RILEY", "loc": [ -96.78733800000001, 39.061947 ], "pop": 5363, "state": "KS" }, { "_id": "66449", "city": "LEONARDVILLE", "loc": [ -96.83122299999999, 39.365151 ], "pop": 1274, "state": "KS" }, { "_id": "66450", "city": "LOUISVILLE", "loc": [ -96.316954, 39.267048 ], "pop": 318, "state": "KS" }, { "_id": "66451", "city": "LYNDON", "loc": [ -95.680226, 38.635649 ], "pop": 1879, "state": "KS" }, { "_id": "66502", "city": "MANHATTAN", "loc": [ -96.585776, 39.193757 ], "pop": 50178, "state": "KS" }, { "_id": "66507", "city": "MAPLE HILL", "loc": [ -96.018727, 39.069456 ], "pop": 796, "state": "KS" }, { "_id": "66508", "city": "MARYSVILLE", "loc": [ -96.642183, 39.842827 ], "pop": 4104, "state": "KS" }, { "_id": "66509", "city": "MAYETTA", "loc": [ -95.692753, 39.348915 ], "pop": 1132, "state": "KS" }, { "_id": "66510", "city": "MELVERN", "loc": [ -95.628986, 38.50266 ], "pop": 856, "state": "KS" }, { "_id": "66512", "city": "MERIDEN", "loc": [ -95.54763699999999, 39.203832 ], "pop": 2299, "state": "KS" }, { "_id": "66514", "city": "MILFORD", "loc": [ -96.91005, 39.169173 ], "pop": 704, "state": "KS" }, { "_id": "66515", "city": "MORRILL", "loc": [ -95.712048, 39.935592 ], "pop": 591, "state": "KS" }, { "_id": "66516", "city": "NETAWAKA", "loc": [ -95.72700399999999, 39.606298 ], "pop": 371, "state": "KS" }, { "_id": "66517", "city": "OGDEN", "loc": [ -96.70007699999999, 39.119219 ], "pop": 2049, "state": "KS" }, { "_id": "66518", "city": "OKETO", "loc": [ -96.623525, 39.95984 ], "pop": 318, "state": "KS" }, { "_id": "66520", "city": "OLSBURG", "loc": [ -96.60024900000001, 39.412506 ], "pop": 581, "state": "KS" }, { "_id": "66521", "city": "DULUTH", "loc": [ -96.17610500000001, 39.472974 ], "pop": 1358, "state": "KS" }, { "_id": "66522", "city": "ONEIDA", "loc": [ -95.958097, 39.866087 ], "pop": 247, "state": "KS" }, { "_id": "66523", "city": "OSAGE CITY", "loc": [ -95.830303, 38.626896 ], "pop": 3627, "state": "KS" }, { "_id": "66524", "city": "OVERBROOK", "loc": [ -95.561632, 38.792173 ], "pop": 1630, "state": "KS" }, { "_id": "66526", "city": "PAXICO", "loc": [ -96.181777, 39.080285 ], "pop": 1153, "state": "KS" }, { "_id": "66527", "city": "POWHATTAN", "loc": [ -95.675111, 39.71769 ], "pop": 913, "state": "KS" }, { "_id": "66528", "city": "QUENEMO", "loc": [ -95.53619, 38.578504 ], "pop": 500, "state": "KS" }, { "_id": "66531", "city": "RILEY", "loc": [ -96.811824, 39.122421 ], "pop": 14793, "state": "KS" }, { "_id": "66532", "city": "LEONA", "loc": [ -95.386236, 39.812721 ], "pop": 671, "state": "KS" }, { "_id": "66533", "city": "ROSSVILLE", "loc": [ -95.95529999999999, 39.145114 ], "pop": 1583, "state": "KS" }, { "_id": "66534", "city": "SABETHA", "loc": [ -95.811271, 39.89929 ], "pop": 3242, "state": "KS" }, { "_id": "66535", "city": "SAINT GEORGE", "loc": [ -96.434488, 39.210806 ], "pop": 1904, "state": "KS" }, { "_id": "66536", "city": "SAINT MARYS", "loc": [ -96.06827699999999, 39.198674 ], "pop": 2316, "state": "KS" }, { "_id": "66537", "city": "SCRANTON", "loc": [ -95.74799, 38.787998 ], "pop": 1158, "state": "KS" }, { "_id": "66538", "city": "KELLY", "loc": [ -96.059489, 39.839804 ], "pop": 3336, "state": "KS" }, { "_id": "66539", "city": "SILVER LAKE", "loc": [ -95.855182, 39.1102 ], "pop": 2152, "state": "KS" }, { "_id": "66540", "city": "SOLDIER", "loc": [ -95.96517799999999, 39.501254 ], "pop": 578, "state": "KS" }, { "_id": "66541", "city": "SUMMERFIELD", "loc": [ -96.32790900000001, 39.979847 ], "pop": 271, "state": "KS" }, { "_id": "66542", "city": "TECUMSEH", "loc": [ -95.537926, 39.021664 ], "pop": 1059, "state": "KS" }, { "_id": "66543", "city": "VASSAR", "loc": [ -95.581278, 38.669127 ], "pop": 849, "state": "KS" }, { "_id": "66544", "city": "VLIETS", "loc": [ -96.28164200000001, 39.705044 ], "pop": 469, "state": "KS" }, { "_id": "66546", "city": "WAKARUSA", "loc": [ -95.701464, 38.904543 ], "pop": 855, "state": "KS" }, { "_id": "66547", "city": "WAMEGO", "loc": [ -96.315344, 39.210001 ], "pop": 5200, "state": "KS" }, { "_id": "66548", "city": "WATERVILLE", "loc": [ -96.749781, 39.697088 ], "pop": 1116, "state": "KS" }, { "_id": "66549", "city": "BLAINE", "loc": [ -96.411402, 39.416545 ], "pop": 1373, "state": "KS" }, { "_id": "66550", "city": "WETMORE", "loc": [ -95.82311799999999, 39.642761 ], "pop": 546, "state": "KS" }, { "_id": "66551", "city": "ONAGA", "loc": [ -96.314753, 39.510969 ], "pop": 238, "state": "KS" }, { "_id": "66552", "city": "WHITING", "loc": [ -95.61584000000001, 39.597396 ], "pop": 380, "state": "KS" }, { "_id": "66554", "city": "RANDOLPH", "loc": [ -96.782842, 39.487939 ], "pop": 608, "state": "KS" }, { "_id": "66603", "city": "TOPEKA", "loc": [ -95.680212, 39.055344 ], "pop": 2250, "state": "KS" }, { "_id": "66604", "city": "TOPEKA", "loc": [ -95.717831, 39.040549 ], "pop": 23913, "state": "KS" }, { "_id": "66605", "city": "TOPEKA", "loc": [ -95.643894, 39.015076 ], "pop": 20138, "state": "KS" }, { "_id": "66606", "city": "TOPEKA", "loc": [ -95.709458, 39.058345 ], "pop": 13053, "state": "KS" }, { "_id": "66607", "city": "TOPEKA", "loc": [ -95.644858, 39.042111 ], "pop": 9850, "state": "KS" }, { "_id": "66608", "city": "TOPEKA", "loc": [ -95.686651, 39.085812 ], "pop": 7739, "state": "KS" }, { "_id": "66609", "city": "TOPEKA", "loc": [ -95.668069, 38.991899 ], "pop": 6252, "state": "KS" }, { "_id": "66610", "city": "TOPEKA", "loc": [ -95.746061, 38.982213 ], "pop": 4656, "state": "KS" }, { "_id": "66611", "city": "TOPEKA", "loc": [ -95.69815, 39.014152 ], "pop": 10194, "state": "KS" }, { "_id": "66612", "city": "TOPEKA", "loc": [ -95.68180599999999, 39.042714 ], "pop": 2949, "state": "KS" }, { "_id": "66614", "city": "TOPEKA", "loc": [ -95.746883, 39.015403 ], "pop": 26238, "state": "KS" }, { "_id": "66615", "city": "TOPEKA", "loc": [ -95.790561, 39.04458 ], "pop": 677, "state": "KS" }, { "_id": "66616", "city": "TOPEKA", "loc": [ -95.641302, 39.064479 ], "pop": 6538, "state": "KS" }, { "_id": "66617", "city": "TOPEKA", "loc": [ -95.63838800000001, 39.127098 ], "pop": 7779, "state": "KS" }, { "_id": "66618", "city": "TOPEKA", "loc": [ -95.70231, 39.132853 ], "pop": 5436, "state": "KS" }, { "_id": "66619", "city": "PAULINE", "loc": [ -95.700728, 38.942859 ], "pop": 2952, "state": "KS" }, { "_id": "66701", "city": "HIATTVILLE", "loc": [ -94.704221, 37.834159 ], "pop": 11192, "state": "KS" }, { "_id": "66710", "city": "ALTOONA", "loc": [ -95.64833, 37.519669 ], "pop": 905, "state": "KS" }, { "_id": "66711", "city": "ARCADIA", "loc": [ -94.654782, 37.634113 ], "pop": 664, "state": "KS" }, { "_id": "66713", "city": "BAXTER SPRINGS", "loc": [ -94.739276, 37.028057 ], "pop": 5434, "state": "KS" }, { "_id": "66714", "city": "BENEDICT", "loc": [ -95.624213, 37.651401 ], "pop": 815, "state": "KS" }, { "_id": "66716", "city": "BRONSON", "loc": [ -95.030345, 37.921356 ], "pop": 702, "state": "KS" }, { "_id": "66717", "city": "BUFFALO", "loc": [ -95.70141700000001, 37.701057 ], "pop": 455, "state": "KS" }, { "_id": "66720", "city": "CHANUTE", "loc": [ -95.456962, 37.674928 ], "pop": 10852, "state": "KS" }, { "_id": "66724", "city": "CHEROKEE", "loc": [ -94.842412, 37.369413 ], "pop": 1397, "state": "KS" }, { "_id": "66725", "city": "HALLOWELL", "loc": [ -94.850227, 37.168992 ], "pop": 4750, "state": "KS" }, { "_id": "66727", "city": "COYVILLE", "loc": [ -95.917164, 37.659167 ], "pop": 331, "state": "KS" }, { "_id": "66728", "city": "CRESTLINE", "loc": [ -94.678275, 37.161226 ], "pop": 478, "state": "KS" }, { "_id": "66732", "city": "ELSMORE", "loc": [ -95.154645, 37.80353 ], "pop": 293, "state": "KS" }, { "_id": "66733", "city": "ERIE", "loc": [ -95.25138, 37.604395 ], "pop": 2572, "state": "KS" }, { "_id": "66734", "city": "FARLINGTON", "loc": [ -94.847928, 37.6163 ], "pop": 519, "state": "KS" }, { "_id": "66736", "city": "LAFONTAINE", "loc": [ -95.822898, 37.525622 ], "pop": 3747, "state": "KS" }, { "_id": "66738", "city": "FULTON", "loc": [ -94.739591, 37.988279 ], "pop": 404, "state": "KS" }, { "_id": "66739", "city": "GALENA", "loc": [ -94.655743, 37.063237 ], "pop": 5961, "state": "KS" }, { "_id": "66740", "city": "GALESBURG", "loc": [ -95.310772, 37.469346 ], "pop": 932, "state": "KS" }, { "_id": "66741", "city": "GARLAND", "loc": [ -94.672055, 37.717363 ], "pop": 377, "state": "KS" }, { "_id": "66743", "city": "GIRARD", "loc": [ -94.85691300000001, 37.509129 ], "pop": 3707, "state": "KS" }, { "_id": "66746", "city": "HEPLER", "loc": [ -94.989225, 37.657558 ], "pop": 229, "state": "KS" }, { "_id": "66748", "city": "HUMBOLDT", "loc": [ -95.422006, 37.80446 ], "pop": 3247, "state": "KS" }, { "_id": "66749", "city": "CARLYLE", "loc": [ -95.402146, 37.928244 ], "pop": 7721, "state": "KS" }, { "_id": "66751", "city": "LA HARPE", "loc": [ -95.32319200000001, 37.92239 ], "pop": 1966, "state": "KS" }, { "_id": "66753", "city": "MC CUNE", "loc": [ -95.03759100000001, 37.346754 ], "pop": 1252, "state": "KS" }, { "_id": "66754", "city": "MAPLETON", "loc": [ -94.873519, 38.022821 ], "pop": 351, "state": "KS" }, { "_id": "66755", "city": "MORAN", "loc": [ -95.164733, 37.934159 ], "pop": 1214, "state": "KS" }, { "_id": "66756", "city": "MULBERRY", "loc": [ -94.683902, 37.544197 ], "pop": 3096, "state": "KS" }, { "_id": "66757", "city": "NEODESHA", "loc": [ -95.676478, 37.425709 ], "pop": 3664, "state": "KS" }, { "_id": "66758", "city": "NEOSHO FALLS", "loc": [ -95.54973200000001, 37.966883 ], "pop": 392, "state": "KS" }, { "_id": "66759", "city": "NEW ALBANY", "loc": [ -95.912594, 37.544436 ], "pop": 372, "state": "KS" }, { "_id": "66761", "city": "PIQUA", "loc": [ -95.59002599999999, 37.872847 ], "pop": 206, "state": "KS" }, { "_id": "66762", "city": "RADLEY", "loc": [ -94.70225000000001, 37.413156 ], "pop": 24845, "state": "KS" }, { "_id": "66767", "city": "PRESCOTT", "loc": [ -94.700841, 38.071802 ], "pop": 600, "state": "KS" }, { "_id": "66769", "city": "REDFIELD", "loc": [ -94.828988, 37.856046 ], "pop": 1224, "state": "KS" }, { "_id": "66770", "city": "RIVERTON", "loc": [ -94.67880100000001, 37.099262 ], "pop": 564, "state": "KS" }, { "_id": "66771", "city": "SAINT PAUL", "loc": [ -95.168784, 37.518046 ], "pop": 936, "state": "KS" }, { "_id": "66772", "city": "SAVONBURG", "loc": [ -95.154532, 37.751725 ], "pop": 197, "state": "KS" }, { "_id": "66773", "city": "CARONA", "loc": [ -94.851961, 37.271102 ], "pop": 1552, "state": "KS" }, { "_id": "66775", "city": "STARK", "loc": [ -95.138794, 37.681111 ], "pop": 246, "state": "KS" }, { "_id": "66776", "city": "THAYER", "loc": [ -95.467083, 37.452657 ], "pop": 1349, "state": "KS" }, { "_id": "66777", "city": "TORONTO", "loc": [ -95.936818, 37.795343 ], "pop": 659, "state": "KS" }, { "_id": "66778", "city": "TREECE", "loc": [ -94.86904699999999, 37.039883 ], "pop": 528, "state": "KS" }, { "_id": "66779", "city": "UNIONTOWN", "loc": [ -94.98136599999999, 37.811681 ], "pop": 825, "state": "KS" }, { "_id": "66780", "city": "WALNUT", "loc": [ -95.045531, 37.59674 ], "pop": 383, "state": "KS" }, { "_id": "66781", "city": "LAWTON", "loc": [ -94.743909, 37.298173 ], "pop": 1515, "state": "KS" }, { "_id": "66783", "city": "YATES CENTER", "loc": [ -95.72893999999999, 37.880125 ], "pop": 2859, "state": "KS" }, { "_id": "66801", "city": "EMPORIA", "loc": [ -96.187145, 38.418405 ], "pop": 29401, "state": "KS" }, { "_id": "66830", "city": "ADMIRE", "loc": [ -96.101657, 38.639297 ], "pop": 172, "state": "KS" }, { "_id": "66833", "city": "BUSHONG", "loc": [ -96.249968, 38.637522 ], "pop": 88, "state": "KS" }, { "_id": "66834", "city": "ALTA VISTA", "loc": [ -96.479983, 38.86357 ], "pop": 629, "state": "KS" }, { "_id": "66835", "city": "AMERICUS", "loc": [ -96.26075299999999, 38.509803 ], "pop": 1491, "state": "KS" }, { "_id": "66838", "city": "BURDICK", "loc": [ -96.83963, 38.567369 ], "pop": 230, "state": "KS" }, { "_id": "66839", "city": "STRAWN", "loc": [ -95.741162, 38.201596 ], "pop": 4404, "state": "KS" }, { "_id": "66840", "city": "BURNS", "loc": [ -96.863435, 38.12216 ], "pop": 593, "state": "KS" }, { "_id": "66842", "city": "CASSODAY", "loc": [ -96.674565, 38.029801 ], "pop": 351, "state": "KS" }, { "_id": "66843", "city": "CLEMENTS", "loc": [ -96.77544399999999, 38.279757 ], "pop": 200, "state": "KS" }, { "_id": "66845", "city": "COTTONWOOD FALLS", "loc": [ -96.541849, 38.356538 ], "pop": 1183, "state": "KS" }, { "_id": "66846", "city": "DUNLAP", "loc": [ -96.497294, 38.667657 ], "pop": 3831, "state": "KS" }, { "_id": "66849", "city": "DWIGHT", "loc": [ -96.580215, 38.838902 ], "pop": 569, "state": "KS" }, { "_id": "66850", "city": "ELMDALE", "loc": [ -96.667464, 38.377924 ], "pop": 168, "state": "KS" }, { "_id": "66851", "city": "FLORENCE", "loc": [ -96.934561, 38.241536 ], "pop": 828, "state": "KS" }, { "_id": "66852", "city": "GRIDLEY", "loc": [ -95.887351, 38.101234 ], "pop": 638, "state": "KS" }, { "_id": "66853", "city": "HAMILTON", "loc": [ -96.169133, 37.979122 ], "pop": 600, "state": "KS" }, { "_id": "66854", "city": "HARTFORD", "loc": [ -95.999718, 38.28326 ], "pop": 1006, "state": "KS" }, { "_id": "66856", "city": "LEBO", "loc": [ -95.822174, 38.416085 ], "pop": 1708, "state": "KS" }, { "_id": "66857", "city": "LE ROY", "loc": [ -95.62265499999999, 38.087429 ], "pop": 795, "state": "KS" }, { "_id": "66858", "city": "ANTELOPE", "loc": [ -96.96123, 38.481037 ], "pop": 562, "state": "KS" }, { "_id": "66859", "city": "LOST SPRINGS", "loc": [ -96.979872, 38.565723 ], "pop": 241, "state": "KS" }, { "_id": "66860", "city": "MADISON", "loc": [ -96.12128300000001, 38.127755 ], "pop": 1430, "state": "KS" }, { "_id": "66861", "city": "MARION", "loc": [ -97.02045, 38.355444 ], "pop": 3196, "state": "KS" }, { "_id": "66862", "city": "MATFIELD GREEN", "loc": [ -96.55410500000001, 38.144768 ], "pop": 143, "state": "KS" }, { "_id": "66864", "city": "NEOSHO RAPIDS", "loc": [ -96.016824, 38.394762 ], "pop": 865, "state": "KS" }, { "_id": "66865", "city": "OLPE", "loc": [ -96.18905599999999, 38.257774 ], "pop": 1156, "state": "KS" }, { "_id": "66866", "city": "PEABODY", "loc": [ -97.118386, 38.173746 ], "pop": 1927, "state": "KS" }, { "_id": "66868", "city": "READING", "loc": [ -95.98949, 38.529012 ], "pop": 553, "state": "KS" }, { "_id": "66869", "city": "STRONG CITY", "loc": [ -96.51719199999999, 38.41292 ], "pop": 1149, "state": "KS" }, { "_id": "66870", "city": "VIRGIL", "loc": [ -96.03293499999999, 37.897594 ], "pop": 381, "state": "KS" }, { "_id": "66871", "city": "WAVERLY", "loc": [ -95.598201, 38.378214 ], "pop": 1112, "state": "KS" }, { "_id": "66872", "city": "WHITE CITY", "loc": [ -96.763677, 38.78902 ], "pop": 983, "state": "KS" }, { "_id": "66873", "city": "WILSEY", "loc": [ -96.670407, 38.633449 ], "pop": 325, "state": "KS" }, { "_id": "66901", "city": "RICE", "loc": [ -97.662735, 39.559427 ], "pop": 7733, "state": "KS" }, { "_id": "66930", "city": "AGENDA", "loc": [ -97.42698300000001, 39.702868 ], "pop": 198, "state": "KS" }, { "_id": "66931", "city": "AMES", "loc": [ -97.538245, 39.533923 ], "pop": 161, "state": "KS" }, { "_id": "66932", "city": "ATHOL", "loc": [ -98.90773299999999, 39.771872 ], "pop": 164, "state": "KS" }, { "_id": "66933", "city": "BARNES", "loc": [ -96.867574, 39.684114 ], "pop": 374, "state": "KS" }, { "_id": "66935", "city": "BELLEVILLE", "loc": [ -97.62901599999999, 39.824054 ], "pop": 3863, "state": "KS" }, { "_id": "66936", "city": "BURR OAK", "loc": [ -98.34991100000001, 39.893177 ], "pop": 583, "state": "KS" }, { "_id": "66937", "city": "CLIFTON", "loc": [ -97.261104, 39.620121 ], "pop": 853, "state": "KS" }, { "_id": "66938", "city": "CLYDE", "loc": [ -97.407999, 39.575842 ], "pop": 1164, "state": "KS" }, { "_id": "66939", "city": "COURTLAND", "loc": [ -97.889956, 39.78509 ], "pop": 487, "state": "KS" }, { "_id": "66940", "city": "CUBA", "loc": [ -97.449623, 39.797482 ], "pop": 342, "state": "KS" }, { "_id": "66941", "city": "ESBON", "loc": [ -98.44622200000001, 39.756186 ], "pop": 342, "state": "KS" }, { "_id": "66942", "city": "FORMOSO", "loc": [ -97.98890900000001, 39.779467 ], "pop": 223, "state": "KS" }, { "_id": "66943", "city": "GREENLEAF", "loc": [ -96.977465, 39.706145 ], "pop": 564, "state": "KS" }, { "_id": "66944", "city": "HADDAM", "loc": [ -97.308142, 39.851969 ], "pop": 333, "state": "KS" }, { "_id": "66945", "city": "HANOVER", "loc": [ -96.86894700000001, 39.89266 ], "pop": 1278, "state": "KS" }, { "_id": "66946", "city": "HOLLENBERG", "loc": [ -96.97350900000001, 39.959987 ], "pop": 146, "state": "KS" }, { "_id": "66948", "city": "JAMESTOWN", "loc": [ -97.86308200000001, 39.602144 ], "pop": 430, "state": "KS" }, { "_id": "66949", "city": "IONIA", "loc": [ -98.125603, 39.669686 ], "pop": 752, "state": "KS" }, { "_id": "66951", "city": "KENSINGTON", "loc": [ -99.03084800000001, 39.769179 ], "pop": 665, "state": "KS" }, { "_id": "66952", "city": "BELLAIRE", "loc": [ -98.558148, 39.812839 ], "pop": 526, "state": "KS" }, { "_id": "66953", "city": "LINN", "loc": [ -97.08541200000001, 39.684687 ], "pop": 666, "state": "KS" }, { "_id": "66955", "city": "MAHASKA", "loc": [ -97.34527199999999, 39.984502 ], "pop": 142, "state": "KS" }, { "_id": "66956", "city": "MANKATO", "loc": [ -98.215227, 39.783259 ], "pop": 1929, "state": "KS" }, { "_id": "66958", "city": "MORROWVILLE", "loc": [ -97.18252099999999, 39.861551 ], "pop": 462, "state": "KS" }, { "_id": "66959", "city": "MUNDEN", "loc": [ -97.540302, 39.927219 ], "pop": 266, "state": "KS" }, { "_id": "66960", "city": "NARKA", "loc": [ -97.42433200000001, 39.958162 ], "pop": 205, "state": "KS" }, { "_id": "66961", "city": "NORWAY", "loc": [ -97.811926, 39.695305 ], "pop": 287, "state": "KS" }, { "_id": "66962", "city": "PALMER", "loc": [ -97.11221399999999, 39.619165 ], "pop": 276, "state": "KS" }, { "_id": "66963", "city": "RANDALL", "loc": [ -98.06605399999999, 39.62859 ], "pop": 190, "state": "KS" }, { "_id": "66964", "city": "REPUBLIC", "loc": [ -97.843456, 39.937572 ], "pop": 297, "state": "KS" }, { "_id": "66966", "city": "SCANDIA", "loc": [ -97.778645, 39.793861 ], "pop": 537, "state": "KS" }, { "_id": "66967", "city": "SMITH CENTER", "loc": [ -98.784243, 39.804217 ], "pop": 2848, "state": "KS" }, { "_id": "66968", "city": "WASHINGTON", "loc": [ -97.048368, 39.82234 ], "pop": 1979, "state": "KS" }, { "_id": "66970", "city": "WEBBER", "loc": [ -97.997793, 39.924496 ], "pop": 232, "state": "KS" }, { "_id": "67001", "city": "ANDALE", "loc": [ -97.64071199999999, 37.782686 ], "pop": 1251, "state": "KS" }, { "_id": "67002", "city": "ANDOVER", "loc": [ -97.117901, 37.698531 ], "pop": 5384, "state": "KS" }, { "_id": "67003", "city": "ANTHONY", "loc": [ -98.028499, 37.151206 ], "pop": 2930, "state": "KS" }, { "_id": "67004", "city": "ARGONIA", "loc": [ -97.755678, 37.283966 ], "pop": 949, "state": "KS" }, { "_id": "67005", "city": "ARKANSAS CITY", "loc": [ -97.035658, 37.067593 ], "pop": 17740, "state": "KS" }, { "_id": "67008", "city": "ATLANTA", "loc": [ -96.76613500000001, 37.434309 ], "pop": 320, "state": "KS" }, { "_id": "67009", "city": "ATTICA", "loc": [ -98.22642500000001, 37.25277 ], "pop": 1125, "state": "KS" }, { "_id": "67010", "city": "AUGUSTA", "loc": [ -96.964772, 37.683606 ], "pop": 11306, "state": "KS" }, { "_id": "67012", "city": "BEAUMONT", "loc": [ -96.63864, 37.607871 ], "pop": 85, "state": "KS" }, { "_id": "67013", "city": "BELLE PLAINE", "loc": [ -97.28522100000001, 37.405155 ], "pop": 2784, "state": "KS" }, { "_id": "67016", "city": "BENTLEY", "loc": [ -97.516381, 37.879582 ], "pop": 895, "state": "KS" }, { "_id": "67017", "city": "BENTON", "loc": [ -97.097117, 37.794615 ], "pop": 2122, "state": "KS" }, { "_id": "67018", "city": "BLUFF CITY", "loc": [ -97.875412, 37.083846 ], "pop": 216, "state": "KS" }, { "_id": "67019", "city": "BURDEN", "loc": [ -96.75704399999999, 37.320856 ], "pop": 698, "state": "KS" }, { "_id": "67020", "city": "BURRTON", "loc": [ -97.66664900000001, 38.026128 ], "pop": 1149, "state": "KS" }, { "_id": "67021", "city": "BYERS", "loc": [ -98.901662, 37.784693 ], "pop": 208, "state": "KS" }, { "_id": "67022", "city": "CALDWELL", "loc": [ -97.62465899999999, 37.045241 ], "pop": 1777, "state": "KS" }, { "_id": "67023", "city": "CAMBRIDGE", "loc": [ -96.66388000000001, 37.358348 ], "pop": 316, "state": "KS" }, { "_id": "67024", "city": "CEDAR VALE", "loc": [ -96.470133, 37.126487 ], "pop": 1267, "state": "KS" }, { "_id": "67025", "city": "CHENEY", "loc": [ -97.768638, 37.635299 ], "pop": 2497, "state": "KS" }, { "_id": "67026", "city": "CLEARWATER", "loc": [ -97.508179, 37.507592 ], "pop": 2453, "state": "KS" }, { "_id": "67028", "city": "COATS", "loc": [ -98.850398, 37.512502 ], "pop": 190, "state": "KS" }, { "_id": "67029", "city": "COLDWATER", "loc": [ -99.31148399999999, 37.247915 ], "pop": 1317, "state": "KS" }, { "_id": "67030", "city": "COLWICH", "loc": [ -97.54051800000001, 37.77824 ], "pop": 1745, "state": "KS" }, { "_id": "67031", "city": "CONWAY SPRINGS", "loc": [ -97.62835800000001, 37.390272 ], "pop": 2241, "state": "KS" }, { "_id": "67032", "city": "CORBIN", "loc": [ -97.526326, 37.073142 ], "pop": 193, "state": "KS" }, { "_id": "67035", "city": "PENALOSA", "loc": [ -98.39297000000001, 37.666149 ], "pop": 497, "state": "KS" }, { "_id": "67036", "city": "DANVILLE", "loc": [ -97.868933, 37.267424 ], "pop": 168, "state": "KS" }, { "_id": "67037", "city": "DERBY", "loc": [ -97.25488799999999, 37.552976 ], "pop": 17109, "state": "KS" }, { "_id": "67038", "city": "DEXTER", "loc": [ -96.69170200000001, 37.164087 ], "pop": 698, "state": "KS" }, { "_id": "67039", "city": "DOUGLASS", "loc": [ -96.994848, 37.51951 ], "pop": 2388, "state": "KS" }, { "_id": "67041", "city": "ELBING", "loc": [ -97.11276599999999, 38.046208 ], "pop": 422, "state": "KS" }, { "_id": "67042", "city": "EL DORADO", "loc": [ -96.854297, 37.822649 ], "pop": 14387, "state": "KS" }, { "_id": "67045", "city": "EUREKA", "loc": [ -96.295877, 37.826471 ], "pop": 3986, "state": "KS" }, { "_id": "67047", "city": "FALL RIVER", "loc": [ -96.04345600000001, 37.621049 ], "pop": 527, "state": "KS" }, { "_id": "67049", "city": "FREEPORT", "loc": [ -97.86342, 37.190257 ], "pop": 52, "state": "KS" }, { "_id": "67050", "city": "GARDEN PLAIN", "loc": [ -97.66002, 37.676712 ], "pop": 1406, "state": "KS" }, { "_id": "67051", "city": "GEUDA SPRINGS", "loc": [ -97.17950399999999, 37.08093 ], "pop": 503, "state": "KS" }, { "_id": "67052", "city": "GODDARD", "loc": [ -97.53640799999999, 37.657483 ], "pop": 6586, "state": "KS" }, { "_id": "67053", "city": "GOESSEL", "loc": [ -97.33628, 38.234259 ], "pop": 973, "state": "KS" }, { "_id": "67054", "city": "GREENSBURG", "loc": [ -99.301057, 37.608367 ], "pop": 2073, "state": "KS" }, { "_id": "67056", "city": "HALSTEAD", "loc": [ -97.511792, 38.006391 ], "pop": 2405, "state": "KS" }, { "_id": "67057", "city": "HARDTNER", "loc": [ -98.654732, 37.030009 ], "pop": 284, "state": "KS" }, { "_id": "67058", "city": "HARPER", "loc": [ -98.017978, 37.290943 ], "pop": 2444, "state": "KS" }, { "_id": "67059", "city": "HAVILAND", "loc": [ -99.13396400000001, 37.609615 ], "pop": 1277, "state": "KS" }, { "_id": "67060", "city": "HAYSVILLE", "loc": [ -97.355323, 37.56467 ], "pop": 7666, "state": "KS" }, { "_id": "67061", "city": "HAZELTON", "loc": [ -98.400319, 37.098421 ], "pop": 201, "state": "KS" }, { "_id": "67062", "city": "HESSTON", "loc": [ -97.44945800000001, 38.135951 ], "pop": 4156, "state": "KS" }, { "_id": "67063", "city": "HILLSBORO", "loc": [ -97.212154, 38.344907 ], "pop": 3543, "state": "KS" }, { "_id": "67065", "city": "ISABEL", "loc": [ -98.53514, 37.448544 ], "pop": 198, "state": "KS" }, { "_id": "67066", "city": "IUKA", "loc": [ -98.736103, 37.739725 ], "pop": 387, "state": "KS" }, { "_id": "67068", "city": "BELMONT", "loc": [ -98.109295, 37.636246 ], "pop": 6072, "state": "KS" }, { "_id": "67070", "city": "KIOWA", "loc": [ -98.48590799999999, 37.017166 ], "pop": 1255, "state": "KS" }, { "_id": "67071", "city": "LAKE CITY", "loc": [ -98.809833, 37.356885 ], "pop": 97, "state": "KS" }, { "_id": "67072", "city": "LATHAM", "loc": [ -96.679148, 37.530983 ], "pop": 293, "state": "KS" }, { "_id": "67073", "city": "LEHIGH", "loc": [ -97.304315, 38.377106 ], "pop": 311, "state": "KS" }, { "_id": "67074", "city": "LEON", "loc": [ -96.752634, 37.681268 ], "pop": 1342, "state": "KS" }, { "_id": "67101", "city": "MAIZE", "loc": [ -97.468874, 37.774727 ], "pop": 1808, "state": "KS" }, { "_id": "67102", "city": "MAPLE CITY", "loc": [ -96.781387, 37.071295 ], "pop": 78, "state": "KS" }, { "_id": "67103", "city": "MAYFIELD", "loc": [ -97.54160299999999, 37.251806 ], "pop": 353, "state": "KS" }, { "_id": "67104", "city": "MEDICINE LODGE", "loc": [ -98.584785, 37.284452 ], "pop": 3208, "state": "KS" }, { "_id": "67105", "city": "MILAN", "loc": [ -97.65206499999999, 37.257764 ], "pop": 238, "state": "KS" }, { "_id": "67106", "city": "MILTON", "loc": [ -97.759156, 37.440064 ], "pop": 353, "state": "KS" }, { "_id": "67107", "city": "MOUNDRIDGE", "loc": [ -97.50876700000001, 38.206029 ], "pop": 2307, "state": "KS" }, { "_id": "67108", "city": "MOUNT HOPE", "loc": [ -97.659092, 37.868412 ], "pop": 1060, "state": "KS" }, { "_id": "67109", "city": "MULLINVILLE", "loc": [ -99.46388, 37.571608 ], "pop": 427, "state": "KS" }, { "_id": "67110", "city": "MULVANE", "loc": [ -97.231954, 37.476433 ], "pop": 6238, "state": "KS" }, { "_id": "67111", "city": "MURDOCK", "loc": [ -97.95027, 37.609945 ], "pop": 197, "state": "KS" }, { "_id": "67112", "city": "NASHVILLE", "loc": [ -98.417052, 37.434419 ], "pop": 220, "state": "KS" }, { "_id": "67114", "city": "NEWTON", "loc": [ -97.343457, 38.045067 ], "pop": 20273, "state": "KS" }, { "_id": "67117", "city": "NORTH NEWTON", "loc": [ -97.328796, 38.128246 ], "pop": 408, "state": "KS" }, { "_id": "67118", "city": "NORWICH", "loc": [ -97.866247, 37.4501 ], "pop": 705, "state": "KS" }, { "_id": "67119", "city": "OXFORD", "loc": [ -97.176131, 37.265303 ], "pop": 1515, "state": "KS" }, { "_id": "67120", "city": "PECK", "loc": [ -97.311565, 37.472445 ], "pop": 1023, "state": "KS" }, { "_id": "67122", "city": "PIEDMONT", "loc": [ -96.36950299999999, 37.637169 ], "pop": 249, "state": "KS" }, { "_id": "67123", "city": "POTWIN", "loc": [ -97.000608, 37.971872 ], "pop": 900, "state": "KS" }, { "_id": "67124", "city": "PRATT", "loc": [ -98.73003, 37.650219 ], "pop": 8348, "state": "KS" }, { "_id": "67127", "city": "PROTECTION", "loc": [ -99.481628, 37.196782 ], "pop": 864, "state": "KS" }, { "_id": "67128", "city": "RAGO", "loc": [ -98.077208, 37.439824 ], "pop": 127, "state": "KS" }, { "_id": "67131", "city": "ROCK", "loc": [ -96.936468, 37.429435 ], "pop": 393, "state": "KS" }, { "_id": "67132", "city": "ROSALIA", "loc": [ -96.648161, 37.796041 ], "pop": 545, "state": "KS" }, { "_id": "67133", "city": "ROSE HILL", "loc": [ -97.117346, 37.578371 ], "pop": 5598, "state": "KS" }, { "_id": "67134", "city": "SAWYER", "loc": [ -98.66422, 37.51007 ], "pop": 569, "state": "KS" }, { "_id": "67135", "city": "SEDGWICK", "loc": [ -97.402412, 37.869328 ], "pop": 7706, "state": "KS" }, { "_id": "67137", "city": "CLIMAX", "loc": [ -96.229777, 37.64985 ], "pop": 871, "state": "KS" }, { "_id": "67138", "city": "SHARON", "loc": [ -98.414168, 37.249239 ], "pop": 440, "state": "KS" }, { "_id": "67140", "city": "SOUTH HAVEN", "loc": [ -97.404228, 37.049997 ], "pop": 710, "state": "KS" }, { "_id": "67142", "city": "SPIVEY", "loc": [ -98.175122, 37.440986 ], "pop": 169, "state": "KS" }, { "_id": "67143", "city": "SUN CITY", "loc": [ -98.90385999999999, 37.394647 ], "pop": 191, "state": "KS" }, { "_id": "67144", "city": "TOWANDA", "loc": [ -96.99176900000001, 37.800506 ], "pop": 2598, "state": "KS" }, { "_id": "67146", "city": "UDALL", "loc": [ -97.110784, 37.393861 ], "pop": 1714, "state": "KS" }, { "_id": "67147", "city": "VALLEY CENTER", "loc": [ -97.262146, 37.861643 ], "pop": 1146, "state": "KS" }, { "_id": "67149", "city": "VIOLA", "loc": [ -97.630636, 37.569624 ], "pop": 1330, "state": "KS" }, { "_id": "67150", "city": "WALDRON", "loc": [ -98.228877, 37.072994 ], "pop": 189, "state": "KS" }, { "_id": "67151", "city": "WALTON", "loc": [ -97.23607699999999, 38.123909 ], "pop": 418, "state": "KS" }, { "_id": "67152", "city": "WELLINGTON", "loc": [ -97.39097599999999, 37.27783 ], "pop": 11149, "state": "KS" }, { "_id": "67154", "city": "WHITEWATER", "loc": [ -97.130816, 37.961231 ], "pop": 1100, "state": "KS" }, { "_id": "67155", "city": "WILMORE", "loc": [ -99.184577, 37.331794 ], "pop": 132, "state": "KS" }, { "_id": "67156", "city": "WINFIELD", "loc": [ -96.97998699999999, 37.241621 ], "pop": 14958, "state": "KS" }, { "_id": "67159", "city": "ZENDA", "loc": [ -98.28736000000001, 37.437253 ], "pop": 200, "state": "KS" }, { "_id": "67202", "city": "WICHITA", "loc": [ -97.33551, 37.689945 ], "pop": 1250, "state": "KS" }, { "_id": "67203", "city": "WICHITA", "loc": [ -97.363766, 37.704798 ], "pop": 30712, "state": "KS" }, { "_id": "67204", "city": "WICHITA", "loc": [ -97.35656299999999, 37.748838 ], "pop": 20298, "state": "KS" }, { "_id": "67205", "city": "WICHITA", "loc": [ -97.426924, 37.763929 ], "pop": 1807, "state": "KS" }, { "_id": "67206", "city": "EASTBOROUGH", "loc": [ -97.23925300000001, 37.699622 ], "pop": 13008, "state": "KS" }, { "_id": "67207", "city": "EASTBOROUGH", "loc": [ -97.238962, 37.667152 ], "pop": 20116, "state": "KS" }, { "_id": "67208", "city": "WICHITA", "loc": [ -97.28106200000001, 37.702428 ], "pop": 18195, "state": "KS" }, { "_id": "67209", "city": "WICHITA", "loc": [ -97.42354, 37.677855 ], "pop": 4135, "state": "KS" }, { "_id": "67210", "city": "WICHITA", "loc": [ -97.26125399999999, 37.637915 ], "pop": 11414, "state": "KS" }, { "_id": "67211", "city": "WICHITA", "loc": [ -97.316451, 37.666181 ], "pop": 20182, "state": "KS" }, { "_id": "67212", "city": "WICHITA", "loc": [ -97.438344, 37.700683 ], "pop": 41349, "state": "KS" }, { "_id": "67213", "city": "WICHITA", "loc": [ -97.35907400000001, 37.667959 ], "pop": 23607, "state": "KS" }, { "_id": "67214", "city": "WICHITA", "loc": [ -97.313284, 37.705051 ], "pop": 18651, "state": "KS" }, { "_id": "67215", "city": "WICHITA", "loc": [ -97.42498500000001, 37.633333 ], "pop": 2930, "state": "KS" }, { "_id": "67216", "city": "WICHITA", "loc": [ -97.313625, 37.622332 ], "pop": 23031, "state": "KS" }, { "_id": "67217", "city": "WICHITA", "loc": [ -97.35813899999999, 37.626574 ], "pop": 30680, "state": "KS" }, { "_id": "67218", "city": "WICHITA", "loc": [ -97.280219, 37.669007 ], "pop": 23491, "state": "KS" }, { "_id": "67219", "city": "PARK CITY", "loc": [ -97.313517, 37.76482 ], "pop": 10619, "state": "KS" }, { "_id": "67220", "city": "BEL AIRE", "loc": [ -97.275915, 37.74548 ], "pop": 9802, "state": "KS" }, { "_id": "67221", "city": "MC CONNELL A F B", "loc": [ -97.25402099999999, 37.623687 ], "pop": 137, "state": "KS" }, { "_id": "67223", "city": "WICHITA", "loc": [ -97.467421, 37.748434 ], "pop": 318, "state": "KS" }, { "_id": "67226", "city": "WICHITA", "loc": [ -97.24785300000001, 37.737891 ], "pop": 8884, "state": "KS" }, { "_id": "67227", "city": "WICHITA", "loc": [ -97.460561, 37.588466 ], "pop": 107, "state": "KS" }, { "_id": "67228", "city": "WICHITA", "loc": [ -97.201404, 37.776061 ], "pop": 768, "state": "KS" }, { "_id": "67230", "city": "WICHITA", "loc": [ -97.155764, 37.680814 ], "pop": 4957, "state": "KS" }, { "_id": "67231", "city": "WICHITA", "loc": [ -97.423384, 37.526866 ], "pop": 855, "state": "KS" }, { "_id": "67232", "city": "WICHITA", "loc": [ -97.164278, 37.642797 ], "pop": 128, "state": "KS" }, { "_id": "67233", "city": "WICHITA", "loc": [ -97.32237000000001, 37.54434 ], "pop": 3861, "state": "KS" }, { "_id": "67235", "city": "WICHITA", "loc": [ -97.461145, 37.668631 ], "pop": 3243, "state": "KS" }, { "_id": "67236", "city": "WICHITA", "loc": [ -97.26821, 37.497943 ], "pop": 262, "state": "KS" }, { "_id": "67301", "city": "INDEPENDENCE", "loc": [ -95.716528, 37.229247 ], "pop": 13892, "state": "KS" }, { "_id": "67330", "city": "ALTAMONT", "loc": [ -95.29830200000001, 37.187298 ], "pop": 1336, "state": "KS" }, { "_id": "67332", "city": "BARTLETT", "loc": [ -95.211512, 37.060096 ], "pop": 385, "state": "KS" }, { "_id": "67333", "city": "CANEY", "loc": [ -95.909128, 37.022412 ], "pop": 3302, "state": "KS" }, { "_id": "67335", "city": "CHERRYVALE", "loc": [ -95.55901900000001, 37.266828 ], "pop": 3490, "state": "KS" }, { "_id": "67336", "city": "CHETOPA", "loc": [ -95.079572, 37.041817 ], "pop": 2031, "state": "KS" }, { "_id": "67337", "city": "COFFEYVILLE", "loc": [ -95.632756, 37.044056 ], "pop": 17417, "state": "KS" }, { "_id": "67341", "city": "DENNIS", "loc": [ -95.411602, 37.324324 ], "pop": 430, "state": "KS" }, { "_id": "67342", "city": "EDNA", "loc": [ -95.344159, 37.056146 ], "pop": 817, "state": "KS" }, { "_id": "67344", "city": "ELK CITY", "loc": [ -95.913517, 37.314571 ], "pop": 801, "state": "KS" }, { "_id": "67345", "city": "ELK FALLS", "loc": [ -96.195902, 37.374514 ], "pop": 206, "state": "KS" }, { "_id": "67346", "city": "GRENOLA", "loc": [ -96.439564, 37.366824 ], "pop": 389, "state": "KS" }, { "_id": "67347", "city": "HAVANA", "loc": [ -95.941372, 37.091655 ], "pop": 149, "state": "KS" }, { "_id": "67349", "city": "HOWARD", "loc": [ -96.256298, 37.48089 ], "pop": 1161, "state": "KS" }, { "_id": "67351", "city": "LIBERTY", "loc": [ -95.601698, 37.157629 ], "pop": 504, "state": "KS" }, { "_id": "67352", "city": "LONGTON", "loc": [ -96.081379, 37.390455 ], "pop": 561, "state": "KS" }, { "_id": "67353", "city": "MOLINE", "loc": [ -96.30687500000001, 37.364868 ], "pop": 681, "state": "KS" }, { "_id": "67354", "city": "MOUND VALLEY", "loc": [ -95.424712, 37.209078 ], "pop": 807, "state": "KS" }, { "_id": "67355", "city": "NIOTAZE", "loc": [ -96.01922, 37.05133 ], "pop": 265, "state": "KS" }, { "_id": "67356", "city": "OSWEGO", "loc": [ -95.133458, 37.182254 ], "pop": 3121, "state": "KS" }, { "_id": "67357", "city": "PARSONS", "loc": [ -95.269288, 37.338888 ], "pop": 14375, "state": "KS" }, { "_id": "67360", "city": "PERU", "loc": [ -96.140376, 37.056823 ], "pop": 689, "state": "KS" }, { "_id": "67361", "city": "SEDAN", "loc": [ -96.173248, 37.12968 ], "pop": 2186, "state": "KS" }, { "_id": "67401", "city": "BAVARIA", "loc": [ -97.60878700000001, 38.823802 ], "pop": 45208, "state": "KS" }, { "_id": "67410", "city": "ABILENE", "loc": [ -97.20632000000001, 38.937144 ], "pop": 8249, "state": "KS" }, { "_id": "67414", "city": "ADA", "loc": [ -97.887387, 39.157777 ], "pop": 179, "state": "KS" }, { "_id": "67416", "city": "ASSARIA", "loc": [ -97.62032000000001, 38.667596 ], "pop": 761, "state": "KS" }, { "_id": "67417", "city": "AURORA", "loc": [ -97.530411, 39.447188 ], "pop": 195, "state": "KS" }, { "_id": "67418", "city": "BARNARD", "loc": [ -98.071144, 39.181572 ], "pop": 302, "state": "KS" }, { "_id": "67420", "city": "SCOTTSVILLE", "loc": [ -98.11171400000001, 39.45446 ], "pop": 5221, "state": "KS" }, { "_id": "67422", "city": "BENNINGTON", "loc": [ -97.603121, 39.02239 ], "pop": 844, "state": "KS" }, { "_id": "67423", "city": "BEVERLY", "loc": [ -97.981785, 38.984416 ], "pop": 389, "state": "KS" }, { "_id": "67425", "city": "BROOKVILLE", "loc": [ -97.86300199999999, 38.785771 ], "pop": 323, "state": "KS" }, { "_id": "67427", "city": "BUSHTON", "loc": [ -98.401629, 38.501836 ], "pop": 480, "state": "KS" }, { "_id": "67428", "city": "CANTON", "loc": [ -97.42907200000001, 38.385838 ], "pop": 1050, "state": "KS" }, { "_id": "67429", "city": "CARLTON", "loc": [ -97.307506, 38.6729 ], "pop": 121, "state": "KS" }, { "_id": "67430", "city": "CAWKER CITY", "loc": [ -98.433458, 39.511529 ], "pop": 637, "state": "KS" }, { "_id": "67431", "city": "CHAPMAN", "loc": [ -97.01696099999999, 38.972225 ], "pop": 1968, "state": "KS" }, { "_id": "67432", "city": "CLAY CENTER", "loc": [ -97.127793, 39.384354 ], "pop": 6038, "state": "KS" }, { "_id": "67436", "city": "DELPHOS", "loc": [ -97.771692, 39.273122 ], "pop": 639, "state": "KS" }, { "_id": "67437", "city": "DOWNS", "loc": [ -98.544117, 39.502753 ], "pop": 1285, "state": "KS" }, { "_id": "67438", "city": "DURHAM", "loc": [ -97.255532, 38.503836 ], "pop": 444, "state": "KS" }, { "_id": "67439", "city": "ELLSWORTH", "loc": [ -98.20567800000001, 38.731219 ], "pop": 3728, "state": "KS" }, { "_id": "67441", "city": "ENTERPRISE", "loc": [ -97.112222, 38.906321 ], "pop": 1286, "state": "KS" }, { "_id": "67442", "city": "FALUN", "loc": [ -97.755411, 38.664794 ], "pop": 226, "state": "KS" }, { "_id": "67443", "city": "GALVA", "loc": [ -97.53592, 38.382377 ], "pop": 1151, "state": "KS" }, { "_id": "67444", "city": "GENESEO", "loc": [ -98.185818, 38.503655 ], "pop": 569, "state": "KS" }, { "_id": "67445", "city": "GLASCO", "loc": [ -97.841829, 39.362092 ], "pop": 663, "state": "KS" }, { "_id": "67446", "city": "GLEN ELDER", "loc": [ -98.31550799999999, 39.495775 ], "pop": 632, "state": "KS" }, { "_id": "67447", "city": "GREEN", "loc": [ -96.999424, 39.420056 ], "pop": 340, "state": "KS" }, { "_id": "67448", "city": "GYPSUM", "loc": [ -97.43384, 38.704744 ], "pop": 742, "state": "KS" }, { "_id": "67449", "city": "DELAVAN", "loc": [ -97.015491, 38.702306 ], "pop": 4145, "state": "KS" }, { "_id": "67450", "city": "HOLYROOD", "loc": [ -98.415916, 38.589955 ], "pop": 678, "state": "KS" }, { "_id": "67451", "city": "HOPE", "loc": [ -97.106126, 38.6776 ], "pop": 725, "state": "KS" }, { "_id": "67452", "city": "HUNTER", "loc": [ -98.40174500000001, 39.242964 ], "pop": 181, "state": "KS" }, { "_id": "67454", "city": "KANOPOLIS", "loc": [ -98.15746799999999, 38.709111 ], "pop": 641, "state": "KS" }, { "_id": "67455", "city": "WESTFALL", "loc": [ -98.14042600000001, 39.028644 ], "pop": 1986, "state": "KS" }, { "_id": "67456", "city": "LINDSBORG", "loc": [ -97.67389, 38.576058 ], "pop": 3320, "state": "KS" }, { "_id": "67457", "city": "LITTLE RIVER", "loc": [ -98.01131700000001, 38.407868 ], "pop": 841, "state": "KS" }, { "_id": "67458", "city": "LONGFORD", "loc": [ -97.208662, 39.174324 ], "pop": 507, "state": "KS" }, { "_id": "67459", "city": "LORRAINE", "loc": [ -98.28995399999999, 38.565175 ], "pop": 302, "state": "KS" }, { "_id": "67460", "city": "CONWAY", "loc": [ -97.654989, 38.373732 ], "pop": 16480, "state": "KS" }, { "_id": "67463", "city": "MANCHESTER", "loc": [ -97.30954699999999, 39.087051 ], "pop": 203, "state": "KS" }, { "_id": "67464", "city": "MARQUETTE", "loc": [ -97.83807899999999, 38.556028 ], "pop": 760, "state": "KS" }, { "_id": "67465", "city": "MENTOR", "loc": [ -97.566034, 38.732103 ], "pop": 791, "state": "KS" }, { "_id": "67466", "city": "MILTONVALE", "loc": [ -97.457911, 39.348078 ], "pop": 677, "state": "KS" }, { "_id": "67467", "city": "MINNEAPOLIS", "loc": [ -97.668778, 39.129487 ], "pop": 2985, "state": "KS" }, { "_id": "67468", "city": "MORGANVILLE", "loc": [ -97.249219, 39.509219 ], "pop": 847, "state": "KS" }, { "_id": "67469", "city": "NAVARRE", "loc": [ -97.105554, 38.81772 ], "pop": 205, "state": "KS" }, { "_id": "67470", "city": "NEW CAMBRIA", "loc": [ -97.52301199999999, 38.896008 ], "pop": 390, "state": "KS" }, { "_id": "67472", "city": "OAKHILL", "loc": [ -97.330501, 39.247668 ], "pop": 96, "state": "KS" }, { "_id": "67473", "city": "OSBORNE", "loc": [ -98.69608100000001, 39.419402 ], "pop": 2340, "state": "KS" }, { "_id": "67474", "city": "PORTIS", "loc": [ -98.69044599999999, 39.545545 ], "pop": 255, "state": "KS" }, { "_id": "67475", "city": "RAMONA", "loc": [ -97.075874, 38.577726 ], "pop": 237, "state": "KS" }, { "_id": "67476", "city": "ROXBURY", "loc": [ -97.42719, 38.474325 ], "pop": 106, "state": "KS" }, { "_id": "67478", "city": "SIMPSON", "loc": [ -97.948887, 39.373074 ], "pop": 159, "state": "KS" }, { "_id": "67479", "city": "SMOLAN", "loc": [ -97.71327700000001, 38.76442 ], "pop": 706, "state": "KS" }, { "_id": "67480", "city": "SOLOMON", "loc": [ -97.351803, 38.919359 ], "pop": 1626, "state": "KS" }, { "_id": "67481", "city": "SYLVAN GROVE", "loc": [ -98.373031, 39.032443 ], "pop": 976, "state": "KS" }, { "_id": "67482", "city": "TALMAGE", "loc": [ -97.29736699999999, 39.008594 ], "pop": 200, "state": "KS" }, { "_id": "67483", "city": "TAMPA", "loc": [ -97.17738799999999, 38.553437 ], "pop": 211, "state": "KS" }, { "_id": "67484", "city": "CULVER", "loc": [ -97.82837499999999, 38.998318 ], "pop": 745, "state": "KS" }, { "_id": "67485", "city": "TIPTON", "loc": [ -98.46439100000001, 39.343639 ], "pop": 373, "state": "KS" }, { "_id": "67487", "city": "WAKEFIELD", "loc": [ -97.022851, 39.224916 ], "pop": 1330, "state": "KS" }, { "_id": "67488", "city": "WELLS", "loc": [ -97.554636, 39.059224 ], "pop": 242, "state": "KS" }, { "_id": "67490", "city": "WILSON", "loc": [ -98.44321600000001, 38.813373 ], "pop": 1237, "state": "KS" }, { "_id": "67491", "city": "WINDOM", "loc": [ -97.89647600000001, 38.384518 ], "pop": 231, "state": "KS" }, { "_id": "67492", "city": "WOODBINE", "loc": [ -96.961935, 38.813064 ], "pop": 384, "state": "KS" }, { "_id": "67501", "city": "HUTCHINSON", "loc": [ -97.93105199999999, 38.054995 ], "pop": 27097, "state": "KS" }, { "_id": "67502", "city": "MEDORA", "loc": [ -97.920517, 38.091483 ], "pop": 21197, "state": "KS" }, { "_id": "67505", "city": "SOUTH HUTCHINSON", "loc": [ -97.90814, 38.007306 ], "pop": 4243, "state": "KS" }, { "_id": "67510", "city": "ABBYVILLE", "loc": [ -98.207103, 37.962597 ], "pop": 267, "state": "KS" }, { "_id": "67511", "city": "ALBERT", "loc": [ -98.98071400000001, 38.475758 ], "pop": 544, "state": "KS" }, { "_id": "67512", "city": "ALDEN", "loc": [ -98.31120199999999, 38.234303 ], "pop": 278, "state": "KS" }, { "_id": "67513", "city": "ALEXANDER", "loc": [ -99.537828, 38.456996 ], "pop": 150, "state": "KS" }, { "_id": "67514", "city": "ARLINGTON", "loc": [ -98.15904500000001, 37.859795 ], "pop": 930, "state": "KS" }, { "_id": "67515", "city": "ARNOLD", "loc": [ -100.012003, 38.609122 ], "pop": 0, "state": "KS" }, { "_id": "67516", "city": "BAZINE", "loc": [ -99.701607, 38.456457 ], "pop": 546, "state": "KS" }, { "_id": "67517", "city": "BEAVER", "loc": [ -98.64832699999999, 38.650055 ], "pop": 122, "state": "KS" }, { "_id": "67518", "city": "BEELER", "loc": [ -100.170957, 38.48113 ], "pop": 91, "state": "KS" }, { "_id": "67519", "city": "BELPRE", "loc": [ -99.09357, 37.934655 ], "pop": 268, "state": "KS" }, { "_id": "67520", "city": "BISON", "loc": [ -99.198634, 38.519332 ], "pop": 347, "state": "KS" }, { "_id": "67521", "city": "BROWNELL", "loc": [ -99.732806, 38.623854 ], "pop": 156, "state": "KS" }, { "_id": "67522", "city": "BUHLER", "loc": [ -97.769093, 38.130903 ], "pop": 1854, "state": "KS" }, { "_id": "67523", "city": "BURDETT", "loc": [ -99.52751499999999, 38.210384 ], "pop": 340, "state": "KS" }, { "_id": "67524", "city": "CHASE", "loc": [ -98.35563399999999, 38.363515 ], "pop": 772, "state": "KS" }, { "_id": "67525", "city": "CLAFLIN", "loc": [ -98.53722, 38.540885 ], "pop": 969, "state": "KS" }, { "_id": "67526", "city": "ELLINWOOD", "loc": [ -98.584872, 38.356498 ], "pop": 3297, "state": "KS" }, { "_id": "67529", "city": "GARFIELD", "loc": [ -99.237433, 38.064929 ], "pop": 368, "state": "KS" }, { "_id": "67530", "city": "HEIZER", "loc": [ -98.783103, 38.370937 ], "pop": 19861, "state": "KS" }, { "_id": "67543", "city": "HAVEN", "loc": [ -97.777244, 37.868593 ], "pop": 2181, "state": "KS" }, { "_id": "67544", "city": "SUSANK", "loc": [ -98.79104100000001, 38.529246 ], "pop": 3642, "state": "KS" }, { "_id": "67545", "city": "HUDSON", "loc": [ -98.640815, 38.148493 ], "pop": 381, "state": "KS" }, { "_id": "67546", "city": "INMAN", "loc": [ -97.795107, 38.223212 ], "pop": 1863, "state": "KS" }, { "_id": "67547", "city": "KINSLEY", "loc": [ -99.411556, 37.924715 ], "pop": 2321, "state": "KS" }, { "_id": "67548", "city": "LA CROSSE", "loc": [ -99.30973299999999, 38.531144 ], "pop": 1545, "state": "KS" }, { "_id": "67550", "city": "RADIUM", "loc": [ -99.112382, 38.179643 ], "pop": 6572, "state": "KS" }, { "_id": "67552", "city": "LEWIS", "loc": [ -99.24797700000001, 37.906223 ], "pop": 758, "state": "KS" }, { "_id": "67553", "city": "LIEBENTHAL", "loc": [ -99.282051, 38.646585 ], "pop": 231, "state": "KS" }, { "_id": "67554", "city": "LYONS", "loc": [ -98.183094, 38.334881 ], "pop": 4931, "state": "KS" }, { "_id": "67556", "city": "MC CRACKEN", "loc": [ -99.553982, 38.595734 ], "pop": 317, "state": "KS" }, { "_id": "67557", "city": "MACKSVILLE", "loc": [ -98.948052, 37.943276 ], "pop": 754, "state": "KS" }, { "_id": "67559", "city": "NEKOMA", "loc": [ -99.42337999999999, 38.437226 ], "pop": 81, "state": "KS" }, { "_id": "67560", "city": "NESS CITY", "loc": [ -99.90286, 38.438754 ], "pop": 2256, "state": "KS" }, { "_id": "67561", "city": "NICKERSON", "loc": [ -98.067408, 38.141171 ], "pop": 1596, "state": "KS" }, { "_id": "67562", "city": "ODIN", "loc": [ -98.626762, 38.55628 ], "pop": 281, "state": "KS" }, { "_id": "67563", "city": "OFFERLE", "loc": [ -99.549757, 37.882805 ], "pop": 323, "state": "KS" }, { "_id": "67564", "city": "GALATIA", "loc": [ -98.92899, 38.567045 ], "pop": 14, "state": "KS" }, { "_id": "67565", "city": "GALATIA", "loc": [ -99.065635, 38.509239 ], "pop": 711, "state": "KS" }, { "_id": "67566", "city": "PARTRIDGE", "loc": [ -98.07981100000001, 37.967129 ], "pop": 581, "state": "KS" }, { "_id": "67567", "city": "PAWNEE ROCK", "loc": [ -98.981436, 38.278193 ], "pop": 515, "state": "KS" }, { "_id": "67568", "city": "PLEVNA", "loc": [ -98.298807, 37.965762 ], "pop": 270, "state": "KS" }, { "_id": "67570", "city": "PRETTY PRAIRIE", "loc": [ -97.988603, 37.77828 ], "pop": 959, "state": "KS" }, { "_id": "67572", "city": "RANSOM", "loc": [ -99.92665100000001, 38.640003 ], "pop": 581, "state": "KS" }, { "_id": "67573", "city": "RAYMOND", "loc": [ -98.411867, 38.287677 ], "pop": 254, "state": "KS" }, { "_id": "67574", "city": "ROZEL", "loc": [ -99.40484600000001, 38.214823 ], "pop": 275, "state": "KS" }, { "_id": "67575", "city": "RUSH CENTER", "loc": [ -99.30788099999999, 38.453341 ], "pop": 275, "state": "KS" }, { "_id": "67576", "city": "SAINT JOHN", "loc": [ -98.764653, 38.030939 ], "pop": 2292, "state": "KS" }, { "_id": "67577", "city": "SEWARD", "loc": [ -98.76391, 38.206558 ], "pop": 249, "state": "KS" }, { "_id": "67578", "city": "STAFFORD", "loc": [ -98.592854, 37.955372 ], "pop": 1689, "state": "KS" }, { "_id": "67579", "city": "STERLING", "loc": [ -98.205474, 38.212621 ], "pop": 2485, "state": "KS" }, { "_id": "67581", "city": "SYLVIA", "loc": [ -98.40676499999999, 37.955687 ], "pop": 396, "state": "KS" }, { "_id": "67582", "city": "TIMKEN", "loc": [ -99.19015400000001, 38.445489 ], "pop": 185, "state": "KS" }, { "_id": "67583", "city": "LANGDON", "loc": [ -98.421798, 37.809593 ], "pop": 558, "state": "KS" }, { "_id": "67584", "city": "UTICA", "loc": [ -100.137976, 38.641057 ], "pop": 403, "state": "KS" }, { "_id": "67601", "city": "ANTONINO", "loc": [ -99.320134, 38.878046 ], "pop": 20703, "state": "KS" }, { "_id": "67621", "city": "AGRA", "loc": [ -99.12554299999999, 39.803701 ], "pop": 604, "state": "KS" }, { "_id": "67622", "city": "ALMENA", "loc": [ -99.704177, 39.889071 ], "pop": 574, "state": "KS" }, { "_id": "67623", "city": "ALTON", "loc": [ -98.953875, 39.451422 ], "pop": 364, "state": "KS" }, { "_id": "67625", "city": "BOGUE", "loc": [ -99.67882, 39.378221 ], "pop": 416, "state": "KS" }, { "_id": "67626", "city": "BUNKER HILL", "loc": [ -98.678285, 38.835704 ], "pop": 359, "state": "KS" }, { "_id": "67627", "city": "CATHARINE", "loc": [ -99.215992, 38.96034 ], "pop": 289, "state": "KS" }, { "_id": "67628", "city": "CEDAR", "loc": [ -98.93692299999999, 39.660242 ], "pop": 62, "state": "KS" }, { "_id": "67629", "city": "CLAYTON", "loc": [ -100.059623, 39.69985 ], "pop": 485, "state": "KS" }, { "_id": "67630", "city": "CODELL", "loc": [ -99.15918600000001, 39.206652 ], "pop": 160, "state": "KS" }, { "_id": "67631", "city": "COLLYER", "loc": [ -100.06921, 38.965231 ], "pop": 523, "state": "KS" }, { "_id": "67632", "city": "DAMAR", "loc": [ -99.581056, 39.324181 ], "pop": 214, "state": "KS" }, { "_id": "67634", "city": "DORRANCE", "loc": [ -98.56947099999999, 38.834784 ], "pop": 316, "state": "KS" }, { "_id": "67635", "city": "DRESDEN", "loc": [ -100.411219, 39.609357 ], "pop": 158, "state": "KS" }, { "_id": "67636", "city": "EDMOND", "loc": [ -99.78418499999999, 39.661348 ], "pop": 180, "state": "KS" }, { "_id": "67637", "city": "ELLIS", "loc": [ -99.52851, 38.947128 ], "pop": 2478, "state": "KS" }, { "_id": "67638", "city": "GAYLORD", "loc": [ -98.801751, 39.659923 ], "pop": 722, "state": "KS" }, { "_id": "67639", "city": "GLADE", "loc": [ -99.29962999999999, 39.670373 ], "pop": 320, "state": "KS" }, { "_id": "67640", "city": "GORHAM", "loc": [ -99.01116, 38.872226 ], "pop": 528, "state": "KS" }, { "_id": "67641", "city": "HARLAN", "loc": [ -98.789796, 39.611345 ], "pop": 91, "state": "KS" }, { "_id": "67642", "city": "HILL CITY", "loc": [ -99.842921, 39.35657 ], "pop": 2501, "state": "KS" }, { "_id": "67643", "city": "JENNINGS", "loc": [ -100.283441, 39.676242 ], "pop": 347, "state": "KS" }, { "_id": "67644", "city": "KIRWIN", "loc": [ -99.120378, 39.671716 ], "pop": 388, "state": "KS" }, { "_id": "67645", "city": "DENSMORE", "loc": [ -100.001566, 39.609364 ], "pop": 344, "state": "KS" }, { "_id": "67646", "city": "LOGAN", "loc": [ -99.56869399999999, 39.661096 ], "pop": 751, "state": "KS" }, { "_id": "67647", "city": "LONG ISLAND", "loc": [ -99.539125, 39.951683 ], "pop": 260, "state": "KS" }, { "_id": "67648", "city": "LUCAS", "loc": [ -98.535186, 39.058126 ], "pop": 576, "state": "KS" }, { "_id": "67649", "city": "LURAY", "loc": [ -98.685084, 39.103856 ], "pop": 339, "state": "KS" }, { "_id": "67650", "city": "MORLAND", "loc": [ -100.07328, 39.322905 ], "pop": 604, "state": "KS" }, { "_id": "67651", "city": "NATOMA", "loc": [ -98.98286299999999, 39.201341 ], "pop": 623, "state": "KS" }, { "_id": "67652", "city": "NEW ALMELO", "loc": [ -100.139829, 39.624755 ], "pop": 2, "state": "KS" }, { "_id": "67653", "city": "NORCATUR", "loc": [ -100.200714, 39.844661 ], "pop": 304, "state": "KS" }, { "_id": "67654", "city": "NORTON", "loc": [ -99.887832, 39.840706 ], "pop": 4360, "state": "KS" }, { "_id": "67656", "city": "OGALLAH", "loc": [ -99.681117, 38.932307 ], "pop": 460, "state": "KS" }, { "_id": "67657", "city": "PALCO", "loc": [ -99.559265, 39.253107 ], "pop": 384, "state": "KS" }, { "_id": "67658", "city": "PARADISE", "loc": [ -98.920723, 39.075617 ], "pop": 219, "state": "KS" }, { "_id": "67659", "city": "PENOKEE", "loc": [ -99.919603, 39.391667 ], "pop": 22, "state": "KS" }, { "_id": "67660", "city": "PFEIFER", "loc": [ -99.14116199999999, 38.729915 ], "pop": 123, "state": "KS" }, { "_id": "67661", "city": "PHILLIPSBURG", "loc": [ -99.33284, 39.762333 ], "pop": 3942, "state": "KS" }, { "_id": "67663", "city": "PLAINVILLE", "loc": [ -99.300827, 39.230823 ], "pop": 2499, "state": "KS" }, { "_id": "67664", "city": "PRAIRIE VIEW", "loc": [ -99.568314, 39.836967 ], "pop": 325, "state": "KS" }, { "_id": "67665", "city": "RUSSELL", "loc": [ -98.85945100000001, 38.880563 ], "pop": 5370, "state": "KS" }, { "_id": "67667", "city": "SCHOENCHEN", "loc": [ -99.386872, 38.748087 ], "pop": 534, "state": "KS" }, { "_id": "67669", "city": "STOCKTON", "loc": [ -99.28710599999999, 39.43761 ], "pop": 2147, "state": "KS" }, { "_id": "67671", "city": "VICTORIA", "loc": [ -99.13905699999999, 38.858932 ], "pop": 1877, "state": "KS" }, { "_id": "67672", "city": "WA KEENEY", "loc": [ -99.88182399999999, 39.011415 ], "pop": 2711, "state": "KS" }, { "_id": "67673", "city": "WALDO", "loc": [ -98.778516, 39.087715 ], "pop": 128, "state": "KS" }, { "_id": "67675", "city": "WOODSTON", "loc": [ -99.103745, 39.443118 ], "pop": 317, "state": "KS" }, { "_id": "67676", "city": "ZURICH", "loc": [ -99.44908, 39.218155 ], "pop": 318, "state": "KS" }, { "_id": "67701", "city": "COLBY", "loc": [ -101.044169, 39.383038 ], "pop": 7225, "state": "KS" }, { "_id": "67730", "city": "ATWOOD", "loc": [ -101.031766, 39.792607 ], "pop": 2174, "state": "KS" }, { "_id": "67731", "city": "BIRD CITY", "loc": [ -101.531875, 39.757941 ], "pop": 794, "state": "KS" }, { "_id": "67732", "city": "BREWSTER", "loc": [ -101.372973, 39.36552 ], "pop": 374, "state": "KS" }, { "_id": "67733", "city": "EDSON", "loc": [ -101.520999, 39.357873 ], "pop": 294, "state": "KS" }, { "_id": "67734", "city": "GEM", "loc": [ -100.894781, 39.429587 ], "pop": 157, "state": "KS" }, { "_id": "67735", "city": "GOODLAND", "loc": [ -101.716396, 39.349099 ], "pop": 6039, "state": "KS" }, { "_id": "67736", "city": "GOVE", "loc": [ -100.486707, 38.886969 ], "pop": 379, "state": "KS" }, { "_id": "67737", "city": "GRAINFIELD", "loc": [ -100.468038, 39.103016 ], "pop": 467, "state": "KS" }, { "_id": "67738", "city": "GRINNELL", "loc": [ -100.662052, 39.085107 ], "pop": 632, "state": "KS" }, { "_id": "67739", "city": "HERNDON", "loc": [ -100.813935, 39.90356 ], "pop": 477, "state": "KS" }, { "_id": "67740", "city": "HOXIE", "loc": [ -100.47583, 39.332189 ], "pop": 2023, "state": "KS" }, { "_id": "67741", "city": "KANORADO", "loc": [ -102.001491, 39.343753 ], "pop": 593, "state": "KS" }, { "_id": "67743", "city": "LEVANT", "loc": [ -101.209587, 39.384083 ], "pop": 143, "state": "KS" }, { "_id": "67744", "city": "LUDELL", "loc": [ -100.960352, 39.863037 ], "pop": 155, "state": "KS" }, { "_id": "67745", "city": "MC DONALD", "loc": [ -101.322697, 39.792304 ], "pop": 598, "state": "KS" }, { "_id": "67747", "city": "MONUMENT", "loc": [ -101.034952, 39.07896 ], "pop": 164, "state": "KS" }, { "_id": "67748", "city": "OAKLEY", "loc": [ -100.858048, 39.112102 ], "pop": 2346, "state": "KS" }, { "_id": "67749", "city": "OBERLIN", "loc": [ -100.531389, 39.827507 ], "pop": 3046, "state": "KS" }, { "_id": "67751", "city": "PARK", "loc": [ -100.34694, 39.078832 ], "pop": 316, "state": "KS" }, { "_id": "67752", "city": "QUINTER", "loc": [ -100.233739, 39.036252 ], "pop": 1437, "state": "KS" }, { "_id": "67753", "city": "MENLO", "loc": [ -100.748982, 39.462185 ], "pop": 246, "state": "KS" }, { "_id": "67755", "city": "RUSSELL SPRINGS", "loc": [ -101.2759, 38.868374 ], "pop": 243, "state": "KS" }, { "_id": "67756", "city": "WHEELER", "loc": [ -101.81226, 39.773634 ], "pop": 2449, "state": "KS" }, { "_id": "67757", "city": "SELDEN", "loc": [ -100.525695, 39.521636 ], "pop": 872, "state": "KS" }, { "_id": "67758", "city": "SHARON SPRINGS", "loc": [ -101.743118, 38.885661 ], "pop": 1148, "state": "KS" }, { "_id": "67759", "city": "STUDLEY", "loc": [ -100.281436, 39.261618 ], "pop": 314, "state": "KS" }, { "_id": "67761", "city": "WALLACE", "loc": [ -101.573474, 38.874675 ], "pop": 293, "state": "KS" }, { "_id": "67762", "city": "WESKAN", "loc": [ -101.951162, 38.864867 ], "pop": 380, "state": "KS" }, { "_id": "67764", "city": "WINONA", "loc": [ -101.221569, 39.061038 ], "pop": 328, "state": "KS" }, { "_id": "67801", "city": "DODGE CITY", "loc": [ -100.024074, 37.756882 ], "pop": 23098, "state": "KS" }, { "_id": "67831", "city": "ASHLAND", "loc": [ -99.75904, 37.182345 ], "pop": 1271, "state": "KS" }, { "_id": "67834", "city": "BUCKLIN", "loc": [ -99.632543, 37.552974 ], "pop": 848, "state": "KS" }, { "_id": "67835", "city": "CIMARRON", "loc": [ -100.343825, 37.812727 ], "pop": 2249, "state": "KS" }, { "_id": "67837", "city": "COPELAND", "loc": [ -100.614815, 37.567994 ], "pop": 536, "state": "KS" }, { "_id": "67838", "city": "DEERFIELD", "loc": [ -101.143141, 38.00677 ], "pop": 1077, "state": "KS" }, { "_id": "67839", "city": "ALAMOTA", "loc": [ -100.458023, 38.474588 ], "pop": 1666, "state": "KS" }, { "_id": "67840", "city": "ENGLEWOOD", "loc": [ -99.987793, 37.065751 ], "pop": 148, "state": "KS" }, { "_id": "67841", "city": "ENSIGN", "loc": [ -100.249555, 37.641381 ], "pop": 373, "state": "KS" }, { "_id": "67842", "city": "FORD", "loc": [ -99.76421999999999, 37.632312 ], "pop": 403, "state": "KS" }, { "_id": "67843", "city": "FORT DODGE", "loc": [ -99.94563100000001, 37.70652 ], "pop": 736, "state": "KS" }, { "_id": "67844", "city": "FOWLER", "loc": [ -100.19815, 37.354201 ], "pop": 881, "state": "KS" }, { "_id": "67846", "city": "GARDEN CITY", "loc": [ -100.862088, 37.97693 ], "pop": 30189, "state": "KS" }, { "_id": "67849", "city": "HANSTON", "loc": [ -99.69278, 38.108964 ], "pop": 695, "state": "KS" }, { "_id": "67850", "city": "HEALY", "loc": [ -100.615941, 38.566355 ], "pop": 476, "state": "KS" }, { "_id": "67851", "city": "HOLCOMB", "loc": [ -100.989323, 37.993105 ], "pop": 2060, "state": "KS" }, { "_id": "67853", "city": "INGALLS", "loc": [ -100.514253, 37.829339 ], "pop": 807, "state": "KS" }, { "_id": "67854", "city": "JETMORE", "loc": [ -99.93266800000001, 38.073829 ], "pop": 1482, "state": "KS" }, { "_id": "67855", "city": "JOHNSON", "loc": [ -101.719354, 37.569424 ], "pop": 1979, "state": "KS" }, { "_id": "67856", "city": "KALVESTA", "loc": [ -100.443095, 38.102796 ], "pop": 326, "state": "KS" }, { "_id": "67857", "city": "KENDALL", "loc": [ -101.596883, 37.963657 ], "pop": 86, "state": "KS" }, { "_id": "67858", "city": "KINGSDOWN", "loc": [ -99.751553, 37.52138 ], "pop": 124, "state": "KS" }, { "_id": "67859", "city": "KISMET", "loc": [ -100.750645, 37.133601 ], "pop": 1195, "state": "KS" }, { "_id": "67860", "city": "LAKIN", "loc": [ -101.271297, 37.938197 ], "pop": 2950, "state": "KS" }, { "_id": "67861", "city": "LEOTI", "loc": [ -101.358851, 38.498726 ], "pop": 2604, "state": "KS" }, { "_id": "67862", "city": "MANTER", "loc": [ -101.910869, 37.545094 ], "pop": 354, "state": "KS" }, { "_id": "67863", "city": "MODOC", "loc": [ -101.199231, 38.482523 ], "pop": 154, "state": "KS" }, { "_id": "67864", "city": "MEADE", "loc": [ -100.336378, 37.282137 ], "pop": 1949, "state": "KS" }, { "_id": "67865", "city": "BLOOM", "loc": [ -99.960358, 37.42454 ], "pop": 999, "state": "KS" }, { "_id": "67867", "city": "MONTEZUMA", "loc": [ -100.446127, 37.601638 ], "pop": 1431, "state": "KS" }, { "_id": "67868", "city": "PIERCEVILLE", "loc": [ -100.71177, 37.907739 ], "pop": 495, "state": "KS" }, { "_id": "67869", "city": "PLAINS", "loc": [ -100.573174, 37.270106 ], "pop": 1417, "state": "KS" }, { "_id": "67870", "city": "SATANTA", "loc": [ -100.96908, 37.440916 ], "pop": 1881, "state": "KS" }, { "_id": "67871", "city": "FRIEND", "loc": [ -100.899331, 38.47994 ], "pop": 4476, "state": "KS" }, { "_id": "67874", "city": "SHIELDS", "loc": [ -100.417699, 38.620794 ], "pop": 158, "state": "KS" }, { "_id": "67876", "city": "SPEARVILLE", "loc": [ -99.737041, 37.823473 ], "pop": 1361, "state": "KS" }, { "_id": "67877", "city": "SUBLETTE", "loc": [ -100.820775, 37.522148 ], "pop": 2364, "state": "KS" }, { "_id": "67878", "city": "SYRACUSE", "loc": [ -101.768654, 37.982581 ], "pop": 2302, "state": "KS" }, { "_id": "67879", "city": "TRIBUNE", "loc": [ -101.765584, 38.496219 ], "pop": 1774, "state": "KS" }, { "_id": "67880", "city": "ULYSSES", "loc": [ -101.348846, 37.579174 ], "pop": 7159, "state": "KS" }, { "_id": "67882", "city": "WRIGHT", "loc": [ -99.923766, 37.767638 ], "pop": 759, "state": "KS" }, { "_id": "67901", "city": "LIBERAL", "loc": [ -100.92857, 37.043789 ], "pop": 17189, "state": "KS" }, { "_id": "67950", "city": "ELKHART", "loc": [ -101.901244, 37.015448 ], "pop": 2562, "state": "KS" }, { "_id": "67951", "city": "HUGOTON", "loc": [ -101.334614, 37.168226 ], "pop": 4244, "state": "KS" }, { "_id": "67952", "city": "MOSCOW", "loc": [ -101.242699, 37.317175 ], "pop": 804, "state": "KS" }, { "_id": "67953", "city": "RICHFIELD", "loc": [ -101.700382, 37.283364 ], "pop": 269, "state": "KS" }, { "_id": "67954", "city": "ROLLA", "loc": [ -101.644683, 37.108881 ], "pop": 649, "state": "KS" }, { "_id": "68001", "city": "ABIE", "loc": [ -96.956282, 41.347901 ], "pop": 282, "state": "NE" }, { "_id": "68002", "city": "ARLINGTON", "loc": [ -96.306974, 41.441654 ], "pop": 2075, "state": "NE" }, { "_id": "68003", "city": "ASHLAND", "loc": [ -96.39041, 41.05411 ], "pop": 3296, "state": "NE" }, { "_id": "68004", "city": "BANCROFT", "loc": [ -96.61714600000001, 42.026716 ], "pop": 913, "state": "NE" }, { "_id": "68005", "city": "BELLEVUE", "loc": [ -95.909932, 41.149663 ], "pop": 24133, "state": "NE" }, { "_id": "68007", "city": "BENNINGTON", "loc": [ -96.15752500000001, 41.362262 ], "pop": 1372, "state": "NE" }, { "_id": "68008", "city": "BLAIR", "loc": [ -96.161666, 41.545376 ], "pop": 9059, "state": "NE" }, { "_id": "68014", "city": "BRUNO", "loc": [ -96.964612, 41.271771 ], "pop": 366, "state": "NE" }, { "_id": "68015", "city": "CEDAR BLUFFS", "loc": [ -96.569115, 41.383492 ], "pop": 1911, "state": "NE" }, { "_id": "68017", "city": "CERESCO", "loc": [ -96.639769, 41.06807 ], "pop": 1237, "state": "NE" }, { "_id": "68018", "city": "COLON", "loc": [ -96.614132, 41.288261 ], "pop": 290, "state": "NE" }, { "_id": "68019", "city": "CRAIG", "loc": [ -96.392398, 41.771497 ], "pop": 574, "state": "NE" }, { "_id": "68020", "city": "DECATUR", "loc": [ -96.259456, 41.996553 ], "pop": 975, "state": "NE" }, { "_id": "68022", "city": "ELKHORN", "loc": [ -96.24308000000001, 41.275647 ], "pop": 8508, "state": "NE" }, { "_id": "68023", "city": "FORT CALHOUN", "loc": [ -96.032375, 41.437281 ], "pop": 2833, "state": "NE" }, { "_id": "68025", "city": "FREMONT", "loc": [ -96.494468, 41.441637 ], "pop": 26498, "state": "NE" }, { "_id": "68028", "city": "GRETNA", "loc": [ -96.24583699999999, 41.134458 ], "pop": 3236, "state": "NE" }, { "_id": "68029", "city": "HERMAN", "loc": [ -96.286942, 41.652381 ], "pop": 988, "state": "NE" }, { "_id": "68031", "city": "HOOPER", "loc": [ -96.523231, 41.641371 ], "pop": 1821, "state": "NE" }, { "_id": "68033", "city": "ITHACA", "loc": [ -96.529785, 41.174849 ], "pop": 359, "state": "NE" }, { "_id": "68034", "city": "KENNARD", "loc": [ -96.16192700000001, 41.471139 ], "pop": 1652, "state": "NE" }, { "_id": "68035", "city": "LESHARA", "loc": [ -96.449805, 41.346597 ], "pop": 492, "state": "NE" }, { "_id": "68036", "city": "LINWOOD", "loc": [ -96.93987300000001, 41.412926 ], "pop": 175, "state": "NE" }, { "_id": "68037", "city": "LOUISVILLE", "loc": [ -96.194817, 40.996667 ], "pop": 1998, "state": "NE" }, { "_id": "68038", "city": "LYONS", "loc": [ -96.46613600000001, 41.94416 ], "pop": 1613, "state": "NE" }, { "_id": "68039", "city": "MACY", "loc": [ -96.35886499999999, 42.117739 ], "pop": 1464, "state": "NE" }, { "_id": "68040", "city": "MALMO", "loc": [ -96.73271800000001, 41.298424 ], "pop": 584, "state": "NE" }, { "_id": "68041", "city": "MEAD", "loc": [ -96.49614099999999, 41.23929 ], "pop": 786, "state": "NE" }, { "_id": "68044", "city": "NICKERSON", "loc": [ -96.49042300000001, 41.523293 ], "pop": 691, "state": "NE" }, { "_id": "68045", "city": "OAKLAND", "loc": [ -96.46706399999999, 41.838426 ], "pop": 1855, "state": "NE" }, { "_id": "68046", "city": "PAPILLION", "loc": [ -96.037052, 41.152257 ], "pop": 7177, "state": "NE" }, { "_id": "68047", "city": "PENDER", "loc": [ -96.718907, 42.117719 ], "pop": 1818, "state": "NE" }, { "_id": "68048", "city": "PLATTSMOUTH", "loc": [ -95.913933, 40.999194 ], "pop": 10387, "state": "NE" }, { "_id": "68050", "city": "PRAGUE", "loc": [ -96.830084, 41.303598 ], "pop": 819, "state": "NE" }, { "_id": "68054", "city": "RICHFIELD", "loc": [ -96.045627, 41.090522 ], "pop": 822, "state": "NE" }, { "_id": "68055", "city": "ROSALIE", "loc": [ -96.49286600000001, 42.057435 ], "pop": 424, "state": "NE" }, { "_id": "68057", "city": "SCRIBNER", "loc": [ -96.64409499999999, 41.663035 ], "pop": 1485, "state": "NE" }, { "_id": "68059", "city": "SPRINGFIELD", "loc": [ -96.143811, 41.07649 ], "pop": 2961, "state": "NE" }, { "_id": "68061", "city": "TEKAMAH", "loc": [ -96.228144, 41.781898 ], "pop": 2881, "state": "NE" }, { "_id": "68062", "city": "THURSTON", "loc": [ -96.69035599999999, 42.188161 ], "pop": 362, "state": "NE" }, { "_id": "68064", "city": "VALLEY", "loc": [ -96.346288, 41.318581 ], "pop": 3067, "state": "NE" }, { "_id": "68065", "city": "VALPARAISO", "loc": [ -96.80914900000001, 41.084304 ], "pop": 1095, "state": "NE" }, { "_id": "68066", "city": "WAHOO", "loc": [ -96.62194599999999, 41.211723 ], "pop": 4258, "state": "NE" }, { "_id": "68067", "city": "WALTHILL", "loc": [ -96.480294, 42.148543 ], "pop": 1212, "state": "NE" }, { "_id": "68069", "city": "WATERLOO", "loc": [ -96.306318, 41.27024 ], "pop": 1468, "state": "NE" }, { "_id": "68070", "city": "WESTON", "loc": [ -96.769075, 41.181083 ], "pop": 834, "state": "NE" }, { "_id": "68071", "city": "WINNEBAGO", "loc": [ -96.468507, 42.233851 ], "pop": 1449, "state": "NE" }, { "_id": "68073", "city": "YUTAN", "loc": [ -96.393247, 41.23403 ], "pop": 1838, "state": "NE" }, { "_id": "68102", "city": "OMAHA", "loc": [ -95.940909, 41.258961 ], "pop": 4963, "state": "NE" }, { "_id": "68104", "city": "OMAHA", "loc": [ -95.999888, 41.29186 ], "pop": 35325, "state": "NE" }, { "_id": "68105", "city": "OMAHA", "loc": [ -95.96293799999999, 41.243502 ], "pop": 23007, "state": "NE" }, { "_id": "68106", "city": "OMAHA", "loc": [ -95.997972, 41.240322 ], "pop": 20622, "state": "NE" }, { "_id": "68107", "city": "OMAHA", "loc": [ -95.955877, 41.206783 ], "pop": 23890, "state": "NE" }, { "_id": "68108", "city": "OMAHA", "loc": [ -95.93355699999999, 41.238198 ], "pop": 12721, "state": "NE" }, { "_id": "68110", "city": "OMAHA", "loc": [ -95.936072, 41.293342 ], "pop": 8718, "state": "NE" }, { "_id": "68111", "city": "OMAHA", "loc": [ -95.965045, 41.296212 ], "pop": 28453, "state": "NE" }, { "_id": "68112", "city": "OMAHA", "loc": [ -95.959684, 41.329614 ], "pop": 12075, "state": "NE" }, { "_id": "68113", "city": "OFFUTT A F B", "loc": [ -95.907601, 41.114755 ], "pop": 2894, "state": "NE" }, { "_id": "68114", "city": "OMAHA", "loc": [ -96.049306, 41.265624 ], "pop": 16573, "state": "NE" }, { "_id": "68116", "city": "OMAHA", "loc": [ -96.149462, 41.287854 ], "pop": 875, "state": "NE" }, { "_id": "68117", "city": "OMAHA", "loc": [ -95.995301, 41.206403 ], "pop": 8347, "state": "NE" }, { "_id": "68118", "city": "OMAHA", "loc": [ -96.166118, 41.260636 ], "pop": 3593, "state": "NE" }, { "_id": "68122", "city": "OMAHA", "loc": [ -96.045772, 41.333312 ], "pop": 2556, "state": "NE" }, { "_id": "68123", "city": "OMAHA", "loc": [ -95.95599, 41.122265 ], "pop": 20362, "state": "NE" }, { "_id": "68124", "city": "OMAHA", "loc": [ -96.049515, 41.233814 ], "pop": 16340, "state": "NE" }, { "_id": "68127", "city": "RALSTON", "loc": [ -96.055019, 41.201782 ], "pop": 22434, "state": "NE" }, { "_id": "68128", "city": "PAPILLION", "loc": [ -96.040256, 41.171983 ], "pop": 15882, "state": "NE" }, { "_id": "68130", "city": "OMAHA", "loc": [ -96.168815, 41.235452 ], "pop": 7291, "state": "NE" }, { "_id": "68131", "city": "OMAHA", "loc": [ -95.963891, 41.264658 ], "pop": 14069, "state": "NE" }, { "_id": "68132", "city": "OMAHA", "loc": [ -95.995954, 41.265746 ], "pop": 13730, "state": "NE" }, { "_id": "68133", "city": "PAPILLION", "loc": [ -96.013076, 41.141564 ], "pop": 842, "state": "NE" }, { "_id": "68134", "city": "OMAHA", "loc": [ -96.054569, 41.294917 ], "pop": 27571, "state": "NE" }, { "_id": "68135", "city": "OMAHA", "loc": [ -96.169827, 41.210419 ], "pop": 2503, "state": "NE" }, { "_id": "68136", "city": "OMAHA", "loc": [ -96.209633, 41.168343 ], "pop": 226, "state": "NE" }, { "_id": "68137", "city": "MILLARD", "loc": [ -96.12446199999999, 41.201067 ], "pop": 23894, "state": "NE" }, { "_id": "68138", "city": "PAPILLION", "loc": [ -96.129718, 41.177724 ], "pop": 8845, "state": "NE" }, { "_id": "68142", "city": "OMAHA", "loc": [ -96.090109, 41.335904 ], "pop": 1249, "state": "NE" }, { "_id": "68144", "city": "MILLARD", "loc": [ -96.116772, 41.235599 ], "pop": 26450, "state": "NE" }, { "_id": "68147", "city": "OMAHA", "loc": [ -95.95915599999999, 41.181508 ], "pop": 9205, "state": "NE" }, { "_id": "68152", "city": "OMAHA", "loc": [ -96.00029499999999, 41.334557 ], "pop": 6518, "state": "NE" }, { "_id": "68154", "city": "OMAHA", "loc": [ -96.120611, 41.264167 ], "pop": 21847, "state": "NE" }, { "_id": "68157", "city": "PAPILLION", "loc": [ -95.995378, 41.183423 ], "pop": 6112, "state": "NE" }, { "_id": "68164", "city": "OMAHA", "loc": [ -96.100793, 41.29552 ], "pop": 16301, "state": "NE" }, { "_id": "68301", "city": "ADAMS", "loc": [ -96.53955999999999, 40.457571 ], "pop": 1127, "state": "NE" }, { "_id": "68303", "city": "ALEXANDRIA", "loc": [ -97.40385499999999, 40.261446 ], "pop": 429, "state": "NE" }, { "_id": "68304", "city": "ALVO", "loc": [ -96.40355700000001, 40.899185 ], "pop": 447, "state": "NE" }, { "_id": "68305", "city": "AUBURN", "loc": [ -95.85264599999999, 40.378889 ], "pop": 4296, "state": "NE" }, { "_id": "68307", "city": "AVOCA", "loc": [ -96.095736, 40.815941 ], "pop": 444, "state": "NE" }, { "_id": "68310", "city": "BEATRICE", "loc": [ -96.743494, 40.270509 ], "pop": 15528, "state": "NE" }, { "_id": "68313", "city": "BEAVER CROSSING", "loc": [ -97.29135599999999, 40.788658 ], "pop": 827, "state": "NE" }, { "_id": "68314", "city": "BEE", "loc": [ -97.07446899999999, 41.000675 ], "pop": 447, "state": "NE" }, { "_id": "68315", "city": "BELVIDERE", "loc": [ -97.55541599999999, 40.25101 ], "pop": 233, "state": "NE" }, { "_id": "68316", "city": "BENEDICT", "loc": [ -97.60292099999999, 41.003268 ], "pop": 646, "state": "NE" }, { "_id": "68317", "city": "BENNET", "loc": [ -96.5134, 40.63822 ], "pop": 1611, "state": "NE" }, { "_id": "68318", "city": "BLUE SPRINGS", "loc": [ -96.659037, 40.140684 ], "pop": 504, "state": "NE" }, { "_id": "68319", "city": "BRADSHAW", "loc": [ -97.760699, 40.920718 ], "pop": 716, "state": "NE" }, { "_id": "68320", "city": "BROCK", "loc": [ -95.98014499999999, 40.477227 ], "pop": 400, "state": "NE" }, { "_id": "68321", "city": "BROWNVILLE", "loc": [ -95.69347999999999, 40.399447 ], "pop": 475, "state": "NE" }, { "_id": "68322", "city": "BRUNING", "loc": [ -97.557276, 40.330157 ], "pop": 496, "state": "NE" }, { "_id": "68323", "city": "BURCHARD", "loc": [ -96.348806, 40.105743 ], "pop": 507, "state": "NE" }, { "_id": "68324", "city": "BURR", "loc": [ -96.238401, 40.560057 ], "pop": 500, "state": "NE" }, { "_id": "68325", "city": "BYRON", "loc": [ -97.761236, 40.02688 ], "pop": 357, "state": "NE" }, { "_id": "68326", "city": "CARLETON", "loc": [ -97.671909, 40.300534 ], "pop": 323, "state": "NE" }, { "_id": "68327", "city": "CHESTER", "loc": [ -97.61969000000001, 40.028954 ], "pop": 527, "state": "NE" }, { "_id": "68328", "city": "CLATONIA", "loc": [ -96.855513, 40.47236 ], "pop": 502, "state": "NE" }, { "_id": "68329", "city": "COOK", "loc": [ -96.15262, 40.498628 ], "pop": 592, "state": "NE" }, { "_id": "68330", "city": "CORDOVA", "loc": [ -97.340721, 40.718477 ], "pop": 241, "state": "NE" }, { "_id": "68331", "city": "CORTLAND", "loc": [ -96.716627, 40.497599 ], "pop": 691, "state": "NE" }, { "_id": "68332", "city": "CRAB ORCHARD", "loc": [ -96.411569, 40.316648 ], "pop": 169, "state": "NE" }, { "_id": "68333", "city": "CRETE", "loc": [ -96.956676, 40.619302 ], "pop": 6390, "state": "NE" }, { "_id": "68335", "city": "DAVENPORT", "loc": [ -97.80495999999999, 40.310782 ], "pop": 488, "state": "NE" }, { "_id": "68336", "city": "DAVEY", "loc": [ -96.641379, 41.002543 ], "pop": 413, "state": "NE" }, { "_id": "68337", "city": "DAWSON", "loc": [ -95.834097, 40.137697 ], "pop": 359, "state": "NE" }, { "_id": "68338", "city": "DAYKIN", "loc": [ -97.304306, 40.31916 ], "pop": 324, "state": "NE" }, { "_id": "68339", "city": "DENTON", "loc": [ -96.853157, 40.700905 ], "pop": 1035, "state": "NE" }, { "_id": "68340", "city": "DESHLER", "loc": [ -97.730007, 40.138668 ], "pop": 1108, "state": "NE" }, { "_id": "68341", "city": "DE WITT", "loc": [ -96.93376600000001, 40.39438 ], "pop": 821, "state": "NE" }, { "_id": "68342", "city": "DILLER", "loc": [ -96.949487, 40.119201 ], "pop": 507, "state": "NE" }, { "_id": "68343", "city": "DORCHESTER", "loc": [ -97.10556200000001, 40.649858 ], "pop": 832, "state": "NE" }, { "_id": "68344", "city": "DOUGLAS", "loc": [ -96.396958, 40.583824 ], "pop": 369, "state": "NE" }, { "_id": "68345", "city": "DU BOIS", "loc": [ -96.05747700000001, 40.037486 ], "pop": 315, "state": "NE" }, { "_id": "68346", "city": "DUNBAR", "loc": [ -96.013575, 40.659156 ], "pop": 619, "state": "NE" }, { "_id": "68347", "city": "EAGLE", "loc": [ -96.42896500000001, 40.816909 ], "pop": 1561, "state": "NE" }, { "_id": "68348", "city": "ELK CREEK", "loc": [ -96.142128, 40.2977 ], "pop": 356, "state": "NE" }, { "_id": "68349", "city": "ELMWOOD", "loc": [ -96.29439499999999, 40.837811 ], "pop": 879, "state": "NE" }, { "_id": "68350", "city": "ENDICOTT", "loc": [ -97.09378700000001, 40.073407 ], "pop": 282, "state": "NE" }, { "_id": "68351", "city": "EXETER", "loc": [ -97.44238799999999, 40.634062 ], "pop": 934, "state": "NE" }, { "_id": "68352", "city": "FAIRBURY", "loc": [ -97.18391800000001, 40.148817 ], "pop": 5763, "state": "NE" }, { "_id": "68354", "city": "FAIRMONT", "loc": [ -97.58729, 40.6404 ], "pop": 968, "state": "NE" }, { "_id": "68355", "city": "FALLS CITY", "loc": [ -95.593148, 40.074193 ], "pop": 6069, "state": "NE" }, { "_id": "68357", "city": "FILLEY", "loc": [ -96.53013199999999, 40.294606 ], "pop": 352, "state": "NE" }, { "_id": "68358", "city": "FIRTH", "loc": [ -96.614023, 40.558595 ], "pop": 1095, "state": "NE" }, { "_id": "68359", "city": "FRIEND", "loc": [ -97.273928, 40.636792 ], "pop": 1707, "state": "NE" }, { "_id": "68360", "city": "GARLAND", "loc": [ -96.97019, 40.941189 ], "pop": 795, "state": "NE" }, { "_id": "68361", "city": "GENEVA", "loc": [ -97.60962499999999, 40.527731 ], "pop": 3224, "state": "NE" }, { "_id": "68362", "city": "GILEAD", "loc": [ -97.42713999999999, 40.146986 ], "pop": 169, "state": "NE" }, { "_id": "68364", "city": "GOEHNER", "loc": [ -97.205456, 40.830208 ], "pop": 457, "state": "NE" }, { "_id": "68365", "city": "GRAFTON", "loc": [ -97.740263, 40.640193 ], "pop": 302, "state": "NE" }, { "_id": "68366", "city": "GREENWOOD", "loc": [ -96.42583999999999, 40.97064 ], "pop": 813, "state": "NE" }, { "_id": "68367", "city": "GRESHAM", "loc": [ -97.407937, 41.020952 ], "pop": 426, "state": "NE" }, { "_id": "68368", "city": "HALLAM", "loc": [ -96.754518, 40.554734 ], "pop": 663, "state": "NE" }, { "_id": "68370", "city": "HEBRON", "loc": [ -97.605228, 40.172807 ], "pop": 2305, "state": "NE" }, { "_id": "68371", "city": "HENDERSON", "loc": [ -97.797865, 40.781374 ], "pop": 1615, "state": "NE" }, { "_id": "68372", "city": "HOLLAND", "loc": [ -96.62492399999999, 40.624558 ], "pop": 1495, "state": "NE" }, { "_id": "68374", "city": "HOLMESVILLE", "loc": [ -96.63263499999999, 40.220245 ], "pop": 353, "state": "NE" }, { "_id": "68375", "city": "HUBBELL", "loc": [ -97.473467, 40.045581 ], "pop": 200, "state": "NE" }, { "_id": "68376", "city": "HUMBOLDT", "loc": [ -95.931079, 40.156595 ], "pop": 1806, "state": "NE" }, { "_id": "68377", "city": "JANSEN", "loc": [ -97.02442600000001, 40.207425 ], "pop": 579, "state": "NE" }, { "_id": "68378", "city": "JOHNSON", "loc": [ -95.988276, 40.401623 ], "pop": 747, "state": "NE" }, { "_id": "68379", "city": "JULIAN", "loc": [ -95.85046, 40.486056 ], "pop": 313, "state": "NE" }, { "_id": "68380", "city": "LEWISTON", "loc": [ -96.40494099999999, 40.230879 ], "pop": 189, "state": "NE" }, { "_id": "68381", "city": "LIBERTY", "loc": [ -96.523668, 40.075286 ], "pop": 422, "state": "NE" }, { "_id": "68401", "city": "MC COOL JUNCTION", "loc": [ -97.593666, 40.744181 ], "pop": 820, "state": "NE" }, { "_id": "68402", "city": "MALCOLM", "loc": [ -96.859966, 40.90913 ], "pop": 954, "state": "NE" }, { "_id": "68404", "city": "MARTELL", "loc": [ -96.744227, 40.651434 ], "pop": 864, "state": "NE" }, { "_id": "68405", "city": "MILFORD", "loc": [ -97.05763, 40.763153 ], "pop": 3258, "state": "NE" }, { "_id": "68406", "city": "MILLIGAN", "loc": [ -97.39968399999999, 40.495163 ], "pop": 477, "state": "NE" }, { "_id": "68407", "city": "MURDOCK", "loc": [ -96.28482700000001, 40.919034 ], "pop": 622, "state": "NE" }, { "_id": "68409", "city": "MURRAY", "loc": [ -95.922668, 40.91999 ], "pop": 1145, "state": "NE" }, { "_id": "68410", "city": "NEBRASKA CITY", "loc": [ -95.86190000000001, 40.674746 ], "pop": 7668, "state": "NE" }, { "_id": "68413", "city": "NEHAWKA", "loc": [ -95.993045, 40.832978 ], "pop": 423, "state": "NE" }, { "_id": "68414", "city": "NEMAHA", "loc": [ -95.69132999999999, 40.319818 ], "pop": 428, "state": "NE" }, { "_id": "68415", "city": "ODELL", "loc": [ -96.801924, 40.045128 ], "pop": 642, "state": "NE" }, { "_id": "68416", "city": "OHIOWA", "loc": [ -97.442712, 40.406507 ], "pop": 274, "state": "NE" }, { "_id": "68417", "city": "OTOE", "loc": [ -96.132867, 40.735485 ], "pop": 696, "state": "NE" }, { "_id": "68418", "city": "PALMYRA", "loc": [ -96.39990299999999, 40.704964 ], "pop": 1012, "state": "NE" }, { "_id": "68420", "city": "PAWNEE CITY", "loc": [ -96.150926, 40.109291 ], "pop": 1434, "state": "NE" }, { "_id": "68421", "city": "PERU", "loc": [ -95.731166, 40.476643 ], "pop": 1321, "state": "NE" }, { "_id": "68422", "city": "PICKRELL", "loc": [ -96.734444, 40.382117 ], "pop": 512, "state": "NE" }, { "_id": "68423", "city": "PLEASANT DALE", "loc": [ -96.95128, 40.813329 ], "pop": 678, "state": "NE" }, { "_id": "68424", "city": "PLYMOUTH", "loc": [ -97.001169, 40.303896 ], "pop": 872, "state": "NE" }, { "_id": "68428", "city": "AGNEW", "loc": [ -96.78294200000001, 40.985331 ], "pop": 1218, "state": "NE" }, { "_id": "68429", "city": "REYNOLDS", "loc": [ -97.318243, 40.059372 ], "pop": 184, "state": "NE" }, { "_id": "68430", "city": "ROCA", "loc": [ -96.63908499999999, 40.670195 ], "pop": 517, "state": "NE" }, { "_id": "68431", "city": "RULO", "loc": [ -95.42921800000001, 40.053619 ], "pop": 312, "state": "NE" }, { "_id": "68432", "city": "SAINT MARY", "loc": [ -96.28997200000001, 40.444756 ], "pop": 259, "state": "NE" }, { "_id": "68433", "city": "SALEM", "loc": [ -95.727261, 40.061953 ], "pop": 280, "state": "NE" }, { "_id": "68434", "city": "SEWARD", "loc": [ -97.09661800000001, 40.906609 ], "pop": 7082, "state": "NE" }, { "_id": "68436", "city": "SHICKLEY", "loc": [ -97.714298, 40.407677 ], "pop": 722, "state": "NE" }, { "_id": "68437", "city": "SHUBERT", "loc": [ -95.689454, 40.232479 ], "pop": 320, "state": "NE" }, { "_id": "68439", "city": "STAPLEHURST", "loc": [ -97.18585899999999, 40.984455 ], "pop": 597, "state": "NE" }, { "_id": "68440", "city": "STEELE CITY", "loc": [ -96.990712, 40.042492 ], "pop": 248, "state": "NE" }, { "_id": "68441", "city": "STEINAUER", "loc": [ -96.230215, 40.216885 ], "pop": 378, "state": "NE" }, { "_id": "68442", "city": "STELLA", "loc": [ -95.767989, 40.230345 ], "pop": 342, "state": "NE" }, { "_id": "68443", "city": "STERLING", "loc": [ -96.386655, 40.463743 ], "pop": 840, "state": "NE" }, { "_id": "68444", "city": "STRANG", "loc": [ -97.552132, 40.398105 ], "pop": 202, "state": "NE" }, { "_id": "68445", "city": "SWANTON", "loc": [ -97.08055, 40.384389 ], "pop": 266, "state": "NE" }, { "_id": "68446", "city": "SYRACUSE", "loc": [ -96.182407, 40.661386 ], "pop": 1937, "state": "NE" }, { "_id": "68447", "city": "TABLE ROCK", "loc": [ -96.081822, 40.187437 ], "pop": 494, "state": "NE" }, { "_id": "68448", "city": "TALMAGE", "loc": [ -96.013814, 40.558646 ], "pop": 731, "state": "NE" }, { "_id": "68450", "city": "TECUMSEH", "loc": [ -96.20495099999999, 40.369702 ], "pop": 2457, "state": "NE" }, { "_id": "68452", "city": "ONG", "loc": [ -97.861018, 40.396806 ], "pop": 150, "state": "NE" }, { "_id": "68453", "city": "TOBIAS", "loc": [ -97.318444, 40.426171 ], "pop": 464, "state": "NE" }, { "_id": "68454", "city": "UNADILLA", "loc": [ -96.282454, 40.691675 ], "pop": 720, "state": "NE" }, { "_id": "68455", "city": "UNION", "loc": [ -95.903739, 40.824452 ], "pop": 689, "state": "NE" }, { "_id": "68456", "city": "UTICA", "loc": [ -97.334431, 40.91685 ], "pop": 1068, "state": "NE" }, { "_id": "68457", "city": "VERDON", "loc": [ -95.716157, 40.142507 ], "pop": 449, "state": "NE" }, { "_id": "68458", "city": "VIRGINIA", "loc": [ -96.512145, 40.230877 ], "pop": 226, "state": "NE" }, { "_id": "68460", "city": "WACO", "loc": [ -97.453352, 40.919826 ], "pop": 613, "state": "NE" }, { "_id": "68461", "city": "WALTON", "loc": [ -96.535943, 40.797467 ], "pop": 268, "state": "NE" }, { "_id": "68462", "city": "WAVERLY", "loc": [ -96.525988, 40.92224 ], "pop": 2545, "state": "NE" }, { "_id": "68463", "city": "WEEPING WATER", "loc": [ -96.15282500000001, 40.873096 ], "pop": 1910, "state": "NE" }, { "_id": "68464", "city": "WESTERN", "loc": [ -97.197649, 40.415157 ], "pop": 552, "state": "NE" }, { "_id": "68465", "city": "WILBER", "loc": [ -96.975713, 40.482141 ], "pop": 2016, "state": "NE" }, { "_id": "68466", "city": "WYMORE", "loc": [ -96.661326, 40.112955 ], "pop": 1935, "state": "NE" }, { "_id": "68467", "city": "YORK", "loc": [ -97.582482, 40.866678 ], "pop": 9592, "state": "NE" }, { "_id": "68502", "city": "LINCOLN", "loc": [ -96.693763, 40.789282 ], "pop": 27576, "state": "NE" }, { "_id": "68503", "city": "LINCOLN", "loc": [ -96.67662300000001, 40.823339 ], "pop": 14093, "state": "NE" }, { "_id": "68504", "city": "LINCOLN", "loc": [ -96.653248, 40.839226 ], "pop": 12756, "state": "NE" }, { "_id": "68505", "city": "LINCOLN", "loc": [ -96.625193, 40.824674 ], "pop": 13461, "state": "NE" }, { "_id": "68506", "city": "LINCOLN", "loc": [ -96.643052, 40.784796 ], "pop": 25903, "state": "NE" }, { "_id": "68507", "city": "LINCOLN", "loc": [ -96.628874, 40.847265 ], "pop": 12296, "state": "NE" }, { "_id": "68508", "city": "LINCOLN", "loc": [ -96.700907, 40.814503 ], "pop": 13716, "state": "NE" }, { "_id": "68510", "city": "LINCOLN", "loc": [ -96.65445800000001, 40.806345 ], "pop": 20948, "state": "NE" }, { "_id": "68512", "city": "LINCOLN", "loc": [ -96.69460599999999, 40.756487 ], "pop": 6139, "state": "NE" }, { "_id": "68514", "city": "LINCOLN", "loc": [ -96.66108199999999, 40.925792 ], "pop": 200, "state": "NE" }, { "_id": "68516", "city": "LINCOLN", "loc": [ -96.652304, 40.756807 ], "pop": 21213, "state": "NE" }, { "_id": "68517", "city": "LINCOLN", "loc": [ -96.60450899999999, 40.931743 ], "pop": 485, "state": "NE" }, { "_id": "68520", "city": "LINCOLN", "loc": [ -96.56934099999999, 40.774441 ], "pop": 1460, "state": "NE" }, { "_id": "68521", "city": "LINCOLN", "loc": [ -96.711006, 40.851044 ], "pop": 16067, "state": "NE" }, { "_id": "68522", "city": "LINCOLN", "loc": [ -96.747871, 40.793407 ], "pop": 4991, "state": "NE" }, { "_id": "68523", "city": "LINCOLN", "loc": [ -96.75833900000001, 40.740766 ], "pop": 685, "state": "NE" }, { "_id": "68524", "city": "LINCOLN", "loc": [ -96.79434500000001, 40.852913 ], "pop": 4321, "state": "NE" }, { "_id": "68526", "city": "LINCOLN", "loc": [ -96.587817, 40.731386 ], "pop": 526, "state": "NE" }, { "_id": "68527", "city": "LINCOLN", "loc": [ -96.540053, 40.834708 ], "pop": 617, "state": "NE" }, { "_id": "68528", "city": "LINCOLN", "loc": [ -96.754496, 40.819541 ], "pop": 2476, "state": "NE" }, { "_id": "68531", "city": "LINCOLN", "loc": [ -96.71557199999999, 40.899397 ], "pop": 310, "state": "NE" }, { "_id": "68532", "city": "LINCOLN", "loc": [ -96.85509, 40.792159 ], "pop": 391, "state": "NE" }, { "_id": "68601", "city": "RICHLAND", "loc": [ -97.356469, 41.437225 ], "pop": 23684, "state": "NE" }, { "_id": "68620", "city": "ALBION", "loc": [ -97.999116, 41.704947 ], "pop": 3788, "state": "NE" }, { "_id": "68621", "city": "AMES", "loc": [ -96.646344, 41.461253 ], "pop": 141, "state": "NE" }, { "_id": "68622", "city": "BARTLETT", "loc": [ -98.556668, 41.8697 ], "pop": 262, "state": "NE" }, { "_id": "68623", "city": "BELGRADE", "loc": [ -98.08663799999999, 41.461077 ], "pop": 268, "state": "NE" }, { "_id": "68624", "city": "BELLWOOD", "loc": [ -97.274657, 41.347389 ], "pop": 1199, "state": "NE" }, { "_id": "68626", "city": "BRAINARD", "loc": [ -96.988226, 41.183151 ], "pop": 570, "state": "NE" }, { "_id": "68627", "city": "CEDAR RAPIDS", "loc": [ -98.15537999999999, 41.556407 ], "pop": 728, "state": "NE" }, { "_id": "68628", "city": "CLARKS", "loc": [ -97.846143, 41.232797 ], "pop": 749, "state": "NE" }, { "_id": "68629", "city": "CLARKSON", "loc": [ -97.105059, 41.696064 ], "pop": 1235, "state": "NE" }, { "_id": "68631", "city": "CRESTON", "loc": [ -97.368692, 41.660695 ], "pop": 910, "state": "NE" }, { "_id": "68632", "city": "GARRISON", "loc": [ -97.126229, 41.237315 ], "pop": 3798, "state": "NE" }, { "_id": "68633", "city": "DODGE", "loc": [ -96.818077, 41.681609 ], "pop": 2151, "state": "NE" }, { "_id": "68635", "city": "DWIGHT", "loc": [ -96.993143, 41.089388 ], "pop": 462, "state": "NE" }, { "_id": "68636", "city": "ELGIN", "loc": [ -98.07508199999999, 41.973239 ], "pop": 1367, "state": "NE" }, { "_id": "68637", "city": "ERICSON", "loc": [ -98.645323, 41.782804 ], "pop": 311, "state": "NE" }, { "_id": "68638", "city": "FULLERTON", "loc": [ -98.00536200000001, 41.366042 ], "pop": 2087, "state": "NE" }, { "_id": "68640", "city": "GENOA", "loc": [ -97.764011, 41.446776 ], "pop": 2116, "state": "NE" }, { "_id": "68641", "city": "HOWELLS", "loc": [ -96.985811, 41.696441 ], "pop": 1122, "state": "NE" }, { "_id": "68642", "city": "HUMPHREY", "loc": [ -97.498649, 41.670184 ], "pop": 1818, "state": "NE" }, { "_id": "68643", "city": "LEIGH", "loc": [ -97.232001, 41.673877 ], "pop": 1225, "state": "NE" }, { "_id": "68644", "city": "LINDSAY", "loc": [ -97.671134, 41.692634 ], "pop": 973, "state": "NE" }, { "_id": "68647", "city": "MONROE", "loc": [ -97.606075, 41.478255 ], "pop": 799, "state": "NE" }, { "_id": "68648", "city": "MORSE BLUFF", "loc": [ -96.786171, 41.417831 ], "pop": 486, "state": "NE" }, { "_id": "68649", "city": "NORTH BEND", "loc": [ -96.781328, 41.468924 ], "pop": 1651, "state": "NE" }, { "_id": "68650", "city": "OCTAVIA", "loc": [ -97.07021, 41.355323 ], "pop": 361, "state": "NE" }, { "_id": "68651", "city": "OSCEOLA", "loc": [ -97.557079, 41.196565 ], "pop": 1398, "state": "NE" }, { "_id": "68652", "city": "PETERSBURG", "loc": [ -98.084791, 41.858954 ], "pop": 784, "state": "NE" }, { "_id": "68653", "city": "PLATTE CENTER", "loc": [ -97.457616, 41.524114 ], "pop": 1399, "state": "NE" }, { "_id": "68654", "city": "POLK", "loc": [ -97.75237199999999, 41.117671 ], "pop": 988, "state": "NE" }, { "_id": "68655", "city": "PRIMROSE", "loc": [ -98.235455, 41.64054 ], "pop": 255, "state": "NE" }, { "_id": "68658", "city": "RISING CITY", "loc": [ -97.303174, 41.208219 ], "pop": 697, "state": "NE" }, { "_id": "68659", "city": "ROGERS", "loc": [ -96.949735, 41.469536 ], "pop": 208, "state": "NE" }, { "_id": "68660", "city": "SAINT EDWARD", "loc": [ -97.880116, 41.57076 ], "pop": 1112, "state": "NE" }, { "_id": "68661", "city": "SCHUYLER", "loc": [ -97.062832, 41.459128 ], "pop": 5243, "state": "NE" }, { "_id": "68662", "city": "SHELBY", "loc": [ -97.429536, 41.243544 ], "pop": 1495, "state": "NE" }, { "_id": "68663", "city": "SILVER CREEK", "loc": [ -97.667106, 41.318999 ], "pop": 627, "state": "NE" }, { "_id": "68665", "city": "SPALDING", "loc": [ -98.37146799999999, 41.687409 ], "pop": 1053, "state": "NE" }, { "_id": "68666", "city": "STROMSBURG", "loc": [ -97.574183, 41.111834 ], "pop": 1765, "state": "NE" }, { "_id": "68667", "city": "ULYSSES", "loc": [ -97.30901299999999, 41.089922 ], "pop": 250, "state": "NE" }, { "_id": "68669", "city": "ULYSSES", "loc": [ -97.19838799999999, 41.079059 ], "pop": 440, "state": "NE" }, { "_id": "68701", "city": "NORFOLK", "loc": [ -97.422898, 42.032914 ], "pop": 25728, "state": "NE" }, { "_id": "68710", "city": "ALLEN", "loc": [ -96.8574, 42.443667 ], "pop": 1007, "state": "NE" }, { "_id": "68711", "city": "AMELIA", "loc": [ -99.008036, 42.18088 ], "pop": 196, "state": "NE" }, { "_id": "68713", "city": "ATKINSON", "loc": [ -98.97608700000001, 42.548279 ], "pop": 2321, "state": "NE" }, { "_id": "68714", "city": "BASSETT", "loc": [ -99.538732, 42.576293 ], "pop": 1344, "state": "NE" }, { "_id": "68715", "city": "BATTLE CREEK", "loc": [ -97.598153, 41.994283 ], "pop": 1448, "state": "NE" }, { "_id": "68716", "city": "BEEMER", "loc": [ -96.81500800000001, 41.937422 ], "pop": 948, "state": "NE" }, { "_id": "68717", "city": "BELDEN", "loc": [ -97.195628, 42.402185 ], "pop": 346, "state": "NE" }, { "_id": "68718", "city": "BLOOMFIELD", "loc": [ -97.654494, 42.597824 ], "pop": 1873, "state": "NE" }, { "_id": "68719", "city": "BRISTOW", "loc": [ -98.60267, 42.880575 ], "pop": 355, "state": "NE" }, { "_id": "68720", "city": "BRUNSWICK", "loc": [ -97.944008, 42.351023 ], "pop": 907, "state": "NE" }, { "_id": "68722", "city": "BUTTE", "loc": [ -98.84590300000001, 42.912377 ], "pop": 667, "state": "NE" }, { "_id": "68723", "city": "CARROLL", "loc": [ -97.192612, 42.277009 ], "pop": 576, "state": "NE" }, { "_id": "68724", "city": "CENTER", "loc": [ -97.883567, 42.602451 ], "pop": 264, "state": "NE" }, { "_id": "68725", "city": "CHAMBERS", "loc": [ -98.737846, 42.191606 ], "pop": 815, "state": "NE" }, { "_id": "68726", "city": "CLEARWATER", "loc": [ -98.186761, 42.126562 ], "pop": 919, "state": "NE" }, { "_id": "68727", "city": "COLERIDGE", "loc": [ -97.17856399999999, 42.522992 ], "pop": 1185, "state": "NE" }, { "_id": "68728", "city": "CONCORD", "loc": [ -96.98103500000001, 42.381982 ], "pop": 262, "state": "NE" }, { "_id": "68729", "city": "CREIGHTON", "loc": [ -97.89323, 42.468053 ], "pop": 1604, "state": "NE" }, { "_id": "68730", "city": "CROFTON", "loc": [ -97.540589, 42.737028 ], "pop": 1717, "state": "NE" }, { "_id": "68731", "city": "DAKOTA CITY", "loc": [ -96.453608, 42.38074 ], "pop": 3022, "state": "NE" }, { "_id": "68732", "city": "DIXON", "loc": [ -96.97738099999999, 42.41853 ], "pop": 226, "state": "NE" }, { "_id": "68733", "city": "EMERSON", "loc": [ -96.71587, 42.285247 ], "pop": 1471, "state": "NE" }, { "_id": "68734", "city": "EMMET", "loc": [ -98.82377700000001, 42.474708 ], "pop": 190, "state": "NE" }, { "_id": "68735", "city": "EWING", "loc": [ -98.39813700000001, 42.185107 ], "pop": 1300, "state": "NE" }, { "_id": "68736", "city": "FORDYCE", "loc": [ -97.35666500000001, 42.730889 ], "pop": 1059, "state": "NE" }, { "_id": "68737", "city": "FOSTER", "loc": [ -97.658038, 42.269932 ], "pop": 216, "state": "NE" }, { "_id": "68739", "city": "HARTINGTON", "loc": [ -97.28367799999999, 42.623494 ], "pop": 2806, "state": "NE" }, { "_id": "68740", "city": "HOSKINS", "loc": [ -97.308435, 42.140839 ], "pop": 784, "state": "NE" }, { "_id": "68741", "city": "HUBBARD", "loc": [ -96.62242500000001, 42.413139 ], "pop": 705, "state": "NE" }, { "_id": "68742", "city": "INMAN", "loc": [ -98.538366, 42.376149 ], "pop": 439, "state": "NE" }, { "_id": "68743", "city": "JACKSON", "loc": [ -96.574335, 42.452877 ], "pop": 406, "state": "NE" }, { "_id": "68745", "city": "LAUREL", "loc": [ -97.08738099999999, 42.427036 ], "pop": 1519, "state": "NE" }, { "_id": "68746", "city": "LYNCH", "loc": [ -98.450433, 42.837275 ], "pop": 496, "state": "NE" }, { "_id": "68747", "city": "MCLEAN", "loc": [ -97.47511299999999, 42.392082 ], "pop": 232, "state": "NE" }, { "_id": "68748", "city": "MADISON", "loc": [ -97.47195000000001, 41.830786 ], "pop": 3203, "state": "NE" }, { "_id": "68749", "city": "MAGNET", "loc": [ -97.44072199999999, 42.475294 ], "pop": 218, "state": "NE" }, { "_id": "68751", "city": "MASKELL", "loc": [ -96.966978, 42.670245 ], "pop": 218, "state": "NE" }, { "_id": "68752", "city": "MEADOW GROVE", "loc": [ -97.73342599999999, 42.010184 ], "pop": 939, "state": "NE" }, { "_id": "68753", "city": "MILLS", "loc": [ -99.446647, 42.922527 ], "pop": 329, "state": "NE" }, { "_id": "68755", "city": "NAPER", "loc": [ -99.071027, 42.952091 ], "pop": 521, "state": "NE" }, { "_id": "68756", "city": "NELIGH", "loc": [ -98.01506999999999, 42.138926 ], "pop": 2375, "state": "NE" }, { "_id": "68757", "city": "NEWCASTLE", "loc": [ -96.87085, 42.620672 ], "pop": 763, "state": "NE" }, { "_id": "68758", "city": "NEWMAN GROVE", "loc": [ -97.773966, 41.74977 ], "pop": 1482, "state": "NE" }, { "_id": "68759", "city": "NEWPORT", "loc": [ -99.335887, 42.600089 ], "pop": 344, "state": "NE" }, { "_id": "68760", "city": "VERDEL", "loc": [ -97.912734, 42.776942 ], "pop": 1051, "state": "NE" }, { "_id": "68761", "city": "OAKDALE", "loc": [ -97.918644, 42.053585 ], "pop": 1016, "state": "NE" }, { "_id": "68762", "city": "OBERT", "loc": [ -97.07070899999999, 42.65767 ], "pop": 204, "state": "NE" }, { "_id": "68763", "city": "ONEILL", "loc": [ -98.645565, 42.485733 ], "pop": 5782, "state": "NE" }, { "_id": "68764", "city": "ORCHARD", "loc": [ -98.240853, 42.33987 ], "pop": 1044, "state": "NE" }, { "_id": "68765", "city": "OSMOND", "loc": [ -97.581998, 42.353936 ], "pop": 1418, "state": "NE" }, { "_id": "68766", "city": "PAGE", "loc": [ -98.39639, 42.411882 ], "pop": 544, "state": "NE" }, { "_id": "68767", "city": "PIERCE", "loc": [ -97.525604, 42.194323 ], "pop": 2942, "state": "NE" }, { "_id": "68768", "city": "PILGER", "loc": [ -97.268472, 42.040413 ], "pop": 3122, "state": "NE" }, { "_id": "68769", "city": "PLAINVIEW", "loc": [ -97.778615, 42.346701 ], "pop": 1978, "state": "NE" }, { "_id": "68770", "city": "PONCA", "loc": [ -96.712793, 42.56931 ], "pop": 1316, "state": "NE" }, { "_id": "68771", "city": "RANDOLPH", "loc": [ -97.34644299999999, 42.379778 ], "pop": 1826, "state": "NE" }, { "_id": "68772", "city": "ROSE", "loc": [ -99.444755, 42.256782 ], "pop": 331, "state": "NE" }, { "_id": "68773", "city": "ROYAL", "loc": [ -98.12462600000001, 42.294614 ], "pop": 479, "state": "NE" }, { "_id": "68774", "city": "SAINT HELENA", "loc": [ -97.358616, 42.818145 ], "pop": 888, "state": "NE" }, { "_id": "68776", "city": "SOUTH SIOUX CITY", "loc": [ -96.418161, 42.465615 ], "pop": 12037, "state": "NE" }, { "_id": "68777", "city": "SPENCER", "loc": [ -98.705853, 42.884936 ], "pop": 796, "state": "NE" }, { "_id": "68778", "city": "SPRINGVIEW", "loc": [ -99.80614799999999, 42.848785 ], "pop": 700, "state": "NE" }, { "_id": "68779", "city": "STANTON", "loc": [ -97.213955, 41.907559 ], "pop": 3122, "state": "NE" }, { "_id": "68780", "city": "STUART", "loc": [ -99.139563, 42.571307 ], "pop": 1331, "state": "NE" }, { "_id": "68781", "city": "TILDEN", "loc": [ -97.82229700000001, 42.049629 ], "pop": 883, "state": "NE" }, { "_id": "68783", "city": "VERDIGRE", "loc": [ -98.079278, 42.610111 ], "pop": 1184, "state": "NE" }, { "_id": "68784", "city": "WAKEFIELD", "loc": [ -96.877645, 42.273271 ], "pop": 1858, "state": "NE" }, { "_id": "68785", "city": "WATERBURY", "loc": [ -96.74478000000001, 42.460431 ], "pop": 241, "state": "NE" }, { "_id": "68786", "city": "WAUSA", "loc": [ -97.557616, 42.497265 ], "pop": 1058, "state": "NE" }, { "_id": "68787", "city": "WAYNE", "loc": [ -97.018579, 42.230439 ], "pop": 6454, "state": "NE" }, { "_id": "68788", "city": "WEST POINT", "loc": [ -96.731763, 41.84503 ], "pop": 6463, "state": "NE" }, { "_id": "68789", "city": "WINNETOON", "loc": [ -98.025408, 42.494565 ], "pop": 395, "state": "NE" }, { "_id": "68790", "city": "WINSIDE", "loc": [ -97.18250500000001, 42.167817 ], "pop": 808, "state": "NE" }, { "_id": "68791", "city": "WISNER", "loc": [ -96.91697499999999, 41.997994 ], "pop": 1793, "state": "NE" }, { "_id": "68792", "city": "WYNOT", "loc": [ -97.16780900000001, 42.739304 ], "pop": 609, "state": "NE" }, { "_id": "68801", "city": "GRAND ISLAND", "loc": [ -98.34106199999999, 40.921858 ], "pop": 24173, "state": "NE" }, { "_id": "68803", "city": "GRAND ISLAND", "loc": [ -98.387271, 40.928608 ], "pop": 19337, "state": "NE" }, { "_id": "68810", "city": "ALDA", "loc": [ -98.455135, 40.856923 ], "pop": 872, "state": "NE" }, { "_id": "68812", "city": "AMHERST", "loc": [ -99.260949, 40.849494 ], "pop": 560, "state": "NE" }, { "_id": "68813", "city": "MILBURN", "loc": [ -99.799149, 41.636214 ], "pop": 566, "state": "NE" }, { "_id": "68814", "city": "ANSLEY", "loc": [ -99.36452, 41.30193 ], "pop": 853, "state": "NE" }, { "_id": "68815", "city": "ARCADIA", "loc": [ -99.120468, 41.429305 ], "pop": 609, "state": "NE" }, { "_id": "68816", "city": "ARCHER", "loc": [ -98.118151, 41.178156 ], "pop": 237, "state": "NE" }, { "_id": "68817", "city": "ASHTON", "loc": [ -98.803352, 41.267184 ], "pop": 505, "state": "NE" }, { "_id": "68818", "city": "AURORA", "loc": [ -98.020107, 40.852838 ], "pop": 5954, "state": "NE" }, { "_id": "68819", "city": "BERWYN", "loc": [ -99.50157299999999, 41.347015 ], "pop": 318, "state": "NE" }, { "_id": "68820", "city": "BOELUS", "loc": [ -98.697551, 41.100278 ], "pop": 533, "state": "NE" }, { "_id": "68821", "city": "BREWSTER", "loc": [ -99.829196, 41.946705 ], "pop": 246, "state": "NE" }, { "_id": "68822", "city": "BROKEN BOW", "loc": [ -99.635452, 41.412586 ], "pop": 4864, "state": "NE" }, { "_id": "68823", "city": "BURWELL", "loc": [ -99.09952699999999, 41.807982 ], "pop": 2141, "state": "NE" }, { "_id": "68824", "city": "CAIRO", "loc": [ -98.61653800000001, 41.000183 ], "pop": 976, "state": "NE" }, { "_id": "68825", "city": "CALLAWAY", "loc": [ -99.993185, 41.248499 ], "pop": 1100, "state": "NE" }, { "_id": "68826", "city": "CENTRAL CITY", "loc": [ -98.001693, 41.121259 ], "pop": 3783, "state": "NE" }, { "_id": "68827", "city": "CHAPMAN", "loc": [ -98.221723, 40.985592 ], "pop": 1503, "state": "NE" }, { "_id": "68828", "city": "COMSTOCK", "loc": [ -99.27528100000001, 41.555254 ], "pop": 331, "state": "NE" }, { "_id": "68829", "city": "COTESFIELD", "loc": [ -98.655344, 41.34301 ], "pop": 216, "state": "NE" }, { "_id": "68831", "city": "DANNEBROG", "loc": [ -98.554564, 41.119156 ], "pop": 890, "state": "NE" }, { "_id": "68832", "city": "DONIPHAN", "loc": [ -98.37900999999999, 40.770031 ], "pop": 1496, "state": "NE" }, { "_id": "68833", "city": "DUNNING", "loc": [ -100.087271, 41.813107 ], "pop": 225, "state": "NE" }, { "_id": "68834", "city": "EDDYVILLE", "loc": [ -99.681009, 41.0079 ], "pop": 229, "state": "NE" }, { "_id": "68835", "city": "ELBA", "loc": [ -98.575622, 41.28644 ], "pop": 310, "state": "NE" }, { "_id": "68836", "city": "ELM CREEK", "loc": [ -99.372786, 40.730079 ], "pop": 1256, "state": "NE" }, { "_id": "68837", "city": "ELYRIA", "loc": [ -99.046656, 41.695655 ], "pop": 305, "state": "NE" }, { "_id": "68838", "city": "FARWELL", "loc": [ -98.648144, 41.220378 ], "pop": 313, "state": "NE" }, { "_id": "68840", "city": "GIBBON", "loc": [ -98.85435, 40.744445 ], "pop": 1901, "state": "NE" }, { "_id": "68841", "city": "GILTNER", "loc": [ -98.14344, 40.765402 ], "pop": 522, "state": "NE" }, { "_id": "68842", "city": "GREELEY", "loc": [ -98.529951, 41.552578 ], "pop": 832, "state": "NE" }, { "_id": "68843", "city": "HAMPTON", "loc": [ -97.884146, 40.923609 ], "pop": 897, "state": "NE" }, { "_id": "68844", "city": "HAZARD", "loc": [ -99.071859, 41.093368 ], "pop": 285, "state": "NE" }, { "_id": "68846", "city": "HORDVILLE", "loc": [ -97.88814499999999, 41.081253 ], "pop": 405, "state": "NE" }, { "_id": "68847", "city": "KEARNEY", "loc": [ -99.077883, 40.713608 ], "pop": 28674, "state": "NE" }, { "_id": "68850", "city": "LEXINGTON", "loc": [ -99.751515, 40.785002 ], "pop": 8970, "state": "NE" }, { "_id": "68852", "city": "LITCHFIELD", "loc": [ -99.141452, 41.168639 ], "pop": 629, "state": "NE" }, { "_id": "68853", "city": "LOUP CITY", "loc": [ -98.975149, 41.284531 ], "pop": 1810, "state": "NE" }, { "_id": "68854", "city": "MARQUETTE", "loc": [ -97.999955, 41.010017 ], "pop": 563, "state": "NE" }, { "_id": "68855", "city": "MASON CITY", "loc": [ -99.304937, 41.185319 ], "pop": 473, "state": "NE" }, { "_id": "68856", "city": "MERNA", "loc": [ -99.803595, 41.443482 ], "pop": 913, "state": "NE" }, { "_id": "68858", "city": "MILLER", "loc": [ -99.373987, 40.942236 ], "pop": 337, "state": "NE" }, { "_id": "68859", "city": "NORTH LOUP", "loc": [ -98.785836, 41.49717 ], "pop": 626, "state": "NE" }, { "_id": "68860", "city": "OCONTO", "loc": [ -99.69511199999999, 41.138075 ], "pop": 539, "state": "NE" }, { "_id": "68861", "city": "ODESSA", "loc": [ -99.254082, 40.709726 ], "pop": 379, "state": "NE" }, { "_id": "68862", "city": "ORD", "loc": [ -98.941783, 41.596187 ], "pop": 3629, "state": "NE" }, { "_id": "68863", "city": "OVERTON", "loc": [ -99.527824, 40.751875 ], "pop": 1090, "state": "NE" }, { "_id": "68864", "city": "PALMER", "loc": [ -98.241146, 41.178757 ], "pop": 1142, "state": "NE" }, { "_id": "68865", "city": "PHILLIPS", "loc": [ -98.21286000000001, 40.898197 ], "pop": 517, "state": "NE" }, { "_id": "68866", "city": "PLEASANTON", "loc": [ -99.12827799999999, 40.981848 ], "pop": 654, "state": "NE" }, { "_id": "68868", "city": "PROSSER", "loc": [ -98.559471, 40.659175 ], "pop": 297, "state": "NE" }, { "_id": "68869", "city": "RAVENNA", "loc": [ -98.904129, 41.023271 ], "pop": 1646, "state": "NE" }, { "_id": "68870", "city": "RIVERDALE", "loc": [ -99.138147, 40.762684 ], "pop": 784, "state": "NE" }, { "_id": "68871", "city": "ROCKVILLE", "loc": [ -98.85775700000001, 41.110832 ], "pop": 489, "state": "NE" }, { "_id": "68872", "city": "SAINT LIBORY", "loc": [ -98.35888, 41.08669 ], "pop": 705, "state": "NE" }, { "_id": "68873", "city": "SAINT PAUL", "loc": [ -98.44398700000001, 41.224212 ], "pop": 3088, "state": "NE" }, { "_id": "68874", "city": "SARGENT", "loc": [ -99.381624, 41.650845 ], "pop": 1042, "state": "NE" }, { "_id": "68875", "city": "SCOTIA", "loc": [ -98.689256, 41.483724 ], "pop": 711, "state": "NE" }, { "_id": "68876", "city": "SHELTON", "loc": [ -98.743453, 40.771703 ], "pop": 1256, "state": "NE" }, { "_id": "68878", "city": "SUMNER", "loc": [ -99.51995100000001, 40.950384 ], "pop": 448, "state": "NE" }, { "_id": "68879", "city": "ALMERIA", "loc": [ -99.415404, 41.822859 ], "pop": 683, "state": "NE" }, { "_id": "68881", "city": "WESTERVILLE", "loc": [ -99.38436900000001, 41.419282 ], "pop": 172, "state": "NE" }, { "_id": "68882", "city": "WOLBACH", "loc": [ -98.399456, 41.424373 ], "pop": 466, "state": "NE" }, { "_id": "68883", "city": "WOOD RIVER", "loc": [ -98.606509, 40.810635 ], "pop": 2071, "state": "NE" }, { "_id": "68901", "city": "HASTINGS", "loc": [ -98.39114600000001, 40.587654 ], "pop": 25562, "state": "NE" }, { "_id": "68920", "city": "ALMA", "loc": [ -99.360073, 40.118853 ], "pop": 1587, "state": "NE" }, { "_id": "68922", "city": "ARAPAHOE", "loc": [ -99.899697, 40.302662 ], "pop": 1246, "state": "NE" }, { "_id": "68923", "city": "ATLANTA", "loc": [ -99.484354, 40.384901 ], "pop": 261, "state": "NE" }, { "_id": "68924", "city": "AXTELL", "loc": [ -99.11690299999999, 40.526907 ], "pop": 1547, "state": "NE" }, { "_id": "68925", "city": "AYR", "loc": [ -98.438982, 40.441054 ], "pop": 616, "state": "NE" }, { "_id": "68926", "city": "BEAVER CITY", "loc": [ -99.806532, 40.129036 ], "pop": 959, "state": "NE" }, { "_id": "68927", "city": "BERTRAND", "loc": [ -99.575891, 40.560843 ], "pop": 1566, "state": "NE" }, { "_id": "68928", "city": "BLADEN", "loc": [ -98.604625, 40.298996 ], "pop": 579, "state": "NE" }, { "_id": "68929", "city": "BLOOMINGTON", "loc": [ -99.009438, 40.138257 ], "pop": 431, "state": "NE" }, { "_id": "68930", "city": "BLUE HILL", "loc": [ -98.42695500000001, 40.31102 ], "pop": 1291, "state": "NE" }, { "_id": "68932", "city": "CAMPBELL", "loc": [ -98.73701199999999, 40.296684 ], "pop": 525, "state": "NE" }, { "_id": "68933", "city": "CLAY CENTER", "loc": [ -98.03864900000001, 40.511301 ], "pop": 1115, "state": "NE" }, { "_id": "68934", "city": "DEWEESE", "loc": [ -98.177199, 40.379234 ], "pop": 342, "state": "NE" }, { "_id": "68935", "city": "EDGAR", "loc": [ -97.972679, 40.365166 ], "pop": 795, "state": "NE" }, { "_id": "68936", "city": "EDISON", "loc": [ -99.785988, 40.280176 ], "pop": 246, "state": "NE" }, { "_id": "68937", "city": "ELWOOD", "loc": [ -99.825812, 40.574738 ], "pop": 956, "state": "NE" }, { "_id": "68938", "city": "FAIRFIELD", "loc": [ -98.106272, 40.428511 ], "pop": 569, "state": "NE" }, { "_id": "68939", "city": "FRANKLIN", "loc": [ -98.946862, 40.105172 ], "pop": 1305, "state": "NE" }, { "_id": "68940", "city": "FUNK", "loc": [ -99.244992, 40.502031 ], "pop": 558, "state": "NE" }, { "_id": "68941", "city": "GLENVIL", "loc": [ -98.246475, 40.493145 ], "pop": 447, "state": "NE" }, { "_id": "68942", "city": "GUIDE ROCK", "loc": [ -98.33906399999999, 40.081186 ], "pop": 530, "state": "NE" }, { "_id": "68943", "city": "HARDY", "loc": [ -97.927057, 40.028452 ], "pop": 462, "state": "NE" }, { "_id": "68944", "city": "HARVARD", "loc": [ -98.084574, 40.626463 ], "pop": 1400, "state": "NE" }, { "_id": "68945", "city": "HEARTWELL", "loc": [ -98.78514, 40.571601 ], "pop": 197, "state": "NE" }, { "_id": "68946", "city": "HENDLEY", "loc": [ -99.971537, 40.106312 ], "pop": 217, "state": "NE" }, { "_id": "68947", "city": "HILDRETH", "loc": [ -99.05712800000001, 40.321743 ], "pop": 663, "state": "NE" }, { "_id": "68948", "city": "HOLBROOK", "loc": [ -100.013593, 40.301893 ], "pop": 369, "state": "NE" }, { "_id": "68949", "city": "HOLDREGE", "loc": [ -99.367233, 40.447527 ], "pop": 6744, "state": "NE" }, { "_id": "68950", "city": "HOLSTEIN", "loc": [ -98.65377700000001, 40.454169 ], "pop": 413, "state": "NE" }, { "_id": "68951", "city": "HUNTLEY", "loc": [ -99.284786, 40.210254 ], "pop": 89, "state": "NE" }, { "_id": "68952", "city": "INAVALE", "loc": [ -98.661191, 40.095886 ], "pop": 249, "state": "NE" }, { "_id": "68954", "city": "INLAND", "loc": [ -98.22337899999999, 40.589934 ], "pop": 113, "state": "NE" }, { "_id": "68955", "city": "JUNIATA", "loc": [ -98.515017, 40.586652 ], "pop": 1058, "state": "NE" }, { "_id": "68956", "city": "KENESAW", "loc": [ -98.657241, 40.61645 ], "pop": 1076, "state": "NE" }, { "_id": "68957", "city": "LAWRENCE", "loc": [ -98.24024300000001, 40.27672 ], "pop": 594, "state": "NE" }, { "_id": "68958", "city": "LOOMIS", "loc": [ -99.497851, 40.479155 ], "pop": 586, "state": "NE" }, { "_id": "68959", "city": "MINDEN", "loc": [ -98.93829700000001, 40.509142 ], "pop": 4365, "state": "NE" }, { "_id": "68960", "city": "NAPONEE", "loc": [ -99.127725, 40.125807 ], "pop": 361, "state": "NE" }, { "_id": "68961", "city": "NORA", "loc": [ -98.05841700000001, 40.209739 ], "pop": 1084, "state": "NE" }, { "_id": "68964", "city": "OAK", "loc": [ -97.884114, 40.260489 ], "pop": 312, "state": "NE" }, { "_id": "68966", "city": "ORLEANS", "loc": [ -99.45718599999999, 40.148435 ], "pop": 760, "state": "NE" }, { "_id": "68967", "city": "OXFORD", "loc": [ -99.630197, 40.256049 ], "pop": 1306, "state": "NE" }, { "_id": "68969", "city": "RAGAN", "loc": [ -99.24891, 40.309594 ], "pop": 148, "state": "NE" }, { "_id": "68970", "city": "RED CLOUD", "loc": [ -98.518655, 40.09516 ], "pop": 1630, "state": "NE" }, { "_id": "68971", "city": "REPUBLICAN CITY", "loc": [ -99.23218900000001, 40.103401 ], "pop": 429, "state": "NE" }, { "_id": "68972", "city": "RIVERTON", "loc": [ -98.785819, 40.101626 ], "pop": 394, "state": "NE" }, { "_id": "68973", "city": "ROSELAND", "loc": [ -98.555059, 40.459058 ], "pop": 603, "state": "NE" }, { "_id": "68974", "city": "RUSKIN", "loc": [ -97.87203, 40.138318 ], "pop": 324, "state": "NE" }, { "_id": "68975", "city": "SARONVILLE", "loc": [ -97.87385, 40.600625 ], "pop": 1704, "state": "NE" }, { "_id": "68976", "city": "SMITHFIELD", "loc": [ -99.82386200000001, 40.583567 ], "pop": 972, "state": "NE" }, { "_id": "68977", "city": "STAMFORD", "loc": [ -99.581405, 40.11625 ], "pop": 396, "state": "NE" }, { "_id": "68978", "city": "SUPERIOR", "loc": [ -98.077872, 40.031537 ], "pop": 2902, "state": "NE" }, { "_id": "68979", "city": "SUTTON", "loc": [ -97.873476, 40.653955 ], "pop": 215, "state": "NE" }, { "_id": "68980", "city": "TRUMBULL", "loc": [ -98.257414, 40.66918 ], "pop": 381, "state": "NE" }, { "_id": "68981", "city": "UPLAND", "loc": [ -98.89657699999999, 40.317073 ], "pop": 259, "state": "NE" }, { "_id": "68982", "city": "WILCOX", "loc": [ -99.153927, 40.373523 ], "pop": 520, "state": "NE" }, { "_id": "69001", "city": "MC COOK", "loc": [ -100.627948, 40.204905 ], "pop": 9513, "state": "NE" }, { "_id": "69020", "city": "BARTLEY", "loc": [ -100.29075, 40.258113 ], "pop": 519, "state": "NE" }, { "_id": "69021", "city": "BENKELMAN", "loc": [ -101.534354, 40.098049 ], "pop": 1813, "state": "NE" }, { "_id": "69022", "city": "CAMBRIDGE", "loc": [ -100.167579, 40.280767 ], "pop": 1347, "state": "NE" }, { "_id": "69023", "city": "CHAMPION", "loc": [ -101.74849, 40.460039 ], "pop": 288, "state": "NE" }, { "_id": "69024", "city": "CULBERTSON", "loc": [ -100.850043, 40.223707 ], "pop": 1560, "state": "NE" }, { "_id": "69025", "city": "CURTIS", "loc": [ -100.510406, 40.613067 ], "pop": 1095, "state": "NE" }, { "_id": "69026", "city": "DANBURY", "loc": [ -100.424228, 40.037689 ], "pop": 283, "state": "NE" }, { "_id": "69027", "city": "ENDERS", "loc": [ -101.522156, 40.465492 ], "pop": 217, "state": "NE" }, { "_id": "69028", "city": "EUSTIS", "loc": [ -100.054694, 40.626745 ], "pop": 829, "state": "NE" }, { "_id": "69029", "city": "FARNAM", "loc": [ -100.206878, 40.712881 ], "pop": 243, "state": "NE" }, { "_id": "69030", "city": "HAIGLER", "loc": [ -101.937106, 40.064179 ], "pop": 398, "state": "NE" }, { "_id": "69031", "city": "HAMLET", "loc": [ -101.234106, 40.399363 ], "pop": 222, "state": "NE" }, { "_id": "69032", "city": "HAYES CENTER", "loc": [ -101.025208, 40.517316 ], "pop": 1000, "state": "NE" }, { "_id": "69033", "city": "IMPERIAL", "loc": [ -101.646775, 40.525124 ], "pop": 2372, "state": "NE" }, { "_id": "69034", "city": "INDIANOLA", "loc": [ -100.429758, 40.235718 ], "pop": 1213, "state": "NE" }, { "_id": "69035", "city": "LAMAR", "loc": [ -101.903297, 40.538653 ], "pop": 613, "state": "NE" }, { "_id": "69036", "city": "LEBANON", "loc": [ -100.26122, 40.07522 ], "pop": 182, "state": "NE" }, { "_id": "69037", "city": "MAX", "loc": [ -101.391607, 40.106884 ], "pop": 164, "state": "NE" }, { "_id": "69038", "city": "MAYWOOD", "loc": [ -100.642135, 40.589262 ], "pop": 689, "state": "NE" }, { "_id": "69039", "city": "MOOREFIELD", "loc": [ -100.310773, 40.57856 ], "pop": 355, "state": "NE" }, { "_id": "69040", "city": "PALISADE", "loc": [ -101.129464, 40.338668 ], "pop": 544, "state": "NE" }, { "_id": "69041", "city": "PARKS", "loc": [ -101.739879, 40.139837 ], "pop": 207, "state": "NE" }, { "_id": "69042", "city": "STOCKVILLE", "loc": [ -100.384886, 40.494834 ], "pop": 128, "state": "NE" }, { "_id": "69043", "city": "STRATTON", "loc": [ -101.218275, 40.144462 ], "pop": 776, "state": "NE" }, { "_id": "69044", "city": "TRENTON", "loc": [ -101.020073, 40.168096 ], "pop": 870, "state": "NE" }, { "_id": "69045", "city": "WAUNETA", "loc": [ -101.381195, 40.440906 ], "pop": 891, "state": "NE" }, { "_id": "69046", "city": "WILSONVILLE", "loc": [ -100.1211, 40.108895 ], "pop": 264, "state": "NE" }, { "_id": "69101", "city": "NORTH PLATTE", "loc": [ -100.774631, 41.132595 ], "pop": 26416, "state": "NE" }, { "_id": "69120", "city": "ARNOLD", "loc": [ -100.156731, 41.445583 ], "pop": 1099, "state": "NE" }, { "_id": "69121", "city": "ARTHUR", "loc": [ -101.693123, 41.573952 ], "pop": 462, "state": "NE" }, { "_id": "69122", "city": "BIG SPRINGS", "loc": [ -102.093273, 41.069621 ], "pop": 792, "state": "NE" }, { "_id": "69123", "city": "BRADY", "loc": [ -100.373649, 41.051525 ], "pop": 1243, "state": "NE" }, { "_id": "69125", "city": "BROADWATER", "loc": [ -102.822521, 41.582547 ], "pop": 411, "state": "NE" }, { "_id": "69127", "city": "BRULE", "loc": [ -101.909933, 41.100186 ], "pop": 792, "state": "NE" }, { "_id": "69128", "city": "BUSHNELL", "loc": [ -103.907494, 41.213876 ], "pop": 355, "state": "NE" }, { "_id": "69129", "city": "CHAPPELL", "loc": [ -102.452344, 41.096586 ], "pop": 1445, "state": "NE" }, { "_id": "69130", "city": "COZAD", "loc": [ -99.992091, 40.861934 ], "pop": 5221, "state": "NE" }, { "_id": "69131", "city": "DALTON", "loc": [ -102.972609, 41.406778 ], "pop": 511, "state": "NE" }, { "_id": "69132", "city": "DICKENS", "loc": [ -101.01495, 40.804089 ], "pop": 132, "state": "NE" }, { "_id": "69133", "city": "DIX", "loc": [ -103.479603, 41.226993 ], "pop": 426, "state": "NE" }, { "_id": "69134", "city": "ELSIE", "loc": [ -101.369994, 40.859647 ], "pop": 448, "state": "NE" }, { "_id": "69135", "city": "ELSMERE", "loc": [ -100.282412, 42.264974 ], "pop": 132, "state": "NE" }, { "_id": "69138", "city": "GOTHENBURG", "loc": [ -100.154707, 40.940035 ], "pop": 3739, "state": "NE" }, { "_id": "69140", "city": "GRANT", "loc": [ -101.719589, 40.851069 ], "pop": 1896, "state": "NE" }, { "_id": "69141", "city": "GURLEY", "loc": [ -102.982325, 41.28771 ], "pop": 624, "state": "NE" }, { "_id": "69142", "city": "HALSEY", "loc": [ -100.295515, 41.929095 ], "pop": 166, "state": "NE" }, { "_id": "69143", "city": "HERSHEY", "loc": [ -101.001157, 41.155303 ], "pop": 1685, "state": "NE" }, { "_id": "69144", "city": "KEYSTONE", "loc": [ -101.628218, 41.262129 ], "pop": 247, "state": "NE" }, { "_id": "69145", "city": "KIMBALL", "loc": [ -103.660236, 41.23208 ], "pop": 3327, "state": "NE" }, { "_id": "69146", "city": "LEMOYNE", "loc": [ -101.894677, 41.304017 ], "pop": 303, "state": "NE" }, { "_id": "69147", "city": "LEWELLEN", "loc": [ -102.139622, 41.343461 ], "pop": 612, "state": "NE" }, { "_id": "69148", "city": "LISCO", "loc": [ -102.54983, 41.511398 ], "pop": 214, "state": "NE" }, { "_id": "69149", "city": "LODGEPOLE", "loc": [ -102.657034, 41.169745 ], "pop": 642, "state": "NE" }, { "_id": "69150", "city": "MADRID", "loc": [ -101.537067, 40.85443 ], "pop": 546, "state": "NE" }, { "_id": "69151", "city": "MAXWELL", "loc": [ -100.526993, 41.058831 ], "pop": 722, "state": "NE" }, { "_id": "69152", "city": "MULLEN", "loc": [ -101.054185, 42.016292 ], "pop": 793, "state": "NE" }, { "_id": "69153", "city": "OGALLALA", "loc": [ -101.710742, 41.127505 ], "pop": 6329, "state": "NE" }, { "_id": "69154", "city": "OSHKOSH", "loc": [ -102.345699, 41.445057 ], "pop": 1634, "state": "NE" }, { "_id": "69155", "city": "PAXTON", "loc": [ -101.358544, 41.126763 ], "pop": 913, "state": "NE" }, { "_id": "69156", "city": "POTTER", "loc": [ -103.306112, 41.234688 ], "pop": 658, "state": "NE" }, { "_id": "69157", "city": "PURDUM", "loc": [ -100.15685, 41.966475 ], "pop": 217, "state": "NE" }, { "_id": "69161", "city": "SENECA", "loc": [ -100.807315, 41.99012 ], "pop": 169, "state": "NE" }, { "_id": "69162", "city": "SIDNEY", "loc": [ -102.985573, 41.138001 ], "pop": 7059, "state": "NE" }, { "_id": "69163", "city": "STAPLETON", "loc": [ -100.483105, 41.48877 ], "pop": 878, "state": "NE" }, { "_id": "69165", "city": "SUTHERLAND", "loc": [ -101.136029, 41.15575 ], "pop": 1472, "state": "NE" }, { "_id": "69166", "city": "BROWNLEE", "loc": [ -100.573834, 41.973575 ], "pop": 503, "state": "NE" }, { "_id": "69167", "city": "TRYON", "loc": [ -101.017508, 41.573175 ], "pop": 546, "state": "NE" }, { "_id": "69168", "city": "VENANGO", "loc": [ -101.983894, 40.807324 ], "pop": 433, "state": "NE" }, { "_id": "69169", "city": "WALLACE", "loc": [ -101.173767, 40.830423 ], "pop": 571, "state": "NE" }, { "_id": "69170", "city": "WELLFLEET", "loc": [ -100.711915, 40.798776 ], "pop": 311, "state": "NE" }, { "_id": "69201", "city": "VALENTINE", "loc": [ -100.621542, 42.806166 ], "pop": 4504, "state": "NE" }, { "_id": "69210", "city": "AINSWORTH", "loc": [ -99.861491, 42.54027 ], "pop": 2580, "state": "NE" }, { "_id": "69211", "city": "CODY", "loc": [ -101.379846, 42.614556 ], "pop": 156, "state": "NE" }, { "_id": "69212", "city": "CROOKSTON", "loc": [ -100.773473, 42.925506 ], "pop": 229, "state": "NE" }, { "_id": "69214", "city": "JOHNSTOWN", "loc": [ -100.045322, 42.530857 ], "pop": 371, "state": "NE" }, { "_id": "69216", "city": "KILGORE", "loc": [ -100.988447, 42.914587 ], "pop": 213, "state": "NE" }, { "_id": "69217", "city": "LONG PINE", "loc": [ -99.72304200000001, 42.533379 ], "pop": 706, "state": "NE" }, { "_id": "69218", "city": "MERRIMAN", "loc": [ -101.758304, 42.641883 ], "pop": 873, "state": "NE" }, { "_id": "69221", "city": "WOOD LAKE", "loc": [ -100.287175, 42.626394 ], "pop": 200, "state": "NE" }, { "_id": "69301", "city": "ALLIANCE", "loc": [ -102.888045, 42.114943 ], "pop": 11903, "state": "NE" }, { "_id": "69331", "city": "ANGORA", "loc": [ -103.085019, 41.893434 ], "pop": 84, "state": "NE" }, { "_id": "69333", "city": "ASHBY", "loc": [ -101.963581, 41.977578 ], "pop": 151, "state": "NE" }, { "_id": "69334", "city": "BAYARD", "loc": [ -103.301887, 41.757923 ], "pop": 2378, "state": "NE" }, { "_id": "69335", "city": "BINGHAM", "loc": [ -102.133075, 42.260651 ], "pop": 218, "state": "NE" }, { "_id": "69336", "city": "BRIDGEPORT", "loc": [ -103.070134, 41.676556 ], "pop": 2550, "state": "NE" }, { "_id": "69337", "city": "CHADRON", "loc": [ -102.995331, 42.819268 ], "pop": 6661, "state": "NE" }, { "_id": "69339", "city": "CRAWFORD", "loc": [ -103.405336, 42.67584 ], "pop": 1492, "state": "NE" }, { "_id": "69340", "city": "ELLSWORTH", "loc": [ -102.47245, 42.169717 ], "pop": 310, "state": "NE" }, { "_id": "69341", "city": "GERING", "loc": [ -103.662896, 41.821993 ], "pop": 11631, "state": "NE" }, { "_id": "69343", "city": "GORDON", "loc": [ -102.204929, 42.806843 ], "pop": 2666, "state": "NE" }, { "_id": "69345", "city": "HARRISBURG", "loc": [ -103.711141, 41.55306 ], "pop": 852, "state": "NE" }, { "_id": "69346", "city": "HARRISON", "loc": [ -103.831803, 42.394594 ], "pop": 1525, "state": "NE" }, { "_id": "69347", "city": "HAY SPRINGS", "loc": [ -102.675641, 42.640122 ], "pop": 1570, "state": "NE" }, { "_id": "69348", "city": "HEMINGFORD", "loc": [ -103.064412, 42.33117 ], "pop": 1280, "state": "NE" }, { "_id": "69349", "city": "HENRY", "loc": [ -104.034933, 41.993392 ], "pop": 208, "state": "NE" }, { "_id": "69350", "city": "HYANNIS", "loc": [ -101.748296, 42.006967 ], "pop": 430, "state": "NE" }, { "_id": "69351", "city": "LAKESIDE", "loc": [ -102.443655, 42.049595 ], "pop": 5, "state": "NE" }, { "_id": "69352", "city": "LYMAN", "loc": [ -104.006569, 41.891765 ], "pop": 988, "state": "NE" }, { "_id": "69354", "city": "MARSLAND", "loc": [ -103.051857, 42.598842 ], "pop": 605, "state": "NE" }, { "_id": "69356", "city": "MINATARE", "loc": [ -103.489011, 41.849333 ], "pop": 2355, "state": "NE" }, { "_id": "69357", "city": "MITCHELL", "loc": [ -103.795996, 41.945851 ], "pop": 2998, "state": "NE" }, { "_id": "69358", "city": "MORRILL", "loc": [ -103.918216, 41.96807 ], "pop": 1469, "state": "NE" }, { "_id": "69360", "city": "RUSHVILLE", "loc": [ -102.465738, 42.737934 ], "pop": 1955, "state": "NE" }, { "_id": "69361", "city": "SCOTTSBLUFF", "loc": [ -103.661914, 41.871975 ], "pop": 16373, "state": "NE" }, { "_id": "69366", "city": "WHITMAN", "loc": [ -101.521623, 41.958355 ], "pop": 188, "state": "NE" }, { "_id": "69367", "city": "WHITNEY", "loc": [ -103.239552, 42.755881 ], "pop": 263, "state": "NE" }, { "_id": "70001", "city": "METAIRIE", "loc": [ -90.16951299999999, 29.987138 ], "pop": 39554, "state": "LA" }, { "_id": "70002", "city": "METAIRIE", "loc": [ -90.16303000000001, 30.009843 ], "pop": 19511, "state": "LA" }, { "_id": "70003", "city": "METAIRIE", "loc": [ -90.21456999999999, 29.99746 ], "pop": 46193, "state": "LA" }, { "_id": "70005", "city": "METAIRIE", "loc": [ -90.13314, 30.000476 ], "pop": 26512, "state": "LA" }, { "_id": "70006", "city": "METAIRIE", "loc": [ -90.19148300000001, 30.012885 ], "pop": 16919, "state": "LA" }, { "_id": "70030", "city": "DES ALLEMANDS", "loc": [ -90.44704900000001, 29.821993 ], "pop": 3322, "state": "LA" }, { "_id": "70031", "city": "AMA", "loc": [ -90.292509, 29.943494 ], "pop": 1300, "state": "LA" }, { "_id": "70032", "city": "ARABI", "loc": [ -89.99649700000001, 29.961154 ], "pop": 8954, "state": "LA" }, { "_id": "70036", "city": "BARATARIA", "loc": [ -90.126232, 29.717859 ], "pop": 334, "state": "LA" }, { "_id": "70037", "city": "BELLE CHASSE", "loc": [ -90.004177, 29.834514 ], "pop": 9920, "state": "LA" }, { "_id": "70039", "city": "BOUTTE", "loc": [ -90.393396, 29.897319 ], "pop": 2432, "state": "LA" }, { "_id": "70040", "city": "BRAITHWAITE", "loc": [ -89.885347, 29.673563 ], "pop": 2303, "state": "LA" }, { "_id": "70041", "city": "BURAS", "loc": [ -89.47568, 29.341056 ], "pop": 6496, "state": "LA" }, { "_id": "70043", "city": "CHALMETTE", "loc": [ -89.96113699999999, 29.946611 ], "pop": 31850, "state": "LA" }, { "_id": "70047", "city": "NEW SARPY", "loc": [ -90.373982, 29.96579 ], "pop": 10472, "state": "LA" }, { "_id": "70049", "city": "EDGARD", "loc": [ -90.581678, 30.031863 ], "pop": 3702, "state": "LA" }, { "_id": "70051", "city": "GARYVILLE", "loc": [ -90.620113, 30.05352 ], "pop": 3191, "state": "LA" }, { "_id": "70052", "city": "GRAMERCY", "loc": [ -90.69018199999999, 30.052711 ], "pop": 2765, "state": "LA" }, { "_id": "70053", "city": "GRETNA", "loc": [ -90.05311500000001, 29.910806 ], "pop": 16979, "state": "LA" }, { "_id": "70056", "city": "TERRYTOWN", "loc": [ -90.029123, 29.892652 ], "pop": 37901, "state": "LA" }, { "_id": "70057", "city": "HAHNVILLE", "loc": [ -90.488581, 30.000094 ], "pop": 745, "state": "LA" }, { "_id": "70058", "city": "HARVEY", "loc": [ -90.06725900000001, 29.872535 ], "pop": 36824, "state": "LA" }, { "_id": "70062", "city": "KENNER", "loc": [ -90.247901, 29.991203 ], "pop": 20016, "state": "LA" }, { "_id": "70065", "city": "KENNER", "loc": [ -90.25217499999999, 30.025164 ], "pop": 54023, "state": "LA" }, { "_id": "70067", "city": "LAFITTE", "loc": [ -90.05663300000001, 29.562194 ], "pop": 0, "state": "LA" }, { "_id": "70068", "city": "LA PLACE", "loc": [ -90.489544, 30.077718 ], "pop": 26023, "state": "LA" }, { "_id": "70070", "city": "LULING", "loc": [ -90.36926099999999, 29.925116 ], "pop": 11956, "state": "LA" }, { "_id": "70071", "city": "LUTCHER", "loc": [ -90.70084, 30.044679 ], "pop": 3993, "state": "LA" }, { "_id": "70072", "city": "MARRERO", "loc": [ -90.110462, 29.859756 ], "pop": 58905, "state": "LA" }, { "_id": "70075", "city": "MERAUX", "loc": [ -89.92143299999999, 29.933494 ], "pop": 7196, "state": "LA" }, { "_id": "70079", "city": "NORCO", "loc": [ -90.41979600000001, 30.005706 ], "pop": 4931, "state": "LA" }, { "_id": "70080", "city": "PARADIS", "loc": [ -90.43524600000001, 29.877033 ], "pop": 939, "state": "LA" }, { "_id": "70083", "city": "PORT SULPHUR", "loc": [ -89.68474999999999, 29.470011 ], "pop": 6398, "state": "LA" }, { "_id": "70084", "city": "RESERVE", "loc": [ -90.551773, 30.060255 ], "pop": 7080, "state": "LA" }, { "_id": "70085", "city": "SAINT BERNARD", "loc": [ -89.836414, 29.861093 ], "pop": 8082, "state": "LA" }, { "_id": "70086", "city": "SAINT JAMES", "loc": [ -90.86054900000001, 30.027598 ], "pop": 2515, "state": "LA" }, { "_id": "70087", "city": "SAINT ROSE", "loc": [ -90.312432, 29.958074 ], "pop": 6340, "state": "LA" }, { "_id": "70090", "city": "VACHERIE", "loc": [ -90.709699, 29.969372 ], "pop": 6652, "state": "LA" }, { "_id": "70091", "city": "VENICE", "loc": [ -89.347776, 29.261812 ], "pop": 458, "state": "LA" }, { "_id": "70092", "city": "VIOLET", "loc": [ -89.89599200000001, 29.904347 ], "pop": 10549, "state": "LA" }, { "_id": "70094", "city": "BRIDGE CITY", "loc": [ -90.18130499999999, 29.914386 ], "pop": 35200, "state": "LA" }, { "_id": "70112", "city": "NEW ORLEANS", "loc": [ -90.075301, 29.960484 ], "pop": 6047, "state": "LA" }, { "_id": "70113", "city": "NEW ORLEANS", "loc": [ -90.084777, 29.940511 ], "pop": 12177, "state": "LA" }, { "_id": "70114", "city": "NEW ORLEANS", "loc": [ -90.033126, 29.937934 ], "pop": 29767, "state": "LA" }, { "_id": "70115", "city": "NEW ORLEANS", "loc": [ -90.1005, 29.928863 ], "pop": 45070, "state": "LA" }, { "_id": "70116", "city": "NEW ORLEANS", "loc": [ -90.06461400000001, 29.968608 ], "pop": 16592, "state": "LA" }, { "_id": "70117", "city": "NEW ORLEANS", "loc": [ -90.03124, 29.970298 ], "pop": 56494, "state": "LA" }, { "_id": "70118", "city": "NEW ORLEANS", "loc": [ -90.123598, 29.950352 ], "pop": 40049, "state": "LA" }, { "_id": "70119", "city": "NEW ORLEANS", "loc": [ -90.085156, 29.974552 ], "pop": 47894, "state": "LA" }, { "_id": "70121", "city": "JEFFERSON", "loc": [ -90.16095300000001, 29.963071 ], "pop": 12924, "state": "LA" }, { "_id": "70122", "city": "NEW ORLEANS", "loc": [ -90.064409, 30.005637 ], "pop": 47077, "state": "LA" }, { "_id": "70123", "city": "HARAHAN", "loc": [ -90.210748, 29.953473 ], "pop": 25057, "state": "LA" }, { "_id": "70124", "city": "NEW ORLEANS", "loc": [ -90.10938400000001, 30.007081 ], "pop": 22851, "state": "LA" }, { "_id": "70125", "city": "NEW ORLEANS", "loc": [ -90.102785, 29.951225 ], "pop": 22734, "state": "LA" }, { "_id": "70126", "city": "NEW ORLEANS", "loc": [ -90.018913, 30.015341 ], "pop": 45119, "state": "LA" }, { "_id": "70127", "city": "NEW ORLEANS", "loc": [ -89.980688, 30.033811 ], "pop": 29643, "state": "LA" }, { "_id": "70128", "city": "NEW ORLEANS", "loc": [ -89.95642100000001, 30.052691 ], "pop": 18844, "state": "LA" }, { "_id": "70129", "city": "NEW ORLEANS", "loc": [ -89.906206, 30.047984 ], "pop": 14064, "state": "LA" }, { "_id": "70130", "city": "NEW ORLEANS", "loc": [ -90.073949, 29.932438 ], "pop": 15576, "state": "LA" }, { "_id": "70131", "city": "NEW ORLEANS", "loc": [ -89.996033, 29.916811 ], "pop": 26939, "state": "LA" }, { "_id": "70301", "city": "THIBODAUX", "loc": [ -90.809605, 29.799213 ], "pop": 37831, "state": "LA" }, { "_id": "70339", "city": "PIERRE PART", "loc": [ -91.20016699999999, 29.95501 ], "pop": 5207, "state": "LA" }, { "_id": "70340", "city": "AMELIA", "loc": [ -91.11110499999999, 29.66046 ], "pop": 656, "state": "LA" }, { "_id": "70341", "city": "BELLE ROSE", "loc": [ -91.04435100000001, 30.025955 ], "pop": 4842, "state": "LA" }, { "_id": "70342", "city": "BERWICK", "loc": [ -91.205662, 29.698786 ], "pop": 17631, "state": "LA" }, { "_id": "70343", "city": "BOURG", "loc": [ -90.60866, 29.548489 ], "pop": 5310, "state": "LA" }, { "_id": "70344", "city": "CHAUVIN", "loc": [ -90.59795200000001, 29.463401 ], "pop": 6430, "state": "LA" }, { "_id": "70345", "city": "CUT OFF", "loc": [ -90.339298, 29.523188 ], "pop": 13268, "state": "LA" }, { "_id": "70346", "city": "DONALDSONVILLE", "loc": [ -90.99702499999999, 30.101799 ], "pop": 11265, "state": "LA" }, { "_id": "70353", "city": "DULAC", "loc": [ -90.655655, 29.359814 ], "pop": 1683, "state": "LA" }, { "_id": "70354", "city": "GALLIANO", "loc": [ -90.29805399999999, 29.431125 ], "pop": 3669, "state": "LA" }, { "_id": "70355", "city": "GHEENS", "loc": [ -90.484855, 29.707591 ], "pop": 452, "state": "LA" }, { "_id": "70356", "city": "GIBSON", "loc": [ -90.977637, 29.662522 ], "pop": 1642, "state": "LA" }, { "_id": "70357", "city": "GOLDEN MEADOW", "loc": [ -90.263932, 29.382054 ], "pop": 4075, "state": "LA" }, { "_id": "70358", "city": "GRAND ISLE", "loc": [ -90.00880100000001, 29.22973 ], "pop": 1455, "state": "LA" }, { "_id": "70359", "city": "GRAY", "loc": [ -90.78071, 29.69034 ], "pop": 4755, "state": "LA" }, { "_id": "70360", "city": "HOUMA", "loc": [ -90.754808, 29.59433 ], "pop": 18335, "state": "LA" }, { "_id": "70363", "city": "HOUMA", "loc": [ -90.69166800000001, 29.560137 ], "pop": 23618, "state": "LA" }, { "_id": "70364", "city": "HOUMA", "loc": [ -90.72680099999999, 29.629887 ], "pop": 25330, "state": "LA" }, { "_id": "70372", "city": "LABADIEVILLE", "loc": [ -90.961319, 29.834458 ], "pop": 2856, "state": "LA" }, { "_id": "70374", "city": "LOCKPORT", "loc": [ -90.49061399999999, 29.603493 ], "pop": 10863, "state": "LA" }, { "_id": "70375", "city": "MATHEWS", "loc": [ -90.49491399999999, 29.681982 ], "pop": 479, "state": "LA" }, { "_id": "70377", "city": "MONTEGUT", "loc": [ -90.543952, 29.474366 ], "pop": 3892, "state": "LA" }, { "_id": "70380", "city": "MORGAN CITY", "loc": [ -91.116497, 29.723937 ], "pop": 5341, "state": "LA" }, { "_id": "70390", "city": "NAPOLEONVILLE", "loc": [ -91.026608, 29.92884 ], "pop": 7710, "state": "LA" }, { "_id": "70392", "city": "PATTERSON", "loc": [ -91.28123100000001, 29.69671 ], "pop": 13463, "state": "LA" }, { "_id": "70394", "city": "RACELAND", "loc": [ -90.599908, 29.717835 ], "pop": 12920, "state": "LA" }, { "_id": "70395", "city": "SCHRIEVER", "loc": [ -90.85134100000001, 29.712276 ], "pop": 4774, "state": "LA" }, { "_id": "70397", "city": "THERIOT", "loc": [ -90.765146, 29.451587 ], "pop": 3982, "state": "LA" }, { "_id": "70401", "city": "HAMMOND", "loc": [ -90.48785599999999, 30.51908 ], "pop": 16101, "state": "LA" }, { "_id": "70403", "city": "HAMMOND", "loc": [ -90.46972, 30.491054 ], "pop": 15299, "state": "LA" }, { "_id": "70420", "city": "ABITA SPRINGS", "loc": [ -90.00407199999999, 30.483696 ], "pop": 2659, "state": "LA" }, { "_id": "70422", "city": "AMITE", "loc": [ -90.570493, 30.718208 ], "pop": 12006, "state": "LA" }, { "_id": "70426", "city": "ANGIE", "loc": [ -89.856714, 30.922406 ], "pop": 6303, "state": "LA" }, { "_id": "70427", "city": "BOGALUSA", "loc": [ -89.865329, 30.773303 ], "pop": 18938, "state": "LA" }, { "_id": "70431", "city": "BUSH", "loc": [ -89.955664, 30.613393 ], "pop": 3906, "state": "LA" }, { "_id": "70433", "city": "COVINGTON", "loc": [ -90.095933, 30.487606 ], "pop": 26117, "state": "LA" }, { "_id": "70436", "city": "FLUKER", "loc": [ -90.52067, 30.812776 ], "pop": 186, "state": "LA" }, { "_id": "70437", "city": "FOLSOM", "loc": [ -90.187927, 30.61447 ], "pop": 4832, "state": "LA" }, { "_id": "70438", "city": "FRANKLINTON", "loc": [ -90.11547899999999, 30.857735 ], "pop": 16352, "state": "LA" }, { "_id": "70441", "city": "GREENSBURG", "loc": [ -90.725561, 30.864693 ], "pop": 3833, "state": "LA" }, { "_id": "70443", "city": "INDEPENDENCE", "loc": [ -90.52768500000001, 30.635148 ], "pop": 4330, "state": "LA" }, { "_id": "70444", "city": "KENTWOOD", "loc": [ -90.472829, 30.889215 ], "pop": 11244, "state": "LA" }, { "_id": "70445", "city": "LACOMBE", "loc": [ -89.929744, 30.322027 ], "pop": 7956, "state": "LA" }, { "_id": "70446", "city": "LORANGER", "loc": [ -90.356723, 30.588407 ], "pop": 8701, "state": "LA" }, { "_id": "70447", "city": "MADISONVILLE", "loc": [ -90.17728200000001, 30.428743 ], "pop": 3110, "state": "LA" }, { "_id": "70448", "city": "MANDEVILLE", "loc": [ -90.076846, 30.386096 ], "pop": 22492, "state": "LA" }, { "_id": "70449", "city": "MAUREPAS", "loc": [ -90.704255, 30.271587 ], "pop": 2489, "state": "LA" }, { "_id": "70450", "city": "MOUNT HERMON", "loc": [ -90.276886, 30.953619 ], "pop": 1577, "state": "LA" }, { "_id": "70452", "city": "PEARL RIVER", "loc": [ -89.77315, 30.394448 ], "pop": 9228, "state": "LA" }, { "_id": "70453", "city": "PINE GROVE", "loc": [ -90.767235, 30.703202 ], "pop": 444, "state": "LA" }, { "_id": "70454", "city": "PONCHATOULA", "loc": [ -90.44224699999999, 30.440644 ], "pop": 15713, "state": "LA" }, { "_id": "70455", "city": "ROBERT", "loc": [ -90.335171, 30.506327 ], "pop": 564, "state": "LA" }, { "_id": "70456", "city": "ROSELAND", "loc": [ -90.524277, 30.771711 ], "pop": 2062, "state": "LA" }, { "_id": "70458", "city": "SLIDELL", "loc": [ -89.771192, 30.278411 ], "pop": 28918, "state": "LA" }, { "_id": "70460", "city": "SLIDELL", "loc": [ -89.812895, 30.291611 ], "pop": 18020, "state": "LA" }, { "_id": "70461", "city": "SLIDELL", "loc": [ -89.729027, 30.272615 ], "pop": 17270, "state": "LA" }, { "_id": "70462", "city": "SPRINGFIELD", "loc": [ -90.577479, 30.415738 ], "pop": 5597, "state": "LA" }, { "_id": "70466", "city": "TICKFAW", "loc": [ -90.48199700000001, 30.566849 ], "pop": 5565, "state": "LA" }, { "_id": "70467", "city": "VARNADO", "loc": [ -89.7606, 30.982085 ], "pop": 15, "state": "LA" }, { "_id": "70501", "city": "LAFAYETTE", "loc": [ -92.008261, 30.236141 ], "pop": 31717, "state": "LA" }, { "_id": "70503", "city": "LAFAYETTE", "loc": [ -92.049745, 30.184256 ], "pop": 25109, "state": "LA" }, { "_id": "70506", "city": "LAFAYETTE", "loc": [ -92.065623, 30.207707 ], "pop": 33970, "state": "LA" }, { "_id": "70507", "city": "LAFAYETTE", "loc": [ -92.015962, 30.281313 ], "pop": 12074, "state": "LA" }, { "_id": "70508", "city": "LAFAYETTE", "loc": [ -92.023579, 30.158222 ], "pop": 20568, "state": "LA" }, { "_id": "70510", "city": "FORKED ISLAND", "loc": [ -92.142655, 29.958828 ], "pop": 21018, "state": "LA" }, { "_id": "70512", "city": "ARNAUDVILLE", "loc": [ -91.92628499999999, 30.398054 ], "pop": 5676, "state": "LA" }, { "_id": "70514", "city": "BALDWIN", "loc": [ -91.545783, 29.848784 ], "pop": 4601, "state": "LA" }, { "_id": "70515", "city": "BASILE", "loc": [ -92.57357, 30.497787 ], "pop": 2733, "state": "LA" }, { "_id": "70516", "city": "BRANCH", "loc": [ -92.33461800000001, 30.328684 ], "pop": 2695, "state": "LA" }, { "_id": "70517", "city": "HENDERSON", "loc": [ -91.90589900000001, 30.274955 ], "pop": 9596, "state": "LA" }, { "_id": "70518", "city": "BROUSSARD", "loc": [ -91.950171, 30.12189 ], "pop": 8159, "state": "LA" }, { "_id": "70520", "city": "CARENCRO", "loc": [ -92.042265, 30.324433 ], "pop": 12256, "state": "LA" }, { "_id": "70525", "city": "CHURCH POINT", "loc": [ -92.22395400000001, 30.401287 ], "pop": 11108, "state": "LA" }, { "_id": "70526", "city": "CROWLEY", "loc": [ -92.377709, 30.214753 ], "pop": 17975, "state": "LA" }, { "_id": "70528", "city": "DELCAMBRE", "loc": [ -91.988938, 29.947414 ], "pop": 2769, "state": "LA" }, { "_id": "70529", "city": "DUSON", "loc": [ -92.152455, 30.191216 ], "pop": 7160, "state": "LA" }, { "_id": "70531", "city": "EGAN", "loc": [ -92.500226, 30.250966 ], "pop": 359, "state": "LA" }, { "_id": "70532", "city": "ELTON", "loc": [ -92.699614, 30.471496 ], "pop": 1973, "state": "LA" }, { "_id": "70533", "city": "ERATH", "loc": [ -92.034266, 29.952237 ], "pop": 7280, "state": "LA" }, { "_id": "70535", "city": "EUNICE", "loc": [ -92.39847399999999, 30.51158 ], "pop": 21409, "state": "LA" }, { "_id": "70537", "city": "EVANGELINE", "loc": [ -92.55324400000001, 30.26829 ], "pop": 475, "state": "LA" }, { "_id": "70538", "city": "FRANKLIN", "loc": [ -91.50264300000001, 29.785656 ], "pop": 15334, "state": "LA" }, { "_id": "70542", "city": "GUEYDAN", "loc": [ -92.533779, 30.025541 ], "pop": 3839, "state": "LA" }, { "_id": "70543", "city": "IOTA", "loc": [ -92.532201, 30.300081 ], "pop": 5338, "state": "LA" }, { "_id": "70544", "city": "JEANERETTE", "loc": [ -91.654397, 29.90324 ], "pop": 14068, "state": "LA" }, { "_id": "70546", "city": "JENNINGS", "loc": [ -92.657405, 30.22011 ], "pop": 11966, "state": "LA" }, { "_id": "70548", "city": "KAPLAN", "loc": [ -92.302463, 29.977096 ], "pop": 9442, "state": "LA" }, { "_id": "70549", "city": "LAKE ARTHUR", "loc": [ -92.682526, 30.09097 ], "pop": 5011, "state": "LA" }, { "_id": "70552", "city": "LOREAUVILLE", "loc": [ -91.659571, 30.068276 ], "pop": 109, "state": "LA" }, { "_id": "70554", "city": "MAMOU", "loc": [ -92.419646, 30.649648 ], "pop": 6639, "state": "LA" }, { "_id": "70555", "city": "MAURICE", "loc": [ -92.107035, 30.07215 ], "pop": 3628, "state": "LA" }, { "_id": "70559", "city": "MIDLAND", "loc": [ -92.46315300000001, 30.143437 ], "pop": 4566, "state": "LA" }, { "_id": "70560", "city": "NEW IBERIA", "loc": [ -91.819959, 30.001027 ], "pop": 56105, "state": "LA" }, { "_id": "70570", "city": "OPELOUSAS", "loc": [ -92.089668, 30.51442 ], "pop": 46673, "state": "LA" }, { "_id": "70577", "city": "PORT BARRE", "loc": [ -91.92857600000001, 30.547788 ], "pop": 4940, "state": "LA" }, { "_id": "70578", "city": "RAYNE", "loc": [ -92.248592, 30.204508 ], "pop": 15652, "state": "LA" }, { "_id": "70581", "city": "ROANOKE", "loc": [ -92.68697299999999, 30.318167 ], "pop": 2766, "state": "LA" }, { "_id": "70582", "city": "SAINT MARTINVILL", "loc": [ -91.82596100000001, 30.208282 ], "pop": 29590, "state": "LA" }, { "_id": "70583", "city": "SCOTT", "loc": [ -92.098079, 30.250401 ], "pop": 9093, "state": "LA" }, { "_id": "70584", "city": "CANKTON", "loc": [ -92.075681, 30.393741 ], "pop": 634, "state": "LA" }, { "_id": "70586", "city": "VILLE PLATTE", "loc": [ -92.27370999999999, 30.692376 ], "pop": 14291, "state": "LA" }, { "_id": "70589", "city": "WASHINGTON", "loc": [ -92.039888, 30.709881 ], "pop": 3771, "state": "LA" }, { "_id": "70591", "city": "WELSH", "loc": [ -92.818972, 30.236259 ], "pop": 5587, "state": "LA" }, { "_id": "70592", "city": "YOUNGSVILLE", "loc": [ -92.009629, 30.097498 ], "pop": 6671, "state": "LA" }, { "_id": "70601", "city": "LAKE CHARLES", "loc": [ -93.187966, 30.228453 ], "pop": 49710, "state": "LA" }, { "_id": "70605", "city": "LAKE CHARLES", "loc": [ -93.22179800000001, 30.169349 ], "pop": 42627, "state": "LA" }, { "_id": "70611", "city": "LAKE CHARLES", "loc": [ -93.211082, 30.322031 ], "pop": 12470, "state": "LA" }, { "_id": "70630", "city": "BELL CITY", "loc": [ -92.94407, 30.114454 ], "pop": 1365, "state": "LA" }, { "_id": "70631", "city": "CAMERON", "loc": [ -93.27766200000001, 29.86492 ], "pop": 5677, "state": "LA" }, { "_id": "70632", "city": "CREOLE", "loc": [ -93.034874, 29.797813 ], "pop": 1023, "state": "LA" }, { "_id": "70633", "city": "DEQUINCY", "loc": [ -93.415053, 30.421113 ], "pop": 8271, "state": "LA" }, { "_id": "70634", "city": "DERIDDER", "loc": [ -93.268461, 30.828738 ], "pop": 19304, "state": "LA" }, { "_id": "70637", "city": "DRY CREEK", "loc": [ -92.988849, 30.735356 ], "pop": 1597, "state": "LA" }, { "_id": "70639", "city": "EVANS", "loc": [ -93.42217100000001, 31.008817 ], "pop": 2757, "state": "LA" }, { "_id": "70643", "city": "GRAND CHENIER", "loc": [ -92.897997, 29.787535 ], "pop": 696, "state": "LA" }, { "_id": "70645", "city": "HACKBERRY", "loc": [ -93.374973, 29.982187 ], "pop": 1668, "state": "LA" }, { "_id": "70647", "city": "IOWA", "loc": [ -93.02585999999999, 30.221937 ], "pop": 4915, "state": "LA" }, { "_id": "70648", "city": "KINDER", "loc": [ -92.869332, 30.460653 ], "pop": 6853, "state": "LA" }, { "_id": "70650", "city": "LACASSINE", "loc": [ -92.829262, 30.145587 ], "pop": 460, "state": "LA" }, { "_id": "70652", "city": "LONGVILLE", "loc": [ -93.254806, 30.579992 ], "pop": 1324, "state": "LA" }, { "_id": "70653", "city": "FIELDS", "loc": [ -93.530734, 30.770145 ], "pop": 3273, "state": "LA" }, { "_id": "70654", "city": "MITTIE", "loc": [ -92.932056, 30.678812 ], "pop": 477, "state": "LA" }, { "_id": "70655", "city": "OBERLIN", "loc": [ -92.752672, 30.6162 ], "pop": 3121, "state": "LA" }, { "_id": "70656", "city": "PITKIN", "loc": [ -92.954762, 30.932988 ], "pop": 3603, "state": "LA" }, { "_id": "70657", "city": "RAGLEY", "loc": [ -93.23365200000001, 30.470262 ], "pop": 2530, "state": "LA" }, { "_id": "70658", "city": "REEVES", "loc": [ -93.03684699999999, 30.496734 ], "pop": 1718, "state": "LA" }, { "_id": "70660", "city": "SINGER", "loc": [ -93.464986, 30.532906 ], "pop": 2374, "state": "LA" }, { "_id": "70661", "city": "STARKS", "loc": [ -93.661485, 30.308477 ], "pop": 2457, "state": "LA" }, { "_id": "70662", "city": "SUGARTOWN", "loc": [ -93.017017, 30.827653 ], "pop": 319, "state": "LA" }, { "_id": "70663", "city": "SULPHUR", "loc": [ -93.363911, 30.219001 ], "pop": 29774, "state": "LA" }, { "_id": "70668", "city": "VINTON", "loc": [ -93.57280799999999, 30.201523 ], "pop": 6584, "state": "LA" }, { "_id": "70669", "city": "WESTLAKE", "loc": [ -93.268837, 30.261274 ], "pop": 11106, "state": "LA" }, { "_id": "70710", "city": "ADDIS", "loc": [ -91.261348, 30.355699 ], "pop": 2354, "state": "LA" }, { "_id": "70711", "city": "ALBANY", "loc": [ -90.59641499999999, 30.514872 ], "pop": 4533, "state": "LA" }, { "_id": "70712", "city": "ANGOLA", "loc": [ -91.597948, 30.96562 ], "pop": 5382, "state": "LA" }, { "_id": "70714", "city": "BAKER", "loc": [ -91.142893, 30.581395 ], "pop": 19623, "state": "LA" }, { "_id": "70715", "city": "BATCHELOR", "loc": [ -91.66867499999999, 30.802631 ], "pop": 1864, "state": "LA" }, { "_id": "70717", "city": "BLANKS", "loc": [ -91.61584499999999, 30.579813 ], "pop": 1657, "state": "LA" }, { "_id": "70719", "city": "BRUSLY", "loc": [ -91.25264900000001, 30.387692 ], "pop": 3429, "state": "LA" }, { "_id": "70720", "city": "BUECHE", "loc": [ -91.338303, 30.574894 ], "pop": 504, "state": "LA" }, { "_id": "70721", "city": "POINT CLAIR", "loc": [ -91.102484, 30.220759 ], "pop": 1104, "state": "LA" }, { "_id": "70722", "city": "CLINTON", "loc": [ -90.93314100000001, 30.824867 ], "pop": 3028, "state": "LA" }, { "_id": "70723", "city": "CONVENT", "loc": [ -90.864988, 30.055251 ], "pop": 2052, "state": "LA" }, { "_id": "70725", "city": "DARROW", "loc": [ -90.965102, 30.12999 ], "pop": 1090, "state": "LA" }, { "_id": "70726", "city": "PORT VINCENT", "loc": [ -90.932588, 30.484623 ], "pop": 34574, "state": "LA" }, { "_id": "70729", "city": "ERWINVILLE", "loc": [ -91.399444, 30.551252 ], "pop": 342, "state": "LA" }, { "_id": "70730", "city": "ETHEL", "loc": [ -91.10997500000001, 30.813124 ], "pop": 3979, "state": "LA" }, { "_id": "70732", "city": "FORDOCHE", "loc": [ -91.69725800000001, 30.550835 ], "pop": 0, "state": "LA" }, { "_id": "70733", "city": "FRENCH SETTLEMEN", "loc": [ -90.773225, 30.336394 ], "pop": 3132, "state": "LA" }, { "_id": "70734", "city": "GEISMAR", "loc": [ -90.975824, 30.236265 ], "pop": 3622, "state": "LA" }, { "_id": "70736", "city": "GLYNN", "loc": [ -91.342311, 30.637617 ], "pop": 557, "state": "LA" }, { "_id": "70737", "city": "GONZALES", "loc": [ -90.918012, 30.247306 ], "pop": 21482, "state": "LA" }, { "_id": "70739", "city": "GREENWELL SPRING", "loc": [ -91.00748400000001, 30.52114 ], "pop": 8000, "state": "LA" }, { "_id": "70740", "city": "GROSSE TETE", "loc": [ -91.43828999999999, 30.387935 ], "pop": 956, "state": "LA" }, { "_id": "70744", "city": "HOLDEN", "loc": [ -90.665176, 30.555646 ], "pop": 2424, "state": "LA" }, { "_id": "70748", "city": "THE BLUFFS", "loc": [ -91.234537, 30.827034 ], "pop": 7635, "state": "LA" }, { "_id": "70749", "city": "JARREAU", "loc": [ -91.433205, 30.632585 ], "pop": 1365, "state": "LA" }, { "_id": "70750", "city": "KROTZ SPRINGS", "loc": [ -91.75632899999999, 30.537928 ], "pop": 935, "state": "LA" }, { "_id": "70752", "city": "LAKELAND", "loc": [ -91.421677, 30.579941 ], "pop": 839, "state": "LA" }, { "_id": "70753", "city": "LETTSWORTH", "loc": [ -91.740252, 30.932394 ], "pop": 1589, "state": "LA" }, { "_id": "70754", "city": "LIVINGSTON", "loc": [ -90.76733900000001, 30.474107 ], "pop": 4653, "state": "LA" }, { "_id": "70755", "city": "LIVONIA", "loc": [ -91.533219, 30.552353 ], "pop": 2711, "state": "LA" }, { "_id": "70756", "city": "LOTTIE", "loc": [ -91.71053000000001, 30.503947 ], "pop": 9, "state": "LA" }, { "_id": "70757", "city": "RAMAH", "loc": [ -91.51681600000001, 30.482292 ], "pop": 2070, "state": "LA" }, { "_id": "70759", "city": "MORGANZA", "loc": [ -91.595935, 30.724491 ], "pop": 1082, "state": "LA" }, { "_id": "70760", "city": "NEW ROADS", "loc": [ -91.44212400000001, 30.701356 ], "pop": 7642, "state": "LA" }, { "_id": "70761", "city": "NORWOOD", "loc": [ -91.062871, 30.951772 ], "pop": 1833, "state": "LA" }, { "_id": "70762", "city": "OSCAR", "loc": [ -91.48457999999999, 30.598759 ], "pop": 744, "state": "LA" }, { "_id": "70763", "city": "PAULINA", "loc": [ -90.73743899999999, 30.035159 ], "pop": 2639, "state": "LA" }, { "_id": "70764", "city": "PLAQUEMINE", "loc": [ -91.25236099999999, 30.268414 ], "pop": 16692, "state": "LA" }, { "_id": "70767", "city": "PORT ALLEN", "loc": [ -91.254088, 30.471983 ], "pop": 12837, "state": "LA" }, { "_id": "70769", "city": "GALVEZ", "loc": [ -90.92990399999999, 30.315588 ], "pop": 13275, "state": "LA" }, { "_id": "70770", "city": "PRIDE", "loc": [ -90.99429000000001, 30.613321 ], "pop": 5260, "state": "LA" }, { "_id": "70772", "city": "ROSEDALE", "loc": [ -91.45616, 30.440776 ], "pop": 807, "state": "LA" }, { "_id": "70773", "city": "ROUGON", "loc": [ -91.381316, 30.603452 ], "pop": 542, "state": "LA" }, { "_id": "70774", "city": "SAINT AMANT", "loc": [ -90.84352699999999, 30.23849 ], "pop": 6177, "state": "LA" }, { "_id": "70775", "city": "BAINS", "loc": [ -91.39226600000001, 30.858658 ], "pop": 5634, "state": "LA" }, { "_id": "70776", "city": "IBERVILLE", "loc": [ -91.09162000000001, 30.279873 ], "pop": 3225, "state": "LA" }, { "_id": "70777", "city": "SLAUGHTER", "loc": [ -91.052251, 30.799139 ], "pop": 4558, "state": "LA" }, { "_id": "70778", "city": "SORRENTO", "loc": [ -90.86314, 30.185388 ], "pop": 1303, "state": "LA" }, { "_id": "70780", "city": "SUNSHINE", "loc": [ -91.179922, 30.29824 ], "pop": 395, "state": "LA" }, { "_id": "70781", "city": "TORBERT", "loc": [ -91.421616, 30.538575 ], "pop": 27, "state": "LA" }, { "_id": "70783", "city": "VENTRESS", "loc": [ -91.403257, 30.681404 ], "pop": 1926, "state": "LA" }, { "_id": "70785", "city": "WALKER", "loc": [ -90.85570800000001, 30.524748 ], "pop": 12659, "state": "LA" }, { "_id": "70788", "city": "WHITE CASTLE", "loc": [ -91.17734299999999, 30.15447 ], "pop": 5739, "state": "LA" }, { "_id": "70789", "city": "WILSON", "loc": [ -91.065511, 30.947325 ], "pop": 77, "state": "LA" }, { "_id": "70791", "city": "ZACHARY", "loc": [ -91.135841, 30.656129 ], "pop": 18647, "state": "LA" }, { "_id": "70792", "city": "UNCLE SAM", "loc": [ -90.771879, 30.021679 ], "pop": 263, "state": "LA" }, { "_id": "70801", "city": "BATON ROUGE", "loc": [ -91.186954, 30.450731 ], "pop": 62, "state": "LA" }, { "_id": "70802", "city": "BATON ROUGE", "loc": [ -91.169037, 30.444236 ], "pop": 35116, "state": "LA" }, { "_id": "70805", "city": "BATON ROUGE", "loc": [ -91.148095, 30.48604 ], "pop": 30584, "state": "LA" }, { "_id": "70806", "city": "BATON ROUGE", "loc": [ -91.13004599999999, 30.448486 ], "pop": 25893, "state": "LA" }, { "_id": "70807", "city": "SCOTLANDVILLE", "loc": [ -91.17861499999999, 30.533199 ], "pop": 23234, "state": "LA" }, { "_id": "70808", "city": "BATON ROUGE", "loc": [ -91.146765, 30.406596 ], "pop": 31189, "state": "LA" }, { "_id": "70809", "city": "BATON ROUGE", "loc": [ -91.08421300000001, 30.408891 ], "pop": 15623, "state": "LA" }, { "_id": "70810", "city": "BATON ROUGE", "loc": [ -91.091898, 30.363309 ], "pop": 22331, "state": "LA" }, { "_id": "70811", "city": "GREENWOOD", "loc": [ -91.12653899999999, 30.53046 ], "pop": 13653, "state": "LA" }, { "_id": "70812", "city": "BATON ROUGE", "loc": [ -91.118111, 30.505159 ], "pop": 11842, "state": "LA" }, { "_id": "70814", "city": "BATON ROUGE", "loc": [ -91.06893599999999, 30.484808 ], "pop": 13227, "state": "LA" }, { "_id": "70815", "city": "BATON ROUGE", "loc": [ -91.059558, 30.455809 ], "pop": 27565, "state": "LA" }, { "_id": "70816", "city": "BATON ROUGE", "loc": [ -91.035645, 30.427289 ], "pop": 32885, "state": "LA" }, { "_id": "70817", "city": "BATON ROUGE", "loc": [ -91.00212999999999, 30.390404 ], "pop": 20916, "state": "LA" }, { "_id": "70818", "city": "BATON ROUGE", "loc": [ -91.049964, 30.540832 ], "pop": 8368, "state": "LA" }, { "_id": "70819", "city": "BATON ROUGE", "loc": [ -91.01564999999999, 30.46679 ], "pop": 5377, "state": "LA" }, { "_id": "70820", "city": "BATON ROUGE", "loc": [ -91.167064, 30.379523 ], "pop": 10710, "state": "LA" }, { "_id": "71001", "city": "ARCADIA", "loc": [ -92.92452900000001, 32.555643 ], "pop": 4367, "state": "LA" }, { "_id": "71003", "city": "ATHENS", "loc": [ -93.023875, 32.645073 ], "pop": 1336, "state": "LA" }, { "_id": "71004", "city": "BELCHER", "loc": [ -93.85079899999999, 32.754393 ], "pop": 849, "state": "LA" }, { "_id": "71006", "city": "BENTON", "loc": [ -93.69095, 32.697617 ], "pop": 7234, "state": "LA" }, { "_id": "71007", "city": "BETHANY", "loc": [ -94.003394, 32.366179 ], "pop": 404, "state": "LA" }, { "_id": "71008", "city": "BIENVILLE", "loc": [ -92.908402, 32.252323 ], "pop": 445, "state": "LA" }, { "_id": "71016", "city": "CASTOR", "loc": [ -93.093576, 32.245181 ], "pop": 2784, "state": "LA" }, { "_id": "71018", "city": "COTTON VALLEY", "loc": [ -93.42588499999999, 32.819011 ], "pop": 2061, "state": "LA" }, { "_id": "71019", "city": "HANNA", "loc": [ -93.31564400000001, 32.050099 ], "pop": 9339, "state": "LA" }, { "_id": "71023", "city": "DOYLINE", "loc": [ -93.399585, 32.490023 ], "pop": 3065, "state": "LA" }, { "_id": "71024", "city": "DUBBERLY", "loc": [ -93.21419, 32.519164 ], "pop": 1117, "state": "LA" }, { "_id": "71027", "city": "FRIERSON", "loc": [ -93.69148800000001, 32.244968 ], "pop": 1600, "state": "LA" }, { "_id": "71028", "city": "GIBSLAND", "loc": [ -93.07055800000001, 32.529874 ], "pop": 2219, "state": "LA" }, { "_id": "71029", "city": "GILLIAM", "loc": [ -93.829268, 32.825055 ], "pop": 367, "state": "LA" }, { "_id": "71030", "city": "GLOSTER", "loc": [ -93.82930899999999, 32.191705 ], "pop": 1242, "state": "LA" }, { "_id": "71031", "city": "GOLDONNA", "loc": [ -92.961056, 31.999988 ], "pop": 1378, "state": "LA" }, { "_id": "71032", "city": "GRAND CANE", "loc": [ -93.79406400000001, 32.105 ], "pop": 1048, "state": "LA" }, { "_id": "71033", "city": "GREENWOOD", "loc": [ -93.969252, 32.424025 ], "pop": 3140, "state": "LA" }, { "_id": "71034", "city": "HALL SUMMIT", "loc": [ -93.30475, 32.175249 ], "pop": 227, "state": "LA" }, { "_id": "71037", "city": "HAUGHTON", "loc": [ -93.565742, 32.550732 ], "pop": 13876, "state": "LA" }, { "_id": "71038", "city": "HAYNESVILLE", "loc": [ -93.069137, 32.927807 ], "pop": 7888, "state": "LA" }, { "_id": "71039", "city": "HEFLIN", "loc": [ -93.285192, 32.447008 ], "pop": 1415, "state": "LA" }, { "_id": "71040", "city": "HOMER", "loc": [ -93.028834, 32.774883 ], "pop": 6963, "state": "LA" }, { "_id": "71043", "city": "HOSSTON", "loc": [ -93.883425, 32.896653 ], "pop": 766, "state": "LA" }, { "_id": "71044", "city": "IDA", "loc": [ -93.902186, 32.993393 ], "pop": 742, "state": "LA" }, { "_id": "71045", "city": "JAMESTOWN", "loc": [ -93.184758, 32.36127 ], "pop": 380, "state": "LA" }, { "_id": "71046", "city": "KEATCHIE", "loc": [ -93.95104600000001, 32.162173 ], "pop": 1068, "state": "LA" }, { "_id": "71047", "city": "KEITHVILLE", "loc": [ -93.888138, 32.316059 ], "pop": 8291, "state": "LA" }, { "_id": "71048", "city": "LISBON", "loc": [ -92.88781, 32.845196 ], "pop": 427, "state": "LA" }, { "_id": "71049", "city": "LOGANSPORT", "loc": [ -93.962733, 31.994327 ], "pop": 4130, "state": "LA" }, { "_id": "71051", "city": "ELM GROVE", "loc": [ -93.50261500000001, 32.388628 ], "pop": 2216, "state": "LA" }, { "_id": "71052", "city": "MANSFIELD", "loc": [ -93.69804499999999, 32.023863 ], "pop": 12317, "state": "LA" }, { "_id": "71055", "city": "MINDEN", "loc": [ -93.28858700000001, 32.632281 ], "pop": 21954, "state": "LA" }, { "_id": "71059", "city": "MIRA", "loc": [ -93.918797, 32.922491 ], "pop": 207, "state": "LA" }, { "_id": "71060", "city": "MOORINGSPORT", "loc": [ -93.973018, 32.66258 ], "pop": 2838, "state": "LA" }, { "_id": "71061", "city": "OIL CITY", "loc": [ -93.983844, 32.745107 ], "pop": 1874, "state": "LA" }, { "_id": "71063", "city": "PELICAN", "loc": [ -93.563361, 31.896563 ], "pop": 998, "state": "LA" }, { "_id": "71064", "city": "PLAIN DEALING", "loc": [ -93.690534, 32.907419 ], "pop": 4904, "state": "LA" }, { "_id": "71065", "city": "PLEASANT HILL", "loc": [ -93.513594, 31.808577 ], "pop": 1338, "state": "LA" }, { "_id": "71067", "city": "PRINCETON", "loc": [ -93.522577, 32.579089 ], "pop": 1914, "state": "LA" }, { "_id": "71068", "city": "RINGGOLD", "loc": [ -93.298241, 32.326302 ], "pop": 4442, "state": "LA" }, { "_id": "71069", "city": "RODESSA", "loc": [ -93.988474, 32.970079 ], "pop": 1014, "state": "LA" }, { "_id": "71070", "city": "CHESTNUT", "loc": [ -92.948606, 32.156604 ], "pop": 1207, "state": "LA" }, { "_id": "71071", "city": "SAREPTA", "loc": [ -93.44040699999999, 32.943361 ], "pop": 4570, "state": "LA" }, { "_id": "71072", "city": "SHONGALOO", "loc": [ -93.29626399999999, 32.971289 ], "pop": 752, "state": "LA" }, { "_id": "71073", "city": "SIBLEY", "loc": [ -93.30090199999999, 32.509539 ], "pop": 1363, "state": "LA" }, { "_id": "71075", "city": "SPRINGHILL", "loc": [ -93.459563, 33.00054 ], "pop": 6271, "state": "LA" }, { "_id": "71078", "city": "STONEWALL", "loc": [ -93.80027699999999, 32.284758 ], "pop": 3009, "state": "LA" }, { "_id": "71079", "city": "SUMMERFIELD", "loc": [ -92.821516, 32.923802 ], "pop": 25, "state": "LA" }, { "_id": "71082", "city": "TREES", "loc": [ -93.987312, 32.866844 ], "pop": 5880, "state": "LA" }, { "_id": "71101", "city": "SHREVEPORT", "loc": [ -93.748696, 32.503743 ], "pop": 11355, "state": "LA" }, { "_id": "71103", "city": "SHREVEPORT", "loc": [ -93.772701, 32.494459 ], "pop": 12908, "state": "LA" }, { "_id": "71104", "city": "SHREVEPORT", "loc": [ -93.73486200000001, 32.482978 ], "pop": 14181, "state": "LA" }, { "_id": "71105", "city": "SHREVEPORT", "loc": [ -93.714341, 32.458882 ], "pop": 19053, "state": "LA" }, { "_id": "71106", "city": "FORBING", "loc": [ -93.747922, 32.426251 ], "pop": 32844, "state": "LA" }, { "_id": "71107", "city": "DIXIE", "loc": [ -93.82878100000001, 32.564652 ], "pop": 29013, "state": "LA" }, { "_id": "71108", "city": "SHREVEPORT", "loc": [ -93.781378, 32.448596 ], "pop": 19800, "state": "LA" }, { "_id": "71109", "city": "SHREVEPORT", "loc": [ -93.80129700000001, 32.473994 ], "pop": 27393, "state": "LA" }, { "_id": "71110", "city": "BARKSDALE A F B", "loc": [ -93.638172, 32.514313 ], "pop": 3518, "state": "LA" }, { "_id": "71111", "city": "BOSSIER CITY", "loc": [ -93.70382600000001, 32.544924 ], "pop": 26472, "state": "LA" }, { "_id": "71112", "city": "BOSSIER CITY", "loc": [ -93.676723, 32.486025 ], "pop": 25299, "state": "LA" }, { "_id": "71115", "city": "CASPIANA", "loc": [ -93.697402, 32.410156 ], "pop": 8897, "state": "LA" }, { "_id": "71118", "city": "SHREVEPORT", "loc": [ -93.802543, 32.397664 ], "pop": 23539, "state": "LA" }, { "_id": "71119", "city": "SHREVEPORT", "loc": [ -93.87260999999999, 32.477121 ], "pop": 10578, "state": "LA" }, { "_id": "71129", "city": "SHREVEPORT", "loc": [ -93.87419199999999, 32.41412 ], "pop": 12661, "state": "LA" }, { "_id": "71201", "city": "MONROE", "loc": [ -92.106104, 32.528551 ], "pop": 22419, "state": "LA" }, { "_id": "71202", "city": "RICHWOOD", "loc": [ -92.090231, 32.463327 ], "pop": 32038, "state": "LA" }, { "_id": "71203", "city": "MONROE", "loc": [ -92.042241, 32.553038 ], "pop": 35643, "state": "LA" }, { "_id": "71219", "city": "BASKIN", "loc": [ -91.713154, 32.289728 ], "pop": 1518, "state": "LA" }, { "_id": "71220", "city": "BASTROP", "loc": [ -91.90776, 32.789382 ], "pop": 26388, "state": "LA" }, { "_id": "71222", "city": "BERNICE", "loc": [ -92.62626899999999, 32.821024 ], "pop": 3510, "state": "LA" }, { "_id": "71223", "city": "BONITA", "loc": [ -91.682158, 32.912263 ], "pop": 963, "state": "LA" }, { "_id": "71225", "city": "CALHOUN", "loc": [ -92.32992900000001, 32.524791 ], "pop": 4082, "state": "LA" }, { "_id": "71226", "city": "CHATHAM", "loc": [ -92.437433, 32.292246 ], "pop": 1254, "state": "LA" }, { "_id": "71227", "city": "CHOUDRANT", "loc": [ -92.522419, 32.555627 ], "pop": 5436, "state": "LA" }, { "_id": "71229", "city": "COLLINSTON", "loc": [ -91.86341899999999, 32.697143 ], "pop": 1128, "state": "LA" }, { "_id": "71232", "city": "WARDEN", "loc": [ -91.51248699999999, 32.450433 ], "pop": 6657, "state": "LA" }, { "_id": "71234", "city": "DOWNSVILLE", "loc": [ -92.374471, 32.652508 ], "pop": 4019, "state": "LA" }, { "_id": "71235", "city": "DUBACH", "loc": [ -92.678543, 32.694893 ], "pop": 2838, "state": "LA" }, { "_id": "71237", "city": "EPPS", "loc": [ -91.49135, 32.616099 ], "pop": 1586, "state": "LA" }, { "_id": "71238", "city": "EROS", "loc": [ -92.34795, 32.398822 ], "pop": 2296, "state": "LA" }, { "_id": "71239", "city": "EXTENSION", "loc": [ -91.801091, 31.947065 ], "pop": 263, "state": "LA" }, { "_id": "71241", "city": "FARMERVILLE", "loc": [ -92.317955, 32.753378 ], "pop": 7172, "state": "LA" }, { "_id": "71243", "city": "FORT NECESSITY", "loc": [ -91.825694, 32.043412 ], "pop": 74, "state": "LA" }, { "_id": "71245", "city": "GRAMBLING", "loc": [ -92.715785, 32.524398 ], "pop": 5740, "state": "LA" }, { "_id": "71250", "city": "JONES", "loc": [ -91.596509, 32.966286 ], "pop": 386, "state": "LA" }, { "_id": "71251", "city": "JONESBORO", "loc": [ -92.694425, 32.248292 ], "pop": 11078, "state": "LA" }, { "_id": "71254", "city": "LAKE PROVIDENCE", "loc": [ -91.19056999999999, 32.807067 ], "pop": 7774, "state": "LA" }, { "_id": "71256", "city": "LILLIE", "loc": [ -92.68576899999999, 32.952931 ], "pop": 439, "state": "LA" }, { "_id": "71259", "city": "MANGHAM", "loc": [ -91.797607, 32.333114 ], "pop": 3493, "state": "LA" }, { "_id": "71260", "city": "LINVILLE", "loc": [ -92.25706, 32.888155 ], "pop": 3761, "state": "LA" }, { "_id": "71261", "city": "MER ROUGE", "loc": [ -91.771643, 32.77176 ], "pop": 2177, "state": "LA" }, { "_id": "71263", "city": "TERRY", "loc": [ -91.41290499999999, 32.872258 ], "pop": 9056, "state": "LA" }, { "_id": "71264", "city": "OAK RIDGE", "loc": [ -91.761785, 32.624317 ], "pop": 913, "state": "LA" }, { "_id": "71266", "city": "PIONEER", "loc": [ -91.464822, 32.715436 ], "pop": 1451, "state": "LA" }, { "_id": "71268", "city": "QUITMAN", "loc": [ -92.70853200000001, 32.356423 ], "pop": 2603, "state": "LA" }, { "_id": "71269", "city": "ALTO", "loc": [ -91.76430000000001, 32.468938 ], "pop": 11441, "state": "LA" }, { "_id": "71270", "city": "RUSTON", "loc": [ -92.64392700000001, 32.530823 ], "pop": 26114, "state": "LA" }, { "_id": "71275", "city": "SIMSBORO", "loc": [ -92.79948400000001, 32.538388 ], "pop": 2476, "state": "LA" }, { "_id": "71276", "city": "SONDHEIMER", "loc": [ -91.248197, 32.577216 ], "pop": 887, "state": "LA" }, { "_id": "71277", "city": "SPEARSVILLE", "loc": [ -92.58698, 32.955022 ], "pop": 2830, "state": "LA" }, { "_id": "71280", "city": "SPENCER", "loc": [ -92.12134, 32.593268 ], "pop": 14, "state": "LA" }, { "_id": "71282", "city": "MOUND", "loc": [ -91.190066, 32.402127 ], "pop": 12354, "state": "LA" }, { "_id": "71286", "city": "TRANSYLVANIA", "loc": [ -91.228813, 32.670529 ], "pop": 1067, "state": "LA" }, { "_id": "71291", "city": "WEST MONROE", "loc": [ -92.175971, 32.531726 ], "pop": 27809, "state": "LA" }, { "_id": "71292", "city": "WEST MONROE", "loc": [ -92.185445, 32.456599 ], "pop": 17851, "state": "LA" }, { "_id": "71295", "city": "WINNSBORO", "loc": [ -91.71084500000001, 32.159229 ], "pop": 14751, "state": "LA" }, { "_id": "71301", "city": "ALEXANDRIA", "loc": [ -92.46334899999999, 31.288519 ], "pop": 25040, "state": "LA" }, { "_id": "71302", "city": "ALEXANDRIA", "loc": [ -92.42416900000001, 31.268272 ], "pop": 16918, "state": "LA" }, { "_id": "71303", "city": "ALEXANDRIA", "loc": [ -92.508892, 31.304838 ], "pop": 21759, "state": "LA" }, { "_id": "71316", "city": "ACME", "loc": [ -91.821563, 31.301618 ], "pop": 173, "state": "LA" }, { "_id": "71318", "city": "BIG BEND", "loc": [ -91.84506500000001, 31.079347 ], "pop": 786, "state": "LA" }, { "_id": "71322", "city": "EOLA", "loc": [ -92.182582, 30.949284 ], "pop": 6271, "state": "LA" }, { "_id": "71323", "city": "CENTER POINT", "loc": [ -92.18786799999999, 31.263068 ], "pop": 1720, "state": "LA" }, { "_id": "71325", "city": "CHENEYVILLE", "loc": [ -92.29514399999999, 31.020097 ], "pop": 1545, "state": "LA" }, { "_id": "71326", "city": "CLAYTON", "loc": [ -91.542547, 31.78857 ], "pop": 1070, "state": "LA" }, { "_id": "71327", "city": "COTTONPORT", "loc": [ -92.05812400000001, 30.986168 ], "pop": 3190, "state": "LA" }, { "_id": "71328", "city": "BUCKEYE", "loc": [ -92.202287, 31.354506 ], "pop": 6080, "state": "LA" }, { "_id": "71331", "city": "VICK", "loc": [ -92.194182, 31.189613 ], "pop": 447, "state": "LA" }, { "_id": "71333", "city": "GOUDEAU", "loc": [ -92.090039, 30.951089 ], "pop": 919, "state": "LA" }, { "_id": "71334", "city": "FROGMORE", "loc": [ -91.571958, 31.647944 ], "pop": 9280, "state": "LA" }, { "_id": "71336", "city": "GILBERT", "loc": [ -91.592026, 32.034943 ], "pop": 793, "state": "LA" }, { "_id": "71339", "city": "HAMBURG", "loc": [ -91.916177, 31.073269 ], "pop": 481, "state": "LA" }, { "_id": "71340", "city": "HARRISONBURG", "loc": [ -91.883971, 31.766926 ], "pop": 2348, "state": "LA" }, { "_id": "71341", "city": "HESSMER", "loc": [ -92.139933, 31.0534 ], "pop": 3057, "state": "LA" }, { "_id": "71342", "city": "JENA", "loc": [ -92.113677, 31.674817 ], "pop": 5796, "state": "LA" }, { "_id": "71343", "city": "LARTO", "loc": [ -91.845812, 31.636486 ], "pop": 5507, "state": "LA" }, { "_id": "71346", "city": "LECOMPTE", "loc": [ -92.389031, 31.106032 ], "pop": 3056, "state": "LA" }, { "_id": "71350", "city": "MANSURA", "loc": [ -92.054333, 31.061466 ], "pop": 3239, "state": "LA" }, { "_id": "71351", "city": "MARKSVILLE", "loc": [ -92.083145, 31.139614 ], "pop": 11217, "state": "LA" }, { "_id": "71353", "city": "MELVILLE", "loc": [ -91.75649, 30.662643 ], "pop": 2713, "state": "LA" }, { "_id": "71354", "city": "MONTEREY", "loc": [ -91.734455, 31.440287 ], "pop": 2074, "state": "LA" }, { "_id": "71355", "city": "MOREAUVILLE", "loc": [ -91.981814, 31.036766 ], "pop": 1914, "state": "LA" }, { "_id": "71356", "city": "LE MOYEN", "loc": [ -92.040781, 30.824887 ], "pop": 404, "state": "LA" }, { "_id": "71357", "city": "NEWELLTON", "loc": [ -91.25777100000001, 32.065621 ], "pop": 3235, "state": "LA" }, { "_id": "71358", "city": "PALMETTO", "loc": [ -91.911384, 30.706543 ], "pop": 621, "state": "LA" }, { "_id": "71360", "city": "KOLIN", "loc": [ -92.399276, 31.34991 ], "pop": 37069, "state": "LA" }, { "_id": "71362", "city": "PLAUCHEVILLE", "loc": [ -91.984673, 30.936484 ], "pop": 2517, "state": "LA" }, { "_id": "71366", "city": "SAINT JOSEPH", "loc": [ -91.278432, 31.924805 ], "pop": 2073, "state": "LA" }, { "_id": "71367", "city": "SAINT LANDRY", "loc": [ -92.393846, 30.83812 ], "pop": 5679, "state": "LA" }, { "_id": "71368", "city": "SICILY ISLAND", "loc": [ -91.680711, 31.850734 ], "pop": 1568, "state": "LA" }, { "_id": "71369", "city": "SIMMESPORT", "loc": [ -91.825868, 30.977119 ], "pop": 3137, "state": "LA" }, { "_id": "71371", "city": "TROUT", "loc": [ -92.19931, 31.653142 ], "pop": 3624, "state": "LA" }, { "_id": "71373", "city": "VIDALIA", "loc": [ -91.469471, 31.578222 ], "pop": 9257, "state": "LA" }, { "_id": "71375", "city": "WATERPROOF", "loc": [ -91.387154, 31.807613 ], "pop": 1245, "state": "LA" }, { "_id": "71378", "city": "WISNER", "loc": [ -91.67679800000001, 31.991252 ], "pop": 4116, "state": "LA" }, { "_id": "71401", "city": "AIMWELL", "loc": [ -91.992491, 31.761898 ], "pop": 51, "state": "LA" }, { "_id": "71403", "city": "ANACOCO", "loc": [ -93.358949, 31.221762 ], "pop": 4978, "state": "LA" }, { "_id": "71404", "city": "ATLANTA", "loc": [ -92.76412500000001, 31.873583 ], "pop": 2466, "state": "LA" }, { "_id": "71406", "city": "BELMONT", "loc": [ -93.495863, 31.709956 ], "pop": 616, "state": "LA" }, { "_id": "71407", "city": "BENTLEY", "loc": [ -92.49272999999999, 31.466035 ], "pop": 2805, "state": "LA" }, { "_id": "71409", "city": "BOYCE", "loc": [ -92.68668099999999, 31.321601 ], "pop": 4672, "state": "LA" }, { "_id": "71411", "city": "CAMPTI", "loc": [ -93.09357199999999, 31.895851 ], "pop": 3990, "state": "LA" }, { "_id": "71412", "city": "CHOPIN", "loc": [ -92.94971700000001, 31.541916 ], "pop": 434, "state": "LA" }, { "_id": "71416", "city": "DERRY", "loc": [ -92.857326, 31.535918 ], "pop": 802, "state": "LA" }, { "_id": "71417", "city": "COLFAX", "loc": [ -92.656758, 31.507948 ], "pop": 5520, "state": "LA" }, { "_id": "71418", "city": "HEBERT", "loc": [ -92.10365299999999, 32.114794 ], "pop": 4785, "state": "LA" }, { "_id": "71419", "city": "MITCHELL", "loc": [ -93.71569, 31.785153 ], "pop": 1592, "state": "LA" }, { "_id": "71422", "city": "DODSON", "loc": [ -92.678292, 32.070131 ], "pop": 2198, "state": "LA" }, { "_id": "71423", "city": "DRY PRONG", "loc": [ -92.566479, 31.597921 ], "pop": 1993, "state": "LA" }, { "_id": "71424", "city": "ELMER", "loc": [ -92.717062, 31.146476 ], "pop": 1364, "state": "LA" }, { "_id": "71425", "city": "ENTERPRISE", "loc": [ -91.87514899999999, 31.906412 ], "pop": 124, "state": "LA" }, { "_id": "71426", "city": "FISHER", "loc": [ -93.46019699999999, 31.493655 ], "pop": 370, "state": "LA" }, { "_id": "71427", "city": "FLATWOODS", "loc": [ -92.881246, 31.384882 ], "pop": 312, "state": "LA" }, { "_id": "71429", "city": "FLORIEN", "loc": [ -93.517916, 31.427455 ], "pop": 6006, "state": "LA" }, { "_id": "71430", "city": "FOREST HILL", "loc": [ -92.51079799999999, 31.024304 ], "pop": 1804, "state": "LA" }, { "_id": "71432", "city": "GEORGETOWN", "loc": [ -92.39518200000001, 31.745006 ], "pop": 1016, "state": "LA" }, { "_id": "71433", "city": "CALCASIEU", "loc": [ -92.645758, 30.978384 ], "pop": 4204, "state": "LA" }, { "_id": "71435", "city": "GRAYSON", "loc": [ -91.974615, 32.012108 ], "pop": 324, "state": "LA" }, { "_id": "71438", "city": "LEANDER", "loc": [ -92.77488, 31.082535 ], "pop": 854, "state": "LA" }, { "_id": "71439", "city": "HORNBECK", "loc": [ -93.368306, 31.322639 ], "pop": 1352, "state": "LA" }, { "_id": "71441", "city": "KELLY", "loc": [ -92.12607199999999, 32.028619 ], "pop": 4042, "state": "LA" }, { "_id": "71444", "city": "LACAMP", "loc": [ -92.89618299999999, 31.160702 ], "pop": 276, "state": "LA" }, { "_id": "71446", "city": "HICKS", "loc": [ -93.223957, 31.144292 ], "pop": 21956, "state": "LA" }, { "_id": "71447", "city": "CHOPIN", "loc": [ -92.77185, 31.418481 ], "pop": 757, "state": "LA" }, { "_id": "71449", "city": "MANY", "loc": [ -93.464113, 31.58508 ], "pop": 6560, "state": "LA" }, { "_id": "71450", "city": "MARTHAVILLE", "loc": [ -93.395428, 31.772583 ], "pop": 932, "state": "LA" }, { "_id": "71451", "city": "MELDER", "loc": [ -92.66218600000001, 31.11932 ], "pop": 377, "state": "LA" }, { "_id": "71454", "city": "MONTGOMERY", "loc": [ -92.841178, 31.667388 ], "pop": 2263, "state": "LA" }, { "_id": "71455", "city": "CLIFTON", "loc": [ -92.888915, 31.333927 ], "pop": 443, "state": "LA" }, { "_id": "71456", "city": "NATCHEZ", "loc": [ -93.024117, 31.661502 ], "pop": 2070, "state": "LA" }, { "_id": "71457", "city": "NATCHITOCHES", "loc": [ -93.091572, 31.761688 ], "pop": 23878, "state": "LA" }, { "_id": "71459", "city": "FORT POLK", "loc": [ -93.22213000000001, 31.032068 ], "pop": 27181, "state": "LA" }, { "_id": "71461", "city": "NEWLLANO", "loc": [ -93.287899, 31.069396 ], "pop": 250, "state": "LA" }, { "_id": "71462", "city": "NOBLE", "loc": [ -93.716679, 31.693849 ], "pop": 841, "state": "LA" }, { "_id": "71463", "city": "OAKDALE", "loc": [ -92.66396400000001, 30.817173 ], "pop": 9577, "state": "LA" }, { "_id": "71465", "city": "OLLA", "loc": [ -92.22139, 31.87339 ], "pop": 3448, "state": "LA" }, { "_id": "71466", "city": "OTIS", "loc": [ -92.744478, 31.226442 ], "pop": 231, "state": "LA" }, { "_id": "71467", "city": "POLLOCK", "loc": [ -92.400536, 31.499966 ], "pop": 4328, "state": "LA" }, { "_id": "71468", "city": "PROVENCAL", "loc": [ -93.140089, 31.580117 ], "pop": 2700, "state": "LA" }, { "_id": "71469", "city": "ROBELINE", "loc": [ -93.320972, 31.771453 ], "pop": 939, "state": "LA" }, { "_id": "71472", "city": "SIEPER", "loc": [ -92.76981000000001, 31.197034 ], "pop": 474, "state": "LA" }, { "_id": "71473", "city": "SIKES", "loc": [ -92.442894, 32.068616 ], "pop": 579, "state": "LA" }, { "_id": "71477", "city": "TIOGA", "loc": [ -92.44711599999999, 31.415732 ], "pop": 2158, "state": "LA" }, { "_id": "71479", "city": "TULLOS", "loc": [ -92.301254, 31.853088 ], "pop": 1280, "state": "LA" }, { "_id": "71483", "city": "WINNFIELD", "loc": [ -92.636646, 31.921389 ], "pop": 9295, "state": "LA" }, { "_id": "71485", "city": "WOODWORTH", "loc": [ -92.49899600000001, 31.132588 ], "pop": 1932, "state": "LA" }, { "_id": "71486", "city": "ZWOLLE", "loc": [ -93.663569, 31.61379 ], "pop": 5325, "state": "LA" }, { "_id": "71601", "city": "NORTH CEDAR", "loc": [ -91.995812, 34.215405 ], "pop": 23095, "state": "AR" }, { "_id": "71602", "city": "DOLLARWAY", "loc": [ -92.089718, 34.257001 ], "pop": 15547, "state": "AR" }, { "_id": "71603", "city": "PINE BLUFF", "loc": [ -92.044786, 34.189745 ], "pop": 36473, "state": "AR" }, { "_id": "71630", "city": "ARKANSAS CITY", "loc": [ -91.232529, 33.614328 ], "pop": 7, "state": "AR" }, { "_id": "71631", "city": "BANKS", "loc": [ -92.260386, 33.549665 ], "pop": 514, "state": "AR" }, { "_id": "71635", "city": "NORTH", "loc": [ -91.959152, 33.152369 ], "pop": 14645, "state": "AR" }, { "_id": "71638", "city": "DERMOTT", "loc": [ -91.439391, 33.524054 ], "pop": 5880, "state": "AR" }, { "_id": "71639", "city": "DUMAS", "loc": [ -91.486056, 33.892102 ], "pop": 7033, "state": "AR" }, { "_id": "71640", "city": "EUDORA", "loc": [ -91.271552, 33.12135 ], "pop": 4860, "state": "AR" }, { "_id": "71642", "city": "FOUNTAIN HILL", "loc": [ -91.835627, 33.342951 ], "pop": 704, "state": "AR" }, { "_id": "71643", "city": "GOULD", "loc": [ -91.576798, 34.034503 ], "pop": 3765, "state": "AR" }, { "_id": "71644", "city": "TAMO", "loc": [ -91.67082000000001, 34.030484 ], "pop": 3768, "state": "AR" }, { "_id": "71646", "city": "HAMBURG", "loc": [ -91.80226500000001, 33.2058 ], "pop": 5422, "state": "AR" }, { "_id": "71647", "city": "INGALLS", "loc": [ -92.127714, 33.422207 ], "pop": 2150, "state": "AR" }, { "_id": "71651", "city": "JERSEY", "loc": [ -92.29661299999999, 33.388914 ], "pop": 301, "state": "AR" }, { "_id": "71652", "city": "KINGSLAND", "loc": [ -92.30141500000001, 33.86002 ], "pop": 993, "state": "AR" }, { "_id": "71653", "city": "LAKE VILLAGE", "loc": [ -91.282487, 33.327408 ], "pop": 5501, "state": "AR" }, { "_id": "71654", "city": "MC GEHEE", "loc": [ -91.392781, 33.62971 ], "pop": 6646, "state": "AR" }, { "_id": "71655", "city": "MONTICELLO", "loc": [ -91.794845, 33.624951 ], "pop": 14127, "state": "AR" }, { "_id": "71658", "city": "MONTROSE", "loc": [ -91.52277599999999, 33.307516 ], "pop": 948, "state": "AR" }, { "_id": "71660", "city": "NEW EDINBURG", "loc": [ -92.193909, 33.758846 ], "pop": 1105, "state": "AR" }, { "_id": "71661", "city": "PARKDALE", "loc": [ -91.542793, 33.121267 ], "pop": 560, "state": "AR" }, { "_id": "71662", "city": "PICKENS", "loc": [ -91.39157, 33.807923 ], "pop": 1228, "state": "AR" }, { "_id": "71663", "city": "PORTLAND", "loc": [ -91.513935, 33.231773 ], "pop": 773, "state": "AR" }, { "_id": "71665", "city": "RISON", "loc": [ -92.118762, 33.945325 ], "pop": 5669, "state": "AR" }, { "_id": "71666", "city": "ROHWER", "loc": [ -91.205124, 33.616003 ], "pop": 656, "state": "AR" }, { "_id": "71667", "city": "STAR CITY", "loc": [ -91.865343, 33.940528 ], "pop": 5913, "state": "AR" }, { "_id": "71670", "city": "REED", "loc": [ -91.520287, 33.67479 ], "pop": 739, "state": "AR" }, { "_id": "71671", "city": "WARREN", "loc": [ -92.07782400000001, 33.613983 ], "pop": 8828, "state": "AR" }, { "_id": "71674", "city": "WATSON", "loc": [ -91.28145499999999, 33.890737 ], "pop": 1003, "state": "AR" }, { "_id": "71675", "city": "WILMAR", "loc": [ -91.925697, 33.621296 ], "pop": 1293, "state": "AR" }, { "_id": "71676", "city": "WILMOT", "loc": [ -91.572283, 33.057557 ], "pop": 1267, "state": "AR" }, { "_id": "71677", "city": "WINCHESTER", "loc": [ -91.543059, 33.752039 ], "pop": 687, "state": "AR" }, { "_id": "71678", "city": "YORKTOWN", "loc": [ -91.79647199999999, 34.017166 ], "pop": 868, "state": "AR" }, { "_id": "71701", "city": "EAST CAMDEN", "loc": [ -92.833386, 33.575866 ], "pop": 22640, "state": "AR" }, { "_id": "71720", "city": "BEARDEN", "loc": [ -92.61802, 33.729797 ], "pop": 1945, "state": "AR" }, { "_id": "71722", "city": "BLUFF CITY", "loc": [ -93.18681100000001, 33.698191 ], "pop": 546, "state": "AR" }, { "_id": "71725", "city": "CARTHAGE", "loc": [ -92.62623000000001, 34.063625 ], "pop": 1255, "state": "AR" }, { "_id": "71726", "city": "READER", "loc": [ -93.018716, 33.700148 ], "pop": 1416, "state": "AR" }, { "_id": "71730", "city": "EL DORADO", "loc": [ -92.662856, 33.20735 ], "pop": 35308, "state": "AR" }, { "_id": "71740", "city": "EMERSON", "loc": [ -93.198699, 33.089054 ], "pop": 1888, "state": "AR" }, { "_id": "71742", "city": "FORDYCE", "loc": [ -92.42247500000001, 33.817648 ], "pop": 6001, "state": "AR" }, { "_id": "71743", "city": "GURDON", "loc": [ -93.14169099999999, 33.912493 ], "pop": 4180, "state": "AR" }, { "_id": "71744", "city": "HAMPTON", "loc": [ -92.52951, 33.537613 ], "pop": 3505, "state": "AR" }, { "_id": "71745", "city": "HARRELL", "loc": [ -92.391243, 33.510865 ], "pop": 846, "state": "AR" }, { "_id": "71747", "city": "HUTTIG", "loc": [ -92.194153, 33.045888 ], "pop": 1287, "state": "AR" }, { "_id": "71748", "city": "IVAN", "loc": [ -92.43940600000001, 33.902984 ], "pop": 353, "state": "AR" }, { "_id": "71749", "city": "JUNCTION CITY", "loc": [ -92.684254, 33.043965 ], "pop": 1553, "state": "AR" }, { "_id": "71751", "city": "LOUANN", "loc": [ -92.782759, 33.411744 ], "pop": 1667, "state": "AR" }, { "_id": "71752", "city": "MC NEIL", "loc": [ -93.193006, 33.36222 ], "pop": 2020, "state": "AR" }, { "_id": "71753", "city": "MAGNOLIA", "loc": [ -93.239153, 33.264678 ], "pop": 16379, "state": "AR" }, { "_id": "71758", "city": "MOUNT HOLLY", "loc": [ -92.944265, 33.308534 ], "pop": 514, "state": "AR" }, { "_id": "71759", "city": "NORPHLET", "loc": [ -92.657619, 33.309619 ], "pop": 1765, "state": "AR" }, { "_id": "71762", "city": "SMACKOVER", "loc": [ -92.74424999999999, 33.339831 ], "pop": 3554, "state": "AR" }, { "_id": "71763", "city": "MANNING", "loc": [ -92.810984, 33.902989 ], "pop": 2005, "state": "AR" }, { "_id": "71764", "city": "STEPHENS", "loc": [ -93.02139099999999, 33.455044 ], "pop": 2906, "state": "AR" }, { "_id": "71765", "city": "STRONG", "loc": [ -92.362104, 33.119526 ], "pop": 2738, "state": "AR" }, { "_id": "71766", "city": "THORNTON", "loc": [ -92.468299, 33.767694 ], "pop": 1272, "state": "AR" }, { "_id": "71767", "city": "TINSMAN", "loc": [ -92.382192, 33.643436 ], "pop": 203, "state": "AR" }, { "_id": "71769", "city": "VILLAGE", "loc": [ -93.046404, 33.281849 ], "pop": 882, "state": "AR" }, { "_id": "71770", "city": "WALDO", "loc": [ -93.294915, 33.360017 ], "pop": 2862, "state": "AR" }, { "_id": "71801", "city": "PERRYTOWN", "loc": [ -93.590305, 33.656645 ], "pop": 15955, "state": "AR" }, { "_id": "71822", "city": "ASHDOWN", "loc": [ -94.135102, 33.678711 ], "pop": 8514, "state": "AR" }, { "_id": "71825", "city": "BLEVINS", "loc": [ -93.536035, 33.875468 ], "pop": 831, "state": "AR" }, { "_id": "71826", "city": "BRADLEY", "loc": [ -93.62749599999999, 33.106963 ], "pop": 2623, "state": "AR" }, { "_id": "71827", "city": "BUCKNER", "loc": [ -93.44699799999999, 33.375323 ], "pop": 1364, "state": "AR" }, { "_id": "71828", "city": "CALE", "loc": [ -93.26497000000001, 33.616403 ], "pop": 230, "state": "AR" }, { "_id": "71831", "city": "COLUMBUS", "loc": [ -93.85588, 33.745108 ], "pop": 739, "state": "AR" }, { "_id": "71832", "city": "DE QUEEN", "loc": [ -94.338559, 34.044206 ], "pop": 7593, "state": "AR" }, { "_id": "71833", "city": "DIERKS", "loc": [ -94.015243, 34.13232 ], "pop": 2284, "state": "AR" }, { "_id": "71834", "city": "DODDRIDGE", "loc": [ -93.954307, 33.105448 ], "pop": 1435, "state": "AR" }, { "_id": "71835", "city": "EMMET", "loc": [ -93.423242, 33.692896 ], "pop": 1141, "state": "AR" }, { "_id": "71836", "city": "FOREMAN", "loc": [ -94.388108, 33.71759 ], "pop": 2740, "state": "AR" }, { "_id": "71837", "city": "FOUKE", "loc": [ -93.900953, 33.302476 ], "pop": 5895, "state": "AR" }, { "_id": "71838", "city": "FULTON", "loc": [ -93.80856199999999, 33.629876 ], "pop": 925, "state": "AR" }, { "_id": "71839", "city": "GARLAND CITY", "loc": [ -93.731624, 33.335161 ], "pop": 666, "state": "AR" }, { "_id": "71841", "city": "GILLHAM", "loc": [ -94.316497, 34.157003 ], "pop": 853, "state": "AR" }, { "_id": "71842", "city": "HORATIO", "loc": [ -94.295942, 33.939221 ], "pop": 2952, "state": "AR" }, { "_id": "71845", "city": "LEWISVILLE", "loc": [ -93.595258, 33.373603 ], "pop": 2550, "state": "AR" }, { "_id": "71846", "city": "LOCKESBURG", "loc": [ -94.127588, 33.930553 ], "pop": 2239, "state": "AR" }, { "_id": "71847", "city": "MC CASKILL", "loc": [ -93.626605, 33.923042 ], "pop": 658, "state": "AR" }, { "_id": "71851", "city": "MINERAL SPRINGS", "loc": [ -93.918828, 33.863852 ], "pop": 2732, "state": "AR" }, { "_id": "71852", "city": "NASHVILLE", "loc": [ -93.87070900000001, 33.957646 ], "pop": 7625, "state": "AR" }, { "_id": "71853", "city": "OGDEN", "loc": [ -94.027826, 33.585706 ], "pop": 779, "state": "AR" }, { "_id": "71855", "city": "OZAN", "loc": [ -93.771443, 33.902775 ], "pop": 1695, "state": "AR" }, { "_id": "71857", "city": "PRESCOTT", "loc": [ -93.372544, 33.804029 ], "pop": 5732, "state": "AR" }, { "_id": "71858", "city": "ROSSTON", "loc": [ -93.30389099999999, 33.561693 ], "pop": 1561, "state": "AR" }, { "_id": "71859", "city": "SARATOGA", "loc": [ -93.876723, 33.759883 ], "pop": 281, "state": "AR" }, { "_id": "71860", "city": "STAMPS", "loc": [ -93.501307, 33.356877 ], "pop": 3106, "state": "AR" }, { "_id": "71861", "city": "TAYLOR", "loc": [ -93.44601900000001, 33.107957 ], "pop": 1660, "state": "AR" }, { "_id": "71862", "city": "WASHINGTON", "loc": [ -93.673529, 33.754596 ], "pop": 821, "state": "AR" }, { "_id": "71864", "city": "WILLISVILLE", "loc": [ -93.31211999999999, 33.484731 ], "pop": 888, "state": "AR" }, { "_id": "71865", "city": "WILTON", "loc": [ -94.135746, 33.734794 ], "pop": 983, "state": "AR" }, { "_id": "71866", "city": "WINTHROP", "loc": [ -94.395174, 33.858321 ], "pop": 950, "state": "AR" }, { "_id": "71901", "city": "LAKE CATHERINE", "loc": [ -93.02602400000001, 34.501475 ], "pop": 27402, "state": "AR" }, { "_id": "71909", "city": "HOT SPRINGS VILL", "loc": [ -93.00638600000001, 34.65862 ], "pop": 8268, "state": "AR" }, { "_id": "71913", "city": "LAKE HAMILTON", "loc": [ -93.109177, 34.473304 ], "pop": 31048, "state": "AR" }, { "_id": "71921", "city": "AMITY", "loc": [ -93.420551, 34.259362 ], "pop": 1569, "state": "AR" }, { "_id": "71922", "city": "ANTOINE", "loc": [ -93.437169, 34.028296 ], "pop": 474, "state": "AR" }, { "_id": "71923", "city": "ARKADELPHIA", "loc": [ -93.068989, 34.11525 ], "pop": 14961, "state": "AR" }, { "_id": "71929", "city": "BISMARCK", "loc": [ -93.187236, 34.311033 ], "pop": 1291, "state": "AR" }, { "_id": "71931", "city": "BLAKELY", "loc": [ -93.063509, 34.703957 ], "pop": 271, "state": "AR" }, { "_id": "71933", "city": "BONNERDALE", "loc": [ -93.31941500000001, 34.349751 ], "pop": 1037, "state": "AR" }, { "_id": "71935", "city": "CADDO GAP", "loc": [ -93.586376, 34.397579 ], "pop": 2257, "state": "AR" }, { "_id": "71937", "city": "COVE", "loc": [ -94.39234, 34.419159 ], "pop": 1681, "state": "AR" }, { "_id": "71940", "city": "DELIGHT", "loc": [ -93.524666, 34.023772 ], "pop": 1529, "state": "AR" }, { "_id": "71941", "city": "DONALDSON", "loc": [ -92.909384, 34.221221 ], "pop": 748, "state": "AR" }, { "_id": "71942", "city": "FRIENDSHIP", "loc": [ -92.98039300000001, 34.241225 ], "pop": 626, "state": "AR" }, { "_id": "71943", "city": "GLENWOOD", "loc": [ -93.555881, 34.319207 ], "pop": 2720, "state": "AR" }, { "_id": "71944", "city": "GRANNIS", "loc": [ -94.32550000000001, 34.237021 ], "pop": 751, "state": "AR" }, { "_id": "71945", "city": "HATFIELD", "loc": [ -94.371397, 34.487703 ], "pop": 1048, "state": "AR" }, { "_id": "71949", "city": "JESSIEVILLE", "loc": [ -93.19631800000001, 34.693729 ], "pop": 931, "state": "AR" }, { "_id": "71950", "city": "KIRBY", "loc": [ -93.616716, 34.255153 ], "pop": 973, "state": "AR" }, { "_id": "71952", "city": "LANGLEY", "loc": [ -93.850942, 34.314035 ], "pop": 215, "state": "AR" }, { "_id": "71953", "city": "MENA", "loc": [ -94.220984, 34.581435 ], "pop": 12505, "state": "AR" }, { "_id": "71956", "city": "BUCKVILLE", "loc": [ -93.16004100000001, 34.577182 ], "pop": 1857, "state": "AR" }, { "_id": "71957", "city": "MOUNT IDA", "loc": [ -93.574904, 34.561194 ], "pop": 3052, "state": "AR" }, { "_id": "71958", "city": "MURFREESBORO", "loc": [ -93.710903, 34.101734 ], "pop": 3775, "state": "AR" }, { "_id": "71959", "city": "NEWHOPE", "loc": [ -93.89048699999999, 34.227347 ], "pop": 400, "state": "AR" }, { "_id": "71960", "city": "NORMAN", "loc": [ -93.67430400000001, 34.459633 ], "pop": 688, "state": "AR" }, { "_id": "71961", "city": "ODEN", "loc": [ -93.82110299999999, 34.611292 ], "pop": 710, "state": "AR" }, { "_id": "71962", "city": "OKOLONA", "loc": [ -93.28967900000001, 34.055138 ], "pop": 985, "state": "AR" }, { "_id": "71964", "city": "PEARCY", "loc": [ -93.24201499999999, 34.435092 ], "pop": 3215, "state": "AR" }, { "_id": "71965", "city": "PENCIL BLUFF", "loc": [ -93.742947, 34.639946 ], "pop": 323, "state": "AR" }, { "_id": "71968", "city": "ROYAL", "loc": [ -93.289734, 34.515049 ], "pop": 1099, "state": "AR" }, { "_id": "71969", "city": "SIMS", "loc": [ -93.674071, 34.646181 ], "pop": 461, "state": "AR" }, { "_id": "71970", "city": "STORY", "loc": [ -93.537587, 34.668695 ], "pop": 350, "state": "AR" }, { "_id": "71971", "city": "UMPIRE", "loc": [ -94.03137700000001, 34.292129 ], "pop": 647, "state": "AR" }, { "_id": "71972", "city": "VANDERVOORT", "loc": [ -94.369788, 34.379535 ], "pop": 323, "state": "AR" }, { "_id": "71973", "city": "WICKES", "loc": [ -94.34025699999999, 34.308806 ], "pop": 1273, "state": "AR" }, { "_id": "72001", "city": "ADONA", "loc": [ -92.903325, 35.046956 ], "pop": 494, "state": "AR" }, { "_id": "72002", "city": "ALEXANDER", "loc": [ -92.472673, 34.631266 ], "pop": 7984, "state": "AR" }, { "_id": "72003", "city": "ALMYRA", "loc": [ -91.430992, 34.41459 ], "pop": 626, "state": "AR" }, { "_id": "72004", "city": "ALTHEIMER", "loc": [ -91.82891600000001, 34.306168 ], "pop": 1929, "state": "AR" }, { "_id": "72005", "city": "AMAGON", "loc": [ -91.07963599999999, 35.561559 ], "pop": 457, "state": "AR" }, { "_id": "72006", "city": "AUGUSTA", "loc": [ -91.352653, 35.278806 ], "pop": 3702, "state": "AR" }, { "_id": "72007", "city": "AUSTIN", "loc": [ -91.95939799999999, 35.028369 ], "pop": 1741, "state": "AR" }, { "_id": "72010", "city": "BALD KNOB", "loc": [ -91.550197, 35.311331 ], "pop": 5132, "state": "AR" }, { "_id": "72011", "city": "BAUXITE", "loc": [ -92.36053099999999, 34.545537 ], "pop": 6956, "state": "AR" }, { "_id": "72012", "city": "BEEBE", "loc": [ -91.907449, 35.093743 ], "pop": 7862, "state": "AR" }, { "_id": "72013", "city": "BEE BRANCH", "loc": [ -92.408523, 35.423367 ], "pop": 1344, "state": "AR" }, { "_id": "72014", "city": "BEEDEVILLE", "loc": [ -91.106371, 35.420267 ], "pop": 518, "state": "AR" }, { "_id": "72015", "city": "BENTON", "loc": [ -92.595241, 34.580087 ], "pop": 36525, "state": "AR" }, { "_id": "72016", "city": "BIGELOW", "loc": [ -92.630842, 34.984659 ], "pop": 2001, "state": "AR" }, { "_id": "72017", "city": "BISCOE", "loc": [ -91.490028, 34.833706 ], "pop": 1348, "state": "AR" }, { "_id": "72020", "city": "BRADFORD", "loc": [ -91.518973, 35.427655 ], "pop": 3546, "state": "AR" }, { "_id": "72021", "city": "BRINKLEY", "loc": [ -91.188596, 34.878124 ], "pop": 6313, "state": "AR" }, { "_id": "72022", "city": "BRYANT", "loc": [ -92.49201499999999, 34.606786 ], "pop": 6065, "state": "AR" }, { "_id": "72023", "city": "CABOT", "loc": [ -92.03177100000001, 34.945724 ], "pop": 21197, "state": "AR" }, { "_id": "72024", "city": "CARLISLE", "loc": [ -91.745929, 34.793291 ], "pop": 2904, "state": "AR" }, { "_id": "72025", "city": "CASA", "loc": [ -93.047005, 35.032168 ], "pop": 649, "state": "AR" }, { "_id": "72026", "city": "CASSCOE", "loc": [ -91.324798, 34.473625 ], "pop": 1033, "state": "AR" }, { "_id": "72027", "city": "CENTER RIDGE", "loc": [ -92.558167, 35.398063 ], "pop": 981, "state": "AR" }, { "_id": "72028", "city": "CHOCTAW", "loc": [ -92.426412, 35.523528 ], "pop": 1091, "state": "AR" }, { "_id": "72029", "city": "CLARENDON", "loc": [ -91.256426, 34.660138 ], "pop": 3211, "state": "AR" }, { "_id": "72030", "city": "CLEVELAND", "loc": [ -92.71282100000001, 35.358328 ], "pop": 1244, "state": "AR" }, { "_id": "72031", "city": "CLINTON", "loc": [ -92.475825, 35.604537 ], "pop": 4098, "state": "AR" }, { "_id": "72032", "city": "CONWAY", "loc": [ -92.423574, 35.084199 ], "pop": 43236, "state": "AR" }, { "_id": "72036", "city": "COTTON PLANT", "loc": [ -91.229043, 35.017827 ], "pop": 1789, "state": "AR" }, { "_id": "72038", "city": "CROCKETTS BLUFF", "loc": [ -91.232079, 34.425272 ], "pop": 132, "state": "AR" }, { "_id": "72039", "city": "TWIN GROVES", "loc": [ -92.432952, 35.291042 ], "pop": 1605, "state": "AR" }, { "_id": "72040", "city": "DES ARC", "loc": [ -91.511342, 34.97507 ], "pop": 3446, "state": "AR" }, { "_id": "72041", "city": "DE VALLS BLUFF", "loc": [ -91.49821799999999, 34.744704 ], "pop": 1854, "state": "AR" }, { "_id": "72042", "city": "DE WITT", "loc": [ -91.33362700000001, 34.285312 ], "pop": 5320, "state": "AR" }, { "_id": "72044", "city": "EDGEMONT", "loc": [ -92.199471, 35.623006 ], "pop": 487, "state": "AR" }, { "_id": "72045", "city": "EL PASO", "loc": [ -92.090076, 35.114176 ], "pop": 580, "state": "AR" }, { "_id": "72046", "city": "ENGLAND", "loc": [ -91.94842199999999, 34.557458 ], "pop": 5254, "state": "AR" }, { "_id": "72047", "city": "ENOLA", "loc": [ -92.212328, 35.208705 ], "pop": 500, "state": "AR" }, { "_id": "72048", "city": "ETHEL", "loc": [ -91.13983899999999, 34.243525 ], "pop": 27, "state": "AR" }, { "_id": "72051", "city": "FOX", "loc": [ -92.304266, 35.768208 ], "pop": 960, "state": "AR" }, { "_id": "72052", "city": "GARNER", "loc": [ -91.742884, 35.130305 ], "pop": 618, "state": "AR" }, { "_id": "72055", "city": "GILLETT", "loc": [ -91.380048, 34.121838 ], "pop": 925, "state": "AR" }, { "_id": "72057", "city": "GRAPEVINE", "loc": [ -92.31094400000001, 34.130893 ], "pop": 591, "state": "AR" }, { "_id": "72058", "city": "GREENBRIER", "loc": [ -92.357792, 35.229547 ], "pop": 5532, "state": "AR" }, { "_id": "72060", "city": "GRIFFITHVILLE", "loc": [ -91.624234, 35.114383 ], "pop": 582, "state": "AR" }, { "_id": "72061", "city": "GUY", "loc": [ -92.33153900000001, 35.318487 ], "pop": 1026, "state": "AR" }, { "_id": "72063", "city": "HATTIEVILLE", "loc": [ -92.778317, 35.290713 ], "pop": 360, "state": "AR" }, { "_id": "72064", "city": "HAZEN", "loc": [ -91.576699, 34.783833 ], "pop": 1841, "state": "AR" }, { "_id": "72065", "city": "HENSLEY", "loc": [ -92.21401899999999, 34.591133 ], "pop": 3696, "state": "AR" }, { "_id": "72066", "city": "HICKORY PLAINS", "loc": [ -91.750844, 34.978642 ], "pop": 522, "state": "AR" }, { "_id": "72067", "city": "GREERS FERRY", "loc": [ -92.182284, 35.549812 ], "pop": 1802, "state": "AR" }, { "_id": "72068", "city": "HIGGINSON", "loc": [ -91.71827999999999, 35.188254 ], "pop": 786, "state": "AR" }, { "_id": "72069", "city": "HOLLY GROVE", "loc": [ -91.184376, 34.599294 ], "pop": 1417, "state": "AR" }, { "_id": "72070", "city": "HOUSTON", "loc": [ -92.69131899999999, 35.036209 ], "pop": 642, "state": "AR" }, { "_id": "72072", "city": "HUMNOKE", "loc": [ -91.75661599999999, 34.541896 ], "pop": 992, "state": "AR" }, { "_id": "72073", "city": "HUMPHREY", "loc": [ -91.67896, 34.403387 ], "pop": 851, "state": "AR" }, { "_id": "72076", "city": "GRAVEL RIDGE", "loc": [ -92.13043500000001, 34.881985 ], "pop": 37428, "state": "AR" }, { "_id": "72079", "city": "JEFFERSON", "loc": [ -92.148574, 34.355285 ], "pop": 1682, "state": "AR" }, { "_id": "72080", "city": "JERUSALEM", "loc": [ -92.813886, 35.37975 ], "pop": 765, "state": "AR" }, { "_id": "72081", "city": "JUDSONIA", "loc": [ -91.64908699999999, 35.324954 ], "pop": 7033, "state": "AR" }, { "_id": "72082", "city": "KENSETT", "loc": [ -91.66967200000001, 35.229939 ], "pop": 2123, "state": "AR" }, { "_id": "72083", "city": "KEO", "loc": [ -92.00784400000001, 34.604072 ], "pop": 278, "state": "AR" }, { "_id": "72084", "city": "LEOLA", "loc": [ -92.597865, 34.185605 ], "pop": 769, "state": "AR" }, { "_id": "72086", "city": "LONOKE", "loc": [ -91.921367, 34.783162 ], "pop": 6733, "state": "AR" }, { "_id": "72087", "city": "LONSDALE", "loc": [ -92.834034, 34.556203 ], "pop": 456, "state": "AR" }, { "_id": "72101", "city": "MC CRORY", "loc": [ -91.179327, 35.247292 ], "pop": 4029, "state": "AR" }, { "_id": "72102", "city": "MC RAE", "loc": [ -91.821551, 35.11322 ], "pop": 1095, "state": "AR" }, { "_id": "72103", "city": "SHANNON HILLS", "loc": [ -92.384618, 34.621756 ], "pop": 8853, "state": "AR" }, { "_id": "72104", "city": "MALVERN", "loc": [ -92.829162, 34.355715 ], "pop": 20257, "state": "AR" }, { "_id": "72105", "city": "JONES MILLS", "loc": [ -92.861975, 34.453624 ], "pop": 1896, "state": "AR" }, { "_id": "72106", "city": "MAYFLOWER", "loc": [ -92.400102, 34.966853 ], "pop": 3593, "state": "AR" }, { "_id": "72110", "city": "MORRILTON", "loc": [ -92.73543600000001, 35.169227 ], "pop": 12976, "state": "AR" }, { "_id": "72111", "city": "MOUNT VERNON", "loc": [ -92.137334, 35.260613 ], "pop": 534, "state": "AR" }, { "_id": "72112", "city": "NEWPORT", "loc": [ -91.257064, 35.598823 ], "pop": 13502, "state": "AR" }, { "_id": "72113", "city": "MAUMELLE", "loc": [ -92.40589199999999, 34.849085 ], "pop": 4806, "state": "AR" }, { "_id": "72114", "city": "NORTH LITTLE ROC", "loc": [ -92.265376, 34.766974 ], "pop": 15485, "state": "AR" }, { "_id": "72116", "city": "SHERWOOD", "loc": [ -92.237359, 34.807629 ], "pop": 29871, "state": "AR" }, { "_id": "72117", "city": "NORTH LITTLE ROC", "loc": [ -92.194604, 34.776305 ], "pop": 12736, "state": "AR" }, { "_id": "72118", "city": "CAMP JOSEPH T RO", "loc": [ -92.307875, 34.821598 ], "pop": 26442, "state": "AR" }, { "_id": "72120", "city": "NORTH LITTLE ROC", "loc": [ -92.214169, 34.859292 ], "pop": 15389, "state": "AR" }, { "_id": "72121", "city": "PANGBURN", "loc": [ -91.79597099999999, 35.421583 ], "pop": 1996, "state": "AR" }, { "_id": "72122", "city": "PARON", "loc": [ -92.748176, 34.785289 ], "pop": 484, "state": "AR" }, { "_id": "72125", "city": "PERRY", "loc": [ -92.787976, 35.042732 ], "pop": 648, "state": "AR" }, { "_id": "72126", "city": "PERRYVILLE", "loc": [ -92.847171, 34.970096 ], "pop": 3851, "state": "AR" }, { "_id": "72127", "city": "PLUMERVILLE", "loc": [ -92.620435, 35.157466 ], "pop": 1940, "state": "AR" }, { "_id": "72128", "city": "POYEN", "loc": [ -92.599037, 34.350828 ], "pop": 1753, "state": "AR" }, { "_id": "72129", "city": "PRATTSVILLE", "loc": [ -92.513105, 34.307865 ], "pop": 860, "state": "AR" }, { "_id": "72130", "city": "PRIM", "loc": [ -92.134596, 35.685733 ], "pop": 74, "state": "AR" }, { "_id": "72131", "city": "QUITMAN", "loc": [ -92.133334, 35.404988 ], "pop": 3043, "state": "AR" }, { "_id": "72132", "city": "REDFIELD", "loc": [ -92.17579000000001, 34.452647 ], "pop": 1888, "state": "AR" }, { "_id": "72133", "city": "REYDELL", "loc": [ -91.55039499999999, 34.143281 ], "pop": 150, "state": "AR" }, { "_id": "72134", "city": "ROE", "loc": [ -91.37705800000001, 34.628592 ], "pop": 392, "state": "AR" }, { "_id": "72135", "city": "ROLAND", "loc": [ -92.51915200000001, 34.88287 ], "pop": 1824, "state": "AR" }, { "_id": "72136", "city": "ROMANCE", "loc": [ -92.06985, 35.215462 ], "pop": 576, "state": "AR" }, { "_id": "72137", "city": "ROSE BUD", "loc": [ -92.061988, 35.321447 ], "pop": 891, "state": "AR" }, { "_id": "72140", "city": "SAINT CHARLES", "loc": [ -91.16808, 34.335296 ], "pop": 607, "state": "AR" }, { "_id": "72141", "city": "SCOTLAND", "loc": [ -92.586652, 35.507956 ], "pop": 1276, "state": "AR" }, { "_id": "72142", "city": "SCOTT", "loc": [ -92.11566000000001, 34.694215 ], "pop": 1027, "state": "AR" }, { "_id": "72143", "city": "GEORGETOWN", "loc": [ -91.76293099999999, 35.253512 ], "pop": 22586, "state": "AR" }, { "_id": "72150", "city": "SHERIDAN", "loc": [ -92.365713, 34.316527 ], "pop": 9714, "state": "AR" }, { "_id": "72152", "city": "SHERRILL", "loc": [ -91.993285, 34.358148 ], "pop": 615, "state": "AR" }, { "_id": "72153", "city": "SHIRLEY", "loc": [ -92.29751, 35.573259 ], "pop": 4841, "state": "AR" }, { "_id": "72156", "city": "SOLGOHACHIA", "loc": [ -92.675387, 35.270056 ], "pop": 133, "state": "AR" }, { "_id": "72157", "city": "SPRINGFIELD", "loc": [ -92.54567, 35.274879 ], "pop": 752, "state": "AR" }, { "_id": "72160", "city": "STUTTGART", "loc": [ -91.548742, 34.485358 ], "pop": 11801, "state": "AR" }, { "_id": "72165", "city": "THIDA", "loc": [ -91.461823, 35.553556 ], "pop": 616, "state": "AR" }, { "_id": "72166", "city": "TICHNOR", "loc": [ -91.243684, 34.089311 ], "pop": 331, "state": "AR" }, { "_id": "72167", "city": "TRASKWOOD", "loc": [ -92.654734, 34.450791 ], "pop": 606, "state": "AR" }, { "_id": "72168", "city": "TUCKER", "loc": [ -91.916265, 34.441442 ], "pop": 2170, "state": "AR" }, { "_id": "72170", "city": "ULM", "loc": [ -91.51343, 34.579938 ], "pop": 507, "state": "AR" }, { "_id": "72173", "city": "VILONIA", "loc": [ -92.183235, 35.071895 ], "pop": 2492, "state": "AR" }, { "_id": "72175", "city": "WABBASEKA", "loc": [ -91.754948, 34.393552 ], "pop": 1021, "state": "AR" }, { "_id": "72176", "city": "WARD", "loc": [ -91.90038300000001, 34.95316 ], "pop": 3503, "state": "AR" }, { "_id": "72179", "city": "WILBURN", "loc": [ -91.907248, 35.454547 ], "pop": 1924, "state": "AR" }, { "_id": "72181", "city": "WOOSTER", "loc": [ -92.450998, 35.197308 ], "pop": 1264, "state": "AR" }, { "_id": "72182", "city": "WRIGHT", "loc": [ -92.06308, 34.437656 ], "pop": 302, "state": "AR" }, { "_id": "72201", "city": "LITTLE ROCK", "loc": [ -92.28193899999999, 34.748342 ], "pop": 539, "state": "AR" }, { "_id": "72202", "city": "LITTLE ROCK", "loc": [ -92.274067, 34.736322 ], "pop": 11686, "state": "AR" }, { "_id": "72204", "city": "LITTLE ROCK", "loc": [ -92.344041, 34.726904 ], "pop": 33104, "state": "AR" }, { "_id": "72205", "city": "LITTLE ROCK", "loc": [ -92.345512, 34.750971 ], "pop": 25156, "state": "AR" }, { "_id": "72206", "city": "LITTLE ROCK", "loc": [ -92.27760600000001, 34.683599 ], "pop": 27367, "state": "AR" }, { "_id": "72207", "city": "LITTLE ROCK", "loc": [ -92.356481, 34.772121 ], "pop": 25217, "state": "AR" }, { "_id": "72208", "city": "FERNDALE", "loc": [ -92.585581, 34.781575 ], "pop": 458, "state": "AR" }, { "_id": "72209", "city": "LITTLE ROCK", "loc": [ -92.352919, 34.672509 ], "pop": 35211, "state": "AR" }, { "_id": "72210", "city": "LITTLE ROCK", "loc": [ -92.465981, 34.707625 ], "pop": 4426, "state": "AR" }, { "_id": "72211", "city": "LITTLE ROCK", "loc": [ -92.431485, 34.758819 ], "pop": 14006, "state": "AR" }, { "_id": "72212", "city": "LITTLE ROCK", "loc": [ -92.42223199999999, 34.787076 ], "pop": 16183, "state": "AR" }, { "_id": "72301", "city": "WEST MEMPHIS", "loc": [ -90.17792, 35.148442 ], "pop": 28720, "state": "AR" }, { "_id": "72310", "city": "ARMOREL", "loc": [ -89.758118, 35.942843 ], "pop": 444, "state": "AR" }, { "_id": "72311", "city": "AUBREY", "loc": [ -90.911331, 34.702727 ], "pop": 901, "state": "AR" }, { "_id": "72313", "city": "BASSETT", "loc": [ -90.192155, 35.513808 ], "pop": 1147, "state": "AR" }, { "_id": "72314", "city": "BIRDEYE", "loc": [ -90.67074, 35.409571 ], "pop": 505, "state": "AR" }, { "_id": "72315", "city": "BLYTHEVILLE A F", "loc": [ -89.92249700000001, 35.934482 ], "pop": 30944, "state": "AR" }, { "_id": "72320", "city": "BRICKEYS", "loc": [ -90.537738, 34.854814 ], "pop": 458, "state": "AR" }, { "_id": "72321", "city": "BURDETTE", "loc": [ -89.942312, 35.814769 ], "pop": 329, "state": "AR" }, { "_id": "72324", "city": "CHERRY VALLEY", "loc": [ -90.761329, 35.399122 ], "pop": 1273, "state": "AR" }, { "_id": "72326", "city": "COLT", "loc": [ -90.787204, 35.096062 ], "pop": 3755, "state": "AR" }, { "_id": "72327", "city": "CRAWFORDSVILLE", "loc": [ -90.33510699999999, 35.211873 ], "pop": 1834, "state": "AR" }, { "_id": "72328", "city": "CRUMROD", "loc": [ -90.949535, 34.216167 ], "pop": 514, "state": "AR" }, { "_id": "72329", "city": "DRIVER", "loc": [ -89.960526, 35.559714 ], "pop": 25, "state": "AR" }, { "_id": "72330", "city": "DYESS", "loc": [ -90.215716, 35.595394 ], "pop": 912, "state": "AR" }, { "_id": "72331", "city": "EARLE", "loc": [ -90.450261, 35.27989 ], "pop": 5009, "state": "AR" }, { "_id": "72332", "city": "EDMONDSON", "loc": [ -90.328672, 35.022309 ], "pop": 2435, "state": "AR" }, { "_id": "72333", "city": "ELAINE", "loc": [ -90.873485, 34.308668 ], "pop": 1366, "state": "AR" }, { "_id": "72335", "city": "FORREST CITY", "loc": [ -90.788572, 35.009129 ], "pop": 17751, "state": "AR" }, { "_id": "72338", "city": "FRENCHMANS BAYOU", "loc": [ -90.055933, 35.478419 ], "pop": 34, "state": "AR" }, { "_id": "72339", "city": "GILMORE", "loc": [ -90.264664, 35.386408 ], "pop": 1852, "state": "AR" }, { "_id": "72340", "city": "GOODWIN", "loc": [ -90.983518, 34.959149 ], "pop": 597, "state": "AR" }, { "_id": "72341", "city": "HAYNES", "loc": [ -90.766621, 34.883752 ], "pop": 552, "state": "AR" }, { "_id": "72342", "city": "HELENA", "loc": [ -90.629784, 34.532491 ], "pop": 9515, "state": "AR" }, { "_id": "72346", "city": "HETH", "loc": [ -90.45855400000001, 35.097335 ], "pop": 859, "state": "AR" }, { "_id": "72347", "city": "HICKORY RIDGE", "loc": [ -90.982283, 35.399457 ], "pop": 754, "state": "AR" }, { "_id": "72348", "city": "HUGHES", "loc": [ -90.474142, 34.945416 ], "pop": 2477, "state": "AR" }, { "_id": "72350", "city": "JOINER", "loc": [ -90.14779, 35.505239 ], "pop": 986, "state": "AR" }, { "_id": "72351", "city": "KEISER", "loc": [ -90.096171, 35.678626 ], "pop": 980, "state": "AR" }, { "_id": "72354", "city": "LEPANTO", "loc": [ -90.335883, 35.606909 ], "pop": 2023, "state": "AR" }, { "_id": "72355", "city": "LEXA", "loc": [ -90.78532, 34.672694 ], "pop": 903, "state": "AR" }, { "_id": "72358", "city": "LUXORA", "loc": [ -89.92204, 35.760786 ], "pop": 1593, "state": "AR" }, { "_id": "72360", "city": "MARIANNA", "loc": [ -90.77852, 34.775929 ], "pop": 8668, "state": "AR" }, { "_id": "72364", "city": "MARION", "loc": [ -90.198908, 35.2077 ], "pop": 7891, "state": "AR" }, { "_id": "72365", "city": "MARKED TREE", "loc": [ -90.419387, 35.534933 ], "pop": 5144, "state": "AR" }, { "_id": "72366", "city": "MARVELL", "loc": [ -90.941322, 34.548541 ], "pop": 2733, "state": "AR" }, { "_id": "72367", "city": "MELLWOOD", "loc": [ -91.008589, 34.220032 ], "pop": 61, "state": "AR" }, { "_id": "72368", "city": "MORO", "loc": [ -91.00602600000001, 34.802953 ], "pop": 1571, "state": "AR" }, { "_id": "72369", "city": "ONEIDA", "loc": [ -90.82604499999999, 34.405267 ], "pop": 918, "state": "AR" }, { "_id": "72370", "city": "OSCEOLA", "loc": [ -89.979764, 35.701864 ], "pop": 10119, "state": "AR" }, { "_id": "72372", "city": "PALESTINE", "loc": [ -90.904929, 34.966346 ], "pop": 1371, "state": "AR" }, { "_id": "72373", "city": "PARKIN", "loc": [ -90.556417, 35.258557 ], "pop": 2437, "state": "AR" }, { "_id": "72374", "city": "POPLAR GROVE", "loc": [ -90.881274, 34.539397 ], "pop": 1466, "state": "AR" }, { "_id": "72376", "city": "PROCTOR", "loc": [ -90.255026, 35.083396 ], "pop": 953, "state": "AR" }, { "_id": "72379", "city": "SNOW LAKE", "loc": [ -91.00708299999999, 34.066466 ], "pop": 225, "state": "AR" }, { "_id": "72381", "city": "TOMATO", "loc": [ -89.787092, 35.806666 ], "pop": 0, "state": "AR" }, { "_id": "72384", "city": "TURRELL", "loc": [ -90.262979, 35.296936 ], "pop": 1308, "state": "AR" }, { "_id": "72386", "city": "TYRONZA", "loc": [ -90.351944, 35.486477 ], "pop": 1230, "state": "AR" }, { "_id": "72390", "city": "WEST HELENA", "loc": [ -90.65453100000001, 34.549635 ], "pop": 12265, "state": "AR" }, { "_id": "72392", "city": "WHEATLEY", "loc": [ -91.108645, 34.920703 ], "pop": 542, "state": "AR" }, { "_id": "72394", "city": "WIDENER", "loc": [ -90.629313, 35.059167 ], "pop": 1145, "state": "AR" }, { "_id": "72395", "city": "WILSON", "loc": [ -90.042749, 35.566004 ], "pop": 1185, "state": "AR" }, { "_id": "72396", "city": "WYNNE", "loc": [ -90.79303, 35.233036 ], "pop": 13908, "state": "AR" }, { "_id": "72397", "city": "FAIR OAKS", "loc": [ -91.014304, 35.236817 ], "pop": 285, "state": "AR" }, { "_id": "72401", "city": "JONESBORO", "loc": [ -90.69652600000001, 35.833016 ], "pop": 53532, "state": "AR" }, { "_id": "72410", "city": "ALICIA", "loc": [ -91.081003, 35.942327 ], "pop": 725, "state": "AR" }, { "_id": "72411", "city": "BAY", "loc": [ -90.550658, 35.74559 ], "pop": 2527, "state": "AR" }, { "_id": "72412", "city": "BEECH GROVE", "loc": [ -90.618084, 36.183172 ], "pop": 292, "state": "AR" }, { "_id": "72413", "city": "BIGGERS", "loc": [ -90.78446700000001, 36.342978 ], "pop": 1060, "state": "AR" }, { "_id": "72414", "city": "BLACK OAK", "loc": [ -90.35422699999999, 35.835851 ], "pop": 518, "state": "AR" }, { "_id": "72415", "city": "BLACK ROCK", "loc": [ -91.11762899999999, 36.114874 ], "pop": 1190, "state": "AR" }, { "_id": "72416", "city": "BONO", "loc": [ -90.78475299999999, 35.908592 ], "pop": 3030, "state": "AR" }, { "_id": "72417", "city": "BROOKLAND", "loc": [ -90.576228, 35.91647 ], "pop": 1896, "state": "AR" }, { "_id": "72419", "city": "CARAWAY", "loc": [ -90.335797, 35.758951 ], "pop": 2214, "state": "AR" }, { "_id": "72421", "city": "CASH", "loc": [ -90.941007, 35.830145 ], "pop": 628, "state": "AR" }, { "_id": "72422", "city": "CORNING", "loc": [ -90.58702, 36.415532 ], "pop": 5469, "state": "AR" }, { "_id": "72424", "city": "DATTO", "loc": [ -90.723117, 36.389685 ], "pop": 308, "state": "AR" }, { "_id": "72425", "city": "DELAPLAINE", "loc": [ -90.734482, 36.199485 ], "pop": 719, "state": "AR" }, { "_id": "72426", "city": "DELL", "loc": [ -90.035449, 35.850118 ], "pop": 832, "state": "AR" }, { "_id": "72428", "city": "ETOWAH", "loc": [ -90.218172, 35.714707 ], "pop": 1330, "state": "AR" }, { "_id": "72429", "city": "FISHER", "loc": [ -90.955001, 35.513956 ], "pop": 907, "state": "AR" }, { "_id": "72430", "city": "GREENWAY", "loc": [ -90.225257, 36.334766 ], "pop": 529, "state": "AR" }, { "_id": "72432", "city": "HARRISBURG", "loc": [ -90.70375199999999, 35.572222 ], "pop": 5961, "state": "AR" }, { "_id": "72433", "city": "HOXIE", "loc": [ -90.971504, 36.032573 ], "pop": 3436, "state": "AR" }, { "_id": "72434", "city": "IMBODEN", "loc": [ -91.18544199999999, 36.19763 ], "pop": 889, "state": "AR" }, { "_id": "72435", "city": "KNOBEL", "loc": [ -90.599048, 36.317647 ], "pop": 518, "state": "AR" }, { "_id": "72436", "city": "LAFE", "loc": [ -90.506973, 36.21547 ], "pop": 1007, "state": "AR" }, { "_id": "72437", "city": "LAKE CITY", "loc": [ -90.44232700000001, 35.81715 ], "pop": 2056, "state": "AR" }, { "_id": "72438", "city": "LEACHVILLE", "loc": [ -90.195488, 35.933216 ], "pop": 2810, "state": "AR" }, { "_id": "72440", "city": "LYNN", "loc": [ -91.254588, 36.016639 ], "pop": 1032, "state": "AR" }, { "_id": "72441", "city": "MC DOUGAL", "loc": [ -90.394093, 36.379909 ], "pop": 1552, "state": "AR" }, { "_id": "72442", "city": "ROSELAND", "loc": [ -90.180252, 35.874885 ], "pop": 3855, "state": "AR" }, { "_id": "72443", "city": "MARMADUKE", "loc": [ -90.38368, 36.195117 ], "pop": 2082, "state": "AR" }, { "_id": "72444", "city": "MAYNARD", "loc": [ -90.874921, 36.438563 ], "pop": 1616, "state": "AR" }, { "_id": "72445", "city": "MINTURN", "loc": [ -91.033704, 35.976096 ], "pop": 364, "state": "AR" }, { "_id": "72447", "city": "MONETTE", "loc": [ -90.343658, 35.900168 ], "pop": 2008, "state": "AR" }, { "_id": "72449", "city": "O KEAN", "loc": [ -90.82406899999999, 36.179672 ], "pop": 420, "state": "AR" }, { "_id": "72450", "city": "PARAGOULD", "loc": [ -90.525093, 36.060033 ], "pop": 27704, "state": "AR" }, { "_id": "72453", "city": "PEACH ORCHARD", "loc": [ -90.67021699999999, 36.283045 ], "pop": 332, "state": "AR" }, { "_id": "72454", "city": "PIGGOTT", "loc": [ -90.19261, 36.386993 ], "pop": 4818, "state": "AR" }, { "_id": "72455", "city": "POCAHONTAS", "loc": [ -90.996782, 36.282876 ], "pop": 12280, "state": "AR" }, { "_id": "72456", "city": "POLLARD", "loc": [ -90.27512299999999, 36.431725 ], "pop": 553, "state": "AR" }, { "_id": "72457", "city": "PORTIA", "loc": [ -91.068004, 36.080699 ], "pop": 646, "state": "AR" }, { "_id": "72458", "city": "POWHATAN", "loc": [ -91.148214, 36.080044 ], "pop": 476, "state": "AR" }, { "_id": "72459", "city": "RAVENDEN", "loc": [ -91.25933999999999, 36.202863 ], "pop": 1137, "state": "AR" }, { "_id": "72460", "city": "RAVENDEN SPRINGS", "loc": [ -91.209433, 36.310384 ], "pop": 944, "state": "AR" }, { "_id": "72461", "city": "RECTOR", "loc": [ -90.270201, 36.267177 ], "pop": 3515, "state": "AR" }, { "_id": "72464", "city": "SAINT FRANCIS", "loc": [ -90.144991, 36.454771 ], "pop": 227, "state": "AR" }, { "_id": "72465", "city": "SEDGWICK", "loc": [ -90.880099, 35.985965 ], "pop": 503, "state": "AR" }, { "_id": "72466", "city": "SMITHVILLE", "loc": [ -91.274456, 36.090815 ], "pop": 427, "state": "AR" }, { "_id": "72467", "city": "STATE UNIVERSITY", "loc": [ -90.454245, 35.914894 ], "pop": 544, "state": "AR" }, { "_id": "72469", "city": "CALAMINE", "loc": [ -91.375398, 35.972622 ], "pop": 1078, "state": "AR" }, { "_id": "72470", "city": "SUCCESS", "loc": [ -90.728128, 36.453615 ], "pop": 286, "state": "AR" }, { "_id": "72471", "city": "SWIFTON", "loc": [ -91.126358, 35.827366 ], "pop": 1172, "state": "AR" }, { "_id": "72472", "city": "PAYNEWAY", "loc": [ -90.518738, 35.668914 ], "pop": 8179, "state": "AR" }, { "_id": "72473", "city": "TUCKERMAN", "loc": [ -91.20034699999999, 35.730678 ], "pop": 2564, "state": "AR" }, { "_id": "72476", "city": "COLLEGE CITY", "loc": [ -90.952809, 36.077814 ], "pop": 5794, "state": "AR" }, { "_id": "72478", "city": "WARM SPRINGS", "loc": [ -91.038707, 36.467531 ], "pop": 238, "state": "AR" }, { "_id": "72479", "city": "WEINER", "loc": [ -90.928928, 35.629052 ], "pop": 1223, "state": "AR" }, { "_id": "72482", "city": "WILLIFORD", "loc": [ -91.379226, 36.245335 ], "pop": 349, "state": "AR" }, { "_id": "72501", "city": "BATESVILLE", "loc": [ -91.63518999999999, 35.782614 ], "pop": 19976, "state": "AR" }, { "_id": "72512", "city": "HORSESHOE BEND", "loc": [ -91.755334, 36.202502 ], "pop": 3088, "state": "AR" }, { "_id": "72513", "city": "AGNOS", "loc": [ -91.61074600000001, 36.219732 ], "pop": 1433, "state": "AR" }, { "_id": "72515", "city": "BEXAR", "loc": [ -91.985998, 36.306103 ], "pop": 325, "state": "AR" }, { "_id": "72516", "city": "BOSWELL", "loc": [ -92.044307, 36.01084 ], "pop": 321, "state": "AR" }, { "_id": "72517", "city": "BROCKWELL", "loc": [ -91.951308, 36.135755 ], "pop": 548, "state": "AR" }, { "_id": "72519", "city": "JORDAN", "loc": [ -92.145494, 36.144771 ], "pop": 2019, "state": "AR" }, { "_id": "72520", "city": "CAMP", "loc": [ -91.72616600000001, 36.402531 ], "pop": 401, "state": "AR" }, { "_id": "72521", "city": "CAVE CITY", "loc": [ -91.544432, 35.951684 ], "pop": 2111, "state": "AR" }, { "_id": "72522", "city": "CHARLOTTE", "loc": [ -91.39621699999999, 35.833393 ], "pop": 797, "state": "AR" }, { "_id": "72523", "city": "CONCORD", "loc": [ -91.833339, 35.641355 ], "pop": 1168, "state": "AR" }, { "_id": "72524", "city": "CORD", "loc": [ -91.33745500000001, 35.81844 ], "pop": 205, "state": "AR" }, { "_id": "72526", "city": "CUSHMAN", "loc": [ -91.776455, 35.869663 ], "pop": 336, "state": "AR" }, { "_id": "72527", "city": "DESHA", "loc": [ -91.678287, 35.731524 ], "pop": 876, "state": "AR" }, { "_id": "72528", "city": "DOLPH", "loc": [ -92.11766, 36.222878 ], "pop": 348, "state": "AR" }, { "_id": "72529", "city": "CHEROKEE VILLAGE", "loc": [ -91.528075, 36.30114 ], "pop": 4523, "state": "AR" }, { "_id": "72530", "city": "DRASCO", "loc": [ -91.939818, 35.661606 ], "pop": 886, "state": "AR" }, { "_id": "72531", "city": "ELIZABETH", "loc": [ -92.093366, 36.323776 ], "pop": 390, "state": "AR" }, { "_id": "72532", "city": "EVENING SHADE", "loc": [ -91.59801400000001, 36.085532 ], "pop": 1356, "state": "AR" }, { "_id": "72533", "city": "FIFTY SIX", "loc": [ -92.218169, 35.991958 ], "pop": 346, "state": "AR" }, { "_id": "72534", "city": "FLORAL", "loc": [ -91.734101, 35.602337 ], "pop": 940, "state": "AR" }, { "_id": "72536", "city": "FRANKLIN", "loc": [ -91.80959199999999, 36.129093 ], "pop": 364, "state": "AR" }, { "_id": "72537", "city": "GAMALIEL", "loc": [ -92.228447, 36.461794 ], "pop": 301, "state": "AR" }, { "_id": "72538", "city": "GEPP", "loc": [ -92.099507, 36.436443 ], "pop": 351, "state": "AR" }, { "_id": "72539", "city": "GLENCOE", "loc": [ -91.76948299999999, 36.288962 ], "pop": 514, "state": "AR" }, { "_id": "72540", "city": "GUION", "loc": [ -91.934287, 35.960135 ], "pop": 226, "state": "AR" }, { "_id": "72542", "city": "HARDY", "loc": [ -91.411027, 36.322746 ], "pop": 2473, "state": "AR" }, { "_id": "72543", "city": "HEBER SPRINGS", "loc": [ -92.03921099999999, 35.510278 ], "pop": 8709, "state": "AR" }, { "_id": "72544", "city": "HENDERSON", "loc": [ -92.26925300000001, 36.356829 ], "pop": 3441, "state": "AR" }, { "_id": "72546", "city": "IDA", "loc": [ -91.930081, 35.594326 ], "pop": 539, "state": "AR" }, { "_id": "72550", "city": "LOCUST GROVE", "loc": [ -91.741443, 35.717705 ], "pop": 750, "state": "AR" }, { "_id": "72553", "city": "MAGNESS", "loc": [ -91.485041, 35.710062 ], "pop": 413, "state": "AR" }, { "_id": "72554", "city": "MAMMOTH SPRING", "loc": [ -91.575712, 36.407648 ], "pop": 4075, "state": "AR" }, { "_id": "72555", "city": "MARCELLA", "loc": [ -91.941891, 35.749654 ], "pop": 535, "state": "AR" }, { "_id": "72556", "city": "ZION", "loc": [ -91.905196, 36.059958 ], "pop": 1880, "state": "AR" }, { "_id": "72557", "city": "MOKO", "loc": [ -91.85866300000001, 36.468902 ], "pop": 321, "state": "AR" }, { "_id": "72560", "city": "HANOVER", "loc": [ -92.114762, 35.865769 ], "pop": 5553, "state": "AR" }, { "_id": "72561", "city": "MOUNT PLEASANT", "loc": [ -91.78501300000001, 35.975909 ], "pop": 1264, "state": "AR" }, { "_id": "72562", "city": "NEWARK", "loc": [ -91.439395, 35.71183 ], "pop": 1816, "state": "AR" }, { "_id": "72564", "city": "OIL TROUGH", "loc": [ -91.470305, 35.613147 ], "pop": 674, "state": "AR" }, { "_id": "72565", "city": "OXFORD", "loc": [ -91.925849, 36.211408 ], "pop": 738, "state": "AR" }, { "_id": "72566", "city": "PINEVILLE", "loc": [ -92.107299, 36.167704 ], "pop": 356, "state": "AR" }, { "_id": "72567", "city": "PLEASANT GROVE", "loc": [ -91.931905, 35.842349 ], "pop": 772, "state": "AR" }, { "_id": "72568", "city": "PLEASANT PLAINS", "loc": [ -91.632043, 35.589301 ], "pop": 1790, "state": "AR" }, { "_id": "72569", "city": "POUGHKEEPSIE", "loc": [ -91.45157500000001, 36.071526 ], "pop": 601, "state": "AR" }, { "_id": "72571", "city": "ROSIE", "loc": [ -91.534003, 35.663816 ], "pop": 438, "state": "AR" }, { "_id": "72572", "city": "SAFFELL", "loc": [ -91.297753, 35.917957 ], "pop": 379, "state": "AR" }, { "_id": "72573", "city": "SAGE", "loc": [ -91.824569, 36.042476 ], "pop": 256, "state": "AR" }, { "_id": "72575", "city": "SALADO", "loc": [ -91.59792400000001, 35.703493 ], "pop": 818, "state": "AR" }, { "_id": "72576", "city": "BYRON", "loc": [ -91.836321, 36.365401 ], "pop": 2561, "state": "AR" }, { "_id": "72577", "city": "SIDNEY", "loc": [ -91.634593, 35.991554 ], "pop": 743, "state": "AR" }, { "_id": "72578", "city": "STURKIE", "loc": [ -91.98991700000001, 36.463869 ], "pop": 168, "state": "AR" }, { "_id": "72579", "city": "SULPHUR ROCK", "loc": [ -91.507333, 35.754466 ], "pop": 756, "state": "AR" }, { "_id": "72581", "city": "TUMBLING SHOALS", "loc": [ -91.970359, 35.546985 ], "pop": 768, "state": "AR" }, { "_id": "72583", "city": "VIOLA", "loc": [ -91.99319800000001, 36.392429 ], "pop": 823, "state": "AR" }, { "_id": "72584", "city": "VIOLET HILL", "loc": [ -91.847064, 36.162966 ], "pop": 220, "state": "AR" }, { "_id": "72585", "city": "WIDEMAN", "loc": [ -92.001796, 36.198739 ], "pop": 89, "state": "AR" }, { "_id": "72587", "city": "WISEMAN", "loc": [ -91.84949899999999, 36.228022 ], "pop": 26, "state": "AR" }, { "_id": "72601", "city": "HARRISON", "loc": [ -93.106162, 36.241707 ], "pop": 23009, "state": "AR" }, { "_id": "72610", "city": "ALCO", "loc": [ -92.380753, 35.894511 ], "pop": 172, "state": "AR" }, { "_id": "72611", "city": "ALPENA", "loc": [ -93.2792, 36.299768 ], "pop": 780, "state": "AR" }, { "_id": "72612", "city": "BASS", "loc": [ -92.999832, 35.892225 ], "pop": 261, "state": "AR" }, { "_id": "72616", "city": "BERRYVILLE", "loc": [ -93.558725, 36.351908 ], "pop": 6821, "state": "AR" }, { "_id": "72617", "city": "BIG FLAT", "loc": [ -92.39168100000001, 36.006824 ], "pop": 244, "state": "AR" }, { "_id": "72618", "city": "BRUNO", "loc": [ -92.763651, 36.124617 ], "pop": 236, "state": "AR" }, { "_id": "72619", "city": "BULL SHOALS", "loc": [ -92.593765, 36.370958 ], "pop": 1967, "state": "AR" }, { "_id": "72623", "city": "CLARKRIDGE", "loc": [ -92.35159, 36.443311 ], "pop": 1031, "state": "AR" }, { "_id": "72624", "city": "COMPTON", "loc": [ -93.30990300000001, 36.097941 ], "pop": 233, "state": "AR" }, { "_id": "72626", "city": "COTTER", "loc": [ -92.532787, 36.280378 ], "pop": 1044, "state": "AR" }, { "_id": "72628", "city": "DEER", "loc": [ -93.31738799999999, 35.852982 ], "pop": 1378, "state": "AR" }, { "_id": "72629", "city": "DENNARD", "loc": [ -92.557456, 35.725236 ], "pop": 1370, "state": "AR" }, { "_id": "72632", "city": "EUREKA SPRINGS", "loc": [ -93.737915, 36.417465 ], "pop": 5444, "state": "AR" }, { "_id": "72633", "city": "EVERTON", "loc": [ -92.91498900000001, 36.153366 ], "pop": 436, "state": "AR" }, { "_id": "72634", "city": "FLIPPIN", "loc": [ -92.577995, 36.268219 ], "pop": 2784, "state": "AR" }, { "_id": "72635", "city": "GASSVILLE", "loc": [ -92.473637, 36.317525 ], "pop": 3568, "state": "AR" }, { "_id": "72638", "city": "GREEN FOREST", "loc": [ -93.40587499999999, 36.322408 ], "pop": 5430, "state": "AR" }, { "_id": "72639", "city": "HARRIET", "loc": [ -92.50055, 35.974187 ], "pop": 950, "state": "AR" }, { "_id": "72640", "city": "HASTY", "loc": [ -93.04596600000001, 36.015229 ], "pop": 219, "state": "AR" }, { "_id": "72641", "city": "JASPER", "loc": [ -93.20477099999999, 36.003798 ], "pop": 1632, "state": "AR" }, { "_id": "72642", "city": "LAKEVIEW", "loc": [ -92.50441600000001, 36.397308 ], "pop": 2815, "state": "AR" }, { "_id": "72644", "city": "LEAD HILL", "loc": [ -92.930194, 36.430886 ], "pop": 1818, "state": "AR" }, { "_id": "72645", "city": "LESLIE", "loc": [ -92.566293, 35.82716 ], "pop": 1768, "state": "AR" }, { "_id": "72648", "city": "DOGPATCH", "loc": [ -93.144822, 36.095121 ], "pop": 608, "state": "AR" }, { "_id": "72650", "city": "MARSHALL", "loc": [ -92.640203, 35.926697 ], "pop": 2882, "state": "AR" }, { "_id": "72651", "city": "MIDWAY", "loc": [ -92.431398, 36.290454 ], "pop": 408, "state": "AR" }, { "_id": "72653", "city": "MOUNTAIN HOME", "loc": [ -92.375337, 36.331153 ], "pop": 16131, "state": "AR" }, { "_id": "72655", "city": "MOUNT JUDEA", "loc": [ -93.082391, 35.834674 ], "pop": 665, "state": "AR" }, { "_id": "72657", "city": "TIMBO", "loc": [ -92.25253600000001, 35.896338 ], "pop": 596, "state": "AR" }, { "_id": "72658", "city": "NORFORK", "loc": [ -92.273011, 36.206571 ], "pop": 1824, "state": "AR" }, { "_id": "72660", "city": "OAK GROVE", "loc": [ -93.432129, 36.461347 ], "pop": 956, "state": "AR" }, { "_id": "72661", "city": "OAKLAND", "loc": [ -92.583187, 36.444227 ], "pop": 544, "state": "AR" }, { "_id": "72662", "city": "OMAHA", "loc": [ -93.18875300000001, 36.46123 ], "pop": 1251, "state": "AR" }, { "_id": "72663", "city": "ONIA", "loc": [ -92.345859, 35.940339 ], "pop": 444, "state": "AR" }, { "_id": "72666", "city": "PARTHENON", "loc": [ -93.267776, 35.940836 ], "pop": 518, "state": "AR" }, { "_id": "72668", "city": "PEEL", "loc": [ -92.776143, 36.444374 ], "pop": 731, "state": "AR" }, { "_id": "72669", "city": "PINDALL", "loc": [ -92.886409, 36.067479 ], "pop": 499, "state": "AR" }, { "_id": "72670", "city": "PONCA", "loc": [ -93.401985, 36.066225 ], "pop": 435, "state": "AR" }, { "_id": "72675", "city": "SAINT JOE", "loc": [ -92.792828, 35.987707 ], "pop": 1196, "state": "AR" }, { "_id": "72679", "city": "TILLY", "loc": [ -92.84420900000001, 35.6976 ], "pop": 118, "state": "AR" }, { "_id": "72680", "city": "NEWNATA", "loc": [ -92.337929, 35.855318 ], "pop": 397, "state": "AR" }, { "_id": "72682", "city": "VALLEY SPRINGS", "loc": [ -92.97993700000001, 36.146823 ], "pop": 1050, "state": "AR" }, { "_id": "72683", "city": "VENDOR", "loc": [ -93.100815, 35.948062 ], "pop": 784, "state": "AR" }, { "_id": "72685", "city": "WESTERN GROVE", "loc": [ -92.971649, 36.082994 ], "pop": 933, "state": "AR" }, { "_id": "72686", "city": "WITTS SPRINGS", "loc": [ -92.815518, 35.785514 ], "pop": 546, "state": "AR" }, { "_id": "72687", "city": "YELLVILLE", "loc": [ -92.72447200000001, 36.225322 ], "pop": 5695, "state": "AR" }, { "_id": "72701", "city": "FAYETTEVILLE", "loc": [ -94.153395, 36.052045 ], "pop": 28372, "state": "AR" }, { "_id": "72703", "city": "FAYETTEVILLE", "loc": [ -94.17162999999999, 36.099183 ], "pop": 24649, "state": "AR" }, { "_id": "72712", "city": "BENTONVILLE", "loc": [ -94.22242, 36.357703 ], "pop": 14439, "state": "AR" }, { "_id": "72714", "city": "BELLA VISTA", "loc": [ -94.251969, 36.465086 ], "pop": 8645, "state": "AR" }, { "_id": "72716", "city": "WAL-MART INC", "loc": [ -94.181483, 36.326554 ], "pop": 459, "state": "AR" }, { "_id": "72717", "city": "CANEHILL", "loc": [ -94.3862, 35.910992 ], "pop": 781, "state": "AR" }, { "_id": "72718", "city": "CAVE SPRINGS", "loc": [ -94.207836, 36.266771 ], "pop": 1629, "state": "AR" }, { "_id": "72719", "city": "CENTERTON", "loc": [ -94.30891, 36.366993 ], "pop": 1797, "state": "AR" }, { "_id": "72721", "city": "COMBS", "loc": [ -93.82521800000001, 35.848297 ], "pop": 491, "state": "AR" }, { "_id": "72722", "city": "DECATUR", "loc": [ -94.453411, 36.334749 ], "pop": 1633, "state": "AR" }, { "_id": "72727", "city": "ELKINS", "loc": [ -94.007323, 36.017719 ], "pop": 1767, "state": "AR" }, { "_id": "72729", "city": "EVANSVILLE", "loc": [ -94.478936, 35.819345 ], "pop": 380, "state": "AR" }, { "_id": "72730", "city": "FARMINGTON", "loc": [ -94.253871, 36.043635 ], "pop": 3495, "state": "AR" }, { "_id": "72732", "city": "GARFIELD", "loc": [ -93.95119699999999, 36.428817 ], "pop": 1389, "state": "AR" }, { "_id": "72733", "city": "GATEWAY", "loc": [ -93.935016, 36.485751 ], "pop": 581, "state": "AR" }, { "_id": "72734", "city": "GENTRY", "loc": [ -94.475131, 36.26516 ], "pop": 5145, "state": "AR" }, { "_id": "72735", "city": "GOSHEN", "loc": [ -93.987262, 36.107523 ], "pop": 1639, "state": "AR" }, { "_id": "72736", "city": "GRAVETTE", "loc": [ -94.477862, 36.415513 ], "pop": 3508, "state": "AR" }, { "_id": "72738", "city": "HINDSVILLE", "loc": [ -93.863339, 36.142206 ], "pop": 1024, "state": "AR" }, { "_id": "72739", "city": "HIWASSE", "loc": [ -94.338993, 36.441589 ], "pop": 1188, "state": "AR" }, { "_id": "72740", "city": "HUNTSVILLE", "loc": [ -93.72789299999999, 36.104348 ], "pop": 7021, "state": "AR" }, { "_id": "72742", "city": "KINGSTON", "loc": [ -93.504357, 36.04845 ], "pop": 566, "state": "AR" }, { "_id": "72744", "city": "LINCOLN", "loc": [ -94.42724, 35.956931 ], "pop": 3129, "state": "AR" }, { "_id": "72745", "city": "LOWELL", "loc": [ -94.082725, 36.243318 ], "pop": 5077, "state": "AR" }, { "_id": "72747", "city": "MAYSVILLE", "loc": [ -94.581278, 36.401062 ], "pop": 214, "state": "AR" }, { "_id": "72749", "city": "MORROW", "loc": [ -94.425793, 35.85373 ], "pop": 615, "state": "AR" }, { "_id": "72751", "city": "PEA RIDGE", "loc": [ -94.118026, 36.453884 ], "pop": 3584, "state": "AR" }, { "_id": "72752", "city": "PETTIGREW", "loc": [ -93.61807899999999, 35.834562 ], "pop": 422, "state": "AR" }, { "_id": "72753", "city": "PRAIRIE GROVE", "loc": [ -94.316861, 35.991809 ], "pop": 4105, "state": "AR" }, { "_id": "72756", "city": "ROGERS", "loc": [ -94.114784, 36.336316 ], "pop": 34081, "state": "AR" }, { "_id": "72760", "city": "SAINT PAUL", "loc": [ -93.73474299999999, 35.849576 ], "pop": 608, "state": "AR" }, { "_id": "72761", "city": "SILOAM SPRINGS", "loc": [ -94.528036, 36.179969 ], "pop": 11677, "state": "AR" }, { "_id": "72762", "city": "SPRINGDALE", "loc": [ -94.176216, 36.183521 ], "pop": 20104, "state": "AR" }, { "_id": "72764", "city": "BETHEL HEIGHTS", "loc": [ -94.104682, 36.177918 ], "pop": 17792, "state": "AR" }, { "_id": "72768", "city": "SULPHUR SPRINGS", "loc": [ -94.45206899999999, 36.479434 ], "pop": 982, "state": "AR" }, { "_id": "72769", "city": "SUMMERS", "loc": [ -94.500027, 36.013827 ], "pop": 1013, "state": "AR" }, { "_id": "72773", "city": "WESLEY", "loc": [ -93.911478, 35.957264 ], "pop": 1307, "state": "AR" }, { "_id": "72774", "city": "WEST FORK", "loc": [ -94.230375, 35.908153 ], "pop": 4473, "state": "AR" }, { "_id": "72776", "city": "WITTER", "loc": [ -93.621, 35.935583 ], "pop": 179, "state": "AR" }, { "_id": "72801", "city": "RUSSELLVILLE", "loc": [ -93.13147600000001, 35.284208 ], "pop": 25169, "state": "AR" }, { "_id": "72820", "city": "ALIX", "loc": [ -93.726416, 35.430767 ], "pop": 488, "state": "AR" }, { "_id": "72821", "city": "ALTUS", "loc": [ -93.811494, 35.404873 ], "pop": 2292, "state": "AR" }, { "_id": "72823", "city": "ATKINS", "loc": [ -92.95069599999999, 35.244948 ], "pop": 4835, "state": "AR" }, { "_id": "72824", "city": "BELLEVILLE", "loc": [ -93.45181700000001, 35.103762 ], "pop": 988, "state": "AR" }, { "_id": "72826", "city": "BLUE MOUNTAIN", "loc": [ -93.716797, 35.130386 ], "pop": 200, "state": "AR" }, { "_id": "72827", "city": "BLUFFTON", "loc": [ -93.59194599999999, 34.901635 ], "pop": 208, "state": "AR" }, { "_id": "72828", "city": "BRIGGSVILLE", "loc": [ -93.515748, 34.916065 ], "pop": 164, "state": "AR" }, { "_id": "72830", "city": "CLARKSVILLE", "loc": [ -93.491056, 35.490763 ], "pop": 11304, "state": "AR" }, { "_id": "72832", "city": "COAL HILL", "loc": [ -93.67203000000001, 35.437117 ], "pop": 1179, "state": "AR" }, { "_id": "72833", "city": "DANVILLE", "loc": [ -93.392933, 35.049541 ], "pop": 3292, "state": "AR" }, { "_id": "72834", "city": "DARDANELLE", "loc": [ -93.187316, 35.195507 ], "pop": 8281, "state": "AR" }, { "_id": "72835", "city": "DELAWARE", "loc": [ -93.346152, 35.278005 ], "pop": 645, "state": "AR" }, { "_id": "72837", "city": "DOVER", "loc": [ -93.135526, 35.407356 ], "pop": 5687, "state": "AR" }, { "_id": "72838", "city": "GRAVELLY", "loc": [ -93.680249, 34.888123 ], "pop": 150, "state": "AR" }, { "_id": "72839", "city": "HAGARVILLE", "loc": [ -93.344256, 35.523291 ], "pop": 584, "state": "AR" }, { "_id": "72840", "city": "HARTMAN", "loc": [ -93.61419600000001, 35.443583 ], "pop": 846, "state": "AR" }, { "_id": "72841", "city": "HARVEY", "loc": [ -93.752538, 34.867912 ], "pop": 243, "state": "AR" }, { "_id": "72842", "city": "WAVELAND", "loc": [ -93.576719, 35.111845 ], "pop": 1294, "state": "AR" }, { "_id": "72843", "city": "HECTOR", "loc": [ -92.965559, 35.40574 ], "pop": 5067, "state": "AR" }, { "_id": "72845", "city": "KNOXVILLE", "loc": [ -93.361797, 35.374897 ], "pop": 848, "state": "AR" }, { "_id": "72846", "city": "LAMAR", "loc": [ -93.35515700000001, 35.434868 ], "pop": 2905, "state": "AR" }, { "_id": "72847", "city": "LONDON", "loc": [ -93.238907, 35.337017 ], "pop": 2396, "state": "AR" }, { "_id": "72851", "city": "NEW BLAINE", "loc": [ -93.44457, 35.318912 ], "pop": 891, "state": "AR" }, { "_id": "72852", "city": "OARK", "loc": [ -93.558531, 35.709454 ], "pop": 221, "state": "AR" }, { "_id": "72853", "city": "OLA", "loc": [ -93.21356, 35.03091 ], "pop": 1823, "state": "AR" }, { "_id": "72854", "city": "OZONE", "loc": [ -93.43111, 35.657478 ], "pop": 334, "state": "AR" }, { "_id": "72855", "city": "PARIS", "loc": [ -93.72646899999999, 35.294149 ], "pop": 5718, "state": "AR" }, { "_id": "72856", "city": "PELSOR", "loc": [ -93.016088, 35.691158 ], "pop": 117, "state": "AR" }, { "_id": "72857", "city": "PLAINVIEW", "loc": [ -93.30989700000001, 34.966793 ], "pop": 1260, "state": "AR" }, { "_id": "72858", "city": "POTTSVILLE", "loc": [ -93.056386, 35.239785 ], "pop": 2494, "state": "AR" }, { "_id": "72860", "city": "ROVER", "loc": [ -93.40172800000001, 34.947522 ], "pop": 299, "state": "AR" }, { "_id": "72863", "city": "SCRANTON", "loc": [ -93.539362, 35.330816 ], "pop": 1683, "state": "AR" }, { "_id": "72865", "city": "SUBIACO", "loc": [ -93.63869, 35.31346 ], "pop": 1190, "state": "AR" }, { "_id": "72901", "city": "FORT SMITH", "loc": [ -94.411035, 35.365272 ], "pop": 21722, "state": "AR" }, { "_id": "72903", "city": "FORT SMITH", "loc": [ -94.378361, 35.342673 ], "pop": 32809, "state": "AR" }, { "_id": "72904", "city": "FORT SMITH", "loc": [ -94.38723, 35.405122 ], "pop": 18559, "state": "AR" }, { "_id": "72905", "city": "FORT CHAFFEE", "loc": [ -94.340521, 35.297366 ], "pop": 224, "state": "AR" }, { "_id": "72916", "city": "FORT SMITH", "loc": [ -94.37030799999999, 35.250175 ], "pop": 3494, "state": "AR" }, { "_id": "72921", "city": "ALMA", "loc": [ -94.207337, 35.500043 ], "pop": 7443, "state": "AR" }, { "_id": "72923", "city": "BARLING", "loc": [ -94.308226, 35.332963 ], "pop": 3857, "state": "AR" }, { "_id": "72924", "city": "BATES", "loc": [ -94.39315499999999, 34.909295 ], "pop": 213, "state": "AR" }, { "_id": "72926", "city": "BOLES", "loc": [ -94.062864, 34.765363 ], "pop": 687, "state": "AR" }, { "_id": "72927", "city": "BOONEVILLE", "loc": [ -93.92743299999999, 35.136385 ], "pop": 7502, "state": "AR" }, { "_id": "72928", "city": "BRANCH", "loc": [ -93.94537, 35.297055 ], "pop": 597, "state": "AR" }, { "_id": "72930", "city": "CECIL", "loc": [ -93.942932, 35.434176 ], "pop": 271, "state": "AR" }, { "_id": "72932", "city": "CEDARVILLE", "loc": [ -94.344618, 35.590231 ], "pop": 1605, "state": "AR" }, { "_id": "72933", "city": "CHARLESTON", "loc": [ -94.03368, 35.311502 ], "pop": 3173, "state": "AR" }, { "_id": "72934", "city": "CHESTER", "loc": [ -94.202026, 35.689776 ], "pop": 1004, "state": "AR" }, { "_id": "72936", "city": "GREENWOOD", "loc": [ -94.253027, 35.195476 ], "pop": 8385, "state": "AR" }, { "_id": "72937", "city": "HACKETT", "loc": [ -94.39832800000001, 35.194476 ], "pop": 1587, "state": "AR" }, { "_id": "72938", "city": "HARTFORD", "loc": [ -94.38187600000001, 35.022233 ], "pop": 1073, "state": "AR" }, { "_id": "72940", "city": "HUNTINGTON", "loc": [ -94.331283, 35.096267 ], "pop": 2608, "state": "AR" }, { "_id": "72941", "city": "CENTRAL CITY", "loc": [ -94.165637, 35.337513 ], "pop": 4138, "state": "AR" }, { "_id": "72943", "city": "MAGAZINE", "loc": [ -93.800336, 35.15873 ], "pop": 1336, "state": "AR" }, { "_id": "72944", "city": "MANSFIELD", "loc": [ -94.22036, 35.0432 ], "pop": 2607, "state": "AR" }, { "_id": "72946", "city": "MOUNTAINBURG", "loc": [ -94.109094, 35.570027 ], "pop": 4762, "state": "AR" }, { "_id": "72947", "city": "MULBERRY", "loc": [ -93.988505, 35.517246 ], "pop": 738, "state": "AR" }, { "_id": "72948", "city": "NATURAL DAM", "loc": [ -94.41237700000001, 35.674259 ], "pop": 497, "state": "AR" }, { "_id": "72949", "city": "OZARK", "loc": [ -93.837423, 35.524645 ], "pop": 7338, "state": "AR" }, { "_id": "72950", "city": "PARKS", "loc": [ -93.950913, 34.800333 ], "pop": 471, "state": "AR" }, { "_id": "72951", "city": "RATCLIFF", "loc": [ -93.84214900000001, 35.276032 ], "pop": 1392, "state": "AR" }, { "_id": "72952", "city": "RUDY", "loc": [ -94.237376, 35.539805 ], "pop": 1753, "state": "AR" }, { "_id": "72955", "city": "UNIONTOWN", "loc": [ -94.43487, 35.574822 ], "pop": 710, "state": "AR" }, { "_id": "72956", "city": "VAN BUREN", "loc": [ -94.32776200000001, 35.453989 ], "pop": 24719, "state": "AR" }, { "_id": "72958", "city": "WALDRON", "loc": [ -94.077243, 34.902642 ], "pop": 6884, "state": "AR" }, { "_id": "72959", "city": "WINSLOW", "loc": [ -94.118657, 35.831206 ], "pop": 2566, "state": "AR" }, { "_id": "73002", "city": "ALEX", "loc": [ -97.75709000000001, 34.961202 ], "pop": 1976, "state": "OK" }, { "_id": "73004", "city": "AMBER", "loc": [ -97.764566, 35.137691 ], "pop": 2575, "state": "OK" }, { "_id": "73005", "city": "ANADARKO", "loc": [ -98.24290999999999, 35.072808 ], "pop": 10332, "state": "OK" }, { "_id": "73006", "city": "APACHE", "loc": [ -98.369483, 34.903376 ], "pop": 2969, "state": "OK" }, { "_id": "73007", "city": "ARCADIA", "loc": [ -97.32428899999999, 35.6543 ], "pop": 697, "state": "OK" }, { "_id": "73008", "city": "BETHANY", "loc": [ -97.63985599999999, 35.504315 ], "pop": 21064, "state": "OK" }, { "_id": "73009", "city": "BINGER", "loc": [ -98.314797, 35.310593 ], "pop": 1799, "state": "OK" }, { "_id": "73010", "city": "BLANCHARD", "loc": [ -97.640131, 35.119215 ], "pop": 4511, "state": "OK" }, { "_id": "73011", "city": "BRADLEY", "loc": [ -97.71184100000001, 34.874124 ], "pop": 416, "state": "OK" }, { "_id": "73013", "city": "EDMOND", "loc": [ -97.473268, 35.621534 ], "pop": 22802, "state": "OK" }, { "_id": "73014", "city": "CALUMET", "loc": [ -98.18999100000001, 35.594819 ], "pop": 1507, "state": "OK" }, { "_id": "73015", "city": "CARNEGIE", "loc": [ -98.57545399999999, 35.123484 ], "pop": 3907, "state": "OK" }, { "_id": "73016", "city": "CASHION", "loc": [ -97.679523, 35.799996 ], "pop": 408, "state": "OK" }, { "_id": "73017", "city": "CEMENT", "loc": [ -98.14655999999999, 34.932092 ], "pop": 1641, "state": "OK" }, { "_id": "73018", "city": "CHICKASHA", "loc": [ -97.951847, 35.026751 ], "pop": 19634, "state": "OK" }, { "_id": "73020", "city": "CHOCTAW", "loc": [ -97.272564, 35.471758 ], "pop": 13832, "state": "OK" }, { "_id": "73021", "city": "COLONY", "loc": [ -98.67067400000001, 35.344844 ], "pop": 312, "state": "OK" }, { "_id": "73024", "city": "CORN", "loc": [ -98.806226, 35.399842 ], "pop": 1156, "state": "OK" }, { "_id": "73027", "city": "COYLE", "loc": [ -97.260683, 35.898496 ], "pop": 3054, "state": "OK" }, { "_id": "73028", "city": "CRESCENT", "loc": [ -97.59692200000001, 35.942 ], "pop": 2832, "state": "OK" }, { "_id": "73029", "city": "CYRIL", "loc": [ -98.208269, 34.895854 ], "pop": 1433, "state": "OK" }, { "_id": "73030", "city": "DAVIS", "loc": [ -97.10843, 34.495301 ], "pop": 4823, "state": "OK" }, { "_id": "73034", "city": "EDMOND", "loc": [ -97.47983499999999, 35.666483 ], "pop": 43814, "state": "OK" }, { "_id": "73035", "city": "ELMORE CITY", "loc": [ -97.39003, 34.608516 ], "pop": 2520, "state": "OK" }, { "_id": "73036", "city": "EL RENO", "loc": [ -97.959091, 35.533468 ], "pop": 18480, "state": "OK" }, { "_id": "73038", "city": "FORT COBB", "loc": [ -98.430296, 35.116097 ], "pop": 1847, "state": "OK" }, { "_id": "73039", "city": "FOSTER", "loc": [ -97.533395, 34.627789 ], "pop": 578, "state": "OK" }, { "_id": "73040", "city": "GEARY", "loc": [ -98.390529, 35.621709 ], "pop": 2124, "state": "OK" }, { "_id": "73041", "city": "GOTEBO", "loc": [ -98.87597700000001, 35.075891 ], "pop": 534, "state": "OK" }, { "_id": "73042", "city": "GRACEMONT", "loc": [ -98.283513, 35.187498 ], "pop": 968, "state": "OK" }, { "_id": "73043", "city": "GREENFIELD", "loc": [ -98.384073, 35.733269 ], "pop": 270, "state": "OK" }, { "_id": "73044", "city": "GUTHRIE", "loc": [ -97.43599500000001, 35.832955 ], "pop": 19769, "state": "OK" }, { "_id": "73045", "city": "HARRAH", "loc": [ -97.17343, 35.483258 ], "pop": 6766, "state": "OK" }, { "_id": "73046", "city": "HENNEPIN", "loc": [ -97.42146700000001, 34.485893 ], "pop": 656, "state": "OK" }, { "_id": "73047", "city": "HINTON", "loc": [ -98.33134800000001, 35.4675 ], "pop": 2433, "state": "OK" }, { "_id": "73048", "city": "HYDRO", "loc": [ -98.56044799999999, 35.45201 ], "pop": 2009, "state": "OK" }, { "_id": "73049", "city": "JONES", "loc": [ -97.28914, 35.575316 ], "pop": 3059, "state": "OK" }, { "_id": "73051", "city": "LEXINGTON", "loc": [ -97.26094500000001, 35.037661 ], "pop": 7904, "state": "OK" }, { "_id": "73052", "city": "LINDSAY", "loc": [ -97.599788, 34.821116 ], "pop": 5597, "state": "OK" }, { "_id": "73053", "city": "LOOKEBA", "loc": [ -98.389833, 35.367946 ], "pop": 802, "state": "OK" }, { "_id": "73054", "city": "LUTHER", "loc": [ -97.182292, 35.631491 ], "pop": 2111, "state": "OK" }, { "_id": "73055", "city": "MARLOW", "loc": [ -97.940955, 34.638681 ], "pop": 7881, "state": "OK" }, { "_id": "73056", "city": "MARSHALL", "loc": [ -97.617052, 36.148455 ], "pop": 479, "state": "OK" }, { "_id": "73057", "city": "MAYSVILLE", "loc": [ -97.41314300000001, 34.811316 ], "pop": 2456, "state": "OK" }, { "_id": "73058", "city": "MERIDIAN", "loc": [ -97.24623, 35.8451 ], "pop": 61, "state": "OK" }, { "_id": "73059", "city": "MINCO", "loc": [ -97.96638, 35.306723 ], "pop": 2119, "state": "OK" }, { "_id": "73061", "city": "MORRISON", "loc": [ -97.022777, 36.290214 ], "pop": 1425, "state": "OK" }, { "_id": "73062", "city": "MOUNTAIN VIEW", "loc": [ -98.730694, 35.06535 ], "pop": 1808, "state": "OK" }, { "_id": "73063", "city": "MULHALL", "loc": [ -97.409809, 36.053678 ], "pop": 463, "state": "OK" }, { "_id": "73064", "city": "MUSTANG", "loc": [ -97.73088799999999, 35.388498 ], "pop": 12156, "state": "OK" }, { "_id": "73065", "city": "NEWCASTLE", "loc": [ -97.621573, 35.245269 ], "pop": 4653, "state": "OK" }, { "_id": "73067", "city": "NINNEKAH", "loc": [ -97.933277, 34.91435 ], "pop": 1075, "state": "OK" }, { "_id": "73068", "city": "NOBLE", "loc": [ -97.340929, 35.141742 ], "pop": 8098, "state": "OK" }, { "_id": "73069", "city": "NORMAN", "loc": [ -97.45774299999999, 35.220389 ], "pop": 21299, "state": "OK" }, { "_id": "73071", "city": "NORMAN", "loc": [ -97.379159, 35.224254 ], "pop": 32228, "state": "OK" }, { "_id": "73072", "city": "NORMAN", "loc": [ -97.472984, 35.210733 ], "pop": 27969, "state": "OK" }, { "_id": "73073", "city": "ORLANDO", "loc": [ -97.39599200000001, 36.141973 ], "pop": 332, "state": "OK" }, { "_id": "73074", "city": "PAOLI", "loc": [ -97.260807, 34.828492 ], "pop": 989, "state": "OK" }, { "_id": "73075", "city": "PAULS VALLEY", "loc": [ -97.21950099999999, 34.738506 ], "pop": 8663, "state": "OK" }, { "_id": "73077", "city": "PERRY", "loc": [ -97.284175, 36.287468 ], "pop": 7231, "state": "OK" }, { "_id": "73078", "city": "PIEDMONT", "loc": [ -97.743109, 35.66946 ], "pop": 2267, "state": "OK" }, { "_id": "73079", "city": "POCASSET", "loc": [ -97.97904, 35.154437 ], "pop": 895, "state": "OK" }, { "_id": "73080", "city": "PURCELL", "loc": [ -97.425493, 35.010293 ], "pop": 8700, "state": "OK" }, { "_id": "73081", "city": "RATLIFF CITY", "loc": [ -97.51442400000001, 34.420719 ], "pop": 894, "state": "OK" }, { "_id": "73082", "city": "RUSH SPRINGS", "loc": [ -97.943101, 34.770804 ], "pop": 3537, "state": "OK" }, { "_id": "73084", "city": "SPENCER", "loc": [ -97.348775, 35.518276 ], "pop": 7675, "state": "OK" }, { "_id": "73086", "city": "SULPHUR", "loc": [ -96.97969500000001, 34.511585 ], "pop": 7018, "state": "OK" }, { "_id": "73088", "city": "TUSSY", "loc": [ -97.536379, 34.492159 ], "pop": 90, "state": "OK" }, { "_id": "73089", "city": "TUTTLE", "loc": [ -97.744621, 35.267406 ], "pop": 8753, "state": "OK" }, { "_id": "73090", "city": "UNION CITY", "loc": [ -97.93979, 35.391333 ], "pop": 551, "state": "OK" }, { "_id": "73092", "city": "VERDEN", "loc": [ -98.079206, 35.08356 ], "pop": 734, "state": "OK" }, { "_id": "73093", "city": "WASHINGTON", "loc": [ -97.486969, 35.13235 ], "pop": 1670, "state": "OK" }, { "_id": "73095", "city": "WAYNE", "loc": [ -97.329014, 34.915353 ], "pop": 1430, "state": "OK" }, { "_id": "73096", "city": "WEATHERFORD", "loc": [ -98.699603, 35.535046 ], "pop": 11963, "state": "OK" }, { "_id": "73098", "city": "WYNNEWOOD", "loc": [ -97.176952, 34.63847 ], "pop": 3762, "state": "OK" }, { "_id": "73099", "city": "YUKON", "loc": [ -97.73230700000001, 35.49772 ], "pop": 38891, "state": "OK" }, { "_id": "73102", "city": "OKLAHOMA CITY", "loc": [ -97.519926, 35.472601 ], "pop": 2227, "state": "OK" }, { "_id": "73103", "city": "OKLAHOMA CITY", "loc": [ -97.51959100000001, 35.490957 ], "pop": 4253, "state": "OK" }, { "_id": "73104", "city": "OKLAHOMA CITY", "loc": [ -97.50171400000001, 35.479388 ], "pop": 2534, "state": "OK" }, { "_id": "73105", "city": "OKLAHOMA CITY", "loc": [ -97.500291, 35.510811 ], "pop": 5379, "state": "OK" }, { "_id": "73106", "city": "OKLAHOMA CITY", "loc": [ -97.537228, 35.485328 ], "pop": 12706, "state": "OK" }, { "_id": "73107", "city": "OKLAHOMA CITY", "loc": [ -97.57397400000001, 35.48736 ], "pop": 23130, "state": "OK" }, { "_id": "73108", "city": "OKLAHOMA CITY", "loc": [ -97.56192799999999, 35.444485 ], "pop": 13259, "state": "OK" }, { "_id": "73109", "city": "OKLAHOMA CITY", "loc": [ -97.52613100000001, 35.425944 ], "pop": 16821, "state": "OK" }, { "_id": "73110", "city": "MIDWEST CITY", "loc": [ -97.397661, 35.461978 ], "pop": 35101, "state": "OK" }, { "_id": "73111", "city": "OKLAHOMA CITY", "loc": [ -97.48060700000001, 35.504238 ], "pop": 15332, "state": "OK" }, { "_id": "73112", "city": "OKLAHOMA CITY", "loc": [ -97.574639, 35.518435 ], "pop": 29057, "state": "OK" }, { "_id": "73114", "city": "OKLAHOMA CITY", "loc": [ -97.52573599999999, 35.570357 ], "pop": 15126, "state": "OK" }, { "_id": "73115", "city": "DEL CITY", "loc": [ -97.44164499999999, 35.440093 ], "pop": 23589, "state": "OK" }, { "_id": "73116", "city": "NICHOLS HILLS", "loc": [ -97.56394, 35.542484 ], "pop": 9559, "state": "OK" }, { "_id": "73117", "city": "OKLAHOMA CITY", "loc": [ -97.472195, 35.479667 ], "pop": 6489, "state": "OK" }, { "_id": "73118", "city": "OKLAHOMA CITY", "loc": [ -97.531908, 35.513645 ], "pop": 13826, "state": "OK" }, { "_id": "73119", "city": "OKLAHOMA CITY", "loc": [ -97.561584, 35.421033 ], "pop": 25150, "state": "OK" }, { "_id": "73120", "city": "OKLAHOMA CITY", "loc": [ -97.563756, 35.583478 ], "pop": 35879, "state": "OK" }, { "_id": "73121", "city": "OKLAHOMA CITY", "loc": [ -97.445183, 35.506235 ], "pop": 3134, "state": "OK" }, { "_id": "73122", "city": "WARR ACRES", "loc": [ -97.613305, 35.520239 ], "pop": 13337, "state": "OK" }, { "_id": "73127", "city": "OKLAHOMA CITY", "loc": [ -97.629927, 35.483371 ], "pop": 20789, "state": "OK" }, { "_id": "73128", "city": "OKLAHOMA CITY", "loc": [ -97.616362, 35.444358 ], "pop": 1349, "state": "OK" }, { "_id": "73129", "city": "OKLAHOMA CITY", "loc": [ -97.491309, 35.43119 ], "pop": 18830, "state": "OK" }, { "_id": "73130", "city": "MIDWEST CITY", "loc": [ -97.351489, 35.460863 ], "pop": 16223, "state": "OK" }, { "_id": "73131", "city": "OKLAHOMA CITY", "loc": [ -97.469127, 35.579693 ], "pop": 1460, "state": "OK" }, { "_id": "73132", "city": "WARR ACRES", "loc": [ -97.63633299999999, 35.552783 ], "pop": 22038, "state": "OK" }, { "_id": "73134", "city": "OKLAHOMA CITY", "loc": [ -97.558342, 35.617397 ], "pop": 1317, "state": "OK" }, { "_id": "73135", "city": "OKLAHOMA CITY", "loc": [ -97.438762, 35.411037 ], "pop": 13933, "state": "OK" }, { "_id": "73139", "city": "OKLAHOMA CITY", "loc": [ -97.536205, 35.379193 ], "pop": 22429, "state": "OK" }, { "_id": "73141", "city": "OKLAHOMA CITY", "loc": [ -97.366606, 35.491848 ], "pop": 2667, "state": "OK" }, { "_id": "73142", "city": "OKLAHOMA CITY", "loc": [ -97.625067, 35.598994 ], "pop": 4366, "state": "OK" }, { "_id": "73145", "city": "TINKER AFB", "loc": [ -97.403707, 35.415706 ], "pop": 3714, "state": "OK" }, { "_id": "73149", "city": "OKLAHOMA CITY", "loc": [ -97.497175, 35.394998 ], "pop": 5335, "state": "OK" }, { "_id": "73150", "city": "OKLAHOMA CITY", "loc": [ -97.33308, 35.41231 ], "pop": 4512, "state": "OK" }, { "_id": "73151", "city": "OKLAHOMA CITY", "loc": [ -97.39057, 35.568508 ], "pop": 1315, "state": "OK" }, { "_id": "73159", "city": "OKLAHOMA CITY", "loc": [ -97.55674, 35.39224 ], "pop": 21343, "state": "OK" }, { "_id": "73160", "city": "MOORE", "loc": [ -97.487352, 35.342465 ], "pop": 39935, "state": "OK" }, { "_id": "73162", "city": "OKLAHOMA CITY", "loc": [ -97.64193400000001, 35.580647 ], "pop": 21084, "state": "OK" }, { "_id": "73165", "city": "MOORE", "loc": [ -97.34979199999999, 35.337086 ], "pop": 4202, "state": "OK" }, { "_id": "73169", "city": "OKLAHOMA CITY", "loc": [ -97.658683, 35.388233 ], "pop": 1266, "state": "OK" }, { "_id": "73170", "city": "MOORE", "loc": [ -97.536, 35.341554 ], "pop": 13250, "state": "OK" }, { "_id": "73173", "city": "OKLAHOMA CITY", "loc": [ -97.63171, 35.342455 ], "pop": 667, "state": "OK" }, { "_id": "73179", "city": "OKLAHOMA CITY", "loc": [ -97.654729, 35.424157 ], "pop": 1177, "state": "OK" }, { "_id": "73401", "city": "MILO", "loc": [ -97.134157, 34.176681 ], "pop": 30328, "state": "OK" }, { "_id": "73430", "city": "BURNEYVILLE", "loc": [ -97.324929, 33.951516 ], "pop": 740, "state": "OK" }, { "_id": "73432", "city": "COLEMAN", "loc": [ -96.45881799999999, 34.262498 ], "pop": 1073, "state": "OK" }, { "_id": "73437", "city": "GRAHAM", "loc": [ -97.495435, 34.337379 ], "pop": 674, "state": "OK" }, { "_id": "73438", "city": "HEALDTON", "loc": [ -97.48890400000001, 34.229017 ], "pop": 3114, "state": "OK" }, { "_id": "73439", "city": "KINGSTON", "loc": [ -96.711977, 33.951664 ], "pop": 3808, "state": "OK" }, { "_id": "73440", "city": "LEBANON", "loc": [ -96.86449500000001, 33.961036 ], "pop": 144, "state": "OK" }, { "_id": "73441", "city": "LEON", "loc": [ -97.447058, 33.924278 ], "pop": 919, "state": "OK" }, { "_id": "73442", "city": "LOCO", "loc": [ -97.665803, 34.321416 ], "pop": 338, "state": "OK" }, { "_id": "73443", "city": "LONE GROVE", "loc": [ -97.268523, 34.177373 ], "pop": 3002, "state": "OK" }, { "_id": "73446", "city": "MC MILLAN", "loc": [ -96.78725799999999, 34.07126 ], "pop": 6877, "state": "OK" }, { "_id": "73447", "city": "MANNSVILLE", "loc": [ -96.87780100000001, 34.189902 ], "pop": 888, "state": "OK" }, { "_id": "73448", "city": "MARIETTA", "loc": [ -97.114801, 33.943099 ], "pop": 5242, "state": "OK" }, { "_id": "73449", "city": "MEAD", "loc": [ -96.529886, 33.994442 ], "pop": 1520, "state": "OK" }, { "_id": "73450", "city": "MILBURN", "loc": [ -96.54286, 34.195172 ], "pop": 884, "state": "OK" }, { "_id": "73453", "city": "OVERBROOK", "loc": [ -97.13235299999999, 34.053906 ], "pop": 283, "state": "OK" }, { "_id": "73456", "city": "RINGLING", "loc": [ -97.602867, 34.167865 ], "pop": 2215, "state": "OK" }, { "_id": "73458", "city": "SPRINGER", "loc": [ -97.122266, 34.303832 ], "pop": 1248, "state": "OK" }, { "_id": "73459", "city": "THACKERVILLE", "loc": [ -97.136349, 33.788167 ], "pop": 973, "state": "OK" }, { "_id": "73460", "city": "TISHOMINGO", "loc": [ -96.667502, 34.264286 ], "pop": 4958, "state": "OK" }, { "_id": "73461", "city": "WAPANUCKA", "loc": [ -96.45322299999999, 34.386634 ], "pop": 719, "state": "OK" }, { "_id": "73463", "city": "RUBOTTOM", "loc": [ -97.42487, 34.164206 ], "pop": 3095, "state": "OK" }, { "_id": "73501", "city": "LAWTON", "loc": [ -98.369783, 34.591467 ], "pop": 18175, "state": "OK" }, { "_id": "73503", "city": "FORT SILL", "loc": [ -98.40040999999999, 34.659525 ], "pop": 12228, "state": "OK" }, { "_id": "73505", "city": "LAWTON", "loc": [ -98.455234, 34.617939 ], "pop": 45542, "state": "OK" }, { "_id": "73507", "city": "LAWTON", "loc": [ -98.389453, 34.624595 ], "pop": 19244, "state": "OK" }, { "_id": "73521", "city": "ALTUS", "loc": [ -99.320483, 34.648406 ], "pop": 22957, "state": "OK" }, { "_id": "73526", "city": "BLAIR", "loc": [ -99.333404, 34.778813 ], "pop": 1147, "state": "OK" }, { "_id": "73527", "city": "CACHE", "loc": [ -98.615351, 34.613072 ], "pop": 3857, "state": "OK" }, { "_id": "73528", "city": "CHATTANOOGA", "loc": [ -98.651365, 34.426193 ], "pop": 483, "state": "OK" }, { "_id": "73529", "city": "COMANCHE", "loc": [ -97.979286, 34.376523 ], "pop": 4998, "state": "OK" }, { "_id": "73530", "city": "DAVIDSON", "loc": [ -99.064031, 34.251423 ], "pop": 800, "state": "OK" }, { "_id": "73531", "city": "DEVOL", "loc": [ -98.57699100000001, 34.195589 ], "pop": 311, "state": "OK" }, { "_id": "73532", "city": "DUKE", "loc": [ -99.54817199999999, 34.666769 ], "pop": 625, "state": "OK" }, { "_id": "73533", "city": "DUNCAN", "loc": [ -97.94032199999999, 34.507277 ], "pop": 28871, "state": "OK" }, { "_id": "73537", "city": "ELDORADO", "loc": [ -99.645956, 34.472744 ], "pop": 742, "state": "OK" }, { "_id": "73538", "city": "ELGIN", "loc": [ -98.40732199999999, 34.772018 ], "pop": 5476, "state": "OK" }, { "_id": "73539", "city": "ELMER", "loc": [ -99.316744, 34.513668 ], "pop": 569, "state": "OK" }, { "_id": "73540", "city": "FAXON", "loc": [ -98.55771, 34.464521 ], "pop": 352, "state": "OK" }, { "_id": "73541", "city": "FLETCHER", "loc": [ -98.20024600000001, 34.784657 ], "pop": 3382, "state": "OK" }, { "_id": "73542", "city": "FREDERICK", "loc": [ -99.011877, 34.401199 ], "pop": 6196, "state": "OK" }, { "_id": "73543", "city": "GERONIMO", "loc": [ -98.387525, 34.480499 ], "pop": 1305, "state": "OK" }, { "_id": "73544", "city": "GOULD", "loc": [ -99.78433699999999, 34.664964 ], "pop": 553, "state": "OK" }, { "_id": "73546", "city": "GRANDFIELD", "loc": [ -98.686654, 34.228247 ], "pop": 1436, "state": "OK" }, { "_id": "73547", "city": "GRANITE", "loc": [ -99.388139, 34.971184 ], "pop": 2216, "state": "OK" }, { "_id": "73548", "city": "HASTINGS", "loc": [ -98.107539, 34.225064 ], "pop": 210, "state": "OK" }, { "_id": "73549", "city": "HEADRICK", "loc": [ -99.23904, 34.72189 ], "pop": 1903, "state": "OK" }, { "_id": "73550", "city": "HOLLIS", "loc": [ -99.917711, 34.695281 ], "pop": 3136, "state": "OK" }, { "_id": "73551", "city": "HOLLISTER", "loc": [ -98.881404, 34.352473 ], "pop": 127, "state": "OK" }, { "_id": "73552", "city": "INDIAHOMA", "loc": [ -98.734864, 34.624226 ], "pop": 1385, "state": "OK" }, { "_id": "73553", "city": "LOVELAND", "loc": [ -98.72353, 34.391018 ], "pop": 312, "state": "OK" }, { "_id": "73554", "city": "REED", "loc": [ -99.505769, 34.875473 ], "pop": 4057, "state": "OK" }, { "_id": "73559", "city": "MOUNTAIN PARK", "loc": [ -98.959136, 34.703158 ], "pop": 631, "state": "OK" }, { "_id": "73560", "city": "OLUSTEE", "loc": [ -99.428684, 34.549634 ], "pop": 821, "state": "OK" }, { "_id": "73561", "city": "OSCAR", "loc": [ -97.761359, 33.973237 ], "pop": 35, "state": "OK" }, { "_id": "73562", "city": "RANDLETT", "loc": [ -98.459974, 34.174045 ], "pop": 891, "state": "OK" }, { "_id": "73564", "city": "ROOSEVELT", "loc": [ -98.983599, 34.846983 ], "pop": 666, "state": "OK" }, { "_id": "73565", "city": "RYAN", "loc": [ -97.946141, 34.023787 ], "pop": 1331, "state": "OK" }, { "_id": "73566", "city": "SNYDER", "loc": [ -98.95075199999999, 34.654779 ], "pop": 1858, "state": "OK" }, { "_id": "73568", "city": "TEMPLE", "loc": [ -98.23707400000001, 34.260669 ], "pop": 1588, "state": "OK" }, { "_id": "73569", "city": "GRADY", "loc": [ -97.935045, 33.897162 ], "pop": 563, "state": "OK" }, { "_id": "73570", "city": "TIPTON", "loc": [ -99.13148200000001, 34.509793 ], "pop": 1513, "state": "OK" }, { "_id": "73571", "city": "VINSON", "loc": [ -99.833929, 34.906179 ], "pop": 104, "state": "OK" }, { "_id": "73572", "city": "WALTERS", "loc": [ -98.31398299999999, 34.360526 ], "pop": 3861, "state": "OK" }, { "_id": "73573", "city": "WAURIKA", "loc": [ -97.99734599999999, 34.174466 ], "pop": 2656, "state": "OK" }, { "_id": "73601", "city": "CLINTON", "loc": [ -98.979533, 35.511543 ], "pop": 10287, "state": "OK" }, { "_id": "73620", "city": "ARAPAHO", "loc": [ -98.959508, 35.578864 ], "pop": 1005, "state": "OK" }, { "_id": "73622", "city": "BESSIE", "loc": [ -98.989638, 35.38545 ], "pop": 271, "state": "OK" }, { "_id": "73625", "city": "BUTLER", "loc": [ -99.242749, 35.633638 ], "pop": 1110, "state": "OK" }, { "_id": "73626", "city": "CANUTE", "loc": [ -99.281575, 35.403678 ], "pop": 1245, "state": "OK" }, { "_id": "73627", "city": "CARTER", "loc": [ -99.48223900000001, 35.220779 ], "pop": 664, "state": "OK" }, { "_id": "73628", "city": "STRONG CITY", "loc": [ -99.676688, 35.623181 ], "pop": 1586, "state": "OK" }, { "_id": "73632", "city": "CORDELL", "loc": [ -98.95105599999999, 35.278803 ], "pop": 4210, "state": "OK" }, { "_id": "73638", "city": "CRAWFORD", "loc": [ -99.80644599999999, 35.836766 ], "pop": 178, "state": "OK" }, { "_id": "73639", "city": "CUSTER CITY", "loc": [ -98.912013, 35.689371 ], "pop": 758, "state": "OK" }, { "_id": "73641", "city": "DILL CITY", "loc": [ -99.153738, 35.278704 ], "pop": 966, "state": "OK" }, { "_id": "73642", "city": "DURHAM", "loc": [ -99.90877399999999, 35.836391 ], "pop": 173, "state": "OK" }, { "_id": "73644", "city": "ELK CITY", "loc": [ -99.421086, 35.410359 ], "pop": 12461, "state": "OK" }, { "_id": "73645", "city": "ERICK", "loc": [ -99.863463, 35.228586 ], "pop": 1638, "state": "OK" }, { "_id": "73646", "city": "FAY", "loc": [ -98.65867799999999, 35.820417 ], "pop": 136, "state": "OK" }, { "_id": "73647", "city": "FOSS", "loc": [ -99.15259, 35.373645 ], "pop": 1609, "state": "OK" }, { "_id": "73650", "city": "HAMMON", "loc": [ -99.402683, 35.646131 ], "pop": 873, "state": "OK" }, { "_id": "73651", "city": "HOBART", "loc": [ -99.094433, 35.025521 ], "pop": 4844, "state": "OK" }, { "_id": "73654", "city": "LEEDEY", "loc": [ -99.349146, 35.869772 ], "pop": 906, "state": "OK" }, { "_id": "73655", "city": "LONE WOLF", "loc": [ -99.25016100000001, 34.980584 ], "pop": 1135, "state": "OK" }, { "_id": "73658", "city": "EAGLE CITY", "loc": [ -98.70805799999999, 35.921429 ], "pop": 332, "state": "OK" }, { "_id": "73659", "city": "PUTNAM", "loc": [ -98.963765, 35.853851 ], "pop": 149, "state": "OK" }, { "_id": "73660", "city": "REYDON", "loc": [ -99.916567, 35.657587 ], "pop": 537, "state": "OK" }, { "_id": "73661", "city": "ROCKY", "loc": [ -99.04803699999999, 35.152636 ], "pop": 242, "state": "OK" }, { "_id": "73662", "city": "SAYRE", "loc": [ -99.642928, 35.304722 ], "pop": 4072, "state": "OK" }, { "_id": "73663", "city": "SEILING", "loc": [ -98.88746, 36.127823 ], "pop": 1847, "state": "OK" }, { "_id": "73664", "city": "SENTINEL", "loc": [ -99.17061099999999, 35.161741 ], "pop": 1358, "state": "OK" }, { "_id": "73666", "city": "SWEETWATER", "loc": [ -99.90061900000001, 35.448835 ], "pop": 428, "state": "OK" }, { "_id": "73667", "city": "TALOGA", "loc": [ -98.982473, 35.997242 ], "pop": 784, "state": "OK" }, { "_id": "73668", "city": "TEXOLA", "loc": [ -99.98218, 35.224977 ], "pop": 89, "state": "OK" }, { "_id": "73669", "city": "THOMAS", "loc": [ -98.73884200000001, 35.738165 ], "pop": 1774, "state": "OK" }, { "_id": "73673", "city": "WILLOW", "loc": [ -99.542091, 35.070245 ], "pop": 376, "state": "OK" }, { "_id": "73701", "city": "ENID", "loc": [ -97.862257, 36.402842 ], "pop": 22487, "state": "OK" }, { "_id": "73703", "city": "ENID", "loc": [ -97.91569699999999, 36.397509 ], "pop": 24700, "state": "OK" }, { "_id": "73716", "city": "ALINE", "loc": [ -98.457387, 36.505621 ], "pop": 526, "state": "OK" }, { "_id": "73717", "city": "ALVA", "loc": [ -98.672162, 36.801564 ], "pop": 6376, "state": "OK" }, { "_id": "73718", "city": "AMES", "loc": [ -98.181989, 36.242293 ], "pop": 618, "state": "OK" }, { "_id": "73719", "city": "AMORITA", "loc": [ -98.24582100000001, 36.941221 ], "pop": 178, "state": "OK" }, { "_id": "73720", "city": "BISON", "loc": [ -97.880484, 36.196222 ], "pop": 212, "state": "OK" }, { "_id": "73722", "city": "BURLINGTON", "loc": [ -98.42145499999999, 36.903613 ], "pop": 359, "state": "OK" }, { "_id": "73723", "city": "BYRON", "loc": [ -98.244502, 36.879857 ], "pop": 172, "state": "OK" }, { "_id": "73724", "city": "CANTON", "loc": [ -98.57781799999999, 36.037194 ], "pop": 1293, "state": "OK" }, { "_id": "73725", "city": "CAPRON", "loc": [ -98.629891, 36.896812 ], "pop": 268, "state": "OK" }, { "_id": "73726", "city": "CARMEN", "loc": [ -98.457793, 36.584206 ], "pop": 642, "state": "OK" }, { "_id": "73727", "city": "CARRIER", "loc": [ -97.99968800000001, 36.518892 ], "pop": 619, "state": "OK" }, { "_id": "73728", "city": "CHEROKEE", "loc": [ -98.359375, 36.756376 ], "pop": 2256, "state": "OK" }, { "_id": "73729", "city": "CLEO SPRINGS", "loc": [ -98.442275, 36.408989 ], "pop": 630, "state": "OK" }, { "_id": "73730", "city": "COVINGTON", "loc": [ -97.575163, 36.309944 ], "pop": 1017, "state": "OK" }, { "_id": "73731", "city": "DACOMA", "loc": [ -98.594202, 36.660604 ], "pop": 351, "state": "OK" }, { "_id": "73733", "city": "DOUGLAS", "loc": [ -97.689626, 36.248138 ], "pop": 314, "state": "OK" }, { "_id": "73734", "city": "DOVER", "loc": [ -97.906677, 35.984761 ], "pop": 580, "state": "OK" }, { "_id": "73735", "city": "DRUMMOND", "loc": [ -98.03584600000001, 36.284142 ], "pop": 896, "state": "OK" }, { "_id": "73736", "city": "FAIRMONT", "loc": [ -97.711493, 36.391614 ], "pop": 701, "state": "OK" }, { "_id": "73737", "city": "ORIENTA", "loc": [ -98.506271, 36.265981 ], "pop": 3964, "state": "OK" }, { "_id": "73738", "city": "GARBER", "loc": [ -97.57889900000001, 36.439184 ], "pop": 1296, "state": "OK" }, { "_id": "73739", "city": "GOLTRY", "loc": [ -98.153978, 36.531364 ], "pop": 436, "state": "OK" }, { "_id": "73741", "city": "HELENA", "loc": [ -98.27781899999999, 36.54375 ], "pop": 1365, "state": "OK" }, { "_id": "73742", "city": "HENNESSEY", "loc": [ -97.892595, 36.086848 ], "pop": 4006, "state": "OK" }, { "_id": "73744", "city": "HITCHCOCK", "loc": [ -98.331535, 35.971209 ], "pop": 231, "state": "OK" }, { "_id": "73747", "city": "ISABELLA", "loc": [ -98.337446, 36.23407 ], "pop": 416, "state": "OK" }, { "_id": "73749", "city": "JET", "loc": [ -98.172121, 36.692917 ], "pop": 526, "state": "OK" }, { "_id": "73750", "city": "KINGFISHER", "loc": [ -97.947293, 35.863613 ], "pop": 6323, "state": "OK" }, { "_id": "73753", "city": "KREMLIN", "loc": [ -97.854186, 36.520735 ], "pop": 971, "state": "OK" }, { "_id": "73754", "city": "LAHOMA", "loc": [ -98.072738, 36.385005 ], "pop": 1275, "state": "OK" }, { "_id": "73755", "city": "LONGDALE", "loc": [ -98.549966, 36.121233 ], "pop": 668, "state": "OK" }, { "_id": "73756", "city": "LOYAL", "loc": [ -98.115516, 35.970529 ], "pop": 132, "state": "OK" }, { "_id": "73757", "city": "LUCIEN", "loc": [ -97.452574, 36.275327 ], "pop": 120, "state": "OK" }, { "_id": "73758", "city": "MANCHESTER", "loc": [ -98.03825999999999, 36.9744 ], "pop": 206, "state": "OK" }, { "_id": "73759", "city": "MEDFORD", "loc": [ -97.720215, 36.814195 ], "pop": 2027, "state": "OK" }, { "_id": "73760", "city": "MENO", "loc": [ -98.163501, 36.381497 ], "pop": 455, "state": "OK" }, { "_id": "73761", "city": "NASH", "loc": [ -98.025764, 36.696146 ], "pop": 647, "state": "OK" }, { "_id": "73762", "city": "OKARCHE", "loc": [ -97.92999, 35.750158 ], "pop": 1703, "state": "OK" }, { "_id": "73763", "city": "OKEENE", "loc": [ -98.325422, 36.11646 ], "pop": 1899, "state": "OK" }, { "_id": "73764", "city": "OMEGA", "loc": [ -98.18634400000001, 35.850653 ], "pop": 60, "state": "OK" }, { "_id": "73766", "city": "POND CREEK", "loc": [ -97.801903, 36.664281 ], "pop": 1173, "state": "OK" }, { "_id": "73768", "city": "RINGWOOD", "loc": [ -98.270639, 36.375293 ], "pop": 1362, "state": "OK" }, { "_id": "73770", "city": "SOUTHARD", "loc": [ -98.446456, 36.074706 ], "pop": 8, "state": "OK" }, { "_id": "73771", "city": "WAKITA", "loc": [ -97.94268700000001, 36.875333 ], "pop": 684, "state": "OK" }, { "_id": "73772", "city": "WATONGA", "loc": [ -98.41748699999999, 35.853762 ], "pop": 5042, "state": "OK" }, { "_id": "73773", "city": "WAUKOMIS", "loc": [ -97.89957800000001, 36.278057 ], "pop": 1704, "state": "OK" }, { "_id": "73801", "city": "WOODWARD", "loc": [ -99.402016, 36.426784 ], "pop": 14279, "state": "OK" }, { "_id": "73832", "city": "HARMON", "loc": [ -99.73266, 36.120524 ], "pop": 1353, "state": "OK" }, { "_id": "73834", "city": "SELMAN", "loc": [ -99.604816, 36.835901 ], "pop": 1957, "state": "OK" }, { "_id": "73835", "city": "CAMARGO", "loc": [ -99.27810100000001, 36.021235 ], "pop": 233, "state": "OK" }, { "_id": "73838", "city": "CHESTER", "loc": [ -98.884078, 36.252841 ], "pop": 561, "state": "OK" }, { "_id": "73840", "city": "FARGO", "loc": [ -99.65060200000001, 36.40525 ], "pop": 692, "state": "OK" }, { "_id": "73841", "city": "FORT SUPPLY", "loc": [ -99.526797, 36.564556 ], "pop": 1222, "state": "OK" }, { "_id": "73842", "city": "FREEDOM", "loc": [ -99.131922, 36.809036 ], "pop": 532, "state": "OK" }, { "_id": "73843", "city": "GAGE", "loc": [ -99.760003, 36.317996 ], "pop": 567, "state": "OK" }, { "_id": "73844", "city": "GATE", "loc": [ -100.073386, 36.875679 ], "pop": 323, "state": "OK" }, { "_id": "73847", "city": "KNOWLES", "loc": [ -100.217867, 36.839316 ], "pop": 49, "state": "OK" }, { "_id": "73848", "city": "LAVERNE", "loc": [ -99.891766, 36.70625 ], "pop": 1747, "state": "OK" }, { "_id": "73849", "city": "LOGAN", "loc": [ -100.167934, 36.635554 ], "pop": 467, "state": "OK" }, { "_id": "73851", "city": "MAY", "loc": [ -99.72469, 36.62673 ], "pop": 88, "state": "OK" }, { "_id": "73852", "city": "MOORELAND", "loc": [ -99.18321, 36.442828 ], "pop": 2047, "state": "OK" }, { "_id": "73853", "city": "MUTUAL", "loc": [ -99.114492, 36.213954 ], "pop": 262, "state": "OK" }, { "_id": "73855", "city": "ROSSTON", "loc": [ -99.90025300000001, 36.878915 ], "pop": 271, "state": "OK" }, { "_id": "73857", "city": "SHARON", "loc": [ -99.35873599999999, 36.269872 ], "pop": 1166, "state": "OK" }, { "_id": "73858", "city": "SHATTUCK", "loc": [ -99.87930299999999, 36.288922 ], "pop": 1886, "state": "OK" }, { "_id": "73859", "city": "VICI", "loc": [ -99.267004, 36.137168 ], "pop": 1333, "state": "OK" }, { "_id": "73860", "city": "WAYNOKA", "loc": [ -98.84874600000001, 36.585788 ], "pop": 1516, "state": "OK" }, { "_id": "73931", "city": "BALKO", "loc": [ -100.710329, 36.599607 ], "pop": 826, "state": "OK" }, { "_id": "73932", "city": "ELMWOOD", "loc": [ -100.532938, 36.795562 ], "pop": 2128, "state": "OK" }, { "_id": "73933", "city": "BOISE CITY", "loc": [ -102.535519, 36.728328 ], "pop": 2064, "state": "OK" }, { "_id": "73937", "city": "FELT", "loc": [ -102.797422, 36.566569 ], "pop": 210, "state": "OK" }, { "_id": "73938", "city": "FORGAN", "loc": [ -100.540875, 36.908588 ], "pop": 688, "state": "OK" }, { "_id": "73939", "city": "GOODWELL", "loc": [ -101.71369, 36.674382 ], "pop": 1857, "state": "OK" }, { "_id": "73942", "city": "GUYMON", "loc": [ -101.47778, 36.696052 ], "pop": 9387, "state": "OK" }, { "_id": "73944", "city": "HARDESTY", "loc": [ -101.153944, 36.601754 ], "pop": 450, "state": "OK" }, { "_id": "73945", "city": "OPTIMA", "loc": [ -101.190683, 36.847981 ], "pop": 2585, "state": "OK" }, { "_id": "73946", "city": "KENTON", "loc": [ -102.912421, 36.855639 ], "pop": 108, "state": "OK" }, { "_id": "73947", "city": "KEYES", "loc": [ -102.236063, 36.800316 ], "pop": 781, "state": "OK" }, { "_id": "73949", "city": "TEXHOMA", "loc": [ -101.839351, 36.52529 ], "pop": 1057, "state": "OK" }, { "_id": "73950", "city": "BAKER", "loc": [ -100.869028, 36.909012 ], "pop": 1542, "state": "OK" }, { "_id": "73951", "city": "TYRONE", "loc": [ -101.059408, 36.95577 ], "pop": 1221, "state": "OK" }, { "_id": "74002", "city": "BARNSDALL", "loc": [ -96.131789, 36.542866 ], "pop": 2936, "state": "OK" }, { "_id": "74003", "city": "BARTLESVILLE", "loc": [ -95.992091, 36.743956 ], "pop": 14990, "state": "OK" }, { "_id": "74006", "city": "BARTLESVILLE", "loc": [ -95.92513, 36.736646 ], "pop": 23075, "state": "OK" }, { "_id": "74008", "city": "BIXBY", "loc": [ -95.872895, 35.917291 ], "pop": 7505, "state": "OK" }, { "_id": "74010", "city": "BRISTOW", "loc": [ -96.375838, 35.820904 ], "pop": 7361, "state": "OK" }, { "_id": "74011", "city": "BROKEN ARROW", "loc": [ -95.81433199999999, 35.990812 ], "pop": 23493, "state": "OK" }, { "_id": "74012", "city": "BROKEN ARROW", "loc": [ -95.807863, 36.04466 ], "pop": 35399, "state": "OK" }, { "_id": "74014", "city": "BROKEN ARROW", "loc": [ -95.722269, 36.054435 ], "pop": 17246, "state": "OK" }, { "_id": "74015", "city": "CATOOSA", "loc": [ -95.727321, 36.17208 ], "pop": 7103, "state": "OK" }, { "_id": "74016", "city": "CHELSEA", "loc": [ -95.448871, 36.535586 ], "pop": 3789, "state": "OK" }, { "_id": "74017", "city": "CLAREMORE", "loc": [ -95.598539, 36.324208 ], "pop": 29964, "state": "OK" }, { "_id": "74020", "city": "CLEVELAND", "loc": [ -96.42300899999999, 36.255334 ], "pop": 8636, "state": "OK" }, { "_id": "74021", "city": "COLLINSVILLE", "loc": [ -95.84688, 36.370069 ], "pop": 8944, "state": "OK" }, { "_id": "74022", "city": "COPAN", "loc": [ -95.912987, 36.906181 ], "pop": 1965, "state": "OK" }, { "_id": "74023", "city": "CUSHING", "loc": [ -96.752628, 35.982174 ], "pop": 9961, "state": "OK" }, { "_id": "74027", "city": "DELAWARE", "loc": [ -95.61809599999999, 36.780382 ], "pop": 1275, "state": "OK" }, { "_id": "74028", "city": "DEPEW", "loc": [ -96.489665, 35.756141 ], "pop": 2224, "state": "OK" }, { "_id": "74029", "city": "DEWEY", "loc": [ -95.93454, 36.80125 ], "pop": 5217, "state": "OK" }, { "_id": "74030", "city": "DRUMRIGHT", "loc": [ -96.519789, 35.993136 ], "pop": 7886, "state": "OK" }, { "_id": "74032", "city": "GLENCOE", "loc": [ -96.91384499999999, 36.215815 ], "pop": 951, "state": "OK" }, { "_id": "74033", "city": "GLENPOOL", "loc": [ -95.999709, 35.959106 ], "pop": 6575, "state": "OK" }, { "_id": "74035", "city": "HOMINY", "loc": [ -96.38784800000001, 36.411068 ], "pop": 3410, "state": "OK" }, { "_id": "74036", "city": "INOLA", "loc": [ -95.520456, 36.150315 ], "pop": 4268, "state": "OK" }, { "_id": "74037", "city": "JENKS", "loc": [ -95.97971099999999, 36.014834 ], "pop": 8086, "state": "OK" }, { "_id": "74038", "city": "JENNINGS", "loc": [ -96.573227, 36.186302 ], "pop": 766, "state": "OK" }, { "_id": "74039", "city": "KELLYVILLE", "loc": [ -96.218009, 35.917075 ], "pop": 2648, "state": "OK" }, { "_id": "74042", "city": "LENAPAH", "loc": [ -95.623316, 36.880055 ], "pop": 692, "state": "OK" }, { "_id": "74044", "city": "MANNFORD", "loc": [ -96.357552, 36.092688 ], "pop": 6963, "state": "OK" }, { "_id": "74045", "city": "MARAMEC", "loc": [ -96.68441, 36.217465 ], "pop": 290, "state": "OK" }, { "_id": "74047", "city": "MOUNDS", "loc": [ -96.068513, 35.912919 ], "pop": 5412, "state": "OK" }, { "_id": "74048", "city": "NOWATA", "loc": [ -95.640421, 36.694565 ], "pop": 5688, "state": "OK" }, { "_id": "74051", "city": "OCHELATA", "loc": [ -95.969143, 36.594655 ], "pop": 1381, "state": "OK" }, { "_id": "74053", "city": "OOLOGAH", "loc": [ -95.72901, 36.443723 ], "pop": 3369, "state": "OK" }, { "_id": "74054", "city": "OSAGE", "loc": [ -96.377411, 36.283156 ], "pop": 633, "state": "OK" }, { "_id": "74055", "city": "OWASSO", "loc": [ -95.82215100000001, 36.286258 ], "pop": 20281, "state": "OK" }, { "_id": "74056", "city": "PAWHUSKA", "loc": [ -96.31209, 36.690424 ], "pop": 6039, "state": "OK" }, { "_id": "74058", "city": "PAWNEE", "loc": [ -96.79227, 36.336197 ], "pop": 4209, "state": "OK" }, { "_id": "74059", "city": "PERKINS", "loc": [ -97.044059, 35.97684 ], "pop": 3246, "state": "OK" }, { "_id": "74060", "city": "PRUE", "loc": [ -96.27007399999999, 36.250125 ], "pop": 712, "state": "OK" }, { "_id": "74061", "city": "RAMONA", "loc": [ -95.89622, 36.575245 ], "pop": 1628, "state": "OK" }, { "_id": "74062", "city": "RIPLEY", "loc": [ -96.89667, 35.998491 ], "pop": 839, "state": "OK" }, { "_id": "74063", "city": "SAND SPRINGS", "loc": [ -96.142601, 36.13414 ], "pop": 25745, "state": "OK" }, { "_id": "74066", "city": "SAPULPA", "loc": [ -96.11060999999999, 36.00297 ], "pop": 24409, "state": "OK" }, { "_id": "74070", "city": "SKIATOOK", "loc": [ -96.012325, 36.372495 ], "pop": 8619, "state": "OK" }, { "_id": "74072", "city": "S COFFEYVILLE", "loc": [ -95.606509, 36.983684 ], "pop": 1397, "state": "OK" }, { "_id": "74073", "city": "SPERRY", "loc": [ -95.980368, 36.29547 ], "pop": 1979, "state": "OK" }, { "_id": "74074", "city": "STILLWATER", "loc": [ -97.060868, 36.104349 ], "pop": 25259, "state": "OK" }, { "_id": "74075", "city": "STILLWATER", "loc": [ -97.063035, 36.139584 ], "pop": 18955, "state": "OK" }, { "_id": "74079", "city": "KENDRICK", "loc": [ -96.684377, 35.782389 ], "pop": 4898, "state": "OK" }, { "_id": "74080", "city": "TALALA", "loc": [ -95.714203, 36.542915 ], "pop": 883, "state": "OK" }, { "_id": "74081", "city": "TERLTON", "loc": [ -96.48756899999999, 36.188856 ], "pop": 915, "state": "OK" }, { "_id": "74083", "city": "WANN", "loc": [ -95.776752, 36.940211 ], "pop": 977, "state": "OK" }, { "_id": "74084", "city": "WYNONA", "loc": [ -96.368891, 36.50847 ], "pop": 1815, "state": "OK" }, { "_id": "74085", "city": "YALE", "loc": [ -96.702209, 36.110065 ], "pop": 2296, "state": "OK" }, { "_id": "74103", "city": "TULSA", "loc": [ -95.99542599999999, 36.153858 ], "pop": 1105, "state": "OK" }, { "_id": "74104", "city": "TULSA", "loc": [ -95.952566, 36.146446 ], "pop": 13247, "state": "OK" }, { "_id": "74105", "city": "TULSA", "loc": [ -95.96554399999999, 36.094808 ], "pop": 29466, "state": "OK" }, { "_id": "74106", "city": "TULSA", "loc": [ -95.985956, 36.188296 ], "pop": 18108, "state": "OK" }, { "_id": "74107", "city": "TULSA", "loc": [ -96.02444800000001, 36.104199 ], "pop": 18899, "state": "OK" }, { "_id": "74108", "city": "TULSA", "loc": [ -95.792311, 36.149893 ], "pop": 8018, "state": "OK" }, { "_id": "74110", "city": "TULSA", "loc": [ -95.95249200000001, 36.180296 ], "pop": 14224, "state": "OK" }, { "_id": "74112", "city": "TULSA", "loc": [ -95.90703600000001, 36.147039 ], "pop": 21754, "state": "OK" }, { "_id": "74114", "city": "TULSA", "loc": [ -95.94079600000001, 36.126152 ], "pop": 17190, "state": "OK" }, { "_id": "74115", "city": "TULSA", "loc": [ -95.91118299999999, 36.175408 ], "pop": 22100, "state": "OK" }, { "_id": "74116", "city": "TULSA", "loc": [ -95.847695, 36.174994 ], "pop": 2067, "state": "OK" }, { "_id": "74117", "city": "TULSA", "loc": [ -95.910768, 36.27949 ], "pop": 824, "state": "OK" }, { "_id": "74119", "city": "TULSA", "loc": [ -95.990194, 36.140688 ], "pop": 4059, "state": "OK" }, { "_id": "74120", "city": "TULSA", "loc": [ -95.973373, 36.144228 ], "pop": 5612, "state": "OK" }, { "_id": "74126", "city": "TULSA", "loc": [ -95.99311299999999, 36.238288 ], "pop": 13636, "state": "OK" }, { "_id": "74127", "city": "TULSA", "loc": [ -96.03107, 36.157636 ], "pop": 17336, "state": "OK" }, { "_id": "74128", "city": "TULSA", "loc": [ -95.851377, 36.145927 ], "pop": 12260, "state": "OK" }, { "_id": "74129", "city": "TULSA", "loc": [ -95.865354, 36.125928 ], "pop": 17278, "state": "OK" }, { "_id": "74130", "city": "TULSA", "loc": [ -95.959649, 36.239481 ], "pop": 2553, "state": "OK" }, { "_id": "74131", "city": "TULSA", "loc": [ -96.06022900000001, 36.05566 ], "pop": 4057, "state": "OK" }, { "_id": "74132", "city": "TULSA", "loc": [ -96.025104, 36.063971 ], "pop": 5290, "state": "OK" }, { "_id": "74133", "city": "TULSA", "loc": [ -95.884062, 36.046717 ], "pop": 30499, "state": "OK" }, { "_id": "74134", "city": "TULSA", "loc": [ -95.822472, 36.116223 ], "pop": 12607, "state": "OK" }, { "_id": "74135", "city": "TULSA", "loc": [ -95.922805, 36.097603 ], "pop": 21783, "state": "OK" }, { "_id": "74136", "city": "TULSA", "loc": [ -95.945178, 36.060548 ], "pop": 29192, "state": "OK" }, { "_id": "74137", "city": "TULSA", "loc": [ -95.93059700000001, 36.028426 ], "pop": 15434, "state": "OK" }, { "_id": "74145", "city": "TULSA", "loc": [ -95.885576, 36.093433 ], "pop": 17509, "state": "OK" }, { "_id": "74146", "city": "TULSA", "loc": [ -95.85061, 36.109293 ], "pop": 12965, "state": "OK" }, { "_id": "74301", "city": "VINITA", "loc": [ -95.138164, 36.633353 ], "pop": 8987, "state": "OK" }, { "_id": "74330", "city": "ADAIR", "loc": [ -95.27319900000001, 36.411453 ], "pop": 4938, "state": "OK" }, { "_id": "74331", "city": "BERNICE", "loc": [ -94.90749099999999, 36.630072 ], "pop": 5352, "state": "OK" }, { "_id": "74332", "city": "BIG CABIN", "loc": [ -95.274736, 36.607931 ], "pop": 2634, "state": "OK" }, { "_id": "74333", "city": "BLUEJACKET", "loc": [ -95.101844, 36.797453 ], "pop": 1005, "state": "OK" }, { "_id": "74337", "city": "CHOUTEAU", "loc": [ -95.34157399999999, 36.166924 ], "pop": 3763, "state": "OK" }, { "_id": "74338", "city": "COLCORD", "loc": [ -94.654675, 36.233349 ], "pop": 4202, "state": "OK" }, { "_id": "74339", "city": "COMMERCE", "loc": [ -94.872983, 36.933063 ], "pop": 2624, "state": "OK" }, { "_id": "74342", "city": "EUCHA", "loc": [ -94.92300299999999, 36.398709 ], "pop": 2935, "state": "OK" }, { "_id": "74343", "city": "FAIRLAND", "loc": [ -94.827934, 36.74178 ], "pop": 2003, "state": "OK" }, { "_id": "74344", "city": "GROVE", "loc": [ -94.756536, 36.592869 ], "pop": 8408, "state": "OK" }, { "_id": "74346", "city": "JAY", "loc": [ -94.776309, 36.436343 ], "pop": 5073, "state": "OK" }, { "_id": "74347", "city": "KANSAS", "loc": [ -94.81141599999999, 36.216114 ], "pop": 1594, "state": "OK" }, { "_id": "74352", "city": "LOCUST GROVE", "loc": [ -95.168854, 36.181902 ], "pop": 5856, "state": "OK" }, { "_id": "74354", "city": "MIAMI", "loc": [ -94.87186, 36.876377 ], "pop": 16679, "state": "OK" }, { "_id": "74359", "city": "OAKS", "loc": [ -94.850206, 36.168663 ], "pop": 327, "state": "OK" }, { "_id": "74360", "city": "PICHER", "loc": [ -94.817301, 36.979961 ], "pop": 3019, "state": "OK" }, { "_id": "74361", "city": "PRYOR", "loc": [ -95.31294200000001, 36.292112 ], "pop": 11669, "state": "OK" }, { "_id": "74363", "city": "QUAPAW", "loc": [ -94.742983, 36.928248 ], "pop": 2465, "state": "OK" }, { "_id": "74364", "city": "LEACH", "loc": [ -94.993362, 36.211263 ], "pop": 1222, "state": "OK" }, { "_id": "74365", "city": "SALINA", "loc": [ -95.11577200000001, 36.311597 ], "pop": 3432, "state": "OK" }, { "_id": "74366", "city": "SPAVINAW", "loc": [ -95.028465, 36.415548 ], "pop": 1252, "state": "OK" }, { "_id": "74367", "city": "STRANG", "loc": [ -95.070768, 36.463861 ], "pop": 2240, "state": "OK" }, { "_id": "74368", "city": "TWIN OAKS", "loc": [ -94.854444, 36.191616 ], "pop": 435, "state": "OK" }, { "_id": "74369", "city": "WELCH", "loc": [ -95.12945499999999, 36.902022 ], "pop": 1746, "state": "OK" }, { "_id": "74370", "city": "WYANDOTTE", "loc": [ -94.700239, 36.779616 ], "pop": 2500, "state": "OK" }, { "_id": "74401", "city": "MUSKOGEE", "loc": [ -95.375491, 35.730661 ], "pop": 21813, "state": "OK" }, { "_id": "74403", "city": "MUSKOGEE", "loc": [ -95.34490700000001, 35.741057 ], "pop": 24787, "state": "OK" }, { "_id": "74421", "city": "BEGGS", "loc": [ -96.026398, 35.789595 ], "pop": 4590, "state": "OK" }, { "_id": "74422", "city": "BOYNTON", "loc": [ -95.66003600000001, 35.657652 ], "pop": 762, "state": "OK" }, { "_id": "74423", "city": "BRAGGS", "loc": [ -95.203326, 35.657395 ], "pop": 671, "state": "OK" }, { "_id": "74425", "city": "CANADIAN", "loc": [ -95.653042, 35.159258 ], "pop": 1339, "state": "OK" }, { "_id": "74426", "city": "CHECOTAH", "loc": [ -95.535038, 35.435786 ], "pop": 9683, "state": "OK" }, { "_id": "74427", "city": "COOKSON", "loc": [ -94.913205, 35.711622 ], "pop": 1312, "state": "OK" }, { "_id": "74428", "city": "COUNCIL HILL", "loc": [ -95.711326, 35.532175 ], "pop": 992, "state": "OK" }, { "_id": "74429", "city": "COWETA", "loc": [ -95.652597, 35.957835 ], "pop": 9873, "state": "OK" }, { "_id": "74432", "city": "EUFAULA", "loc": [ -95.647227, 35.29114 ], "pop": 5069, "state": "OK" }, { "_id": "74434", "city": "FORT GIBSON", "loc": [ -95.22973399999999, 35.794285 ], "pop": 5233, "state": "OK" }, { "_id": "74435", "city": "GORE", "loc": [ -95.10947400000001, 35.541772 ], "pop": 1167, "state": "OK" }, { "_id": "74436", "city": "HASKELL", "loc": [ -95.683981, 35.810752 ], "pop": 3467, "state": "OK" }, { "_id": "74437", "city": "HOFFMAN", "loc": [ -95.976187, 35.454476 ], "pop": 10729, "state": "OK" }, { "_id": "74440", "city": "HOYT", "loc": [ -95.29938199999999, 35.268466 ], "pop": 65, "state": "OK" }, { "_id": "74441", "city": "HULBERT", "loc": [ -95.16509499999999, 35.925415 ], "pop": 4597, "state": "OK" }, { "_id": "74442", "city": "INDIANOLA", "loc": [ -95.784479, 35.093724 ], "pop": 2014, "state": "OK" }, { "_id": "74445", "city": "MORRIS", "loc": [ -95.83186000000001, 35.661877 ], "pop": 3028, "state": "OK" }, { "_id": "74447", "city": "OKMULGEE", "loc": [ -95.96966999999999, 35.628805 ], "pop": 18109, "state": "OK" }, { "_id": "74450", "city": "OKTAHA", "loc": [ -95.485591, 35.625014 ], "pop": 2624, "state": "OK" }, { "_id": "74451", "city": "PARK HILL", "loc": [ -94.982173, 35.797686 ], "pop": 4003, "state": "OK" }, { "_id": "74452", "city": "PEGGS", "loc": [ -94.991928, 36.059061 ], "pop": 3896, "state": "OK" }, { "_id": "74454", "city": "PORTER", "loc": [ -95.50819300000001, 35.85674 ], "pop": 2705, "state": "OK" }, { "_id": "74455", "city": "PORUM", "loc": [ -95.260661, 35.363059 ], "pop": 2976, "state": "OK" }, { "_id": "74457", "city": "PROCTOR", "loc": [ -94.744159, 35.967111 ], "pop": 443, "state": "OK" }, { "_id": "74461", "city": "STIDHAM", "loc": [ -95.705575, 35.381389 ], "pop": 286, "state": "OK" }, { "_id": "74462", "city": "STIGLER", "loc": [ -95.10706999999999, 35.268561 ], "pop": 4932, "state": "OK" }, { "_id": "74463", "city": "TAFT", "loc": [ -95.54935999999999, 35.758059 ], "pop": 1822, "state": "OK" }, { "_id": "74464", "city": "TAHLEQUAH", "loc": [ -94.97873, 35.909385 ], "pop": 17092, "state": "OK" }, { "_id": "74467", "city": "WAGONER", "loc": [ -95.353956, 35.954864 ], "pop": 13813, "state": "OK" }, { "_id": "74469", "city": "WARNER", "loc": [ -95.306434, 35.494546 ], "pop": 2501, "state": "OK" }, { "_id": "74470", "city": "WEBBERS FALLS", "loc": [ -95.165881, 35.513787 ], "pop": 1530, "state": "OK" }, { "_id": "74471", "city": "WELLING", "loc": [ -94.865326, 35.881917 ], "pop": 3149, "state": "OK" }, { "_id": "74472", "city": "WHITEFIELD", "loc": [ -95.237493, 35.25114 ], "pop": 283, "state": "OK" }, { "_id": "74501", "city": "MCALESTER", "loc": [ -95.759168, 34.926233 ], "pop": 23786, "state": "OK" }, { "_id": "74523", "city": "ANTLERS", "loc": [ -95.625412, 34.234923 ], "pop": 5432, "state": "OK" }, { "_id": "74525", "city": "ATOKA", "loc": [ -96.14182700000001, 34.34451 ], "pop": 7450, "state": "OK" }, { "_id": "74528", "city": "BLANCO", "loc": [ -95.792069, 34.762151 ], "pop": 289, "state": "OK" }, { "_id": "74531", "city": "CALVIN", "loc": [ -96.270972, 34.877987 ], "pop": 779, "state": "OK" }, { "_id": "74533", "city": "CANEY", "loc": [ -96.258364, 34.222112 ], "pop": 1443, "state": "OK" }, { "_id": "74534", "city": "CENTRAHOMA", "loc": [ -96.33858499999999, 34.606642 ], "pop": 435, "state": "OK" }, { "_id": "74536", "city": "CLAYTON", "loc": [ -95.379981, 34.590591 ], "pop": 1635, "state": "OK" }, { "_id": "74538", "city": "COALGATE", "loc": [ -96.21672599999999, 34.534408 ], "pop": 3908, "state": "OK" }, { "_id": "74540", "city": "DAISY", "loc": [ -95.70877299999999, 34.538357 ], "pop": 147, "state": "OK" }, { "_id": "74542", "city": "FARRIS", "loc": [ -95.841368, 34.255833 ], "pop": 1226, "state": "OK" }, { "_id": "74543", "city": "FINLEY", "loc": [ -95.53851899999999, 34.340654 ], "pop": 149, "state": "OK" }, { "_id": "74547", "city": "HARTSHORNE", "loc": [ -95.573972, 34.84517 ], "pop": 5133, "state": "OK" }, { "_id": "74548", "city": "HAYWOOD", "loc": [ -95.96715399999999, 34.951102 ], "pop": 2185, "state": "OK" }, { "_id": "74549", "city": "HONOBIA", "loc": [ -94.991557, 34.592604 ], "pop": 125, "state": "OK" }, { "_id": "74552", "city": "KINTA", "loc": [ -95.317545, 35.197065 ], "pop": 2676, "state": "OK" }, { "_id": "74553", "city": "KIOWA", "loc": [ -95.93283599999999, 34.727755 ], "pop": 1390, "state": "OK" }, { "_id": "74555", "city": "LANE", "loc": [ -95.968515, 34.269122 ], "pop": 1001, "state": "OK" }, { "_id": "74557", "city": "MOYERS", "loc": [ -95.663881, 34.338648 ], "pop": 280, "state": "OK" }, { "_id": "74558", "city": "NASHOBA", "loc": [ -95.20746699999999, 34.507204 ], "pop": 534, "state": "OK" }, { "_id": "74560", "city": "PITTSBURG", "loc": [ -95.84390500000001, 34.69748 ], "pop": 536, "state": "OK" }, { "_id": "74561", "city": "QUINTON", "loc": [ -95.467085, 35.154666 ], "pop": 3909, "state": "OK" }, { "_id": "74562", "city": "RATTAN", "loc": [ -95.344235, 34.245417 ], "pop": 1648, "state": "OK" }, { "_id": "74563", "city": "RED OAK", "loc": [ -95.09043200000001, 34.942174 ], "pop": 2167, "state": "OK" }, { "_id": "74567", "city": "SNOW", "loc": [ -95.42783300000001, 34.377963 ], "pop": 317, "state": "OK" }, { "_id": "74569", "city": "STRINGTOWN", "loc": [ -96.00024500000001, 34.467597 ], "pop": 755, "state": "OK" }, { "_id": "74570", "city": "STUART", "loc": [ -96.138105, 34.882581 ], "pop": 751, "state": "OK" }, { "_id": "74571", "city": "TALIHINA", "loc": [ -94.99781299999999, 34.73812 ], "pop": 2930, "state": "OK" }, { "_id": "74572", "city": "TUPELO", "loc": [ -96.42736499999999, 34.559809 ], "pop": 1388, "state": "OK" }, { "_id": "74574", "city": "TUSKAHOMA", "loc": [ -95.220798, 34.734778 ], "pop": 2491, "state": "OK" }, { "_id": "74576", "city": "WARDVILLE", "loc": [ -96.02095799999999, 34.568791 ], "pop": 756, "state": "OK" }, { "_id": "74577", "city": "WHITESBORO", "loc": [ -94.86997700000001, 34.684311 ], "pop": 219, "state": "OK" }, { "_id": "74578", "city": "WILBURTON", "loc": [ -95.33889600000001, 34.912805 ], "pop": 5866, "state": "OK" }, { "_id": "74601", "city": "PONCA CITY", "loc": [ -97.07840899999999, 36.703104 ], "pop": 24347, "state": "OK" }, { "_id": "74604", "city": "PONCA CITY", "loc": [ -97.04544300000001, 36.729916 ], "pop": 9327, "state": "OK" }, { "_id": "74630", "city": "BILLINGS", "loc": [ -97.41888899999999, 36.524609 ], "pop": 855, "state": "OK" }, { "_id": "74631", "city": "BLACKWELL", "loc": [ -97.28669499999999, 36.800574 ], "pop": 8480, "state": "OK" }, { "_id": "74632", "city": "BRAMAN", "loc": [ -97.30823100000001, 36.933054 ], "pop": 746, "state": "OK" }, { "_id": "74633", "city": "BURBANK", "loc": [ -96.786873, 36.696583 ], "pop": 641, "state": "OK" }, { "_id": "74636", "city": "DEER CREEK", "loc": [ -97.513581, 36.80482 ], "pop": 260, "state": "OK" }, { "_id": "74637", "city": "FAIRFAX", "loc": [ -96.699691, 36.557687 ], "pop": 2307, "state": "OK" }, { "_id": "74640", "city": "HUNTER", "loc": [ -97.64250699999999, 36.560342 ], "pop": 533, "state": "OK" }, { "_id": "74641", "city": "KAW CITY", "loc": [ -96.89886199999999, 36.786663 ], "pop": 876, "state": "OK" }, { "_id": "74643", "city": "LAMONT", "loc": [ -97.56009299999999, 36.693884 ], "pop": 650, "state": "OK" }, { "_id": "74644", "city": "MARLAND", "loc": [ -97.09759200000001, 36.559067 ], "pop": 639, "state": "OK" }, { "_id": "74646", "city": "NARDIN", "loc": [ -97.432458, 36.815517 ], "pop": 262, "state": "OK" }, { "_id": "74647", "city": "PECKHAM", "loc": [ -97.05132999999999, 36.887425 ], "pop": 3274, "state": "OK" }, { "_id": "74650", "city": "RALSTON", "loc": [ -96.775481, 36.499228 ], "pop": 756, "state": "OK" }, { "_id": "74651", "city": "RED ROCK", "loc": [ -97.16402100000001, 36.474754 ], "pop": 775, "state": "OK" }, { "_id": "74652", "city": "FORAKER", "loc": [ -96.67496199999999, 36.814915 ], "pop": 1143, "state": "OK" }, { "_id": "74653", "city": "TONKAWA", "loc": [ -97.30634000000001, 36.68062 ], "pop": 4002, "state": "OK" }, { "_id": "74701", "city": "DURANT", "loc": [ -96.384705, 34.00609 ], "pop": 17179, "state": "OK" }, { "_id": "74723", "city": "BENNINGTON", "loc": [ -96.01877399999999, 33.977085 ], "pop": 1411, "state": "OK" }, { "_id": "74724", "city": "BETHEL", "loc": [ -94.87812599999999, 34.358443 ], "pop": 1468, "state": "OK" }, { "_id": "74726", "city": "BOKCHITO", "loc": [ -96.162097, 33.985913 ], "pop": 1812, "state": "OK" }, { "_id": "74727", "city": "BOSWELL", "loc": [ -95.84031299999999, 34.024475 ], "pop": 2162, "state": "OK" }, { "_id": "74728", "city": "BROKEN BOW", "loc": [ -94.76229600000001, 34.026991 ], "pop": 10436, "state": "OK" }, { "_id": "74729", "city": "CADDO", "loc": [ -96.260017, 34.115688 ], "pop": 1474, "state": "OK" }, { "_id": "74730", "city": "CALERA", "loc": [ -96.410205, 33.928872 ], "pop": 2448, "state": "OK" }, { "_id": "74731", "city": "CARTWRIGHT", "loc": [ -96.55190899999999, 33.884552 ], "pop": 1796, "state": "OK" }, { "_id": "74733", "city": "COLBERT", "loc": [ -96.495345, 33.857516 ], "pop": 2267, "state": "OK" }, { "_id": "74734", "city": "EAGLETOWN", "loc": [ -94.559557, 34.036358 ], "pop": 1237, "state": "OK" }, { "_id": "74735", "city": "FORT TOWSON", "loc": [ -95.253015, 34.051968 ], "pop": 2249, "state": "OK" }, { "_id": "74736", "city": "GARVIN", "loc": [ -94.93230800000001, 33.920512 ], "pop": 804, "state": "OK" }, { "_id": "74738", "city": "GRANT", "loc": [ -95.489324, 33.930239 ], "pop": 740, "state": "OK" }, { "_id": "74740", "city": "TOM", "loc": [ -94.58177499999999, 33.787507 ], "pop": 1861, "state": "OK" }, { "_id": "74741", "city": "HENDRIX", "loc": [ -96.35813400000001, 33.801582 ], "pop": 1812, "state": "OK" }, { "_id": "74743", "city": "HUGO", "loc": [ -95.513876, 34.011339 ], "pop": 8804, "state": "OK" }, { "_id": "74745", "city": "IDABEL", "loc": [ -94.802012, 33.88512 ], "pop": 10294, "state": "OK" }, { "_id": "74748", "city": "KENEFIC", "loc": [ -96.38866299999999, 34.131377 ], "pop": 370, "state": "OK" }, { "_id": "74754", "city": "RINGOLD", "loc": [ -95.070387, 34.179892 ], "pop": 97, "state": "OK" }, { "_id": "74755", "city": "RUFE", "loc": [ -95.136011, 34.161684 ], "pop": 244, "state": "OK" }, { "_id": "74756", "city": "SAWYER", "loc": [ -95.355833, 34.027726 ], "pop": 421, "state": "OK" }, { "_id": "74759", "city": "SOPER", "loc": [ -95.69156599999999, 34.03659 ], "pop": 935, "state": "OK" }, { "_id": "74760", "city": "SPENCERVILLE", "loc": [ -95.38346799999999, 34.13263 ], "pop": 246, "state": "OK" }, { "_id": "74764", "city": "VALLIANT", "loc": [ -95.068625, 34.009056 ], "pop": 3875, "state": "OK" }, { "_id": "74766", "city": "WRIGHT CITY", "loc": [ -94.99288900000001, 34.079922 ], "pop": 1879, "state": "OK" }, { "_id": "74801", "city": "SHAWNEE", "loc": [ -96.931321, 35.34907 ], "pop": 40076, "state": "OK" }, { "_id": "74820", "city": "ADA", "loc": [ -96.69235999999999, 34.780044 ], "pop": 24967, "state": "OK" }, { "_id": "74824", "city": "AGRA", "loc": [ -96.87794, 35.882548 ], "pop": 1327, "state": "OK" }, { "_id": "74825", "city": "ALLEN", "loc": [ -96.55846200000001, 34.850176 ], "pop": 4803, "state": "OK" }, { "_id": "74826", "city": "ASHER", "loc": [ -96.87632600000001, 34.984862 ], "pop": 970, "state": "OK" }, { "_id": "74827", "city": "ATWOOD", "loc": [ -96.357703, 34.919194 ], "pop": 723, "state": "OK" }, { "_id": "74829", "city": "BOLEY", "loc": [ -96.470386, 35.491328 ], "pop": 1437, "state": "OK" }, { "_id": "74831", "city": "BYARS", "loc": [ -97.099723, 34.890397 ], "pop": 1133, "state": "OK" }, { "_id": "74832", "city": "CARNEY", "loc": [ -97.015942, 35.805381 ], "pop": 663, "state": "OK" }, { "_id": "74833", "city": "CASTLE", "loc": [ -96.379133, 35.473235 ], "pop": 168, "state": "OK" }, { "_id": "74834", "city": "CHANDLER", "loc": [ -96.858266, 35.704253 ], "pop": 6506, "state": "OK" }, { "_id": "74835", "city": "CLEARVIEW", "loc": [ -96.171404, 35.392585 ], "pop": 227, "state": "OK" }, { "_id": "74839", "city": "DUSTIN", "loc": [ -96.057271, 35.251937 ], "pop": 893, "state": "OK" }, { "_id": "74840", "city": "EARLSBORO", "loc": [ -96.80409299999999, 35.262792 ], "pop": 572, "state": "OK" }, { "_id": "74842", "city": "FITTSTOWN", "loc": [ -96.649458, 34.630134 ], "pop": 759, "state": "OK" }, { "_id": "74843", "city": "FITZHUGH", "loc": [ -96.77448699999999, 34.661545 ], "pop": 201, "state": "OK" }, { "_id": "74845", "city": "VERNON", "loc": [ -95.89579500000001, 35.208526 ], "pop": 638, "state": "OK" }, { "_id": "74848", "city": "HOLDENVILLE", "loc": [ -96.37696800000001, 35.083935 ], "pop": 7471, "state": "OK" }, { "_id": "74849", "city": "KONAWA", "loc": [ -96.734279, 34.970824 ], "pop": 2800, "state": "OK" }, { "_id": "74850", "city": "LAMAR", "loc": [ -96.114226, 35.083557 ], "pop": 225, "state": "OK" }, { "_id": "74851", "city": "MC LOUD", "loc": [ -97.105178, 35.41907 ], "pop": 3334, "state": "OK" }, { "_id": "74852", "city": "MACOMB", "loc": [ -97.033964, 35.12052 ], "pop": 1005, "state": "OK" }, { "_id": "74854", "city": "MAUD", "loc": [ -96.762686, 35.129224 ], "pop": 4144, "state": "OK" }, { "_id": "74855", "city": "MEEKER", "loc": [ -96.998052, 35.521111 ], "pop": 6180, "state": "OK" }, { "_id": "74856", "city": "MILL CREEK", "loc": [ -96.788419, 34.309754 ], "pop": 1510, "state": "OK" }, { "_id": "74857", "city": "NEWALLA", "loc": [ -97.197123, 35.373415 ], "pop": 7768, "state": "OK" }, { "_id": "74859", "city": "BEARDEN", "loc": [ -96.306788, 35.447516 ], "pop": 5792, "state": "OK" }, { "_id": "74860", "city": "PADEN", "loc": [ -96.571921, 35.518171 ], "pop": 1508, "state": "OK" }, { "_id": "74864", "city": "PRAGUE", "loc": [ -96.700879, 35.510482 ], "pop": 4504, "state": "OK" }, { "_id": "74865", "city": "ROFF", "loc": [ -96.842313, 34.615294 ], "pop": 1316, "state": "OK" }, { "_id": "74867", "city": "SASAKWA", "loc": [ -96.538706, 34.950982 ], "pop": 854, "state": "OK" }, { "_id": "74868", "city": "SEMINOLE", "loc": [ -96.668307, 35.252095 ], "pop": 11673, "state": "OK" }, { "_id": "74869", "city": "SPARKS", "loc": [ -96.81626900000001, 35.61378 ], "pop": 330, "state": "OK" }, { "_id": "74871", "city": "HARDEN CITY", "loc": [ -96.54289, 34.666194 ], "pop": 2317, "state": "OK" }, { "_id": "74872", "city": "STRATFORD", "loc": [ -96.976277, 34.771412 ], "pop": 2773, "state": "OK" }, { "_id": "74873", "city": "TECUMSEH", "loc": [ -96.966713, 35.25023 ], "pop": 9203, "state": "OK" }, { "_id": "74875", "city": "TRYON", "loc": [ -96.9984, 35.863151 ], "pop": 1356, "state": "OK" }, { "_id": "74878", "city": "WANETTE", "loc": [ -97.0419, 34.998313 ], "pop": 1288, "state": "OK" }, { "_id": "74880", "city": "WELEETKA", "loc": [ -96.113609, 35.341582 ], "pop": 2133, "state": "OK" }, { "_id": "74881", "city": "WELLSTON", "loc": [ -97.059685, 35.675738 ], "pop": 3452, "state": "OK" }, { "_id": "74882", "city": "WELTY", "loc": [ -96.42762, 35.610727 ], "pop": 286, "state": "OK" }, { "_id": "74883", "city": "WETUMKA", "loc": [ -96.242082, 35.239552 ], "pop": 2181, "state": "OK" }, { "_id": "74884", "city": "NEW LIMA", "loc": [ -96.503793, 35.182893 ], "pop": 8015, "state": "OK" }, { "_id": "74901", "city": "ARKOMA", "loc": [ -94.44031099999999, 35.343352 ], "pop": 2764, "state": "OK" }, { "_id": "74902", "city": "POCOLA", "loc": [ -94.476029, 35.243603 ], "pop": 3575, "state": "OK" }, { "_id": "74930", "city": "BOKOSHE", "loc": [ -94.72215799999999, 35.160925 ], "pop": 3931, "state": "OK" }, { "_id": "74931", "city": "BUNCH", "loc": [ -94.734154, 35.735691 ], "pop": 1656, "state": "OK" }, { "_id": "74932", "city": "CAMERON", "loc": [ -94.506015, 35.149355 ], "pop": 935, "state": "OK" }, { "_id": "74937", "city": "HEAVENER", "loc": [ -94.61848999999999, 34.835267 ], "pop": 5628, "state": "OK" }, { "_id": "74939", "city": "HODGEN", "loc": [ -94.63908000000001, 34.753757 ], "pop": 756, "state": "OK" }, { "_id": "74940", "city": "HOWE", "loc": [ -94.657072, 34.929936 ], "pop": 1352, "state": "OK" }, { "_id": "74941", "city": "KEOTA", "loc": [ -94.902822, 35.264541 ], "pop": 1878, "state": "OK" }, { "_id": "74944", "city": "MCCURTAIN", "loc": [ -95.012737, 35.140403 ], "pop": 1106, "state": "OK" }, { "_id": "74948", "city": "MULDROW", "loc": [ -94.633216, 35.401985 ], "pop": 8185, "state": "OK" }, { "_id": "74949", "city": "MUSE", "loc": [ -94.719007, 34.664124 ], "pop": 183, "state": "OK" }, { "_id": "74953", "city": "POTEAU", "loc": [ -94.60960300000001, 35.060561 ], "pop": 9466, "state": "OK" }, { "_id": "74954", "city": "ROLAND", "loc": [ -94.52908499999999, 35.453811 ], "pop": 7047, "state": "OK" }, { "_id": "74955", "city": "SALLISAW", "loc": [ -94.778998, 35.485191 ], "pop": 11399, "state": "OK" }, { "_id": "74956", "city": "SHADY POINT", "loc": [ -94.666534, 35.129333 ], "pop": 937, "state": "OK" }, { "_id": "74957", "city": "OCTAVIA", "loc": [ -94.619117, 34.479056 ], "pop": 442, "state": "OK" }, { "_id": "74959", "city": "SPIRO", "loc": [ -94.626546, 35.249219 ], "pop": 7368, "state": "OK" }, { "_id": "74960", "city": "STILWELL", "loc": [ -94.631322, 35.810703 ], "pop": 10267, "state": "OK" }, { "_id": "74962", "city": "VIAN", "loc": [ -94.988756, 35.540383 ], "pop": 6030, "state": "OK" }, { "_id": "74963", "city": "WATSON", "loc": [ -94.556217, 34.419252 ], "pop": 797, "state": "OK" }, { "_id": "74964", "city": "WATTS", "loc": [ -94.634472, 36.115216 ], "pop": 2156, "state": "OK" }, { "_id": "74965", "city": "WESTVILLE", "loc": [ -94.59262699999999, 35.991226 ], "pop": 3899, "state": "OK" }, { "_id": "74966", "city": "WISTER", "loc": [ -94.783205, 34.955593 ], "pop": 3656, "state": "OK" }, { "_id": "75002", "city": "ALLEN", "loc": [ -96.645433, 33.093383 ], "pop": 24151, "state": "TX" }, { "_id": "75006", "city": "CARROLLTON", "loc": [ -96.882464, 32.965736 ], "pop": 37699, "state": "TX" }, { "_id": "75007", "city": "CARROLLTON", "loc": [ -96.88198800000001, 33.003294 ], "pop": 54796, "state": "TX" }, { "_id": "75008", "city": "CARROLLTON", "loc": [ -96.923197, 33.03524 ], "pop": 1482, "state": "TX" }, { "_id": "75009", "city": "CELINA", "loc": [ -96.767325, 33.310316 ], "pop": 3373, "state": "TX" }, { "_id": "75010", "city": "CARROLLTON", "loc": [ -96.877746, 33.030414 ], "pop": 4379, "state": "TX" }, { "_id": "75019", "city": "COPPELL", "loc": [ -96.98051599999999, 32.96727 ], "pop": 16862, "state": "TX" }, { "_id": "75020", "city": "DENISON", "loc": [ -96.54957400000001, 33.745009 ], "pop": 27172, "state": "TX" }, { "_id": "75023", "city": "PLANO", "loc": [ -96.73645399999999, 33.054972 ], "pop": 40832, "state": "TX" }, { "_id": "75024", "city": "PLANO", "loc": [ -96.784307, 33.075211 ], "pop": 1439, "state": "TX" }, { "_id": "75025", "city": "PLANO", "loc": [ -96.729142, 33.078377 ], "pop": 8562, "state": "TX" }, { "_id": "75028", "city": "FLOWER MOUND", "loc": [ -97.074501, 33.038268 ], "pop": 16825, "state": "TX" }, { "_id": "75034", "city": "FRISCO", "loc": [ -96.824105, 33.149901 ], "pop": 8045, "state": "TX" }, { "_id": "75038", "city": "IRVING", "loc": [ -96.990503, 32.865309 ], "pop": 20152, "state": "TX" }, { "_id": "75039", "city": "IRVING", "loc": [ -96.93887599999999, 32.869669 ], "pop": 598, "state": "TX" }, { "_id": "75040", "city": "GARLAND", "loc": [ -96.624804, 32.922744 ], "pop": 45359, "state": "TX" }, { "_id": "75041", "city": "GARLAND", "loc": [ -96.641115, 32.87937 ], "pop": 26212, "state": "TX" }, { "_id": "75042", "city": "GARLAND", "loc": [ -96.67754499999999, 32.918486 ], "pop": 31807, "state": "TX" }, { "_id": "75043", "city": "GARLAND", "loc": [ -96.59988199999999, 32.856502 ], "pop": 46620, "state": "TX" }, { "_id": "75044", "city": "GARLAND", "loc": [ -96.66538300000001, 32.952228 ], "pop": 30455, "state": "TX" }, { "_id": "75048", "city": "SACHSE", "loc": [ -96.591472, 32.973576 ], "pop": 5632, "state": "TX" }, { "_id": "75050", "city": "GRAND PRAIRIE", "loc": [ -97.01121000000001, 32.76488 ], "pop": 32148, "state": "TX" }, { "_id": "75051", "city": "GRAND PRAIRIE", "loc": [ -97.006916, 32.711471 ], "pop": 52779, "state": "TX" }, { "_id": "75052", "city": "GRAND PRAIRIE", "loc": [ -97.031142, 32.660475 ], "pop": 15850, "state": "TX" }, { "_id": "75056", "city": "THE COLONY", "loc": [ -96.883574, 33.094023 ], "pop": 22549, "state": "TX" }, { "_id": "75057", "city": "LEWISVILLE", "loc": [ -96.999882, 33.053162 ], "pop": 8052, "state": "TX" }, { "_id": "75058", "city": "GUNTER", "loc": [ -96.734103, 33.449513 ], "pop": 1410, "state": "TX" }, { "_id": "75060", "city": "IRVING", "loc": [ -96.959665, 32.80231 ], "pop": 41001, "state": "TX" }, { "_id": "75061", "city": "IRVING", "loc": [ -96.963256, 32.826658 ], "pop": 42947, "state": "TX" }, { "_id": "75062", "city": "IRVING", "loc": [ -96.97402700000001, 32.847854 ], "pop": 40234, "state": "TX" }, { "_id": "75063", "city": "IRVING", "loc": [ -96.959817, 32.924686 ], "pop": 9527, "state": "TX" }, { "_id": "75065", "city": "LAKE DALLAS", "loc": [ -97.023709, 33.121903 ], "pop": 5452, "state": "TX" }, { "_id": "75067", "city": "HIGHLAND VILLAGE", "loc": [ -97.026815, 33.04503 ], "pop": 46151, "state": "TX" }, { "_id": "75068", "city": "LAKEWOOD VILLAGE", "loc": [ -96.967811, 33.178319 ], "pop": 3952, "state": "TX" }, { "_id": "75069", "city": "MC KINNEY", "loc": [ -96.60848799999999, 33.196558 ], "pop": 20865, "state": "TX" }, { "_id": "75070", "city": "MC KINNEY", "loc": [ -96.66422300000001, 33.195148 ], "pop": 5573, "state": "TX" }, { "_id": "75074", "city": "PLANO", "loc": [ -96.67771, 33.027722 ], "pop": 29591, "state": "TX" }, { "_id": "75075", "city": "PLANO", "loc": [ -96.739743, 33.024985 ], "pop": 33236, "state": "TX" }, { "_id": "75076", "city": "POTTSBORO", "loc": [ -96.690562, 33.809526 ], "pop": 5458, "state": "TX" }, { "_id": "75078", "city": "PROSPER", "loc": [ -96.795401, 33.236169 ], "pop": 1103, "state": "TX" }, { "_id": "75080", "city": "RICHARDSON", "loc": [ -96.745249, 32.965986 ], "pop": 37227, "state": "TX" }, { "_id": "75081", "city": "RICHARDSON", "loc": [ -96.70584100000001, 32.946217 ], "pop": 30573, "state": "TX" }, { "_id": "75082", "city": "RICHARDSON", "loc": [ -96.685957, 32.986461 ], "pop": 6678, "state": "TX" }, { "_id": "75087", "city": "HEATH", "loc": [ -96.454497, 32.90456 ], "pop": 17438, "state": "TX" }, { "_id": "75088", "city": "ROWLETT", "loc": [ -96.547161, 32.90315 ], "pop": 22057, "state": "TX" }, { "_id": "75090", "city": "SHERMAN", "loc": [ -96.60752100000001, 33.643525 ], "pop": 35260, "state": "TX" }, { "_id": "75093", "city": "PLANO", "loc": [ -96.788903, 33.029866 ], "pop": 14376, "state": "TX" }, { "_id": "75094", "city": "MURPHY", "loc": [ -96.609101, 33.004873 ], "pop": 1722, "state": "TX" }, { "_id": "75098", "city": "WYLIE", "loc": [ -96.539383, 33.004102 ], "pop": 15418, "state": "TX" }, { "_id": "75102", "city": "BARRY", "loc": [ -96.625141, 32.101356 ], "pop": 588, "state": "TX" }, { "_id": "75103", "city": "CANTON", "loc": [ -95.904657, 32.514301 ], "pop": 12281, "state": "TX" }, { "_id": "75104", "city": "CEDAR HILL", "loc": [ -96.94380200000001, 32.58847 ], "pop": 19503, "state": "TX" }, { "_id": "75105", "city": "CHATFIELD", "loc": [ -96.388668, 32.295416 ], "pop": 129, "state": "TX" }, { "_id": "75110", "city": "CORSICANA", "loc": [ -96.476151, 32.086776 ], "pop": 28003, "state": "TX" }, { "_id": "75114", "city": "CRANDALL", "loc": [ -96.46369, 32.597465 ], "pop": 3720, "state": "TX" }, { "_id": "75115", "city": "DE SOTO", "loc": [ -96.854721, 32.593167 ], "pop": 33750, "state": "TX" }, { "_id": "75116", "city": "DUNCANVILLE", "loc": [ -96.91139200000001, 32.65873 ], "pop": 18023, "state": "TX" }, { "_id": "75117", "city": "EDGEWOOD", "loc": [ -95.878011, 32.700326 ], "pop": 3328, "state": "TX" }, { "_id": "75119", "city": "ENNIS", "loc": [ -96.62236300000001, 32.332102 ], "pop": 19008, "state": "TX" }, { "_id": "75124", "city": "EUSTACE", "loc": [ -96.013693, 32.296485 ], "pop": 2192, "state": "TX" }, { "_id": "75125", "city": "FERRIS", "loc": [ -96.664321, 32.52232 ], "pop": 7592, "state": "TX" }, { "_id": "75126", "city": "FORNEY", "loc": [ -96.45975900000001, 32.749055 ], "pop": 6803, "state": "TX" }, { "_id": "75127", "city": "FRUITVALE", "loc": [ -95.789903, 32.676981 ], "pop": 1622, "state": "TX" }, { "_id": "75134", "city": "LANCASTER", "loc": [ -96.78299699999999, 32.616056 ], "pop": 11306, "state": "TX" }, { "_id": "75135", "city": "CADDO MILLS", "loc": [ -96.239093, 33.068267 ], "pop": 3148, "state": "TX" }, { "_id": "75137", "city": "DUNCANVILLE", "loc": [ -96.91132500000001, 32.634665 ], "pop": 16979, "state": "TX" }, { "_id": "75140", "city": "GRAND SALINE", "loc": [ -95.706411, 32.663528 ], "pop": 4870, "state": "TX" }, { "_id": "75141", "city": "HUTCHINS", "loc": [ -96.707021, 32.639586 ], "pop": 2716, "state": "TX" }, { "_id": "75142", "city": "KAUFMAN", "loc": [ -96.285239, 32.54599 ], "pop": 9160, "state": "TX" }, { "_id": "75143", "city": "SEVEN POINTS", "loc": [ -96.257768, 32.369146 ], "pop": 5268, "state": "TX" }, { "_id": "75144", "city": "KERENS", "loc": [ -96.229828, 32.127463 ], "pop": 2991, "state": "TX" }, { "_id": "75146", "city": "LANCASTER", "loc": [ -96.77280500000001, 32.591395 ], "pop": 11762, "state": "TX" }, { "_id": "75147", "city": "GUN BARREL CITY", "loc": [ -96.129524, 32.307513 ], "pop": 18113, "state": "TX" }, { "_id": "75148", "city": "MALAKOFF", "loc": [ -96.00595199999999, 32.170511 ], "pop": 4972, "state": "TX" }, { "_id": "75149", "city": "MESQUITE", "loc": [ -96.60821900000001, 32.767821 ], "pop": 45754, "state": "TX" }, { "_id": "75150", "city": "MESQUITE", "loc": [ -96.630681, 32.815416 ], "pop": 51494, "state": "TX" }, { "_id": "75152", "city": "PALMER", "loc": [ -96.679429, 32.438714 ], "pop": 2605, "state": "TX" }, { "_id": "75153", "city": "POWELL", "loc": [ -96.332713, 32.119557 ], "pop": 127, "state": "TX" }, { "_id": "75154", "city": "OVILLA", "loc": [ -96.82033699999999, 32.516096 ], "pop": 16882, "state": "TX" }, { "_id": "75155", "city": "RICE", "loc": [ -96.460613, 32.225788 ], "pop": 1812, "state": "TX" }, { "_id": "75158", "city": "SCURRY", "loc": [ -96.39245099999999, 32.48184 ], "pop": 2589, "state": "TX" }, { "_id": "75159", "city": "SEAGOVILLE", "loc": [ -96.557967, 32.652522 ], "pop": 10569, "state": "TX" }, { "_id": "75160", "city": "TERRELL", "loc": [ -96.25134199999999, 32.714292 ], "pop": 24116, "state": "TX" }, { "_id": "75163", "city": "TRINIDAD", "loc": [ -96.08307000000001, 32.138341 ], "pop": 1246, "state": "TX" }, { "_id": "75165", "city": "WAXAHACHIE", "loc": [ -96.83739799999999, 32.380796 ], "pop": 22844, "state": "TX" }, { "_id": "75169", "city": "WILLS POINT", "loc": [ -96.00788, 32.72834 ], "pop": 7310, "state": "TX" }, { "_id": "75172", "city": "WILMER", "loc": [ -96.68376000000001, 32.598133 ], "pop": 2407, "state": "TX" }, { "_id": "75173", "city": "NEVADA", "loc": [ -96.387657, 33.05934 ], "pop": 3149, "state": "TX" }, { "_id": "75180", "city": "BALCH SPRINGS", "loc": [ -96.615278, 32.720216 ], "pop": 18848, "state": "TX" }, { "_id": "75181", "city": "MESQUITE", "loc": [ -96.566889, 32.727166 ], "pop": 5005, "state": "TX" }, { "_id": "75182", "city": "MESQUITE", "loc": [ -96.567004, 32.801922 ], "pop": 1959, "state": "TX" }, { "_id": "75189", "city": "ROYSE CITY", "loc": [ -96.36484, 32.962778 ], "pop": 5533, "state": "TX" }, { "_id": "75201", "city": "DALLAS", "loc": [ -96.80439, 32.790439 ], "pop": 1505, "state": "TX" }, { "_id": "75202", "city": "DALLAS", "loc": [ -96.805352, 32.778056 ], "pop": 3622, "state": "TX" }, { "_id": "75203", "city": "DALLAS", "loc": [ -96.80697600000001, 32.745985 ], "pop": 18850, "state": "TX" }, { "_id": "75204", "city": "DALLAS", "loc": [ -96.785144, 32.803814 ], "pop": 16697, "state": "TX" }, { "_id": "75205", "city": "VILLAGE", "loc": [ -96.793828, 32.836878 ], "pop": 23883, "state": "TX" }, { "_id": "75206", "city": "DALLAS", "loc": [ -96.76921900000001, 32.831029 ], "pop": 36526, "state": "TX" }, { "_id": "75207", "city": "DALLAS", "loc": [ -96.83187100000001, 32.793897 ], "pop": 1744, "state": "TX" }, { "_id": "75208", "city": "DALLAS", "loc": [ -96.838898, 32.749208 ], "pop": 33527, "state": "TX" }, { "_id": "75209", "city": "DALLAS", "loc": [ -96.82598400000001, 32.84564 ], "pop": 15398, "state": "TX" }, { "_id": "75210", "city": "DALLAS", "loc": [ -96.742974, 32.769919 ], "pop": 10216, "state": "TX" }, { "_id": "75211", "city": "COCKRELL HILL", "loc": [ -96.88179700000001, 32.736928 ], "pop": 54691, "state": "TX" }, { "_id": "75212", "city": "DALLAS", "loc": [ -96.871396, 32.782884 ], "pop": 23556, "state": "TX" }, { "_id": "75214", "city": "DALLAS", "loc": [ -96.749774, 32.824789 ], "pop": 32618, "state": "TX" }, { "_id": "75215", "city": "DALLAS", "loc": [ -96.76226, 32.758206 ], "pop": 22120, "state": "TX" }, { "_id": "75216", "city": "DALLAS", "loc": [ -96.79548800000001, 32.708611 ], "pop": 55166, "state": "TX" }, { "_id": "75217", "city": "DALLAS", "loc": [ -96.675481, 32.724429 ], "pop": 57605, "state": "TX" }, { "_id": "75218", "city": "DALLAS", "loc": [ -96.69721199999999, 32.846335 ], "pop": 22646, "state": "TX" }, { "_id": "75219", "city": "DALLAS", "loc": [ -96.814166, 32.813245 ], "pop": 19178, "state": "TX" }, { "_id": "75220", "city": "DALLAS", "loc": [ -96.862202, 32.868131 ], "pop": 30241, "state": "TX" }, { "_id": "75223", "city": "DALLAS", "loc": [ -96.74747499999999, 32.794173 ], "pop": 14700, "state": "TX" }, { "_id": "75224", "city": "DALLAS", "loc": [ -96.838711, 32.711415 ], "pop": 26734, "state": "TX" }, { "_id": "75225", "city": "DALLAS", "loc": [ -96.791753, 32.862808 ], "pop": 18255, "state": "TX" }, { "_id": "75226", "city": "DALLAS", "loc": [ -96.76755199999999, 32.78871 ], "pop": 1561, "state": "TX" }, { "_id": "75227", "city": "DALLAS", "loc": [ -96.68358600000001, 32.767226 ], "pop": 39631, "state": "TX" }, { "_id": "75228", "city": "DALLAS", "loc": [ -96.678378, 32.824997 ], "pop": 55010, "state": "TX" }, { "_id": "75229", "city": "DALLAS", "loc": [ -96.8588, 32.8958 ], "pop": 27621, "state": "TX" }, { "_id": "75230", "city": "DALLAS", "loc": [ -96.78967900000001, 32.89994 ], "pop": 24281, "state": "TX" }, { "_id": "75231", "city": "DALLAS", "loc": [ -96.74952999999999, 32.875621 ], "pop": 35407, "state": "TX" }, { "_id": "75232", "city": "DALLAS", "loc": [ -96.838392, 32.664708 ], "pop": 28289, "state": "TX" }, { "_id": "75233", "city": "DALLAS", "loc": [ -96.872547, 32.704638 ], "pop": 11206, "state": "TX" }, { "_id": "75234", "city": "FARMERS BRANCH", "loc": [ -96.876848, 32.929803 ], "pop": 25992, "state": "TX" }, { "_id": "75235", "city": "DALLAS", "loc": [ -96.838843, 32.825213 ], "pop": 14850, "state": "TX" }, { "_id": "75236", "city": "DALLAS", "loc": [ -96.917737, 32.690002 ], "pop": 6124, "state": "TX" }, { "_id": "75237", "city": "DALLAS", "loc": [ -96.876453, 32.658972 ], "pop": 12859, "state": "TX" }, { "_id": "75238", "city": "DALLAS", "loc": [ -96.707982, 32.876976 ], "pop": 25855, "state": "TX" }, { "_id": "75239", "city": "DALLAS", "loc": [ -96.732769, 32.659974 ], "pop": 541, "state": "TX" }, { "_id": "75240", "city": "DALLAS", "loc": [ -96.78721400000001, 32.937431 ], "pop": 37646, "state": "TX" }, { "_id": "75241", "city": "DALLAS", "loc": [ -96.777421, 32.672216 ], "pop": 26407, "state": "TX" }, { "_id": "75243", "city": "DALLAS", "loc": [ -96.728472, 32.910347 ], "pop": 48344, "state": "TX" }, { "_id": "75244", "city": "FARMERS BRANCH", "loc": [ -96.842533, 32.925817 ], "pop": 16870, "state": "TX" }, { "_id": "75246", "city": "DALLAS", "loc": [ -96.769696, 32.79484 ], "pop": 3129, "state": "TX" }, { "_id": "75247", "city": "DALLAS", "loc": [ -96.887123, 32.801323 ], "pop": 124, "state": "TX" }, { "_id": "75248", "city": "DALLAS", "loc": [ -96.794242, 32.968199 ], "pop": 34858, "state": "TX" }, { "_id": "75249", "city": "DALLAS", "loc": [ -96.94926599999999, 32.636024 ], "pop": 8677, "state": "TX" }, { "_id": "75251", "city": "DALLAS", "loc": [ -96.77183100000001, 32.912203 ], "pop": 75, "state": "TX" }, { "_id": "75252", "city": "DALLAS", "loc": [ -96.792113, 32.996848 ], "pop": 15152, "state": "TX" }, { "_id": "75253", "city": "DALLAS", "loc": [ -96.59643, 32.683311 ], "pop": 10252, "state": "TX" }, { "_id": "75287", "city": "DALLAS", "loc": [ -96.83143, 33.000458 ], "pop": 11388, "state": "TX" }, { "_id": "75401", "city": "GREENVILLE", "loc": [ -96.10241600000001, 33.117476 ], "pop": 30183, "state": "TX" }, { "_id": "75407", "city": "PRINCETON", "loc": [ -96.49807300000001, 33.155542 ], "pop": 7552, "state": "TX" }, { "_id": "75409", "city": "ANNA", "loc": [ -96.563862, 33.344516 ], "pop": 4413, "state": "TX" }, { "_id": "75410", "city": "ALBA", "loc": [ -95.59710200000001, 32.765235 ], "pop": 2599, "state": "TX" }, { "_id": "75411", "city": "ARTHUR CITY", "loc": [ -95.49403700000001, 33.840031 ], "pop": 1583, "state": "TX" }, { "_id": "75412", "city": "BAGWELL", "loc": [ -95.14869, 33.836089 ], "pop": 979, "state": "TX" }, { "_id": "75414", "city": "BELLS", "loc": [ -96.42366800000001, 33.617817 ], "pop": 1829, "state": "TX" }, { "_id": "75415", "city": "BEN FRANKLIN", "loc": [ -95.759107, 33.474146 ], "pop": 151, "state": "TX" }, { "_id": "75416", "city": "BLOSSOM", "loc": [ -95.382341, 33.694547 ], "pop": 3253, "state": "TX" }, { "_id": "75417", "city": "BOGATA", "loc": [ -95.193725, 33.469862 ], "pop": 2803, "state": "TX" }, { "_id": "75418", "city": "BONHAM", "loc": [ -96.183566, 33.580559 ], "pop": 9003, "state": "TX" }, { "_id": "75420", "city": "BRASHEAR", "loc": [ -95.73451, 33.115521 ], "pop": 272, "state": "TX" }, { "_id": "75421", "city": "BROOKSTON", "loc": [ -95.688812, 33.624555 ], "pop": 287, "state": "TX" }, { "_id": "75422", "city": "CAMPBELL", "loc": [ -95.94391899999999, 33.151049 ], "pop": 2029, "state": "TX" }, { "_id": "75423", "city": "CELESTE", "loc": [ -96.207635, 33.264913 ], "pop": 2697, "state": "TX" }, { "_id": "75424", "city": "BLUE RIDGE", "loc": [ -96.390056, 33.306135 ], "pop": 2312, "state": "TX" }, { "_id": "75426", "city": "CLARKSVILLE", "loc": [ -95.046094, 33.623563 ], "pop": 6675, "state": "TX" }, { "_id": "75428", "city": "COMMERCE", "loc": [ -95.90967999999999, 33.2493 ], "pop": 8421, "state": "TX" }, { "_id": "75431", "city": "COMO", "loc": [ -95.362655, 33.064231 ], "pop": 1679, "state": "TX" }, { "_id": "75432", "city": "COOPER", "loc": [ -95.662311, 33.381166 ], "pop": 3438, "state": "TX" }, { "_id": "75433", "city": "CUMBY", "loc": [ -95.79453599999999, 33.111761 ], "pop": 2894, "state": "TX" }, { "_id": "75435", "city": "DEPORT", "loc": [ -95.365351, 33.522077 ], "pop": 1927, "state": "TX" }, { "_id": "75436", "city": "DETROIT", "loc": [ -95.23848, 33.662691 ], "pop": 1594, "state": "TX" }, { "_id": "75437", "city": "DIKE", "loc": [ -95.471125, 33.196485 ], "pop": 210, "state": "TX" }, { "_id": "75438", "city": "DODD CITY", "loc": [ -96.06194000000001, 33.564704 ], "pop": 1094, "state": "TX" }, { "_id": "75439", "city": "ECTOR", "loc": [ -96.273533, 33.581913 ], "pop": 803, "state": "TX" }, { "_id": "75440", "city": "EMORY", "loc": [ -95.741786, 32.875041 ], "pop": 3919, "state": "TX" }, { "_id": "75442", "city": "FARMERSVILLE", "loc": [ -96.368619, 33.165862 ], "pop": 4777, "state": "TX" }, { "_id": "75446", "city": "HONEY GROVE", "loc": [ -95.9109, 33.598505 ], "pop": 2563, "state": "TX" }, { "_id": "75447", "city": "IVANHOE", "loc": [ -96.169811, 33.67364 ], "pop": 1004, "state": "TX" }, { "_id": "75448", "city": "KLONDIKE", "loc": [ -95.801762, 33.303375 ], "pop": 729, "state": "TX" }, { "_id": "75449", "city": "LADONIA", "loc": [ -95.94548899999999, 33.424527 ], "pop": 899, "state": "TX" }, { "_id": "75450", "city": "LAKE CREEK", "loc": [ -95.622131, 33.467493 ], "pop": 50, "state": "TX" }, { "_id": "75451", "city": "LEESBURG", "loc": [ -95.107924, 32.976275 ], "pop": 1246, "state": "TX" }, { "_id": "75452", "city": "LEONARD", "loc": [ -96.223772, 33.404363 ], "pop": 3229, "state": "TX" }, { "_id": "75453", "city": "LONE OAK", "loc": [ -95.943412, 32.991571 ], "pop": 1822, "state": "TX" }, { "_id": "75454", "city": "MELISSA", "loc": [ -96.574009, 33.284114 ], "pop": 703, "state": "TX" }, { "_id": "75455", "city": "MOUNT PLEASANT", "loc": [ -94.969461, 33.173309 ], "pop": 16878, "state": "TX" }, { "_id": "75457", "city": "MOUNT VERNON", "loc": [ -95.21810600000001, 33.170204 ], "pop": 5948, "state": "TX" }, { "_id": "75459", "city": "HOWE", "loc": [ -96.64072299999999, 33.534867 ], "pop": 4843, "state": "TX" }, { "_id": "75460", "city": "PARIS", "loc": [ -95.537881, 33.658077 ], "pop": 30317, "state": "TX" }, { "_id": "75468", "city": "PATTONVILLE", "loc": [ -95.3908, 33.570234 ], "pop": 194, "state": "TX" }, { "_id": "75469", "city": "PECAN GAP", "loc": [ -95.826196, 33.419641 ], "pop": 489, "state": "TX" }, { "_id": "75470", "city": "PETTY", "loc": [ -95.789057, 33.609765 ], "pop": 247, "state": "TX" }, { "_id": "75471", "city": "PICKTON", "loc": [ -95.462979, 33.042401 ], "pop": 1569, "state": "TX" }, { "_id": "75472", "city": "POINT", "loc": [ -95.89028500000001, 32.900743 ], "pop": 2796, "state": "TX" }, { "_id": "75473", "city": "POWDERLY", "loc": [ -95.530692, 33.777877 ], "pop": 1570, "state": "TX" }, { "_id": "75474", "city": "QUINLAN", "loc": [ -96.12608299999999, 32.898347 ], "pop": 13826, "state": "TX" }, { "_id": "75476", "city": "RAVENNA", "loc": [ -96.145157, 33.709757 ], "pop": 1635, "state": "TX" }, { "_id": "75477", "city": "ROXTON", "loc": [ -95.74160500000001, 33.542934 ], "pop": 975, "state": "TX" }, { "_id": "75478", "city": "SALTILLO", "loc": [ -95.343324, 33.176678 ], "pop": 500, "state": "TX" }, { "_id": "75479", "city": "SAVOY", "loc": [ -96.350156, 33.606571 ], "pop": 1726, "state": "TX" }, { "_id": "75480", "city": "SCROGGINS", "loc": [ -95.239683, 32.991177 ], "pop": 2029, "state": "TX" }, { "_id": "75481", "city": "SULPHUR BLUFF", "loc": [ -95.37396, 33.333379 ], "pop": 228, "state": "TX" }, { "_id": "75482", "city": "SULPHUR SPRINGS", "loc": [ -95.592161, 33.134541 ], "pop": 21479, "state": "TX" }, { "_id": "75486", "city": "SUMNER", "loc": [ -95.680671, 33.758941 ], "pop": 3596, "state": "TX" }, { "_id": "75487", "city": "TALCO", "loc": [ -95.049718, 33.33436 ], "pop": 1932, "state": "TX" }, { "_id": "75488", "city": "TELEPHONE", "loc": [ -96.044945, 33.797854 ], "pop": 709, "state": "TX" }, { "_id": "75490", "city": "TRENTON", "loc": [ -96.339754, 33.423491 ], "pop": 1776, "state": "TX" }, { "_id": "75491", "city": "WHITEWRIGHT", "loc": [ -96.451025, 33.519041 ], "pop": 4327, "state": "TX" }, { "_id": "75492", "city": "WINDOM", "loc": [ -96.002002, 33.563295 ], "pop": 363, "state": "TX" }, { "_id": "75493", "city": "WINFIELD", "loc": [ -95.07898400000001, 33.161498 ], "pop": 1956, "state": "TX" }, { "_id": "75494", "city": "WINNSBORO", "loc": [ -95.27265, 32.91462 ], "pop": 6204, "state": "TX" }, { "_id": "75495", "city": "VAN ALSTYNE", "loc": [ -96.548632, 33.429169 ], "pop": 4251, "state": "TX" }, { "_id": "75496", "city": "WOLFE CITY", "loc": [ -96.06907, 33.360479 ], "pop": 2225, "state": "TX" }, { "_id": "75497", "city": "YANTIS", "loc": [ -95.531113, 32.925694 ], "pop": 1554, "state": "TX" }, { "_id": "75501", "city": "WAKE VILLAGE", "loc": [ -94.118245, 33.407371 ], "pop": 40273, "state": "TX" }, { "_id": "75502", "city": "TEXARKANA", "loc": [ -94.011281, 33.432644 ], "pop": 30471, "state": "AR" }, { "_id": "75503", "city": "TEXARKANA", "loc": [ -94.07737400000001, 33.466906 ], "pop": 16443, "state": "TX" }, { "_id": "75550", "city": "ANNONA", "loc": [ -94.899226, 33.553519 ], "pop": 949, "state": "TX" }, { "_id": "75551", "city": "ATLANTA", "loc": [ -94.16461700000001, 33.10898 ], "pop": 9024, "state": "TX" }, { "_id": "75554", "city": "AVERY", "loc": [ -94.786708, 33.533935 ], "pop": 1317, "state": "TX" }, { "_id": "75555", "city": "BIVINS", "loc": [ -94.140406, 32.96602 ], "pop": 1758, "state": "TX" }, { "_id": "75556", "city": "BLOOMBURG", "loc": [ -94.064688, 33.133859 ], "pop": 855, "state": "TX" }, { "_id": "75558", "city": "COOKVILLE", "loc": [ -94.87329099999999, 33.181908 ], "pop": 2050, "state": "TX" }, { "_id": "75559", "city": "DE KALB", "loc": [ -94.621092, 33.472741 ], "pop": 3364, "state": "TX" }, { "_id": "75560", "city": "DOUGLASSVILLE", "loc": [ -94.346699, 33.175806 ], "pop": 1705, "state": "TX" }, { "_id": "75561", "city": "LEARY", "loc": [ -94.269188, 33.477542 ], "pop": 5815, "state": "TX" }, { "_id": "75563", "city": "LINDEN", "loc": [ -94.36050899999999, 33.004821 ], "pop": 5727, "state": "TX" }, { "_id": "75566", "city": "MARIETTA", "loc": [ -94.542098, 33.179618 ], "pop": 1526, "state": "TX" }, { "_id": "75567", "city": "MAUD", "loc": [ -94.48226699999999, 33.35504 ], "pop": 888, "state": "TX" }, { "_id": "75568", "city": "NAPLES", "loc": [ -94.689061, 33.191186 ], "pop": 2752, "state": "TX" }, { "_id": "75569", "city": "NASH", "loc": [ -94.14223699999999, 33.439786 ], "pop": 3464, "state": "TX" }, { "_id": "75570", "city": "BOSTON", "loc": [ -94.433882, 33.462119 ], "pop": 7801, "state": "TX" }, { "_id": "75571", "city": "OMAHA", "loc": [ -94.763944, 33.180794 ], "pop": 1791, "state": "TX" }, { "_id": "75572", "city": "QUEEN CITY", "loc": [ -94.154825, 33.18736 ], "pop": 4376, "state": "TX" }, { "_id": "75574", "city": "SIMMS", "loc": [ -94.60386200000001, 33.498727 ], "pop": 3617, "state": "TX" }, { "_id": "75601", "city": "LONGVIEW", "loc": [ -94.72328, 32.526854 ], "pop": 27102, "state": "TX" }, { "_id": "75602", "city": "LONGVIEW", "loc": [ -94.710078, 32.472373 ], "pop": 17399, "state": "TX" }, { "_id": "75603", "city": "LONGVIEW", "loc": [ -94.711691, 32.426368 ], "pop": 6737, "state": "TX" }, { "_id": "75604", "city": "LONGVIEW", "loc": [ -94.798957, 32.525139 ], "pop": 25570, "state": "TX" }, { "_id": "75605", "city": "LONGVIEW", "loc": [ -94.776748, 32.554711 ], "pop": 9166, "state": "TX" }, { "_id": "75630", "city": "AVINGER", "loc": [ -94.579534, 32.848514 ], "pop": 2764, "state": "TX" }, { "_id": "75631", "city": "BECKVILLE", "loc": [ -94.455451, 32.245165 ], "pop": 3114, "state": "TX" }, { "_id": "75633", "city": "CARTHAGE", "loc": [ -94.352721, 32.154379 ], "pop": 11062, "state": "TX" }, { "_id": "75638", "city": "DAINGERFIELD", "loc": [ -94.735899, 33.031263 ], "pop": 5614, "state": "TX" }, { "_id": "75639", "city": "DE BERRY", "loc": [ -94.13557, 32.254327 ], "pop": 4375, "state": "TX" }, { "_id": "75640", "city": "NEW DIANA", "loc": [ -94.698122, 32.704585 ], "pop": 1930, "state": "TX" }, { "_id": "75643", "city": "GARY", "loc": [ -94.28150100000001, 32.019848 ], "pop": 1394, "state": "TX" }, { "_id": "75644", "city": "GILMER", "loc": [ -94.971434, 32.724565 ], "pop": 10141, "state": "TX" }, { "_id": "75647", "city": "GLADEWATER", "loc": [ -94.932001, 32.555858 ], "pop": 14791, "state": "TX" }, { "_id": "75650", "city": "HALLSVILLE", "loc": [ -94.53330800000001, 32.507283 ], "pop": 7463, "state": "TX" }, { "_id": "75651", "city": "HARLETON", "loc": [ -94.465165, 32.657858 ], "pop": 2609, "state": "TX" }, { "_id": "75652", "city": "HENDERSON", "loc": [ -94.791962, 32.152375 ], "pop": 19836, "state": "TX" }, { "_id": "75656", "city": "HUGHES SPRINGS", "loc": [ -94.622758, 33.016763 ], "pop": 4564, "state": "TX" }, { "_id": "75657", "city": "SMITHLAND", "loc": [ -94.371217, 32.779863 ], "pop": 8460, "state": "TX" }, { "_id": "75661", "city": "KARNACK", "loc": [ -94.20005, 32.620508 ], "pop": 4434, "state": "TX" }, { "_id": "75662", "city": "KILGORE", "loc": [ -94.86527100000001, 32.383557 ], "pop": 22785, "state": "TX" }, { "_id": "75667", "city": "LANEVILLE", "loc": [ -94.866027, 31.950821 ], "pop": 3032, "state": "TX" }, { "_id": "75668", "city": "LONE STAR", "loc": [ -94.71830300000001, 32.946982 ], "pop": 2578, "state": "TX" }, { "_id": "75669", "city": "LONG BRANCH", "loc": [ -94.47202799999999, 32.050224 ], "pop": 2101, "state": "TX" }, { "_id": "75670", "city": "MARSHALL", "loc": [ -94.36190999999999, 32.53378 ], "pop": 27482, "state": "TX" }, { "_id": "75681", "city": "MOUNT ENTERPRISE", "loc": [ -94.62350499999999, 31.9125 ], "pop": 2558, "state": "TX" }, { "_id": "75683", "city": "ORE CITY", "loc": [ -94.751401, 32.785588 ], "pop": 5129, "state": "TX" }, { "_id": "75684", "city": "OVERTON", "loc": [ -94.95291400000001, 32.269041 ], "pop": 4776, "state": "TX" }, { "_id": "75686", "city": "PITTSBURG", "loc": [ -94.960337, 32.96231 ], "pop": 12871, "state": "TX" }, { "_id": "75687", "city": "PRICE", "loc": [ -94.94149400000001, 32.100842 ], "pop": 945, "state": "TX" }, { "_id": "75689", "city": "TURNERTOWN", "loc": [ -94.950805, 32.18734 ], "pop": 923, "state": "TX" }, { "_id": "75691", "city": "TATUM", "loc": [ -94.59602700000001, 32.326569 ], "pop": 4679, "state": "TX" }, { "_id": "75692", "city": "WASKOM", "loc": [ -94.137884, 32.467183 ], "pop": 6516, "state": "TX" }, { "_id": "75693", "city": "CLARKSVILLE CITY", "loc": [ -94.862115, 32.537232 ], "pop": 5887, "state": "TX" }, { "_id": "75701", "city": "TYLER", "loc": [ -95.292179, 32.325366 ], "pop": 30794, "state": "TX" }, { "_id": "75702", "city": "TYLER", "loc": [ -95.311652, 32.361969 ], "pop": 24885, "state": "TX" }, { "_id": "75703", "city": "TYLER", "loc": [ -95.303147, 32.276827 ], "pop": 26345, "state": "TX" }, { "_id": "75704", "city": "TYLER", "loc": [ -95.406977, 32.373781 ], "pop": 6100, "state": "TX" }, { "_id": "75705", "city": "TYLER", "loc": [ -95.125225, 32.376599 ], "pop": 1539, "state": "TX" }, { "_id": "75706", "city": "TYLER", "loc": [ -95.33099300000001, 32.444148 ], "pop": 6770, "state": "TX" }, { "_id": "75707", "city": "TYLER", "loc": [ -95.19269199999999, 32.303782 ], "pop": 9853, "state": "TX" }, { "_id": "75708", "city": "EAST TEXAS CENTE", "loc": [ -95.244354, 32.389193 ], "pop": 4338, "state": "TX" }, { "_id": "75709", "city": "TYLER", "loc": [ -95.395563, 32.307817 ], "pop": 1737, "state": "TX" }, { "_id": "75750", "city": "ARP", "loc": [ -95.063908, 32.241758 ], "pop": 1815, "state": "TX" }, { "_id": "75751", "city": "ATHENS", "loc": [ -95.84318, 32.193499 ], "pop": 18579, "state": "TX" }, { "_id": "75754", "city": "BEN WHEELER", "loc": [ -95.637085, 32.412588 ], "pop": 3992, "state": "TX" }, { "_id": "75755", "city": "BIG SANDY", "loc": [ -95.08803399999999, 32.61682 ], "pop": 3997, "state": "TX" }, { "_id": "75756", "city": "EDOM", "loc": [ -95.62289, 32.290514 ], "pop": 2868, "state": "TX" }, { "_id": "75757", "city": "MOUNT SELMAN", "loc": [ -95.375045, 32.135745 ], "pop": 4654, "state": "TX" }, { "_id": "75758", "city": "CHANDLER", "loc": [ -95.502531, 32.270638 ], "pop": 4835, "state": "TX" }, { "_id": "75760", "city": "CUSHING", "loc": [ -94.853887, 31.797767 ], "pop": 2068, "state": "TX" }, { "_id": "75762", "city": "FLINT", "loc": [ -95.394848, 32.207927 ], "pop": 6365, "state": "TX" }, { "_id": "75763", "city": "FRANKSTON", "loc": [ -95.516284, 32.053488 ], "pop": 5394, "state": "TX" }, { "_id": "75765", "city": "HAWKINS", "loc": [ -95.222015, 32.643901 ], "pop": 4968, "state": "TX" }, { "_id": "75766", "city": "JACKSONVILLE", "loc": [ -95.27032800000001, 31.96177 ], "pop": 19652, "state": "TX" }, { "_id": "75770", "city": "LARUE", "loc": [ -95.59266100000001, 32.160758 ], "pop": 2826, "state": "TX" }, { "_id": "75771", "city": "MT SYLVAN", "loc": [ -95.42993199999999, 32.517152 ], "pop": 9838, "state": "TX" }, { "_id": "75773", "city": "MINEOLA", "loc": [ -95.487032, 32.666059 ], "pop": 8904, "state": "TX" }, { "_id": "75778", "city": "MURCHISON", "loc": [ -95.77372, 32.325732 ], "pop": 1801, "state": "TX" }, { "_id": "75783", "city": "QUITMAN", "loc": [ -95.430161, 32.804862 ], "pop": 5864, "state": "TX" }, { "_id": "75784", "city": "REKLAW", "loc": [ -95.01183399999999, 31.885858 ], "pop": 334, "state": "TX" }, { "_id": "75785", "city": "DIALVILLE", "loc": [ -95.17315600000001, 31.80976 ], "pop": 10527, "state": "TX" }, { "_id": "75789", "city": "TROUP", "loc": [ -95.12265600000001, 32.104003 ], "pop": 8363, "state": "TX" }, { "_id": "75790", "city": "VAN", "loc": [ -95.654538, 32.528265 ], "pop": 4019, "state": "TX" }, { "_id": "75791", "city": "WHITEHOUSE", "loc": [ -95.226552, 32.221958 ], "pop": 8273, "state": "TX" }, { "_id": "75792", "city": "WINONA", "loc": [ -95.124624, 32.466163 ], "pop": 2825, "state": "TX" }, { "_id": "75801", "city": "PALESTINE", "loc": [ -95.634158, 31.758752 ], "pop": 26466, "state": "TX" }, { "_id": "75831", "city": "FREESTONE", "loc": [ -96.058516, 31.457151 ], "pop": 3404, "state": "TX" }, { "_id": "75833", "city": "CENTERVILLE", "loc": [ -95.92128700000001, 31.272025 ], "pop": 2618, "state": "TX" }, { "_id": "75835", "city": "AUSTONIO", "loc": [ -95.46832999999999, 31.315067 ], "pop": 11698, "state": "TX" }, { "_id": "75838", "city": "DONIE", "loc": [ -96.238687, 31.487285 ], "pop": 334, "state": "TX" }, { "_id": "75839", "city": "SLOCUM", "loc": [ -95.55323199999999, 31.635087 ], "pop": 4767, "state": "TX" }, { "_id": "75840", "city": "FAIRFIELD", "loc": [ -96.15717600000001, 31.736136 ], "pop": 6331, "state": "TX" }, { "_id": "75844", "city": "GRAPELAND", "loc": [ -95.44471299999999, 31.49721 ], "pop": 4705, "state": "TX" }, { "_id": "75845", "city": "GROVETON", "loc": [ -95.09689400000001, 31.065142 ], "pop": 2206, "state": "TX" }, { "_id": "75846", "city": "JEWETT", "loc": [ -96.191841, 31.373925 ], "pop": 2112, "state": "TX" }, { "_id": "75847", "city": "KENNARD", "loc": [ -95.154118, 31.338449 ], "pop": 1784, "state": "TX" }, { "_id": "75850", "city": "LEONA", "loc": [ -95.928428, 31.14207 ], "pop": 475, "state": "TX" }, { "_id": "75851", "city": "LOVELADY", "loc": [ -95.550057, 31.0564 ], "pop": 3649, "state": "TX" }, { "_id": "75852", "city": "MIDWAY", "loc": [ -95.70894, 30.980579 ], "pop": 3522, "state": "TX" }, { "_id": "75853", "city": "MONTALBA", "loc": [ -95.75926, 31.922165 ], "pop": 2070, "state": "TX" }, { "_id": "75855", "city": "OAKWOOD", "loc": [ -95.902151, 31.602312 ], "pop": 2637, "state": "TX" }, { "_id": "75856", "city": "PENNINGTON", "loc": [ -95.15867799999999, 31.161843 ], "pop": 565, "state": "TX" }, { "_id": "75859", "city": "STREETMAN", "loc": [ -96.29876299999999, 31.888532 ], "pop": 488, "state": "TX" }, { "_id": "75860", "city": "TEAGUE", "loc": [ -96.27778000000001, 31.632772 ], "pop": 5318, "state": "TX" }, { "_id": "75861", "city": "TENNESSEE COLONY", "loc": [ -95.899798, 31.792882 ], "pop": 11380, "state": "TX" }, { "_id": "75862", "city": "TRINITY", "loc": [ -95.340295, 30.941951 ], "pop": 7585, "state": "TX" }, { "_id": "75901", "city": "KELTYS", "loc": [ -94.734185, 31.336004 ], "pop": 46763, "state": "TX" }, { "_id": "75925", "city": "FOREST", "loc": [ -95.079786, 31.647815 ], "pop": 3203, "state": "TX" }, { "_id": "75926", "city": "APPLE SPRINGS", "loc": [ -94.98115199999999, 31.226923 ], "pop": 1079, "state": "TX" }, { "_id": "75928", "city": "BON WIER", "loc": [ -93.766465, 30.687557 ], "pop": 2283, "state": "TX" }, { "_id": "75929", "city": "BROADDUS", "loc": [ -94.215552, 31.295241 ], "pop": 1786, "state": "TX" }, { "_id": "75930", "city": "BRONSON", "loc": [ -93.999256, 31.339056 ], "pop": 1922, "state": "TX" }, { "_id": "75931", "city": "BROOKELAND", "loc": [ -94.00356600000001, 31.106273 ], "pop": 1883, "state": "TX" }, { "_id": "75932", "city": "BURKEVILLE", "loc": [ -93.658517, 31.009934 ], "pop": 2275, "state": "TX" }, { "_id": "75933", "city": "CALL", "loc": [ -93.833355, 30.574132 ], "pop": 1813, "state": "TX" }, { "_id": "75935", "city": "CENTER", "loc": [ -94.186947, 31.786468 ], "pop": 11512, "state": "TX" }, { "_id": "75936", "city": "CHESTER", "loc": [ -94.458099, 30.928532 ], "pop": 1588, "state": "TX" }, { "_id": "75937", "city": "CHIRENO", "loc": [ -94.430244, 31.511935 ], "pop": 3983, "state": "TX" }, { "_id": "75938", "city": "ROCKLAND", "loc": [ -94.42181100000001, 30.909226 ], "pop": 836, "state": "TX" }, { "_id": "75939", "city": "BARNUM", "loc": [ -94.7959, 31.000657 ], "pop": 3969, "state": "TX" }, { "_id": "75941", "city": "DIBOLL", "loc": [ -94.77291099999999, 31.195028 ], "pop": 7686, "state": "TX" }, { "_id": "75943", "city": "DOUGLASS", "loc": [ -94.869649, 31.657846 ], "pop": 1005, "state": "TX" }, { "_id": "75946", "city": "GARRISON", "loc": [ -94.52660400000001, 31.811111 ], "pop": 2365, "state": "TX" }, { "_id": "75948", "city": "HEMPHILL", "loc": [ -93.79045000000001, 31.316123 ], "pop": 4180, "state": "TX" }, { "_id": "75949", "city": "HUNTINGTON", "loc": [ -94.566237, 31.283714 ], "pop": 8415, "state": "TX" }, { "_id": "75951", "city": "SAM RAYBURN", "loc": [ -94.02148099999999, 30.925348 ], "pop": 14219, "state": "TX" }, { "_id": "75954", "city": "JOAQUIN", "loc": [ -94.060833, 31.943989 ], "pop": 2754, "state": "TX" }, { "_id": "75956", "city": "BON AMI", "loc": [ -93.92793399999999, 30.688217 ], "pop": 5772, "state": "TX" }, { "_id": "75957", "city": "MAGNOLIA SPRINGS", "loc": [ -94.070896, 30.762882 ], "pop": 111, "state": "TX" }, { "_id": "75959", "city": "MILAM", "loc": [ -93.831816, 31.47001 ], "pop": 2187, "state": "TX" }, { "_id": "75960", "city": "MOSCOW", "loc": [ -94.85437, 30.917902 ], "pop": 1018, "state": "TX" }, { "_id": "75961", "city": "APPLEBY", "loc": [ -94.651093, 31.618534 ], "pop": 45332, "state": "TX" }, { "_id": "75966", "city": "NEWTON", "loc": [ -93.7497, 30.835074 ], "pop": 4184, "state": "TX" }, { "_id": "75968", "city": "PINELAND", "loc": [ -93.97542, 31.241782 ], "pop": 1279, "state": "TX" }, { "_id": "75969", "city": "POLLOK", "loc": [ -94.82540299999999, 31.429107 ], "pop": 4725, "state": "TX" }, { "_id": "75972", "city": "SAN AUGUSTINE", "loc": [ -94.132581, 31.515173 ], "pop": 5916, "state": "TX" }, { "_id": "75973", "city": "SHELBYVILLE", "loc": [ -93.969841, 31.713074 ], "pop": 2949, "state": "TX" }, { "_id": "75974", "city": "TENAHA", "loc": [ -94.248773, 31.940812 ], "pop": 1759, "state": "TX" }, { "_id": "75975", "city": "TIMPSON", "loc": [ -94.396733, 31.884089 ], "pop": 3060, "state": "TX" }, { "_id": "75976", "city": "WELLS", "loc": [ -94.969351, 31.499755 ], "pop": 1550, "state": "TX" }, { "_id": "75977", "city": "WIERGATE", "loc": [ -93.803854, 31.041417 ], "pop": 290, "state": "TX" }, { "_id": "75979", "city": "DOGWOOD", "loc": [ -94.425494, 30.775133 ], "pop": 5942, "state": "TX" }, { "_id": "75980", "city": "ZAVALLA", "loc": [ -94.38711499999999, 31.156863 ], "pop": 2295, "state": "TX" }, { "_id": "76006", "city": "ARLINGTON", "loc": [ -97.08342500000001, 32.778494 ], "pop": 18003, "state": "TX" }, { "_id": "76008", "city": "ALEDO", "loc": [ -97.60388500000001, 32.700351 ], "pop": 5148, "state": "TX" }, { "_id": "76009", "city": "ALVARADO", "loc": [ -97.212971, 32.439499 ], "pop": 13229, "state": "TX" }, { "_id": "76010", "city": "ARLINGTON", "loc": [ -97.082576, 32.720368 ], "pop": 42405, "state": "TX" }, { "_id": "76011", "city": "ARLINGTON", "loc": [ -97.100302, 32.758236 ], "pop": 23943, "state": "TX" }, { "_id": "76012", "city": "ARLINGTON", "loc": [ -97.13480800000001, 32.753962 ], "pop": 24141, "state": "TX" }, { "_id": "76013", "city": "ARLINGTON", "loc": [ -97.14416, 32.719905 ], "pop": 30252, "state": "TX" }, { "_id": "76014", "city": "ARLINGTON", "loc": [ -97.08755600000001, 32.695425 ], "pop": 26087, "state": "TX" }, { "_id": "76015", "city": "ARLINGTON", "loc": [ -97.134685, 32.693125 ], "pop": 14544, "state": "TX" }, { "_id": "76016", "city": "ARLINGTON", "loc": [ -97.190466, 32.688898 ], "pop": 28219, "state": "TX" }, { "_id": "76017", "city": "ARLINGTON", "loc": [ -97.159899, 32.65545 ], "pop": 42829, "state": "TX" }, { "_id": "76018", "city": "ARLINGTON", "loc": [ -97.091987, 32.654752 ], "pop": 15590, "state": "TX" }, { "_id": "76020", "city": "AZLE", "loc": [ -97.54115299999999, 32.903453 ], "pop": 18198, "state": "TX" }, { "_id": "76021", "city": "BEDFORD", "loc": [ -97.135797, 32.853579 ], "pop": 31798, "state": "TX" }, { "_id": "76022", "city": "BEDFORD", "loc": [ -97.14535100000001, 32.829749 ], "pop": 13186, "state": "TX" }, { "_id": "76023", "city": "BOYD", "loc": [ -97.586797, 33.059367 ], "pop": 4292, "state": "TX" }, { "_id": "76028", "city": "BURLESON", "loc": [ -97.308959, 32.531624 ], "pop": 33535, "state": "TX" }, { "_id": "76031", "city": "CLEBURNE", "loc": [ -97.39795700000001, 32.342891 ], "pop": 25844, "state": "TX" }, { "_id": "76034", "city": "COLLEYVILLE", "loc": [ -97.14602600000001, 32.88721 ], "pop": 11726, "state": "TX" }, { "_id": "76035", "city": "CRESSON", "loc": [ -97.651931, 32.530714 ], "pop": 265, "state": "TX" }, { "_id": "76036", "city": "CROWLEY", "loc": [ -97.370306, 32.581398 ], "pop": 8749, "state": "TX" }, { "_id": "76039", "city": "EULESS", "loc": [ -97.083212, 32.858172 ], "pop": 22412, "state": "TX" }, { "_id": "76040", "city": "EULESS", "loc": [ -97.09720299999999, 32.826358 ], "pop": 17220, "state": "TX" }, { "_id": "76041", "city": "FORRESTON", "loc": [ -96.887522, 32.281131 ], "pop": 106, "state": "TX" }, { "_id": "76043", "city": "GLEN ROSE", "loc": [ -97.762911, 32.229762 ], "pop": 4432, "state": "TX" }, { "_id": "76044", "city": "GODLEY", "loc": [ -97.534865, 32.428174 ], "pop": 2595, "state": "TX" }, { "_id": "76048", "city": "GRANBURY", "loc": [ -97.774173, 32.42505 ], "pop": 13718, "state": "TX" }, { "_id": "76049", "city": "GRANBURY", "loc": [ -97.72848399999999, 32.448811 ], "pop": 10830, "state": "TX" }, { "_id": "76050", "city": "GRANDVIEW", "loc": [ -97.235069, 32.277856 ], "pop": 4850, "state": "TX" }, { "_id": "76051", "city": "GRAPEVINE", "loc": [ -97.096203, 32.93143 ], "pop": 30774, "state": "TX" }, { "_id": "76052", "city": "HASLET", "loc": [ -97.33718500000001, 32.955734 ], "pop": 866, "state": "TX" }, { "_id": "76053", "city": "HURST", "loc": [ -97.175613, 32.821107 ], "pop": 24835, "state": "TX" }, { "_id": "76054", "city": "HURST", "loc": [ -97.175521, 32.855832 ], "pop": 9953, "state": "TX" }, { "_id": "76055", "city": "ITASCA", "loc": [ -97.146034, 32.163589 ], "pop": 2341, "state": "TX" }, { "_id": "76058", "city": "JOSHUA", "loc": [ -97.401123, 32.466252 ], "pop": 12544, "state": "TX" }, { "_id": "76059", "city": "KEENE", "loc": [ -97.32868000000001, 32.393659 ], "pop": 5863, "state": "TX" }, { "_id": "76060", "city": "KENNEDALE", "loc": [ -97.213853, 32.64316 ], "pop": 5362, "state": "TX" }, { "_id": "76063", "city": "MANSFIELD", "loc": [ -97.14155100000001, 32.577258 ], "pop": 17381, "state": "TX" }, { "_id": "76064", "city": "MAYPEARL", "loc": [ -96.98802999999999, 32.327878 ], "pop": 2842, "state": "TX" }, { "_id": "76065", "city": "MIDLOTHIAN", "loc": [ -96.993551, 32.475743 ], "pop": 10271, "state": "TX" }, { "_id": "76066", "city": "MILLSAP", "loc": [ -97.87838600000001, 32.670019 ], "pop": 9110, "state": "TX" }, { "_id": "76067", "city": "MINERAL WELLS", "loc": [ -98.063051, 32.810283 ], "pop": 23617, "state": "TX" }, { "_id": "76070", "city": "NEMO", "loc": [ -97.656668, 32.271312 ], "pop": 206, "state": "TX" }, { "_id": "76071", "city": "NEWARK", "loc": [ -97.510696, 33.007099 ], "pop": 2670, "state": "TX" }, { "_id": "76073", "city": "PARADISE", "loc": [ -97.697423, 33.082607 ], "pop": 3009, "state": "TX" }, { "_id": "76077", "city": "RAINBOW", "loc": [ -97.70652, 32.281216 ], "pop": 722, "state": "TX" }, { "_id": "76078", "city": "RHOME", "loc": [ -97.48168800000001, 33.054045 ], "pop": 1771, "state": "TX" }, { "_id": "76082", "city": "SPRINGTOWN", "loc": [ -97.634951, 32.966021 ], "pop": 7377, "state": "TX" }, { "_id": "76084", "city": "VENUS", "loc": [ -97.108734, 32.432975 ], "pop": 2726, "state": "TX" }, { "_id": "76086", "city": "WEATHERFORD", "loc": [ -97.738591, 32.784074 ], "pop": 29937, "state": "TX" }, { "_id": "76087", "city": "WEATHERFORD", "loc": [ -97.68943899999999, 32.749473 ], "pop": 2502, "state": "TX" }, { "_id": "76092", "city": "GRAPEVINE", "loc": [ -97.148066, 32.956456 ], "pop": 5638, "state": "TX" }, { "_id": "76093", "city": "RIO VISTA", "loc": [ -97.367825, 32.253168 ], "pop": 1819, "state": "TX" }, { "_id": "76102", "city": "FORT WORTH", "loc": [ -97.328023, 32.758897 ], "pop": 8550, "state": "TX" }, { "_id": "76103", "city": "FORT WORTH", "loc": [ -97.26039400000001, 32.747005 ], "pop": 12611, "state": "TX" }, { "_id": "76104", "city": "FORT WORTH", "loc": [ -97.318409, 32.725551 ], "pop": 20012, "state": "TX" }, { "_id": "76105", "city": "FORT WORTH", "loc": [ -97.26899, 32.723325 ], "pop": 20947, "state": "TX" }, { "_id": "76106", "city": "FORT WORTH", "loc": [ -97.356008, 32.796849 ], "pop": 44367, "state": "TX" }, { "_id": "76107", "city": "FORT WORTH", "loc": [ -97.385248, 32.739175 ], "pop": 27082, "state": "TX" }, { "_id": "76108", "city": "WHITE SETTLEMENT", "loc": [ -97.474063, 32.759271 ], "pop": 22510, "state": "TX" }, { "_id": "76109", "city": "FORT WORTH", "loc": [ -97.37887600000001, 32.700246 ], "pop": 21893, "state": "TX" }, { "_id": "76110", "city": "FORT WORTH", "loc": [ -97.33750499999999, 32.706505 ], "pop": 27828, "state": "TX" }, { "_id": "76111", "city": "FORT WORTH", "loc": [ -97.300327, 32.782382 ], "pop": 17740, "state": "TX" }, { "_id": "76112", "city": "FORT WORTH", "loc": [ -97.21812199999999, 32.749297 ], "pop": 35311, "state": "TX" }, { "_id": "76114", "city": "RIVER OAKS", "loc": [ -97.401526, 32.775379 ], "pop": 21921, "state": "TX" }, { "_id": "76115", "city": "FORT WORTH", "loc": [ -97.333634, 32.679618 ], "pop": 16544, "state": "TX" }, { "_id": "76116", "city": "FORT WORTH", "loc": [ -97.448279, 32.723032 ], "pop": 38210, "state": "TX" }, { "_id": "76117", "city": "HALTOM CITY", "loc": [ -97.27089100000001, 32.808742 ], "pop": 27312, "state": "TX" }, { "_id": "76118", "city": "NORTH RICHLAND H", "loc": [ -97.222781, 32.808944 ], "pop": 9764, "state": "TX" }, { "_id": "76119", "city": "FORT WORTH", "loc": [ -97.267492, 32.691379 ], "pop": 36951, "state": "TX" }, { "_id": "76120", "city": "FORT WORTH", "loc": [ -97.178112, 32.763912 ], "pop": 8601, "state": "TX" }, { "_id": "76123", "city": "FORT WORTH", "loc": [ -97.365838, 32.625361 ], "pop": 5314, "state": "TX" }, { "_id": "76126", "city": "BENBROOK", "loc": [ -97.464141, 32.670023 ], "pop": 14301, "state": "TX" }, { "_id": "76127", "city": "CARSWELL AFB", "loc": [ -97.435453, 32.771846 ], "pop": 940, "state": "TX" }, { "_id": "76131", "city": "FORT WORTH", "loc": [ -97.337656, 32.863156 ], "pop": 3738, "state": "TX" }, { "_id": "76132", "city": "FORT WORTH", "loc": [ -97.405626, 32.671092 ], "pop": 13724, "state": "TX" }, { "_id": "76133", "city": "FORT WORTH", "loc": [ -97.375849, 32.652561 ], "pop": 44032, "state": "TX" }, { "_id": "76134", "city": "FORT WORTH", "loc": [ -97.33246699999999, 32.646886 ], "pop": 17442, "state": "TX" }, { "_id": "76135", "city": "FORT WORTH", "loc": [ -97.45191, 32.824844 ], "pop": 13135, "state": "TX" }, { "_id": "76137", "city": "FORT WORTH", "loc": [ -97.289114, 32.866421 ], "pop": 15226, "state": "TX" }, { "_id": "76140", "city": "EVERMAN", "loc": [ -97.27040599999999, 32.631332 ], "pop": 17658, "state": "TX" }, { "_id": "76148", "city": "WATAUGA", "loc": [ -97.24902899999999, 32.8681 ], "pop": 22794, "state": "TX" }, { "_id": "76155", "city": "FORT WORTH", "loc": [ -97.050285, 32.824742 ], "pop": 2096, "state": "TX" }, { "_id": "76177", "city": "FORT WORTH", "loc": [ -97.332671, 32.901017 ], "pop": 61, "state": "TX" }, { "_id": "76179", "city": "SAGINAW", "loc": [ -97.403149, 32.872961 ], "pop": 15143, "state": "TX" }, { "_id": "76180", "city": "NORTH RICHLAND H", "loc": [ -97.220714, 32.853966 ], "pop": 44496, "state": "TX" }, { "_id": "76201", "city": "DENTON", "loc": [ -97.13143599999999, 33.22893 ], "pop": 48643, "state": "TX" }, { "_id": "76205", "city": "DENTON", "loc": [ -97.101833, 33.180106 ], "pop": 27830, "state": "TX" }, { "_id": "76225", "city": "ALVORD", "loc": [ -97.68848800000001, 33.36982 ], "pop": 1748, "state": "TX" }, { "_id": "76226", "city": "ARGYLE", "loc": [ -97.159977, 33.106244 ], "pop": 4420, "state": "TX" }, { "_id": "76227", "city": "AUBREY", "loc": [ -96.987866, 33.291997 ], "pop": 3089, "state": "TX" }, { "_id": "76228", "city": "BELLEVUE", "loc": [ -98.15737300000001, 33.58789 ], "pop": 1697, "state": "TX" }, { "_id": "76230", "city": "BOWIE", "loc": [ -97.83733700000001, 33.556796 ], "pop": 8686, "state": "TX" }, { "_id": "76233", "city": "COLLINSVILLE", "loc": [ -96.901365, 33.558012 ], "pop": 1681, "state": "TX" }, { "_id": "76234", "city": "DECATUR", "loc": [ -97.573995, 33.235077 ], "pop": 9323, "state": "TX" }, { "_id": "76238", "city": "ERA", "loc": [ -97.29235799999999, 33.50101 ], "pop": 264, "state": "TX" }, { "_id": "76239", "city": "FORESTBURG", "loc": [ -97.584774, 33.539778 ], "pop": 805, "state": "TX" }, { "_id": "76240", "city": "LAKE KIOWA", "loc": [ -97.103208, 33.625943 ], "pop": 24108, "state": "TX" }, { "_id": "76245", "city": "GORDONVILLE", "loc": [ -96.84027, 33.834283 ], "pop": 1664, "state": "TX" }, { "_id": "76247", "city": "JUSTIN", "loc": [ -97.309254, 33.073375 ], "pop": 3422, "state": "TX" }, { "_id": "76248", "city": "KELLER", "loc": [ -97.24888300000001, 32.927556 ], "pop": 14313, "state": "TX" }, { "_id": "76249", "city": "KRUM", "loc": [ -97.26745200000001, 33.27337 ], "pop": 3198, "state": "TX" }, { "_id": "76250", "city": "LINDSAY", "loc": [ -97.221436, 33.63601 ], "pop": 610, "state": "TX" }, { "_id": "76251", "city": "MONTAGUE", "loc": [ -97.72822600000001, 33.663899 ], "pop": 617, "state": "TX" }, { "_id": "76252", "city": "MUENSTER", "loc": [ -97.362409, 33.659549 ], "pop": 3042, "state": "TX" }, { "_id": "76255", "city": "NOCONA", "loc": [ -97.72698200000001, 33.798163 ], "pop": 4365, "state": "TX" }, { "_id": "76258", "city": "PILOT POINT", "loc": [ -96.944554, 33.370983 ], "pop": 4183, "state": "TX" }, { "_id": "76259", "city": "PONDER", "loc": [ -97.28481499999999, 33.177383 ], "pop": 1443, "state": "TX" }, { "_id": "76261", "city": "RINGGOLD", "loc": [ -97.94398200000001, 33.816392 ], "pop": 243, "state": "TX" }, { "_id": "76262", "city": "TROPHY CLUB", "loc": [ -97.20534600000001, 32.98639 ], "pop": 11484, "state": "TX" }, { "_id": "76263", "city": "ROSSTON", "loc": [ -97.454172, 33.483795 ], "pop": 30, "state": "TX" }, { "_id": "76264", "city": "SADLER", "loc": [ -96.840017, 33.730989 ], "pop": 349, "state": "TX" }, { "_id": "76265", "city": "SAINT JO", "loc": [ -97.55675599999999, 33.744024 ], "pop": 2071, "state": "TX" }, { "_id": "76266", "city": "SANGER", "loc": [ -97.181432, 33.356266 ], "pop": 7440, "state": "TX" }, { "_id": "76270", "city": "SUNSET", "loc": [ -97.77089100000001, 33.453909 ], "pop": 487, "state": "TX" }, { "_id": "76271", "city": "TIOGA", "loc": [ -96.909712, 33.467493 ], "pop": 857, "state": "TX" }, { "_id": "76272", "city": "VALLEY VIEW", "loc": [ -97.231053, 33.502166 ], "pop": 2754, "state": "TX" }, { "_id": "76273", "city": "WHITESBORO", "loc": [ -96.878984, 33.659021 ], "pop": 5920, "state": "TX" }, { "_id": "76301", "city": "WICHITA FALLS", "loc": [ -98.49764500000001, 33.905284 ], "pop": 15309, "state": "TX" }, { "_id": "76302", "city": "WICHITA FALLS", "loc": [ -98.493987, 33.864278 ], "pop": 10724, "state": "TX" }, { "_id": "76303", "city": "WICHITA FALLS", "loc": [ -98.460812, 33.899837 ], "pop": 3922, "state": "TX" }, { "_id": "76304", "city": "WICHITA FALLS", "loc": [ -98.500491, 33.930806 ], "pop": 4529, "state": "TX" }, { "_id": "76305", "city": "WICHITA FALLS", "loc": [ -98.540679, 33.937345 ], "pop": 8522, "state": "TX" }, { "_id": "76306", "city": "WICHITA FALLS", "loc": [ -98.524835, 33.974595 ], "pop": 6808, "state": "TX" }, { "_id": "76308", "city": "WICHITA FALLS", "loc": [ -98.53396499999999, 33.863258 ], "pop": 19151, "state": "TX" }, { "_id": "76309", "city": "WICHITA FALLS", "loc": [ -98.534288, 33.893084 ], "pop": 12500, "state": "TX" }, { "_id": "76310", "city": "WICHITA FALLS", "loc": [ -98.575548, 33.858122 ], "pop": 11497, "state": "TX" }, { "_id": "76311", "city": "SHEPPARD AFB", "loc": [ -98.508771, 33.982353 ], "pop": 7080, "state": "TX" }, { "_id": "76354", "city": "BURKBURNETT", "loc": [ -98.570842, 34.085989 ], "pop": 10558, "state": "TX" }, { "_id": "76357", "city": "BYERS", "loc": [ -98.18392900000001, 34.072812 ], "pop": 665, "state": "TX" }, { "_id": "76359", "city": "ELBERT", "loc": [ -99.05521400000001, 33.015687 ], "pop": 445, "state": "TX" }, { "_id": "76360", "city": "ELECTRA", "loc": [ -98.91545000000001, 34.036234 ], "pop": 3580, "state": "TX" }, { "_id": "76363", "city": "GOREE", "loc": [ -99.525806, 33.474832 ], "pop": 523, "state": "TX" }, { "_id": "76364", "city": "HARROLD", "loc": [ -99.03505199999999, 34.097097 ], "pop": 369, "state": "TX" }, { "_id": "76365", "city": "HENRIETTA", "loc": [ -98.25997599999999, 33.819609 ], "pop": 6020, "state": "TX" }, { "_id": "76366", "city": "HOLLIDAY", "loc": [ -98.657634, 33.675141 ], "pop": 5949, "state": "TX" }, { "_id": "76367", "city": "IOWA PARK", "loc": [ -98.674497, 33.94235 ], "pop": 9443, "state": "TX" }, { "_id": "76371", "city": "MUNDAY", "loc": [ -99.63262400000001, 33.456088 ], "pop": 2028, "state": "TX" }, { "_id": "76372", "city": "NEWCASTLE", "loc": [ -98.74464399999999, 33.190103 ], "pop": 905, "state": "TX" }, { "_id": "76373", "city": "OKLAUNION", "loc": [ -99.160234, 34.120372 ], "pop": 338, "state": "TX" }, { "_id": "76374", "city": "OLNEY", "loc": [ -98.742695, 33.360135 ], "pop": 4554, "state": "TX" }, { "_id": "76377", "city": "PETROLIA", "loc": [ -98.269223, 34.027331 ], "pop": 1642, "state": "TX" }, { "_id": "76379", "city": "SCOTLAND", "loc": [ -98.464983, 33.653486 ], "pop": 398, "state": "TX" }, { "_id": "76380", "city": "SEYMOUR", "loc": [ -99.25872699999999, 33.591445 ], "pop": 4208, "state": "TX" }, { "_id": "76383", "city": "VERA", "loc": [ -99.75909799999999, 33.615469 ], "pop": 481, "state": "TX" }, { "_id": "76384", "city": "VERNON", "loc": [ -99.30301, 34.149135 ], "pop": 14414, "state": "TX" }, { "_id": "76388", "city": "WEINERT", "loc": [ -99.666431, 33.324872 ], "pop": 301, "state": "TX" }, { "_id": "76389", "city": "WINDTHORST", "loc": [ -98.437589, 33.57957 ], "pop": 381, "state": "TX" }, { "_id": "76401", "city": "STEPHENVILLE", "loc": [ -98.222407, 32.221372 ], "pop": 19745, "state": "TX" }, { "_id": "76424", "city": "BRECKENRIDGE", "loc": [ -98.909882, 32.753166 ], "pop": 8803, "state": "TX" }, { "_id": "76426", "city": "BRIDGEPORT", "loc": [ -97.78098, 33.187027 ], "pop": 9158, "state": "TX" }, { "_id": "76427", "city": "BRYSON", "loc": [ -98.370256, 33.15947 ], "pop": 915, "state": "TX" }, { "_id": "76429", "city": "CADDO", "loc": [ -98.65898300000001, 32.688617 ], "pop": 127, "state": "TX" }, { "_id": "76430", "city": "ALBANY", "loc": [ -99.319581, 32.719005 ], "pop": 2858, "state": "TX" }, { "_id": "76431", "city": "CHICO", "loc": [ -97.803133, 33.319315 ], "pop": 2657, "state": "TX" }, { "_id": "76432", "city": "BLANKET", "loc": [ -98.83108900000001, 31.78819 ], "pop": 1929, "state": "TX" }, { "_id": "76433", "city": "BLUFF DALE", "loc": [ -98.163775, 32.401791 ], "pop": 1751, "state": "TX" }, { "_id": "76435", "city": "CARBON", "loc": [ -98.83479, 32.270125 ], "pop": 462, "state": "TX" }, { "_id": "76436", "city": "CARLTON", "loc": [ -98.152519, 31.911438 ], "pop": 235, "state": "TX" }, { "_id": "76437", "city": "CISCO", "loc": [ -98.986507, 32.380043 ], "pop": 4906, "state": "TX" }, { "_id": "76442", "city": "COMANCHE", "loc": [ -98.608227, 31.911637 ], "pop": 7208, "state": "TX" }, { "_id": "76443", "city": "CROSS PLAINS", "loc": [ -99.18718, 32.148159 ], "pop": 1928, "state": "TX" }, { "_id": "76444", "city": "DE LEON", "loc": [ -98.54894, 32.108742 ], "pop": 4401, "state": "TX" }, { "_id": "76445", "city": "DESDEMONA", "loc": [ -98.56732700000001, 32.281877 ], "pop": 366, "state": "TX" }, { "_id": "76446", "city": "DUBLIN", "loc": [ -98.34546899999999, 32.090873 ], "pop": 5029, "state": "TX" }, { "_id": "76448", "city": "EASTLAND", "loc": [ -98.807101, 32.399418 ], "pop": 5837, "state": "TX" }, { "_id": "76449", "city": "GRAFORD", "loc": [ -98.337002, 32.924192 ], "pop": 2235, "state": "TX" }, { "_id": "76450", "city": "GRAHAM", "loc": [ -98.583212, 33.099283 ], "pop": 12511, "state": "TX" }, { "_id": "76453", "city": "GORDON", "loc": [ -98.36321100000001, 32.547828 ], "pop": 566, "state": "TX" }, { "_id": "76454", "city": "GORMAN", "loc": [ -98.683408, 32.223441 ], "pop": 1773, "state": "TX" }, { "_id": "76455", "city": "GUSTINE", "loc": [ -98.383488, 31.872448 ], "pop": 1680, "state": "TX" }, { "_id": "76457", "city": "HICO", "loc": [ -98.024933, 31.959718 ], "pop": 1962, "state": "TX" }, { "_id": "76458", "city": "JACKSBORO", "loc": [ -98.168138, 33.234655 ], "pop": 4664, "state": "TX" }, { "_id": "76459", "city": "JERMYN", "loc": [ -98.39314899999999, 33.263554 ], "pop": 154, "state": "TX" }, { "_id": "76460", "city": "LOVING", "loc": [ -98.50237, 33.26886 ], "pop": 156, "state": "TX" }, { "_id": "76462", "city": "LIPAN", "loc": [ -97.953614, 32.507218 ], "pop": 1582, "state": "TX" }, { "_id": "76463", "city": "MINGUS", "loc": [ -98.42626199999999, 32.562665 ], "pop": 278, "state": "TX" }, { "_id": "76464", "city": "MORAN", "loc": [ -99.165567, 32.554909 ], "pop": 458, "state": "TX" }, { "_id": "76470", "city": "RANGER", "loc": [ -98.67465900000001, 32.46809 ], "pop": 3414, "state": "TX" }, { "_id": "76471", "city": "RISING STAR", "loc": [ -98.98585199999999, 32.127986 ], "pop": 1810, "state": "TX" }, { "_id": "76472", "city": "SANTO", "loc": [ -98.179675, 32.597935 ], "pop": 1433, "state": "TX" }, { "_id": "76474", "city": "SIDNEY", "loc": [ -98.767995, 31.932031 ], "pop": 92, "state": "TX" }, { "_id": "76475", "city": "STRAWN", "loc": [ -98.499467, 32.5945 ], "pop": 968, "state": "TX" }, { "_id": "76476", "city": "TOLAR", "loc": [ -97.880208, 32.377246 ], "pop": 2586, "state": "TX" }, { "_id": "76483", "city": "THROCKMORTON", "loc": [ -99.183812, 33.179446 ], "pop": 1321, "state": "TX" }, { "_id": "76484", "city": "PALO PINTO", "loc": [ -98.270262, 32.725315 ], "pop": 867, "state": "TX" }, { "_id": "76486", "city": "PERRIN", "loc": [ -98.044006, 33.058453 ], "pop": 1065, "state": "TX" }, { "_id": "76487", "city": "POOLVILLE", "loc": [ -97.847229, 32.968023 ], "pop": 1549, "state": "TX" }, { "_id": "76490", "city": "WHITT", "loc": [ -98.02100799999999, 32.955459 ], "pop": 305, "state": "TX" }, { "_id": "76491", "city": "WOODSON", "loc": [ -99.015953, 33.301972 ], "pop": 114, "state": "TX" }, { "_id": "76501", "city": "TEMPLE", "loc": [ -97.334264, 31.089518 ], "pop": 16400, "state": "TX" }, { "_id": "76502", "city": "TEMPLE", "loc": [ -97.389781, 31.071004 ], "pop": 15632, "state": "TX" }, { "_id": "76504", "city": "TEMPLE", "loc": [ -97.36476399999999, 31.091742 ], "pop": 20273, "state": "TX" }, { "_id": "76511", "city": "BARTLETT", "loc": [ -97.42630200000001, 30.799056 ], "pop": 727, "state": "TX" }, { "_id": "76513", "city": "BELTON", "loc": [ -97.472025, 31.072298 ], "pop": 20331, "state": "TX" }, { "_id": "76518", "city": "BUCKHOLTS", "loc": [ -97.124135, 30.885756 ], "pop": 1072, "state": "TX" }, { "_id": "76519", "city": "BURLINGTON", "loc": [ -96.88530799999999, 30.945691 ], "pop": 1312, "state": "TX" }, { "_id": "76520", "city": "CAMERON", "loc": [ -96.976562, 30.852713 ], "pop": 6965, "state": "TX" }, { "_id": "76522", "city": "IZORO", "loc": [ -97.912132, 31.125799 ], "pop": 26431, "state": "TX" }, { "_id": "76523", "city": "DAVILLA", "loc": [ -97.20086499999999, 30.767471 ], "pop": 1079, "state": "TX" }, { "_id": "76524", "city": "EDDY", "loc": [ -97.270926, 31.326724 ], "pop": 2544, "state": "TX" }, { "_id": "76525", "city": "BEE HOUSE", "loc": [ -98.05517500000001, 31.403967 ], "pop": 1179, "state": "TX" }, { "_id": "76526", "city": "FLAT", "loc": [ -97.589777, 31.306475 ], "pop": 774, "state": "TX" }, { "_id": "76527", "city": "FLORENCE", "loc": [ -97.834423, 30.78137 ], "pop": 3703, "state": "TX" }, { "_id": "76528", "city": "TURNERSVILLE", "loc": [ -97.72428600000001, 31.447646 ], "pop": 14415, "state": "TX" }, { "_id": "76530", "city": "GRANGER", "loc": [ -97.445065, 30.739813 ], "pop": 3160, "state": "TX" }, { "_id": "76531", "city": "HAMILTON", "loc": [ -98.113051, 31.678116 ], "pop": 5260, "state": "TX" }, { "_id": "76534", "city": "HOLLAND", "loc": [ -97.385695, 30.879977 ], "pop": 2223, "state": "TX" }, { "_id": "76537", "city": "JARRELL", "loc": [ -97.60083299999999, 30.748406 ], "pop": 3430, "state": "TX" }, { "_id": "76538", "city": "JONESBORO", "loc": [ -97.775155, 31.599601 ], "pop": 793, "state": "TX" }, { "_id": "76539", "city": "KEMPNER", "loc": [ -97.97206799999999, 31.073051 ], "pop": 3884, "state": "TX" }, { "_id": "76541", "city": "KILLEEN", "loc": [ -97.727808, 31.116426 ], "pop": 22853, "state": "TX" }, { "_id": "76542", "city": "HARKER HEIGHTS", "loc": [ -97.746736, 31.075056 ], "pop": 25829, "state": "TX" }, { "_id": "76543", "city": "HARKER HEIGHTS", "loc": [ -97.67686399999999, 31.100505 ], "pop": 35052, "state": "TX" }, { "_id": "76544", "city": "FORT HOOD", "loc": [ -97.776404, 31.137953 ], "pop": 36657, "state": "TX" }, { "_id": "76550", "city": "LAMPASAS", "loc": [ -98.183361, 31.067957 ], "pop": 7698, "state": "TX" }, { "_id": "76556", "city": "MILANO", "loc": [ -96.803477, 30.736612 ], "pop": 2187, "state": "TX" }, { "_id": "76557", "city": "MOODY", "loc": [ -97.40995700000001, 31.253321 ], "pop": 4411, "state": "TX" }, { "_id": "76559", "city": "NOLANVILLE", "loc": [ -97.594109, 31.083271 ], "pop": 1820, "state": "TX" }, { "_id": "76561", "city": "OGLESBY", "loc": [ -97.550093, 31.443767 ], "pop": 1221, "state": "TX" }, { "_id": "76565", "city": "POTTSVILLE", "loc": [ -98.356077, 31.68374 ], "pop": 279, "state": "TX" }, { "_id": "76566", "city": "PURMELA", "loc": [ -97.88894500000001, 31.472647 ], "pop": 1111, "state": "TX" }, { "_id": "76567", "city": "ROCKDALE", "loc": [ -97.00790000000001, 30.658282 ], "pop": 8052, "state": "TX" }, { "_id": "76569", "city": "ROGERS", "loc": [ -97.222793, 30.955013 ], "pop": 2565, "state": "TX" }, { "_id": "76570", "city": "ROSEBUD", "loc": [ -96.975455, 31.092208 ], "pop": 3093, "state": "TX" }, { "_id": "76571", "city": "SALADO", "loc": [ -97.532999, 30.949388 ], "pop": 3454, "state": "TX" }, { "_id": "76574", "city": "TAYLOR", "loc": [ -97.44010299999999, 30.58071 ], "pop": 14135, "state": "TX" }, { "_id": "76577", "city": "THORNDALE", "loc": [ -97.176446, 30.608237 ], "pop": 2279, "state": "TX" }, { "_id": "76578", "city": "THRALL", "loc": [ -97.289261, 30.591981 ], "pop": 852, "state": "TX" }, { "_id": "76579", "city": "TROY", "loc": [ -97.285205, 31.175855 ], "pop": 3791, "state": "TX" }, { "_id": "76621", "city": "ABBOTT", "loc": [ -97.06714599999999, 31.891642 ], "pop": 577, "state": "TX" }, { "_id": "76622", "city": "AQUILLA", "loc": [ -97.22577, 31.858882 ], "pop": 1901, "state": "TX" }, { "_id": "76624", "city": "AXTELL", "loc": [ -96.988178, 31.660966 ], "pop": 3235, "state": "TX" }, { "_id": "76626", "city": "BLOOMING GROVE", "loc": [ -96.700991, 32.075839 ], "pop": 1594, "state": "TX" }, { "_id": "76627", "city": "BLUM", "loc": [ -97.365183, 32.105183 ], "pop": 2737, "state": "TX" }, { "_id": "76629", "city": "BREMOND", "loc": [ -96.66974399999999, 31.156007 ], "pop": 1883, "state": "TX" }, { "_id": "76630", "city": "BRUCEVILLE", "loc": [ -97.234244, 31.326708 ], "pop": 477, "state": "TX" }, { "_id": "76631", "city": "BYNUM", "loc": [ -96.98370199999999, 31.990668 ], "pop": 496, "state": "TX" }, { "_id": "76632", "city": "CHILTON", "loc": [ -97.09002, 31.310018 ], "pop": 2304, "state": "TX" }, { "_id": "76633", "city": "CHINA SPRING", "loc": [ -97.30022099999999, 31.667266 ], "pop": 3030, "state": "TX" }, { "_id": "76634", "city": "LAGUNA PARK", "loc": [ -97.515282, 31.799689 ], "pop": 6410, "state": "TX" }, { "_id": "76635", "city": "COOLIDGE", "loc": [ -96.65774399999999, 31.743804 ], "pop": 1042, "state": "TX" }, { "_id": "76636", "city": "COVINGTON", "loc": [ -97.259091, 32.159538 ], "pop": 767, "state": "TX" }, { "_id": "76637", "city": "CRANFILLS GAP", "loc": [ -97.78537, 31.781071 ], "pop": 687, "state": "TX" }, { "_id": "76638", "city": "CRAWFORD", "loc": [ -97.38999200000001, 31.559765 ], "pop": 3473, "state": "TX" }, { "_id": "76639", "city": "DAWSON", "loc": [ -96.708483, 31.897429 ], "pop": 1457, "state": "TX" }, { "_id": "76640", "city": "ELM MOTT", "loc": [ -97.113838, 31.672547 ], "pop": 4183, "state": "TX" }, { "_id": "76641", "city": "FROST", "loc": [ -96.76843700000001, 32.027545 ], "pop": 1831, "state": "TX" }, { "_id": "76642", "city": "GROESBECK", "loc": [ -96.523381, 31.535667 ], "pop": 5538, "state": "TX" }, { "_id": "76643", "city": "HEWITT", "loc": [ -97.196556, 31.458166 ], "pop": 8487, "state": "TX" }, { "_id": "76645", "city": "HILLSBORO", "loc": [ -97.11979100000001, 32.014942 ], "pop": 8966, "state": "TX" }, { "_id": "76648", "city": "HUBBARD", "loc": [ -96.80001, 31.843559 ], "pop": 2015, "state": "TX" }, { "_id": "76649", "city": "IREDELL", "loc": [ -97.879283, 31.972197 ], "pop": 813, "state": "TX" }, { "_id": "76651", "city": "ITALY", "loc": [ -96.88229, 32.178508 ], "pop": 2321, "state": "TX" }, { "_id": "76652", "city": "KOPPERL", "loc": [ -97.542085, 32.103491 ], "pop": 820, "state": "TX" }, { "_id": "76653", "city": "KOSSE", "loc": [ -96.61947499999999, 31.314704 ], "pop": 854, "state": "TX" }, { "_id": "76655", "city": "LORENA", "loc": [ -97.230161, 31.409271 ], "pop": 4007, "state": "TX" }, { "_id": "76656", "city": "LOTT", "loc": [ -97.058143, 31.192462 ], "pop": 2005, "state": "TX" }, { "_id": "76657", "city": "MC GREGOR", "loc": [ -97.394318, 31.443099 ], "pop": 5853, "state": "TX" }, { "_id": "76660", "city": "MALONE", "loc": [ -96.890682, 31.923979 ], "pop": 491, "state": "TX" }, { "_id": "76661", "city": "MARLIN", "loc": [ -96.888942, 31.303592 ], "pop": 8810, "state": "TX" }, { "_id": "76664", "city": "MART", "loc": [ -96.838133, 31.545798 ], "pop": 2588, "state": "TX" }, { "_id": "76665", "city": "MERIDIAN", "loc": [ -97.64433, 31.929022 ], "pop": 2354, "state": "TX" }, { "_id": "76666", "city": "MERTENS", "loc": [ -96.898128, 32.02753 ], "pop": 328, "state": "TX" }, { "_id": "76667", "city": "MEXIA", "loc": [ -96.495186, 31.678386 ], "pop": 10971, "state": "TX" }, { "_id": "76670", "city": "MILFORD", "loc": [ -96.96115, 32.148198 ], "pop": 1259, "state": "TX" }, { "_id": "76671", "city": "MORGAN", "loc": [ -97.560829, 32.01946 ], "pop": 1403, "state": "TX" }, { "_id": "76673", "city": "MOUNT CALM", "loc": [ -96.89439299999999, 31.757504 ], "pop": 612, "state": "TX" }, { "_id": "76675", "city": "OTTO", "loc": [ -96.87590400000001, 31.432733 ], "pop": 776, "state": "TX" }, { "_id": "76676", "city": "PENELOPE", "loc": [ -96.937164, 31.855148 ], "pop": 613, "state": "TX" }, { "_id": "76678", "city": "PRAIRIE HILL", "loc": [ -96.809381, 31.659097 ], "pop": 657, "state": "TX" }, { "_id": "76679", "city": "PURDON", "loc": [ -96.58561899999999, 31.948285 ], "pop": 752, "state": "TX" }, { "_id": "76680", "city": "REAGAN", "loc": [ -96.74194300000001, 31.229713 ], "pop": 796, "state": "TX" }, { "_id": "76681", "city": "RICHLAND", "loc": [ -96.437262, 31.901785 ], "pop": 512, "state": "TX" }, { "_id": "76682", "city": "RIESEL", "loc": [ -96.94764000000001, 31.500247 ], "pop": 2488, "state": "TX" }, { "_id": "76687", "city": "THORNTON", "loc": [ -96.50237799999999, 31.408326 ], "pop": 1438, "state": "TX" }, { "_id": "76689", "city": "VALLEY MILLS", "loc": [ -97.493461, 31.659876 ], "pop": 1796, "state": "TX" }, { "_id": "76690", "city": "WALNUT SPRINGS", "loc": [ -97.751423, 32.059268 ], "pop": 842, "state": "TX" }, { "_id": "76691", "city": "WEST", "loc": [ -97.125843, 31.775385 ], "pop": 6222, "state": "TX" }, { "_id": "76692", "city": "BONANZA", "loc": [ -97.33495000000001, 31.959201 ], "pop": 5302, "state": "TX" }, { "_id": "76693", "city": "WORTHAM", "loc": [ -96.420208, 31.786542 ], "pop": 1602, "state": "TX" }, { "_id": "76701", "city": "WACO", "loc": [ -97.139608, 31.552452 ], "pop": 1752, "state": "TX" }, { "_id": "76704", "city": "BELLMEAD", "loc": [ -97.12674199999999, 31.575701 ], "pop": 8919, "state": "TX" }, { "_id": "76705", "city": "BELLMEAD", "loc": [ -97.09457500000001, 31.610787 ], "pop": 18763, "state": "TX" }, { "_id": "76706", "city": "WACO", "loc": [ -97.11975200000001, 31.517086 ], "pop": 31263, "state": "TX" }, { "_id": "76707", "city": "WACO", "loc": [ -97.158824, 31.552709 ], "pop": 15905, "state": "TX" }, { "_id": "76708", "city": "WACO", "loc": [ -97.178635, 31.576544 ], "pop": 18436, "state": "TX" }, { "_id": "76710", "city": "WACO", "loc": [ -97.189891, 31.534981 ], "pop": 22014, "state": "TX" }, { "_id": "76711", "city": "BEVERLY HILLS", "loc": [ -97.150254, 31.519863 ], "pop": 8736, "state": "TX" }, { "_id": "76712", "city": "WOODWAY", "loc": [ -97.23106199999999, 31.505074 ], "pop": 14756, "state": "TX" }, { "_id": "76801", "city": "EARLY", "loc": [ -98.97516400000001, 31.704658 ], "pop": 24634, "state": "TX" }, { "_id": "76820", "city": "ART", "loc": [ -99.093732, 30.775419 ], "pop": 24, "state": "TX" }, { "_id": "76821", "city": "BALLINGER", "loc": [ -99.958927, 31.746836 ], "pop": 4957, "state": "TX" }, { "_id": "76823", "city": "BANGS", "loc": [ -99.107657, 31.768388 ], "pop": 5681, "state": "TX" }, { "_id": "76824", "city": "BEND", "loc": [ -98.482102, 31.11231 ], "pop": 1, "state": "TX" }, { "_id": "76825", "city": "FIFE", "loc": [ -99.3372, 31.128304 ], "pop": 7280, "state": "TX" }, { "_id": "76827", "city": "BROOKESMITH", "loc": [ -99.127729, 31.517602 ], "pop": 240, "state": "TX" }, { "_id": "76828", "city": "BURKETT", "loc": [ -99.255258, 31.998623 ], "pop": 237, "state": "TX" }, { "_id": "76831", "city": "CASTELL", "loc": [ -98.931859, 30.697429 ], "pop": 64, "state": "TX" }, { "_id": "76832", "city": "CHEROKEE", "loc": [ -98.66332, 30.980598 ], "pop": 127, "state": "TX" }, { "_id": "76834", "city": "COLEMAN", "loc": [ -99.427007, 31.828651 ], "pop": 6300, "state": "TX" }, { "_id": "76836", "city": "DOOLE", "loc": [ -99.550605, 31.415743 ], "pop": 86, "state": "TX" }, { "_id": "76837", "city": "EDEN", "loc": [ -99.840658, 31.219219 ], "pop": 2028, "state": "TX" }, { "_id": "76841", "city": "FORT MC KAVETT", "loc": [ -100.080928, 30.82903 ], "pop": 47, "state": "TX" }, { "_id": "76842", "city": "FREDONIA", "loc": [ -99.12156, 30.921386 ], "pop": 72, "state": "TX" }, { "_id": "76844", "city": "GOLDTHWAITE", "loc": [ -98.574405, 31.445769 ], "pop": 2523, "state": "TX" }, { "_id": "76845", "city": "GOULDBUSK", "loc": [ -99.51363000000001, 31.551075 ], "pop": 159, "state": "TX" }, { "_id": "76848", "city": "HEXT", "loc": [ -99.554008, 30.881632 ], "pop": 60, "state": "TX" }, { "_id": "76849", "city": "JUNCTION", "loc": [ -99.74731, 30.47544 ], "pop": 3248, "state": "TX" }, { "_id": "76852", "city": "LOHN", "loc": [ -99.38334, 31.317297 ], "pop": 233, "state": "TX" }, { "_id": "76853", "city": "LOMETA", "loc": [ -98.400553, 31.216712 ], "pop": 1215, "state": "TX" }, { "_id": "76854", "city": "LONDON", "loc": [ -99.62552700000001, 30.617101 ], "pop": 465, "state": "TX" }, { "_id": "76856", "city": "MASON", "loc": [ -99.226117, 30.743392 ], "pop": 3182, "state": "TX" }, { "_id": "76857", "city": "MAY", "loc": [ -98.96564600000001, 31.957082 ], "pop": 1454, "state": "TX" }, { "_id": "76858", "city": "MELVIN", "loc": [ -99.54389999999999, 31.185145 ], "pop": 361, "state": "TX" }, { "_id": "76859", "city": "MENARD", "loc": [ -99.784721, 30.911898 ], "pop": 2145, "state": "TX" }, { "_id": "76861", "city": "MILES", "loc": [ -100.182292, 31.612052 ], "pop": 1102, "state": "TX" }, { "_id": "76862", "city": "MILLERSVIEW", "loc": [ -99.71713699999999, 31.416745 ], "pop": 137, "state": "TX" }, { "_id": "76864", "city": "MULLIN", "loc": [ -98.66354200000001, 31.574829 ], "pop": 1281, "state": "TX" }, { "_id": "76865", "city": "NORTON", "loc": [ -100.131515, 31.879498 ], "pop": 244, "state": "TX" }, { "_id": "76866", "city": "PAINT ROCK", "loc": [ -99.91393600000001, 31.504808 ], "pop": 400, "state": "TX" }, { "_id": "76867", "city": "PEAR VALLEY", "loc": [ -99.494742, 31.297211 ], "pop": 110, "state": "TX" }, { "_id": "76869", "city": "PONTOTOC", "loc": [ -99.021224, 30.890617 ], "pop": 113, "state": "TX" }, { "_id": "76870", "city": "PRIDDY", "loc": [ -98.501464, 31.687418 ], "pop": 122, "state": "TX" }, { "_id": "76871", "city": "RICHLAND SPRINGS", "loc": [ -98.850731, 31.275317 ], "pop": 1103, "state": "TX" }, { "_id": "76872", "city": "ROCHELLE", "loc": [ -99.157229, 31.300011 ], "pop": 761, "state": "TX" }, { "_id": "76873", "city": "ROCKWOOD", "loc": [ -99.374579, 31.503677 ], "pop": 63, "state": "TX" }, { "_id": "76874", "city": "ROOSEVELT", "loc": [ -99.916501, 30.532203 ], "pop": 382, "state": "TX" }, { "_id": "76875", "city": "ROWENA", "loc": [ -100.019094, 31.64355 ], "pop": 802, "state": "TX" }, { "_id": "76877", "city": "SAN SABA", "loc": [ -98.730929, 31.162678 ], "pop": 4023, "state": "TX" }, { "_id": "76878", "city": "SANTA ANNA", "loc": [ -99.321197, 31.721477 ], "pop": 1835, "state": "TX" }, { "_id": "76880", "city": "STAR", "loc": [ -98.415752, 31.479039 ], "pop": 605, "state": "TX" }, { "_id": "76882", "city": "TALPA", "loc": [ -99.674679, 31.803424 ], "pop": 240, "state": "TX" }, { "_id": "76883", "city": "TELEGRAPH", "loc": [ -99.928369, 30.367365 ], "pop": 27, "state": "TX" }, { "_id": "76884", "city": "VALERA", "loc": [ -99.563962, 31.77314 ], "pop": 201, "state": "TX" }, { "_id": "76885", "city": "VALLEY SPRING", "loc": [ -98.83254100000001, 30.836862 ], "pop": 270, "state": "TX" }, { "_id": "76887", "city": "VOCA", "loc": [ -99.16820300000001, 30.995874 ], "pop": 94, "state": "TX" }, { "_id": "76888", "city": "LEADAY", "loc": [ -99.53853599999999, 31.639194 ], "pop": 227, "state": "TX" }, { "_id": "76890", "city": "ZEPHYR", "loc": [ -98.81819900000001, 31.669429 ], "pop": 433, "state": "TX" }, { "_id": "76901", "city": "SAN ANGELO", "loc": [ -100.481752, 31.478165 ], "pop": 23800, "state": "TX" }, { "_id": "76903", "city": "SAN ANGELO", "loc": [ -100.438586, 31.470735 ], "pop": 32471, "state": "TX" }, { "_id": "76904", "city": "SAN ANGELO", "loc": [ -100.480036, 31.419411 ], "pop": 25535, "state": "TX" }, { "_id": "76905", "city": "SAN ANGELO", "loc": [ -100.390005, 31.464738 ], "pop": 11284, "state": "TX" }, { "_id": "76930", "city": "BARNHART", "loc": [ -101.191752, 31.159647 ], "pop": 178, "state": "TX" }, { "_id": "76932", "city": "BEST", "loc": [ -101.478776, 31.240592 ], "pop": 4514, "state": "TX" }, { "_id": "76933", "city": "BRONTE", "loc": [ -100.298765, 31.878939 ], "pop": 1291, "state": "TX" }, { "_id": "76934", "city": "CARLSBAD", "loc": [ -100.627501, 31.597995 ], "pop": 1886, "state": "TX" }, { "_id": "76935", "city": "CHRISTOVAL", "loc": [ -100.52031, 31.23461 ], "pop": 1639, "state": "TX" }, { "_id": "76936", "city": "ELDORADO", "loc": [ -100.58894, 30.86667 ], "pop": 2990, "state": "TX" }, { "_id": "76937", "city": "EOLA", "loc": [ -100.072892, 31.429812 ], "pop": 479, "state": "TX" }, { "_id": "76940", "city": "MERETA", "loc": [ -100.183391, 31.48632 ], "pop": 768, "state": "TX" }, { "_id": "76941", "city": "MERTZON", "loc": [ -100.822101, 31.282884 ], "pop": 1451, "state": "TX" }, { "_id": "76943", "city": "OZONA", "loc": [ -101.238802, 30.716369 ], "pop": 4076, "state": "TX" }, { "_id": "76945", "city": "ROBERT LEE", "loc": [ -100.510366, 31.895091 ], "pop": 1826, "state": "TX" }, { "_id": "76949", "city": "SILVER", "loc": [ -100.692229, 32.048371 ], "pop": 45, "state": "TX" }, { "_id": "76950", "city": "SONORA", "loc": [ -100.630667, 30.555752 ], "pop": 4135, "state": "TX" }, { "_id": "76951", "city": "STERLING CITY", "loc": [ -101.001729, 31.835063 ], "pop": 1438, "state": "TX" }, { "_id": "76955", "city": "VANCOURT", "loc": [ -100.180367, 31.340417 ], "pop": 256, "state": "TX" }, { "_id": "76957", "city": "WALL", "loc": [ -100.322132, 31.369445 ], "pop": 819, "state": "TX" }, { "_id": "77002", "city": "HOUSTON", "loc": [ -95.35936100000001, 29.759366 ], "pop": 7658, "state": "TX" }, { "_id": "77003", "city": "HOUSTON", "loc": [ -95.339108, 29.748903 ], "pop": 8500, "state": "TX" }, { "_id": "77004", "city": "HOUSTON", "loc": [ -95.36254599999999, 29.724687 ], "pop": 29940, "state": "TX" }, { "_id": "77005", "city": "HOUSTON", "loc": [ -95.426261, 29.717856 ], "pop": 21772, "state": "TX" }, { "_id": "77006", "city": "HOUSTON", "loc": [ -95.39225500000001, 29.740899 ], "pop": 17653, "state": "TX" }, { "_id": "77007", "city": "HOUSTON", "loc": [ -95.40342099999999, 29.773603 ], "pop": 22511, "state": "TX" }, { "_id": "77008", "city": "HOUSTON", "loc": [ -95.41179700000001, 29.799096 ], "pop": 29653, "state": "TX" }, { "_id": "77009", "city": "HOUSTON", "loc": [ -95.367481, 29.793558 ], "pop": 42521, "state": "TX" }, { "_id": "77010", "city": "HOUSTON", "loc": [ -95.356549, 29.75125 ], "pop": 0, "state": "TX" }, { "_id": "77011", "city": "HOUSTON", "loc": [ -95.30726199999999, 29.741992 ], "pop": 22311, "state": "TX" }, { "_id": "77012", "city": "HOUSTON", "loc": [ -95.281925, 29.71491 ], "pop": 23344, "state": "TX" }, { "_id": "77013", "city": "HOUSTON", "loc": [ -95.23013400000001, 29.784169 ], "pop": 17011, "state": "TX" }, { "_id": "77014", "city": "HOUSTON", "loc": [ -95.462497, 29.979637 ], "pop": 11970, "state": "TX" }, { "_id": "77015", "city": "HOUSTON", "loc": [ -95.18518899999999, 29.785287 ], "pop": 42008, "state": "TX" }, { "_id": "77016", "city": "HOUSTON", "loc": [ -95.30319900000001, 29.857855 ], "pop": 31180, "state": "TX" }, { "_id": "77017", "city": "HOUSTON", "loc": [ -95.25548499999999, 29.686301 ], "pop": 26502, "state": "TX" }, { "_id": "77018", "city": "HOUSTON", "loc": [ -95.426631, 29.827166 ], "pop": 25857, "state": "TX" }, { "_id": "77019", "city": "HOUSTON", "loc": [ -95.40539, 29.751651 ], "pop": 15280, "state": "TX" }, { "_id": "77020", "city": "HOUSTON", "loc": [ -95.312101, 29.775759 ], "pop": 28011, "state": "TX" }, { "_id": "77021", "city": "HOUSTON", "loc": [ -95.356151, 29.69538 ], "pop": 23815, "state": "TX" }, { "_id": "77022", "city": "HOUSTON", "loc": [ -95.376862, 29.829862 ], "pop": 27417, "state": "TX" }, { "_id": "77023", "city": "HOUSTON", "loc": [ -95.31777700000001, 29.724179 ], "pop": 31983, "state": "TX" }, { "_id": "77024", "city": "HOUSTON", "loc": [ -95.52006299999999, 29.76958 ], "pop": 30766, "state": "TX" }, { "_id": "77025", "city": "HOUSTON", "loc": [ -95.434107, 29.688897 ], "pop": 21618, "state": "TX" }, { "_id": "77026", "city": "HOUSTON", "loc": [ -95.32877499999999, 29.797168 ], "pop": 27744, "state": "TX" }, { "_id": "77027", "city": "HOUSTON", "loc": [ -95.446032, 29.739571 ], "pop": 11422, "state": "TX" }, { "_id": "77028", "city": "HOUSTON", "loc": [ -95.287886, 29.829657 ], "pop": 17943, "state": "TX" }, { "_id": "77029", "city": "JACINTO CITY", "loc": [ -95.25486100000001, 29.760326 ], "pop": 17739, "state": "TX" }, { "_id": "77030", "city": "V A HOSPITAL", "loc": [ -95.40619, 29.70372 ], "pop": 10462, "state": "TX" }, { "_id": "77031", "city": "HOUSTON", "loc": [ -95.541281, 29.658144 ], "pop": 14021, "state": "TX" }, { "_id": "77032", "city": "HOUSTON", "loc": [ -95.329883, 29.93676 ], "pop": 8373, "state": "TX" }, { "_id": "77033", "city": "HOUSTON", "loc": [ -95.338157, 29.668566 ], "pop": 28295, "state": "TX" }, { "_id": "77034", "city": "HOUSTON", "loc": [ -95.221615, 29.636395 ], "pop": 21593, "state": "TX" }, { "_id": "77035", "city": "HOUSTON", "loc": [ -95.48536799999999, 29.651833 ], "pop": 30746, "state": "TX" }, { "_id": "77036", "city": "HOUSTON", "loc": [ -95.540464, 29.698447 ], "pop": 55414, "state": "TX" }, { "_id": "77037", "city": "HOUSTON", "loc": [ -95.39351499999999, 29.889161 ], "pop": 14286, "state": "TX" }, { "_id": "77038", "city": "HOUSTON", "loc": [ -95.43860100000001, 29.91956 ], "pop": 15653, "state": "TX" }, { "_id": "77039", "city": "HOUSTON", "loc": [ -95.33338000000001, 29.906731 ], "pop": 23839, "state": "TX" }, { "_id": "77040", "city": "JERSEY VILLAGE", "loc": [ -95.52996899999999, 29.879613 ], "pop": 33052, "state": "TX" }, { "_id": "77041", "city": "HOUSTON", "loc": [ -95.58166300000001, 29.860187 ], "pop": 14790, "state": "TX" }, { "_id": "77042", "city": "HOUSTON", "loc": [ -95.55889500000001, 29.740446 ], "pop": 31505, "state": "TX" }, { "_id": "77043", "city": "HOUSTON", "loc": [ -95.560734, 29.805181 ], "pop": 21752, "state": "TX" }, { "_id": "77044", "city": "HOUSTON", "loc": [ -95.19757, 29.863485 ], "pop": 10669, "state": "TX" }, { "_id": "77045", "city": "HOUSTON", "loc": [ -95.438166, 29.629717 ], "pop": 22145, "state": "TX" }, { "_id": "77046", "city": "HOUSTON", "loc": [ -95.431845, 29.73279 ], "pop": 557, "state": "TX" }, { "_id": "77047", "city": "HOUSTON", "loc": [ -95.374993, 29.625443 ], "pop": 9588, "state": "TX" }, { "_id": "77048", "city": "HOUSTON", "loc": [ -95.341606, 29.632097 ], "pop": 13873, "state": "TX" }, { "_id": "77049", "city": "HOUSTON", "loc": [ -95.184815, 29.823471 ], "pop": 14445, "state": "TX" }, { "_id": "77050", "city": "HOUSTON", "loc": [ -95.284837, 29.901456 ], "pop": 3709, "state": "TX" }, { "_id": "77051", "city": "HOUSTON", "loc": [ -95.368763, 29.65792 ], "pop": 13776, "state": "TX" }, { "_id": "77053", "city": "HOUSTON", "loc": [ -95.458709, 29.596156 ], "pop": 20720, "state": "TX" }, { "_id": "77054", "city": "HOUSTON", "loc": [ -95.40167700000001, 29.685209 ], "pop": 12399, "state": "TX" }, { "_id": "77055", "city": "HOUSTON", "loc": [ -95.49578700000001, 29.797064 ], "pop": 36187, "state": "TX" }, { "_id": "77056", "city": "HOUSTON", "loc": [ -95.468282, 29.744584 ], "pop": 13544, "state": "TX" }, { "_id": "77057", "city": "HOUSTON", "loc": [ -95.490253, 29.74217 ], "pop": 28217, "state": "TX" }, { "_id": "77058", "city": "HOUSTON", "loc": [ -95.057413, 29.574787 ], "pop": 5556, "state": "TX" }, { "_id": "77059", "city": "HOUSTON", "loc": [ -95.113354, 29.597493 ], "pop": 6185, "state": "TX" }, { "_id": "77060", "city": "HOUSTON", "loc": [ -95.398061, 29.933462 ], "pop": 31443, "state": "TX" }, { "_id": "77061", "city": "HOUSTON", "loc": [ -95.278987, 29.665221 ], "pop": 20966, "state": "TX" }, { "_id": "77062", "city": "HOUSTON", "loc": [ -95.130292, 29.572084 ], "pop": 25303, "state": "TX" }, { "_id": "77063", "city": "HOUSTON", "loc": [ -95.52203900000001, 29.734843 ], "pop": 24156, "state": "TX" }, { "_id": "77064", "city": "HOUSTON", "loc": [ -95.556894, 29.918981 ], "pop": 21388, "state": "TX" }, { "_id": "77065", "city": "HOUSTON", "loc": [ -95.61063, 29.931933 ], "pop": 17370, "state": "TX" }, { "_id": "77066", "city": "HOUSTON", "loc": [ -95.49471699999999, 29.961027 ], "pop": 23310, "state": "TX" }, { "_id": "77067", "city": "HOUSTON", "loc": [ -95.452158, 29.954717 ], "pop": 18416, "state": "TX" }, { "_id": "77068", "city": "HOUSTON", "loc": [ -95.489661, 30.006867 ], "pop": 7670, "state": "TX" }, { "_id": "77069", "city": "HOUSTON", "loc": [ -95.520827, 29.986292 ], "pop": 11617, "state": "TX" }, { "_id": "77070", "city": "HOUSTON", "loc": [ -95.58027, 29.978099 ], "pop": 25735, "state": "TX" }, { "_id": "77071", "city": "HOUSTON", "loc": [ -95.517554, 29.651838 ], "pop": 21037, "state": "TX" }, { "_id": "77072", "city": "HOUSTON", "loc": [ -95.58615500000001, 29.699026 ], "pop": 41808, "state": "TX" }, { "_id": "77073", "city": "HOUSTON", "loc": [ -95.408671, 30.019767 ], "pop": 10208, "state": "TX" }, { "_id": "77074", "city": "HOUSTON", "loc": [ -95.510588, 29.689601 ], "pop": 32691, "state": "TX" }, { "_id": "77075", "city": "HOUSTON", "loc": [ -95.25998300000001, 29.622276 ], "pop": 16943, "state": "TX" }, { "_id": "77076", "city": "HOUSTON", "loc": [ -95.383442, 29.85801 ], "pop": 23881, "state": "TX" }, { "_id": "77077", "city": "HOUSTON", "loc": [ -95.602991, 29.747656 ], "pop": 32090, "state": "TX" }, { "_id": "77078", "city": "HOUSTON", "loc": [ -95.258208, 29.849724 ], "pop": 12300, "state": "TX" }, { "_id": "77079", "city": "HOUSTON", "loc": [ -95.597993, 29.773759 ], "pop": 29891, "state": "TX" }, { "_id": "77080", "city": "HOUSTON", "loc": [ -95.522986, 29.815854 ], "pop": 39465, "state": "TX" }, { "_id": "77081", "city": "HOUSTON", "loc": [ -95.484531, 29.711926 ], "pop": 33787, "state": "TX" }, { "_id": "77082", "city": "HOUSTON", "loc": [ -95.628533, 29.722283 ], "pop": 23875, "state": "TX" }, { "_id": "77083", "city": "HOUSTON", "loc": [ -95.651098, 29.694709 ], "pop": 38124, "state": "TX" }, { "_id": "77084", "city": "HOUSTON", "loc": [ -95.662329, 29.844022 ], "pop": 45204, "state": "TX" }, { "_id": "77085", "city": "HOUSTON", "loc": [ -95.481945, 29.621787 ], "pop": 6519, "state": "TX" }, { "_id": "77086", "city": "HOUSTON", "loc": [ -95.49386800000001, 29.922667 ], "pop": 16075, "state": "TX" }, { "_id": "77087", "city": "HOUSTON", "loc": [ -95.301062, 29.687579 ], "pop": 31112, "state": "TX" }, { "_id": "77088", "city": "HOUSTON", "loc": [ -95.45387700000001, 29.881694 ], "pop": 44595, "state": "TX" }, { "_id": "77089", "city": "HOUSTON", "loc": [ -95.22178599999999, 29.593978 ], "pop": 37678, "state": "TX" }, { "_id": "77090", "city": "HOUSTON", "loc": [ -95.447002, 30.016673 ], "pop": 22054, "state": "TX" }, { "_id": "77091", "city": "HOUSTON", "loc": [ -95.443521, 29.853448 ], "pop": 21341, "state": "TX" }, { "_id": "77092", "city": "HOUSTON", "loc": [ -95.472031, 29.832391 ], "pop": 31872, "state": "TX" }, { "_id": "77093", "city": "HOUSTON", "loc": [ -95.34028600000001, 29.861661 ], "pop": 39118, "state": "TX" }, { "_id": "77094", "city": "HOUSTON", "loc": [ -95.710742, 29.770536 ], "pop": 1168, "state": "TX" }, { "_id": "77095", "city": "HOUSTON", "loc": [ -95.648082, 29.894115 ], "pop": 24418, "state": "TX" }, { "_id": "77096", "city": "HOUSTON", "loc": [ -95.48606599999999, 29.672205 ], "pop": 32124, "state": "TX" }, { "_id": "77098", "city": "HOUSTON", "loc": [ -95.411778, 29.734987 ], "pop": 10436, "state": "TX" }, { "_id": "77099", "city": "HOUSTON", "loc": [ -95.586613, 29.670869 ], "pop": 40503, "state": "TX" }, { "_id": "77301", "city": "CONROE", "loc": [ -95.45266700000001, 30.312535 ], "pop": 20150, "state": "TX" }, { "_id": "77302", "city": "GRANGERLAND", "loc": [ -95.416087, 30.250357 ], "pop": 5767, "state": "TX" }, { "_id": "77303", "city": "CUT AND SHOOT", "loc": [ -95.369725, 30.344456 ], "pop": 14683, "state": "TX" }, { "_id": "77304", "city": "PANORAMA VILLAGE", "loc": [ -95.495244, 30.327351 ], "pop": 9625, "state": "TX" }, { "_id": "77327", "city": "CLEVELAND", "loc": [ -95.020152, 30.329977 ], "pop": 21298, "state": "TX" }, { "_id": "77331", "city": "COLDSPRING", "loc": [ -95.10858, 30.602661 ], "pop": 3182, "state": "TX" }, { "_id": "77335", "city": "GOODRICH", "loc": [ -94.95922, 30.607909 ], "pop": 1441, "state": "TX" }, { "_id": "77336", "city": "HUFFMAN", "loc": [ -95.105069, 30.056491 ], "pop": 6529, "state": "TX" }, { "_id": "77338", "city": "HUMBLE", "loc": [ -95.282476, 30.004091 ], "pop": 19090, "state": "TX" }, { "_id": "77339", "city": "HUMBLE", "loc": [ -95.21071600000001, 30.056333 ], "pop": 28083, "state": "TX" }, { "_id": "77340", "city": "HUNTSVILLE", "loc": [ -95.53418600000001, 30.73435 ], "pop": 48879, "state": "TX" }, { "_id": "77345", "city": "HUMBLE", "loc": [ -95.170654, 30.056641 ], "pop": 13004, "state": "TX" }, { "_id": "77346", "city": "HUMBLE", "loc": [ -95.172815, 30.004195 ], "pop": 15984, "state": "TX" }, { "_id": "77351", "city": "SEGNO", "loc": [ -94.935278, 30.718018 ], "pop": 24261, "state": "TX" }, { "_id": "77355", "city": "MAGNOLIA", "loc": [ -95.68898900000001, 30.1678 ], "pop": 15638, "state": "TX" }, { "_id": "77356", "city": "MONTGOMERY", "loc": [ -95.65034199999999, 30.363932 ], "pop": 12002, "state": "TX" }, { "_id": "77357", "city": "NEW CANEY", "loc": [ -95.197968, 30.157933 ], "pop": 13214, "state": "TX" }, { "_id": "77358", "city": "NEW WAVERLY", "loc": [ -95.453194, 30.535357 ], "pop": 1977, "state": "TX" }, { "_id": "77359", "city": "OAKHURST", "loc": [ -95.309478, 30.71262 ], "pop": 283, "state": "TX" }, { "_id": "77362", "city": "PINEHURST", "loc": [ -95.681406, 30.158052 ], "pop": 2498, "state": "TX" }, { "_id": "77363", "city": "PLANTERSVILLE", "loc": [ -95.849812, 30.296931 ], "pop": 1333, "state": "TX" }, { "_id": "77364", "city": "POINTBLANK", "loc": [ -95.229494, 30.75926 ], "pop": 2911, "state": "TX" }, { "_id": "77365", "city": "PORTER", "loc": [ -95.268613, 30.123731 ], "pop": 13541, "state": "TX" }, { "_id": "77371", "city": "SHEPHERD", "loc": [ -95.092913, 30.483396 ], "pop": 9604, "state": "TX" }, { "_id": "77372", "city": "SPLENDORA", "loc": [ -95.199308, 30.232609 ], "pop": 11287, "state": "TX" }, { "_id": "77373", "city": "SPRING", "loc": [ -95.377329, 30.053241 ], "pop": 33118, "state": "TX" }, { "_id": "77375", "city": "TOMBALL", "loc": [ -95.62006, 30.073923 ], "pop": 19801, "state": "TX" }, { "_id": "77378", "city": "WILLIS", "loc": [ -95.49758300000001, 30.432025 ], "pop": 9988, "state": "TX" }, { "_id": "77379", "city": "KLEIN", "loc": [ -95.528481, 30.023377 ], "pop": 35275, "state": "TX" }, { "_id": "77380", "city": "THE WOODLANDS", "loc": [ -95.46894399999999, 30.13739 ], "pop": 16541, "state": "TX" }, { "_id": "77381", "city": "THE WOODLANDS", "loc": [ -95.500743, 30.168887 ], "pop": 19466, "state": "TX" }, { "_id": "77384", "city": "CONROE", "loc": [ -95.492392, 30.225725 ], "pop": 1635, "state": "TX" }, { "_id": "77385", "city": "CONROE", "loc": [ -95.42878899999999, 30.187695 ], "pop": 7311, "state": "TX" }, { "_id": "77386", "city": "SPRING", "loc": [ -95.42394299999999, 30.128805 ], "pop": 8379, "state": "TX" }, { "_id": "77388", "city": "SPRING", "loc": [ -95.46945599999999, 30.050546 ], "pop": 21805, "state": "TX" }, { "_id": "77389", "city": "SPRING", "loc": [ -95.506624, 30.104398 ], "pop": 8540, "state": "TX" }, { "_id": "77396", "city": "HUMBLE", "loc": [ -95.262186, 29.950697 ], "pop": 16163, "state": "TX" }, { "_id": "77401", "city": "BELLAIRE", "loc": [ -95.461106, 29.702313 ], "pop": 13913, "state": "TX" }, { "_id": "77414", "city": "SARGENT", "loc": [ -95.92816999999999, 28.96183 ], "pop": 19305, "state": "TX" }, { "_id": "77417", "city": "BEASLEY", "loc": [ -95.96814500000001, 29.479045 ], "pop": 2151, "state": "TX" }, { "_id": "77418", "city": "BELLVILLE", "loc": [ -96.253083, 29.96583 ], "pop": 6771, "state": "TX" }, { "_id": "77419", "city": "BLESSING", "loc": [ -96.217956, 28.864947 ], "pop": 1285, "state": "TX" }, { "_id": "77420", "city": "BOLING", "loc": [ -95.974045, 29.252874 ], "pop": 3459, "state": "TX" }, { "_id": "77422", "city": "BRAZORIA", "loc": [ -95.58668299999999, 29.023642 ], "pop": 12583, "state": "TX" }, { "_id": "77423", "city": "BROOKSHIRE", "loc": [ -95.975537, 29.807168 ], "pop": 4990, "state": "TX" }, { "_id": "77426", "city": "CHAPPELL HILL", "loc": [ -96.234739, 30.183271 ], "pop": 2916, "state": "TX" }, { "_id": "77429", "city": "CYPRESS", "loc": [ -95.635778, 29.976608 ], "pop": 18527, "state": "TX" }, { "_id": "77430", "city": "DAMON", "loc": [ -95.703577, 29.301381 ], "pop": 1493, "state": "TX" }, { "_id": "77432", "city": "DANEVANG", "loc": [ -96.19765, 29.066969 ], "pop": 278, "state": "TX" }, { "_id": "77433", "city": "CYPRESS", "loc": [ -95.702456, 29.883633 ], "pop": 1983, "state": "TX" }, { "_id": "77434", "city": "EAGLE LAKE", "loc": [ -96.33536700000001, 29.584236 ], "pop": 4543, "state": "TX" }, { "_id": "77435", "city": "EAST BERNARD", "loc": [ -96.121115, 29.470458 ], "pop": 5773, "state": "TX" }, { "_id": "77437", "city": "EL CAMPO", "loc": [ -96.274266, 29.200776 ], "pop": 15829, "state": "TX" }, { "_id": "77440", "city": "ELMATON", "loc": [ -96.13351, 28.83209 ], "pop": 470, "state": "TX" }, { "_id": "77441", "city": "FULSHEAR", "loc": [ -95.897682, 29.721698 ], "pop": 193, "state": "TX" }, { "_id": "77442", "city": "GARWOOD", "loc": [ -96.49192499999999, 29.476001 ], "pop": 2231, "state": "TX" }, { "_id": "77444", "city": "GUY", "loc": [ -95.77022700000001, 29.332676 ], "pop": 343, "state": "TX" }, { "_id": "77445", "city": "HEMPSTEAD", "loc": [ -96.071648, 30.091973 ], "pop": 5883, "state": "TX" }, { "_id": "77447", "city": "HOCKLEY", "loc": [ -95.810447, 30.072888 ], "pop": 5040, "state": "TX" }, { "_id": "77449", "city": "PARK ROW", "loc": [ -95.72926699999999, 29.819922 ], "pop": 22664, "state": "TX" }, { "_id": "77450", "city": "PARK ROW", "loc": [ -95.744506, 29.767632 ], "pop": 28533, "state": "TX" }, { "_id": "77455", "city": "LOUISE", "loc": [ -96.392374, 29.14908 ], "pop": 2431, "state": "TX" }, { "_id": "77456", "city": "MARKHAM", "loc": [ -96.09276800000001, 28.954701 ], "pop": 2015, "state": "TX" }, { "_id": "77457", "city": "MATAGORDA", "loc": [ -95.951891, 28.764926 ], "pop": 1455, "state": "TX" }, { "_id": "77458", "city": "MIDFIELD", "loc": [ -96.226527, 28.936166 ], "pop": 286, "state": "TX" }, { "_id": "77459", "city": "MISSOURI CITY", "loc": [ -95.542284, 29.570434 ], "pop": 16067, "state": "TX" }, { "_id": "77461", "city": "NEEDVILLE", "loc": [ -95.827288, 29.41165 ], "pop": 7609, "state": "TX" }, { "_id": "77465", "city": "PALACIOS", "loc": [ -96.215439, 28.71504 ], "pop": 5607, "state": "TX" }, { "_id": "77468", "city": "PLEDGER", "loc": [ -95.898591, 29.179208 ], "pop": 345, "state": "TX" }, { "_id": "77469", "city": "CLODINE", "loc": [ -95.752122, 29.593226 ], "pop": 36014, "state": "TX" }, { "_id": "77471", "city": "ROSENBERG", "loc": [ -95.798213, 29.549727 ], "pop": 22182, "state": "TX" }, { "_id": "77474", "city": "SEALY", "loc": [ -96.159189, 29.782632 ], "pop": 8680, "state": "TX" }, { "_id": "77477", "city": "STAFFORD", "loc": [ -95.567764, 29.622816 ], "pop": 18952, "state": "TX" }, { "_id": "77478", "city": "SUGAR LAND", "loc": [ -95.62185599999999, 29.634153 ], "pop": 36536, "state": "TX" }, { "_id": "77479", "city": "SUGAR LAND", "loc": [ -95.60659099999999, 29.578537 ], "pop": 20219, "state": "TX" }, { "_id": "77480", "city": "SWEENY", "loc": [ -95.700363, 29.041508 ], "pop": 5077, "state": "TX" }, { "_id": "77482", "city": "VAN VLECK", "loc": [ -95.938903, 29.013879 ], "pop": 6011, "state": "TX" }, { "_id": "77483", "city": "WADSWORTH", "loc": [ -95.971307, 28.614288 ], "pop": 145, "state": "TX" }, { "_id": "77484", "city": "WALLER", "loc": [ -95.961275, 30.086008 ], "pop": 10513, "state": "TX" }, { "_id": "77485", "city": "WALLIS", "loc": [ -96.045574, 29.63968 ], "pop": 3380, "state": "TX" }, { "_id": "77486", "city": "WEST COLUMBIA", "loc": [ -95.669388, 29.140823 ], "pop": 9777, "state": "TX" }, { "_id": "77488", "city": "WHARTON", "loc": [ -96.08582800000001, 29.320488 ], "pop": 12326, "state": "TX" }, { "_id": "77489", "city": "MISSOURI CITY", "loc": [ -95.511512, 29.596206 ], "pop": 27760, "state": "TX" }, { "_id": "77493", "city": "PARK ROW", "loc": [ -95.815988, 29.804876 ], "pop": 10312, "state": "TX" }, { "_id": "77494", "city": "PARK ROW", "loc": [ -95.81167499999999, 29.750893 ], "pop": 2684, "state": "TX" }, { "_id": "77502", "city": "PASADENA", "loc": [ -95.198193, 29.678945 ], "pop": 31270, "state": "TX" }, { "_id": "77503", "city": "PASADENA", "loc": [ -95.15721000000001, 29.687696 ], "pop": 23019, "state": "TX" }, { "_id": "77504", "city": "PASADENA", "loc": [ -95.188478, 29.650133 ], "pop": 18518, "state": "TX" }, { "_id": "77505", "city": "PASADENA", "loc": [ -95.146388, 29.651753 ], "pop": 10978, "state": "TX" }, { "_id": "77506", "city": "PASADENA", "loc": [ -95.19895, 29.70087 ], "pop": 33656, "state": "TX" }, { "_id": "77507", "city": "PASADENA", "loc": [ -95.079365, 29.6055 ], "pop": 0, "state": "TX" }, { "_id": "77510", "city": "ALTA LOMA", "loc": [ -95.089429, 29.371854 ], "pop": 11098, "state": "TX" }, { "_id": "77511", "city": "ALVIN", "loc": [ -95.251535, 29.41195 ], "pop": 30979, "state": "TX" }, { "_id": "77514", "city": "MONROE CITY", "loc": [ -94.55481899999999, 29.780987 ], "pop": 7969, "state": "TX" }, { "_id": "77515", "city": "ANGLETON", "loc": [ -95.44666100000001, 29.181049 ], "pop": 29204, "state": "TX" }, { "_id": "77517", "city": "ARCADIA", "loc": [ -95.129003, 29.380259 ], "pop": 3377, "state": "TX" }, { "_id": "77518", "city": "BACLIFF", "loc": [ -94.989293, 29.505506 ], "pop": 5465, "state": "TX" }, { "_id": "77519", "city": "BATSON", "loc": [ -94.60959, 30.22502 ], "pop": 1071, "state": "TX" }, { "_id": "77520", "city": "BAYTOWN", "loc": [ -94.965265, 29.746063 ], "pop": 43386, "state": "TX" }, { "_id": "77521", "city": "BAYTOWN", "loc": [ -94.969549, 29.770482 ], "pop": 30277, "state": "TX" }, { "_id": "77530", "city": "CHANNELVIEW", "loc": [ -95.13165499999999, 29.791438 ], "pop": 23408, "state": "TX" }, { "_id": "77531", "city": "CLUTE", "loc": [ -95.40259500000001, 29.032502 ], "pop": 13361, "state": "TX" }, { "_id": "77532", "city": "BARRETT", "loc": [ -95.07522, 29.937812 ], "pop": 13679, "state": "TX" }, { "_id": "77534", "city": "DANBURY", "loc": [ -95.34346499999999, 29.229082 ], "pop": 2522, "state": "TX" }, { "_id": "77535", "city": "DAYTON", "loc": [ -94.878747, 30.010208 ], "pop": 16229, "state": "TX" }, { "_id": "77536", "city": "DEER PARK", "loc": [ -95.122192, 29.682571 ], "pop": 25806, "state": "TX" }, { "_id": "77538", "city": "DEVERS", "loc": [ -94.57461499999999, 29.997835 ], "pop": 570, "state": "TX" }, { "_id": "77539", "city": "SAN LEON", "loc": [ -95.034496, 29.466033 ], "pop": 21905, "state": "TX" }, { "_id": "77541", "city": "QUINTANA", "loc": [ -95.37138899999999, 28.96968 ], "pop": 17049, "state": "TX" }, { "_id": "77545", "city": "FRESNO", "loc": [ -95.462608, 29.52931 ], "pop": 3144, "state": "TX" }, { "_id": "77546", "city": "FRIENDSWOOD", "loc": [ -95.187888, 29.522399 ], "pop": 32217, "state": "TX" }, { "_id": "77547", "city": "GALENA PARK", "loc": [ -95.24000100000001, 29.739204 ], "pop": 9306, "state": "TX" }, { "_id": "77550", "city": "GALVESTON", "loc": [ -94.79297, 29.298272 ], "pop": 31879, "state": "TX" }, { "_id": "77551", "city": "GALVESTON", "loc": [ -94.83033399999999, 29.276584 ], "pop": 22680, "state": "TX" }, { "_id": "77554", "city": "GALVESTON", "loc": [ -94.91371599999999, 29.229638 ], "pop": 5495, "state": "TX" }, { "_id": "77560", "city": "HANKAMER", "loc": [ -94.593846, 29.87524 ], "pop": 233, "state": "TX" }, { "_id": "77562", "city": "HIGHLANDS", "loc": [ -95.039286, 29.829599 ], "pop": 17005, "state": "TX" }, { "_id": "77563", "city": "HITCHCOCK", "loc": [ -94.992591, 29.339835 ], "pop": 8591, "state": "TX" }, { "_id": "77564", "city": "HULL", "loc": [ -94.660382, 30.13337 ], "pop": 3386, "state": "TX" }, { "_id": "77565", "city": "CLEAR LAKE SHORE", "loc": [ -95.039209, 29.543823 ], "pop": 4101, "state": "TX" }, { "_id": "77566", "city": "LAKE JACKSON", "loc": [ -95.440119, 29.039275 ], "pop": 24000, "state": "TX" }, { "_id": "77568", "city": "LA MARQUE", "loc": [ -94.974159, 29.3676 ], "pop": 13884, "state": "TX" }, { "_id": "77571", "city": "SHOREACRES", "loc": [ -95.05721, 29.660098 ], "pop": 31556, "state": "TX" }, { "_id": "77573", "city": "LEAGUE CITY", "loc": [ -95.09627399999999, 29.517281 ], "pop": 41580, "state": "TX" }, { "_id": "77575", "city": "AMES", "loc": [ -94.763819, 30.072794 ], "pop": 14511, "state": "TX" }, { "_id": "77577", "city": "LIVERPOOL", "loc": [ -95.240754, 29.311457 ], "pop": 2023, "state": "TX" }, { "_id": "77578", "city": "MANVEL", "loc": [ -95.35033, 29.469381 ], "pop": 4754, "state": "TX" }, { "_id": "77581", "city": "PEARLAND", "loc": [ -95.272069, 29.561656 ], "pop": 20807, "state": "TX" }, { "_id": "77583", "city": "ROSHARON", "loc": [ -95.453732, 29.420329 ], "pop": 8495, "state": "TX" }, { "_id": "77584", "city": "PEARLAND", "loc": [ -95.320778, 29.540479 ], "pop": 14234, "state": "TX" }, { "_id": "77585", "city": "SARATOGA", "loc": [ -94.571718, 30.339817 ], "pop": 1921, "state": "TX" }, { "_id": "77586", "city": "EL LAGO", "loc": [ -95.028739, 29.572895 ], "pop": 9490, "state": "TX" }, { "_id": "77587", "city": "SOUTH HOUSTON", "loc": [ -95.22582, 29.660097 ], "pop": 16109, "state": "TX" }, { "_id": "77590", "city": "TEXAS CITY", "loc": [ -94.920298, 29.396984 ], "pop": 30108, "state": "TX" }, { "_id": "77591", "city": "TEXAS CITY", "loc": [ -94.994204, 29.389097 ], "pop": 10099, "state": "TX" }, { "_id": "77597", "city": "WALLISVILLE", "loc": [ -94.67589599999999, 29.859096 ], "pop": 1072, "state": "TX" }, { "_id": "77598", "city": "WEBSTER", "loc": [ -95.143985, 29.55641 ], "pop": 11453, "state": "TX" }, { "_id": "77611", "city": "BRIDGE CITY", "loc": [ -93.84729299999999, 30.04054 ], "pop": 13688, "state": "TX" }, { "_id": "77612", "city": "BUNA", "loc": [ -93.991263, 30.413209 ], "pop": 9023, "state": "TX" }, { "_id": "77614", "city": "DEWEYVILLE", "loc": [ -93.77305, 30.289295 ], "pop": 3133, "state": "TX" }, { "_id": "77616", "city": "FRED", "loc": [ -94.185948, 30.598657 ], "pop": 1973, "state": "TX" }, { "_id": "77619", "city": "GROVES", "loc": [ -93.915187, 29.944779 ], "pop": 16865, "state": "TX" }, { "_id": "77622", "city": "HAMSHIRE", "loc": [ -94.31873899999999, 29.866769 ], "pop": 571, "state": "TX" }, { "_id": "77624", "city": "HILLISTER", "loc": [ -94.407588, 30.689911 ], "pop": 1326, "state": "TX" }, { "_id": "77625", "city": "KOUNTZE", "loc": [ -94.32590500000001, 30.370316 ], "pop": 7073, "state": "TX" }, { "_id": "77627", "city": "NEDERLAND", "loc": [ -94.001192, 29.971609 ], "pop": 22035, "state": "TX" }, { "_id": "77630", "city": "WEST ORANGE", "loc": [ -93.771883, 30.125167 ], "pop": 39125, "state": "TX" }, { "_id": "77640", "city": "PORT ACRES", "loc": [ -93.96256200000001, 29.882557 ], "pop": 24605, "state": "TX" }, { "_id": "77642", "city": "PORT ARTHUR", "loc": [ -93.926962, 29.92119 ], "pop": 33943, "state": "TX" }, { "_id": "77650", "city": "CRYSTAL BEACH", "loc": [ -94.611678, 29.459788 ], "pop": 2807, "state": "TX" }, { "_id": "77651", "city": "PORT NECHES", "loc": [ -93.96262400000001, 29.976983 ], "pop": 13009, "state": "TX" }, { "_id": "77656", "city": "SILSBEE", "loc": [ -94.190726, 30.324387 ], "pop": 27117, "state": "TX" }, { "_id": "77659", "city": "SOUR LAKE", "loc": [ -94.373341, 30.149134 ], "pop": 4138, "state": "TX" }, { "_id": "77660", "city": "SPURGER", "loc": [ -94.212745, 30.778057 ], "pop": 2516, "state": "TX" }, { "_id": "77662", "city": "VIDOR", "loc": [ -94.00077899999999, 30.15018 ], "pop": 27702, "state": "TX" }, { "_id": "77664", "city": "WARREN", "loc": [ -94.411974, 30.597776 ], "pop": 2465, "state": "TX" }, { "_id": "77665", "city": "WINNIE", "loc": [ -94.339499, 29.815676 ], "pop": 2716, "state": "TX" }, { "_id": "77701", "city": "BEAUMONT", "loc": [ -94.10389600000001, 30.068805 ], "pop": 18121, "state": "TX" }, { "_id": "77702", "city": "BEAUMONT", "loc": [ -94.125412, 30.087057 ], "pop": 4396, "state": "TX" }, { "_id": "77703", "city": "BEAUMONT", "loc": [ -94.119698, 30.113201 ], "pop": 16003, "state": "TX" }, { "_id": "77705", "city": "BEAUMONT", "loc": [ -94.115673, 30.021128 ], "pop": 26134, "state": "TX" }, { "_id": "77706", "city": "BEAUMONT", "loc": [ -94.164816, 30.094834 ], "pop": 25388, "state": "TX" }, { "_id": "77707", "city": "BEAUMONT", "loc": [ -94.175541, 30.068567 ], "pop": 15366, "state": "TX" }, { "_id": "77708", "city": "BEAUMONT", "loc": [ -94.160357, 30.139957 ], "pop": 10782, "state": "TX" }, { "_id": "77713", "city": "BEAUMONT", "loc": [ -94.26071899999999, 30.084996 ], "pop": 10798, "state": "TX" }, { "_id": "77801", "city": "BRYAN", "loc": [ -96.36615999999999, 30.632698 ], "pop": 12190, "state": "TX" }, { "_id": "77802", "city": "BRYAN", "loc": [ -96.335143, 30.658171 ], "pop": 19306, "state": "TX" }, { "_id": "77803", "city": "BRYAN", "loc": [ -96.371398, 30.691293 ], "pop": 32052, "state": "TX" }, { "_id": "77830", "city": "ANDERSON", "loc": [ -96.001822, 30.544291 ], "pop": 1792, "state": "TX" }, { "_id": "77831", "city": "SINGLETON", "loc": [ -95.93356900000001, 30.764059 ], "pop": 1079, "state": "TX" }, { "_id": "77833", "city": "BRENHAM", "loc": [ -96.40276900000001, 30.17736 ], "pop": 20178, "state": "TX" }, { "_id": "77835", "city": "BURTON", "loc": [ -96.59247499999999, 30.176744 ], "pop": 2444, "state": "TX" }, { "_id": "77836", "city": "CALDWELL", "loc": [ -96.714292, 30.529819 ], "pop": 7873, "state": "TX" }, { "_id": "77837", "city": "CALVERT", "loc": [ -96.67107, 30.978211 ], "pop": 1829, "state": "TX" }, { "_id": "77840", "city": "COLLEGE STATION", "loc": [ -96.31227, 30.604476 ], "pop": 45766, "state": "TX" }, { "_id": "77843", "city": "COLLEGE STATION", "loc": [ -96.340001, 30.614738 ], "pop": 10425, "state": "TX" }, { "_id": "77845", "city": "COLLEGE STATION", "loc": [ -96.31711300000001, 30.511811 ], "pop": 1908, "state": "TX" }, { "_id": "77850", "city": "CONCORD", "loc": [ -96.102643, 31.263144 ], "pop": 143, "state": "TX" }, { "_id": "77853", "city": "DIME BOX", "loc": [ -96.824781, 30.35786 ], "pop": 699, "state": "TX" }, { "_id": "77856", "city": "FRANKLIN", "loc": [ -96.442643, 31.035013 ], "pop": 4144, "state": "TX" }, { "_id": "77859", "city": "HEARNE", "loc": [ -96.584256, 30.86686 ], "pop": 7655, "state": "TX" }, { "_id": "77861", "city": "IOLA", "loc": [ -96.091075, 30.732637 ], "pop": 1418, "state": "TX" }, { "_id": "77864", "city": "MADISONVILLE", "loc": [ -95.909094, 30.953335 ], "pop": 5532, "state": "TX" }, { "_id": "77865", "city": "MARQUEZ", "loc": [ -96.237499, 31.230889 ], "pop": 1047, "state": "TX" }, { "_id": "77868", "city": "NAVASOTA", "loc": [ -96.05935700000001, 30.357645 ], "pop": 12634, "state": "TX" }, { "_id": "77871", "city": "HILLTOP LAKES", "loc": [ -96.147274, 31.087473 ], "pop": 2540, "state": "TX" }, { "_id": "77872", "city": "NORTH ZULCH", "loc": [ -96.09248599999999, 30.928531 ], "pop": 1887, "state": "TX" }, { "_id": "77873", "city": "RICHARDS", "loc": [ -95.861053, 30.538166 ], "pop": 787, "state": "TX" }, { "_id": "77879", "city": "SOMERVILLE", "loc": [ -96.535825, 30.407585 ], "pop": 5752, "state": "TX" }, { "_id": "77880", "city": "WASHINGTON", "loc": [ -96.224948, 30.31819 ], "pop": 616, "state": "TX" }, { "_id": "77901", "city": "VICTORIA", "loc": [ -96.999347, 28.808953 ], "pop": 50119, "state": "TX" }, { "_id": "77904", "city": "VICTORIA", "loc": [ -96.998993, 28.867482 ], "pop": 18982, "state": "TX" }, { "_id": "77951", "city": "BLOOMINGTON", "loc": [ -96.88407599999999, 28.68898 ], "pop": 4452, "state": "TX" }, { "_id": "77954", "city": "CUERO", "loc": [ -97.28124699999999, 29.090969 ], "pop": 8321, "state": "TX" }, { "_id": "77957", "city": "EDNA", "loc": [ -96.64876599999999, 28.952714 ], "pop": 8987, "state": "TX" }, { "_id": "77962", "city": "GANADO", "loc": [ -96.503078, 29.03084 ], "pop": 2876, "state": "TX" }, { "_id": "77963", "city": "GOLIAD", "loc": [ -97.378321, 28.699257 ], "pop": 5980, "state": "TX" }, { "_id": "77964", "city": "HALLETTSVILLE", "loc": [ -96.923423, 29.442609 ], "pop": 6905, "state": "TX" }, { "_id": "77968", "city": "INEZ", "loc": [ -96.80029399999999, 28.899416 ], "pop": 808, "state": "TX" }, { "_id": "77971", "city": "LOLITA", "loc": [ -96.47933, 28.772449 ], "pop": 2632, "state": "TX" }, { "_id": "77974", "city": "MEYERSVILLE", "loc": [ -97.30416099999999, 28.922921 ], "pop": 45, "state": "TX" }, { "_id": "77975", "city": "MOULTON", "loc": [ -97.103122, 29.569992 ], "pop": 2459, "state": "TX" }, { "_id": "77979", "city": "PORT LAVACA", "loc": [ -96.625941, 28.601135 ], "pop": 15627, "state": "TX" }, { "_id": "77982", "city": "PORT O CONNOR", "loc": [ -96.775131, 28.140032 ], "pop": 5, "state": "TX" }, { "_id": "77983", "city": "SEADRIFT", "loc": [ -96.702279, 28.410113 ], "pop": 1965, "state": "TX" }, { "_id": "77984", "city": "SHINER", "loc": [ -97.163955, 29.428038 ], "pop": 3596, "state": "TX" }, { "_id": "77990", "city": "TIVOLI", "loc": [ -96.88717200000001, 28.440122 ], "pop": 965, "state": "TX" }, { "_id": "77994", "city": "WESTHOFF", "loc": [ -97.351102, 29.054983 ], "pop": 2069, "state": "TX" }, { "_id": "77995", "city": "YOAKUM", "loc": [ -97.13063, 29.283954 ], "pop": 9747, "state": "TX" }, { "_id": "78002", "city": "ATASCOSA", "loc": [ -98.74212, 29.270501 ], "pop": 2943, "state": "TX" }, { "_id": "78003", "city": "BANDERA", "loc": [ -99.04527899999999, 29.72755 ], "pop": 5538, "state": "TX" }, { "_id": "78004", "city": "BERGHEIM", "loc": [ -98.59325800000001, 29.839873 ], "pop": 763, "state": "TX" }, { "_id": "78005", "city": "BIGFOOT", "loc": [ -98.85823000000001, 29.053073 ], "pop": 328, "state": "TX" }, { "_id": "78006", "city": "SISTERDALE", "loc": [ -98.71340600000001, 29.77774 ], "pop": 14427, "state": "TX" }, { "_id": "78007", "city": "CALLIHAM", "loc": [ -98.407873, 28.417682 ], "pop": 230, "state": "TX" }, { "_id": "78008", "city": "CAMPBELLTON", "loc": [ -98.256573, 28.76699 ], "pop": 475, "state": "TX" }, { "_id": "78009", "city": "CASTROVILLE", "loc": [ -98.882391, 29.35532 ], "pop": 4262, "state": "TX" }, { "_id": "78010", "city": "CAMP VERDE", "loc": [ -99.00714000000001, 29.939658 ], "pop": 2704, "state": "TX" }, { "_id": "78011", "city": "CHARLOTTE", "loc": [ -98.70700100000001, 28.864871 ], "pop": 1990, "state": "TX" }, { "_id": "78013", "city": "COMFORT", "loc": [ -98.843772, 29.979072 ], "pop": 3253, "state": "TX" }, { "_id": "78014", "city": "COTULLA", "loc": [ -99.23281799999999, 28.439837 ], "pop": 4369, "state": "TX" }, { "_id": "78016", "city": "DEVINE", "loc": [ -98.90899400000001, 29.152078 ], "pop": 6887, "state": "TX" }, { "_id": "78017", "city": "DILLEY", "loc": [ -99.174684, 28.678201 ], "pop": 3396, "state": "TX" }, { "_id": "78019", "city": "ENCINAL", "loc": [ -99.340902, 28.051329 ], "pop": 821, "state": "TX" }, { "_id": "78021", "city": "FOWLERTON", "loc": [ -98.851821, 28.488666 ], "pop": 76, "state": "TX" }, { "_id": "78022", "city": "GEORGE WEST", "loc": [ -98.116159, 28.320388 ], "pop": 4093, "state": "TX" }, { "_id": "78023", "city": "GREY FOREST", "loc": [ -98.703534, 29.592203 ], "pop": 3552, "state": "TX" }, { "_id": "78024", "city": "HUNT", "loc": [ -99.48232899999999, 30.002694 ], "pop": 263, "state": "TX" }, { "_id": "78025", "city": "INGRAM", "loc": [ -99.26902200000001, 30.073126 ], "pop": 7005, "state": "TX" }, { "_id": "78026", "city": "JOURDANTON", "loc": [ -98.544037, 28.902985 ], "pop": 4615, "state": "TX" }, { "_id": "78027", "city": "KENDALIA", "loc": [ -98.51655599999999, 29.940619 ], "pop": 251, "state": "TX" }, { "_id": "78028", "city": "KERRVILLE", "loc": [ -99.140817, 30.041647 ], "pop": 26128, "state": "TX" }, { "_id": "78039", "city": "LA COSTE", "loc": [ -98.812466, 29.308178 ], "pop": 1320, "state": "TX" }, { "_id": "78040", "city": "LAREDO", "loc": [ -99.49857900000001, 27.515538 ], "pop": 43486, "state": "TX" }, { "_id": "78041", "city": "LAREDO", "loc": [ -99.49065299999999, 27.556933 ], "pop": 46156, "state": "TX" }, { "_id": "78043", "city": "RIO BRAVO", "loc": [ -99.46548799999999, 27.481537 ], "pop": 42505, "state": "TX" }, { "_id": "78052", "city": "LYTLE", "loc": [ -98.794489, 29.236568 ], "pop": 2078, "state": "TX" }, { "_id": "78053", "city": "MC COY", "loc": [ -98.371565, 28.792661 ], "pop": 34, "state": "TX" }, { "_id": "78055", "city": "MEDINA", "loc": [ -99.306431, 29.790689 ], "pop": 1590, "state": "TX" }, { "_id": "78056", "city": "MICO", "loc": [ -98.88210599999999, 29.59105 ], "pop": 230, "state": "TX" }, { "_id": "78057", "city": "MOORE", "loc": [ -98.987403, 29.035377 ], "pop": 767, "state": "TX" }, { "_id": "78058", "city": "MOUNTAIN HOME", "loc": [ -99.318607, 30.213249 ], "pop": 207, "state": "TX" }, { "_id": "78059", "city": "NATALIA", "loc": [ -98.855158, 29.211669 ], "pop": 4136, "state": "TX" }, { "_id": "78060", "city": "OAKVILLE", "loc": [ -98.055392, 28.464402 ], "pop": 261, "state": "TX" }, { "_id": "78061", "city": "PEARSALL", "loc": [ -99.09436100000001, 28.892317 ], "pop": 8981, "state": "TX" }, { "_id": "78063", "city": "LAKEHILLS", "loc": [ -98.922118, 29.631513 ], "pop": 3187, "state": "TX" }, { "_id": "78064", "city": "PLEASANTON", "loc": [ -98.48306100000001, 28.992368 ], "pop": 11977, "state": "TX" }, { "_id": "78065", "city": "POTEET", "loc": [ -98.624071, 29.099405 ], "pop": 9523, "state": "TX" }, { "_id": "78066", "city": "RIOMEDINA", "loc": [ -98.866865, 29.490395 ], "pop": 687, "state": "TX" }, { "_id": "78067", "city": "SAN YGNACIO", "loc": [ -99.427148, 27.062523 ], "pop": 871, "state": "TX" }, { "_id": "78069", "city": "SOMERSET", "loc": [ -98.62140100000001, 29.211561 ], "pop": 3477, "state": "TX" }, { "_id": "78070", "city": "SPRING BRANCH", "loc": [ -98.37878600000001, 29.923815 ], "pop": 1544, "state": "TX" }, { "_id": "78071", "city": "THREE RIVERS", "loc": [ -98.178162, 28.475646 ], "pop": 3190, "state": "TX" }, { "_id": "78072", "city": "TILDEN", "loc": [ -98.569322, 28.419755 ], "pop": 575, "state": "TX" }, { "_id": "78073", "city": "VON ORMY", "loc": [ -98.66774100000001, 29.274979 ], "pop": 2911, "state": "TX" }, { "_id": "78075", "city": "WHITSETT", "loc": [ -98.256484, 28.637316 ], "pop": 135, "state": "TX" }, { "_id": "78076", "city": "ZAPATA", "loc": [ -99.250625, 26.88966 ], "pop": 8408, "state": "TX" }, { "_id": "78101", "city": "ADKINS", "loc": [ -98.26504, 29.380542 ], "pop": 3611, "state": "TX" }, { "_id": "78102", "city": "BEEVILLE", "loc": [ -97.761571, 28.422246 ], "pop": 23211, "state": "TX" }, { "_id": "78108", "city": "CIBOLO", "loc": [ -98.22798299999999, 29.574971 ], "pop": 6062, "state": "TX" }, { "_id": "78109", "city": "CONVERSE", "loc": [ -98.321673, 29.517331 ], "pop": 13291, "state": "TX" }, { "_id": "78111", "city": "ECLETO", "loc": [ -97.741185, 29.020128 ], "pop": 0, "state": "TX" }, { "_id": "78112", "city": "ELMENDORF", "loc": [ -98.371982, 29.230793 ], "pop": 2251, "state": "TX" }, { "_id": "78113", "city": "FALLS CITY", "loc": [ -98.015632, 28.981413 ], "pop": 964, "state": "TX" }, { "_id": "78114", "city": "FLORESVILLE", "loc": [ -98.193589, 29.169338 ], "pop": 11510, "state": "TX" }, { "_id": "78116", "city": "GILLETT", "loc": [ -97.83432500000001, 29.051353 ], "pop": 641, "state": "TX" }, { "_id": "78117", "city": "HOBSON", "loc": [ -97.970743, 28.944499 ], "pop": 302, "state": "TX" }, { "_id": "78118", "city": "KARNES CITY", "loc": [ -97.90707, 28.882757 ], "pop": 3827, "state": "TX" }, { "_id": "78119", "city": "KENEDY", "loc": [ -97.845601, 28.804584 ], "pop": 5118, "state": "TX" }, { "_id": "78121", "city": "LA VERNIA", "loc": [ -98.112971, 29.350905 ], "pop": 4529, "state": "TX" }, { "_id": "78122", "city": "LEESVILLE", "loc": [ -97.75662199999999, 29.396142 ], "pop": 206, "state": "TX" }, { "_id": "78123", "city": "MC QUEENEY", "loc": [ -98.03759100000001, 29.605655 ], "pop": 2055, "state": "TX" }, { "_id": "78124", "city": "MARION", "loc": [ -98.151709, 29.56835 ], "pop": 4167, "state": "TX" }, { "_id": "78130", "city": "CANYON LAKE", "loc": [ -98.113041, 29.694733 ], "pop": 32975, "state": "TX" }, { "_id": "78132", "city": "CANYON LAKE", "loc": [ -98.16721200000001, 29.72939 ], "pop": 6412, "state": "TX" }, { "_id": "78133", "city": "CANYON LAKE", "loc": [ -98.24941200000001, 29.870984 ], "pop": 8428, "state": "TX" }, { "_id": "78140", "city": "NIXON", "loc": [ -97.752898, 29.301649 ], "pop": 2953, "state": "TX" }, { "_id": "78141", "city": "NORDHEIM", "loc": [ -97.594579, 28.914225 ], "pop": 655, "state": "TX" }, { "_id": "78147", "city": "POTH", "loc": [ -98.08247, 29.06191 ], "pop": 3000, "state": "TX" }, { "_id": "78148", "city": "RANDOLPH A F B", "loc": [ -98.306742, 29.551608 ], "pop": 13215, "state": "TX" }, { "_id": "78150", "city": "RANDOLPH A F B", "loc": [ -98.27919300000001, 29.53021 ], "pop": 4079, "state": "TX" }, { "_id": "78151", "city": "RUNGE", "loc": [ -97.713824, 28.887556 ], "pop": 1603, "state": "TX" }, { "_id": "78152", "city": "SAINT HEDWIG", "loc": [ -98.195223, 29.435284 ], "pop": 1685, "state": "TX" }, { "_id": "78154", "city": "SELMA", "loc": [ -98.27221400000001, 29.568159 ], "pop": 10332, "state": "TX" }, { "_id": "78155", "city": "SEGUIN", "loc": [ -97.962801, 29.561316 ], "pop": 32348, "state": "TX" }, { "_id": "78159", "city": "SMILEY", "loc": [ -97.62271200000001, 29.265529 ], "pop": 972, "state": "TX" }, { "_id": "78160", "city": "STOCKDALE", "loc": [ -97.93508199999999, 29.231907 ], "pop": 3085, "state": "TX" }, { "_id": "78161", "city": "SUTHERLAND SPRIN", "loc": [ -98.07079400000001, 29.277831 ], "pop": 1051, "state": "TX" }, { "_id": "78163", "city": "WETMORE", "loc": [ -98.43784599999999, 29.780175 ], "pop": 5491, "state": "TX" }, { "_id": "78164", "city": "YORKTOWN", "loc": [ -97.512056, 28.989191 ], "pop": 3733, "state": "TX" }, { "_id": "78201", "city": "BALCONES HEIGHTS", "loc": [ -98.526352, 29.468525 ], "pop": 43037, "state": "TX" }, { "_id": "78202", "city": "SAN ANTONIO", "loc": [ -98.460112, 29.427462 ], "pop": 12043, "state": "TX" }, { "_id": "78203", "city": "SAN ANTONIO", "loc": [ -98.460127, 29.414799 ], "pop": 7261, "state": "TX" }, { "_id": "78204", "city": "SAN ANTONIO", "loc": [ -98.5063, 29.400217 ], "pop": 11526, "state": "TX" }, { "_id": "78205", "city": "SAN ANTONIO", "loc": [ -98.492509, 29.423711 ], "pop": 1714, "state": "TX" }, { "_id": "78207", "city": "SAN ANTONIO", "loc": [ -98.52596699999999, 29.422855 ], "pop": 58355, "state": "TX" }, { "_id": "78208", "city": "SAN ANTONIO", "loc": [ -98.458983, 29.440039 ], "pop": 5007, "state": "TX" }, { "_id": "78209", "city": "ALAMO HEIGHTS", "loc": [ -98.45577400000001, 29.488623 ], "pop": 34701, "state": "TX" }, { "_id": "78210", "city": "SAN ANTONIO", "loc": [ -98.465796, 29.397718 ], "pop": 39300, "state": "TX" }, { "_id": "78211", "city": "SAN ANTONIO", "loc": [ -98.545219, 29.358366 ], "pop": 30417, "state": "TX" }, { "_id": "78212", "city": "OLMOS PARK", "loc": [ -98.49581499999999, 29.461181 ], "pop": 29762, "state": "TX" }, { "_id": "78213", "city": "CASTLE HILLS", "loc": [ -98.522679, 29.513406 ], "pop": 36060, "state": "TX" }, { "_id": "78214", "city": "SAN ANTONIO", "loc": [ -98.492436, 29.364115 ], "pop": 23338, "state": "TX" }, { "_id": "78215", "city": "SAN ANTONIO", "loc": [ -98.479338, 29.441338 ], "pop": 1264, "state": "TX" }, { "_id": "78216", "city": "SAN ANTONIO", "loc": [ -98.497511, 29.533387 ], "pop": 30435, "state": "TX" }, { "_id": "78217", "city": "SAN ANTONIO", "loc": [ -98.419444, 29.539525 ], "pop": 27925, "state": "TX" }, { "_id": "78218", "city": "SAN ANTONIO", "loc": [ -98.403184, 29.496852 ], "pop": 29276, "state": "TX" }, { "_id": "78219", "city": "KIRBY", "loc": [ -98.39731500000001, 29.448794 ], "pop": 14249, "state": "TX" }, { "_id": "78220", "city": "SAN ANTONIO", "loc": [ -98.412791, 29.410641 ], "pop": 17035, "state": "TX" }, { "_id": "78221", "city": "SAN ANTONIO", "loc": [ -98.50541699999999, 29.330913 ], "pop": 35392, "state": "TX" }, { "_id": "78222", "city": "SAN ANTONIO", "loc": [ -98.396005, 29.383113 ], "pop": 12729, "state": "TX" }, { "_id": "78223", "city": "SAN ANTONIO", "loc": [ -98.43562799999999, 29.357869 ], "pop": 38381, "state": "TX" }, { "_id": "78224", "city": "SAN ANTONIO", "loc": [ -98.53933499999999, 29.337432 ], "pop": 14894, "state": "TX" }, { "_id": "78225", "city": "SAN ANTONIO", "loc": [ -98.524494, 29.387497 ], "pop": 13803, "state": "TX" }, { "_id": "78226", "city": "SAN ANTONIO", "loc": [ -98.551095, 29.393001 ], "pop": 7141, "state": "TX" }, { "_id": "78227", "city": "SAN ANTONIO", "loc": [ -98.643311, 29.402687 ], "pop": 42329, "state": "TX" }, { "_id": "78228", "city": "SAN ANTONIO", "loc": [ -98.56987100000001, 29.458937 ], "pop": 58136, "state": "TX" }, { "_id": "78229", "city": "SAN ANTONIO", "loc": [ -98.569726, 29.504228 ], "pop": 22681, "state": "TX" }, { "_id": "78230", "city": "SAN ANTONIO", "loc": [ -98.552117, 29.540738 ], "pop": 30253, "state": "TX" }, { "_id": "78231", "city": "SHAVANO PARK", "loc": [ -98.536817, 29.571434 ], "pop": 7504, "state": "TX" }, { "_id": "78232", "city": "HOLLYWOOD PARK", "loc": [ -98.46729999999999, 29.582833 ], "pop": 27332, "state": "TX" }, { "_id": "78233", "city": "LIVE OAK", "loc": [ -98.369128, 29.554741 ], "pop": 36334, "state": "TX" }, { "_id": "78234", "city": "FORT SAM HOUSTON", "loc": [ -98.43540400000001, 29.461961 ], "pop": 8258, "state": "TX" }, { "_id": "78235", "city": "BROOKS A F B", "loc": [ -98.43944399999999, 29.341733 ], "pop": 885, "state": "TX" }, { "_id": "78236", "city": "WILFORD HALL U S", "loc": [ -98.613367, 29.394267 ], "pop": 8707, "state": "TX" }, { "_id": "78237", "city": "SAN ANTONIO", "loc": [ -98.56454600000001, 29.420758 ], "pop": 38900, "state": "TX" }, { "_id": "78238", "city": "LEON VALLEY", "loc": [ -98.61545099999999, 29.476833 ], "pop": 20840, "state": "TX" }, { "_id": "78239", "city": "WINDCREST", "loc": [ -98.361604, 29.515686 ], "pop": 21781, "state": "TX" }, { "_id": "78240", "city": "SAN ANTONIO", "loc": [ -98.600566, 29.518896 ], "pop": 33776, "state": "TX" }, { "_id": "78241", "city": "KELLY A F B", "loc": [ -98.578063, 29.392432 ], "pop": 1784, "state": "TX" }, { "_id": "78242", "city": "SAN ANTONIO", "loc": [ -98.610927, 29.350905 ], "pop": 24343, "state": "TX" }, { "_id": "78244", "city": "SAN ANTONIO", "loc": [ -98.347585, 29.479264 ], "pop": 13798, "state": "TX" }, { "_id": "78245", "city": "SAN ANTONIO", "loc": [ -98.689494, 29.418927 ], "pop": 20410, "state": "TX" }, { "_id": "78247", "city": "WETMORE", "loc": [ -98.409783, 29.577604 ], "pop": 25572, "state": "TX" }, { "_id": "78248", "city": "SAN ANTONIO", "loc": [ -98.520105, 29.58936 ], "pop": 4469, "state": "TX" }, { "_id": "78249", "city": "SAN ANTONIO", "loc": [ -98.611666, 29.561245 ], "pop": 19127, "state": "TX" }, { "_id": "78250", "city": "SAN ANTONIO", "loc": [ -98.66876499999999, 29.505394 ], "pop": 43845, "state": "TX" }, { "_id": "78251", "city": "SAN ANTONIO", "loc": [ -98.655472, 29.459743 ], "pop": 15297, "state": "TX" }, { "_id": "78252", "city": "SAN ANTONIO", "loc": [ -98.646395, 29.346015 ], "pop": 1378, "state": "TX" }, { "_id": "78253", "city": "SAN ANTONIO", "loc": [ -98.74793099999999, 29.459923 ], "pop": 3861, "state": "TX" }, { "_id": "78254", "city": "SAN ANTONIO", "loc": [ -98.724841, 29.54091 ], "pop": 1340, "state": "TX" }, { "_id": "78255", "city": "SAN ANTONIO", "loc": [ -98.65557200000001, 29.636875 ], "pop": 2544, "state": "TX" }, { "_id": "78256", "city": "SAN ANTONIO", "loc": [ -98.625215, 29.616946 ], "pop": 1237, "state": "TX" }, { "_id": "78257", "city": "SAN ANTONIO", "loc": [ -98.61370100000001, 29.64953 ], "pop": 1360, "state": "TX" }, { "_id": "78258", "city": "SAN ANTONIO", "loc": [ -98.49669900000001, 29.65624 ], "pop": 2877, "state": "TX" }, { "_id": "78259", "city": "SAN ANTONIO", "loc": [ -98.444495, 29.628331 ], "pop": 3865, "state": "TX" }, { "_id": "78260", "city": "SAN ANTONIO", "loc": [ -98.475908, 29.702578 ], "pop": 1684, "state": "TX" }, { "_id": "78261", "city": "SAN ANTONIO", "loc": [ -98.41909200000001, 29.705463 ], "pop": 487, "state": "TX" }, { "_id": "78263", "city": "SAN ANTONIO", "loc": [ -98.317386, 29.36143 ], "pop": 2836, "state": "TX" }, { "_id": "78264", "city": "SAN ANTONIO", "loc": [ -98.472272, 29.173345 ], "pop": 3723, "state": "TX" }, { "_id": "78266", "city": "GARDEN RIDGE", "loc": [ -98.312774, 29.644226 ], "pop": 2016, "state": "TX" }, { "_id": "78332", "city": "ALICE", "loc": [ -98.08362200000001, 27.743171 ], "pop": 28292, "state": "TX" }, { "_id": "78336", "city": "ARANSAS PASS", "loc": [ -97.159091, 27.909498 ], "pop": 9087, "state": "TX" }, { "_id": "78338", "city": "ARMSTRONG", "loc": [ -97.70929099999999, 26.738706 ], "pop": 148, "state": "TX" }, { "_id": "78340", "city": "BAYSIDE", "loc": [ -97.210643, 28.096758 ], "pop": 454, "state": "TX" }, { "_id": "78343", "city": "BISHOP", "loc": [ -97.78303099999999, 27.588564 ], "pop": 4608, "state": "TX" }, { "_id": "78344", "city": "BRUNI", "loc": [ -98.85010800000001, 27.435329 ], "pop": 508, "state": "TX" }, { "_id": "78349", "city": "CONCEPCION", "loc": [ -98.381489, 27.544266 ], "pop": 3458, "state": "TX" }, { "_id": "78353", "city": "ENCINO", "loc": [ -98.192168, 26.924862 ], "pop": 703, "state": "TX" }, { "_id": "78355", "city": "FALFURRIAS", "loc": [ -98.140844, 27.22416 ], "pop": 7501, "state": "TX" }, { "_id": "78357", "city": "FREER", "loc": [ -98.606129, 27.879984 ], "pop": 3922, "state": "TX" }, { "_id": "78358", "city": "FULTON", "loc": [ -96.80837699999999, 28.223448 ], "pop": 0, "state": "TX" }, { "_id": "78360", "city": "GUERRA", "loc": [ -98.918886, 26.912753 ], "pop": 34, "state": "TX" }, { "_id": "78361", "city": "HEBBRONVILLE", "loc": [ -98.68288800000001, 27.2997 ], "pop": 5078, "state": "TX" }, { "_id": "78362", "city": "INGLESIDE", "loc": [ -97.206906, 27.868238 ], "pop": 5871, "state": "TX" }, { "_id": "78363", "city": "KINGSVILLE NAVAL", "loc": [ -97.85959800000001, 27.507418 ], "pop": 28435, "state": "TX" }, { "_id": "78368", "city": "MATHIS", "loc": [ -97.809659, 28.080208 ], "pop": 11068, "state": "TX" }, { "_id": "78369", "city": "MIRANDO CITY", "loc": [ -99.00111699999999, 27.445038 ], "pop": 584, "state": "TX" }, { "_id": "78370", "city": "ODEM", "loc": [ -97.583752, 27.940306 ], "pop": 3299, "state": "TX" }, { "_id": "78372", "city": "ORANGE GROVE", "loc": [ -97.983835, 27.948659 ], "pop": 4339, "state": "TX" }, { "_id": "78374", "city": "PORTLAND", "loc": [ -97.316931, 27.893547 ], "pop": 15830, "state": "TX" }, { "_id": "78375", "city": "PREMONT", "loc": [ -98.13301800000001, 27.354444 ], "pop": 4051, "state": "TX" }, { "_id": "78376", "city": "REALITOS", "loc": [ -98.535493, 27.416283 ], "pop": 520, "state": "TX" }, { "_id": "78377", "city": "REFUGIO", "loc": [ -97.27666499999999, 28.316944 ], "pop": 4004, "state": "TX" }, { "_id": "78379", "city": "RIVIERA", "loc": [ -97.778707, 27.321735 ], "pop": 1839, "state": "TX" }, { "_id": "78380", "city": "ROBSTOWN", "loc": [ -97.699523, 27.798395 ], "pop": 24903, "state": "TX" }, { "_id": "78382", "city": "ROCKPORT", "loc": [ -97.06877299999999, 28.030778 ], "pop": 16944, "state": "TX" }, { "_id": "78383", "city": "SANDIA", "loc": [ -97.89784899999999, 28.070879 ], "pop": 2053, "state": "TX" }, { "_id": "78384", "city": "SAN DIEGO", "loc": [ -98.250297, 27.76535 ], "pop": 5018, "state": "TX" }, { "_id": "78385", "city": "SARITA", "loc": [ -97.85762699999999, 27.149622 ], "pop": 312, "state": "TX" }, { "_id": "78387", "city": "SINTON", "loc": [ -97.519582, 28.033895 ], "pop": 9051, "state": "TX" }, { "_id": "78389", "city": "SKIDMORE", "loc": [ -97.666071, 28.230577 ], "pop": 1785, "state": "TX" }, { "_id": "78390", "city": "TAFT", "loc": [ -97.39662300000001, 27.976517 ], "pop": 6140, "state": "TX" }, { "_id": "78391", "city": "TYNAN", "loc": [ -97.754881, 28.169341 ], "pop": 327, "state": "TX" }, { "_id": "78393", "city": "WOODSBORO", "loc": [ -97.31921, 28.223222 ], "pop": 2559, "state": "TX" }, { "_id": "78401", "city": "CORPUS CHRISTI", "loc": [ -97.40299400000001, 27.794086 ], "pop": 5811, "state": "TX" }, { "_id": "78402", "city": "CORPUS CHRISTI", "loc": [ -97.385659, 27.82621 ], "pop": 451, "state": "TX" }, { "_id": "78404", "city": "CORPUS CHRISTI", "loc": [ -97.40125500000001, 27.768329 ], "pop": 17395, "state": "TX" }, { "_id": "78405", "city": "CORPUS CHRISTI", "loc": [ -97.427132, 27.776234 ], "pop": 17437, "state": "TX" }, { "_id": "78406", "city": "CORPUS CHRISTI", "loc": [ -97.51445, 27.768412 ], "pop": 1556, "state": "TX" }, { "_id": "78407", "city": "CORPUS CHRISTI", "loc": [ -97.435597, 27.804195 ], "pop": 6334, "state": "TX" }, { "_id": "78408", "city": "CORPUS CHRISTI", "loc": [ -97.43814999999999, 27.794477 ], "pop": 10071, "state": "TX" }, { "_id": "78409", "city": "CORPUS CHRISTI", "loc": [ -97.527034, 27.814555 ], "pop": 2655, "state": "TX" }, { "_id": "78410", "city": "CORPUS CHRISTI", "loc": [ -97.596002, 27.84585 ], "pop": 20860, "state": "TX" }, { "_id": "78411", "city": "CORPUS CHRISTI", "loc": [ -97.387732, 27.731139 ], "pop": 27625, "state": "TX" }, { "_id": "78412", "city": "CORPUS CHRISTI", "loc": [ -97.353694, 27.70608 ], "pop": 33510, "state": "TX" }, { "_id": "78413", "city": "CORPUS CHRISTI", "loc": [ -97.39832, 27.691041 ], "pop": 27278, "state": "TX" }, { "_id": "78414", "city": "CORPUS CHRISTI", "loc": [ -97.365016, 27.677016 ], "pop": 8600, "state": "TX" }, { "_id": "78415", "city": "CORPUS CHRISTI", "loc": [ -97.40778, 27.726204 ], "pop": 39998, "state": "TX" }, { "_id": "78416", "city": "CORPUS CHRISTI", "loc": [ -97.43468, 27.753593 ], "pop": 16634, "state": "TX" }, { "_id": "78417", "city": "CORPUS CHRISTI", "loc": [ -97.44942899999999, 27.728964 ], "pop": 3075, "state": "TX" }, { "_id": "78418", "city": "CORPUS CHRISTI", "loc": [ -97.266558, 27.668531 ], "pop": 20449, "state": "TX" }, { "_id": "78419", "city": "CORPUS CHRISTI", "loc": [ -97.27636, 27.692502 ], "pop": 1873, "state": "TX" }, { "_id": "78473", "city": "CORPUS CHRISTI", "loc": [ -97.396624, 27.79515 ], "pop": 0, "state": "TX" }, { "_id": "78501", "city": "MCALLEN", "loc": [ -98.235871, 26.21544 ], "pop": 53932, "state": "TX" }, { "_id": "78503", "city": "MCALLEN", "loc": [ -98.251974, 26.177115 ], "pop": 14820, "state": "TX" }, { "_id": "78504", "city": "MCALLEN", "loc": [ -98.230253, 26.255645 ], "pop": 15182, "state": "TX" }, { "_id": "78516", "city": "ALAMO", "loc": [ -98.116445, 26.190578 ], "pop": 16555, "state": "TX" }, { "_id": "78520", "city": "BROWNSVILLE", "loc": [ -97.517413, 25.933743 ], "pop": 50091, "state": "TX" }, { "_id": "78521", "city": "BROWNSVILLE", "loc": [ -97.461236, 25.922103 ], "pop": 79463, "state": "TX" }, { "_id": "78536", "city": "DELMITA", "loc": [ -98.396553, 26.656571 ], "pop": 55, "state": "TX" }, { "_id": "78537", "city": "DONNA", "loc": [ -98.052925, 26.167138 ], "pop": 20909, "state": "TX" }, { "_id": "78538", "city": "MONTE ALTO", "loc": [ -97.97547299999999, 26.304208 ], "pop": 16225, "state": "TX" }, { "_id": "78539", "city": "EDINBURG", "loc": [ -98.15692199999999, 26.304221 ], "pop": 52534, "state": "TX" }, { "_id": "78547", "city": "GARCIASVILLE", "loc": [ -98.669112, 26.312894 ], "pop": 5741, "state": "TX" }, { "_id": "78548", "city": "GRULLA", "loc": [ -98.596041, 26.293714 ], "pop": 303, "state": "TX" }, { "_id": "78549", "city": "HARGILL", "loc": [ -97.99933, 26.433812 ], "pop": 1294, "state": "TX" }, { "_id": "78550", "city": "HARLINGEN", "loc": [ -97.688981, 26.195142 ], "pop": 43292, "state": "TX" }, { "_id": "78552", "city": "HARLINGEN", "loc": [ -97.746771, 26.183069 ], "pop": 21672, "state": "TX" }, { "_id": "78557", "city": "HIDALGO", "loc": [ -98.253641, 26.102832 ], "pop": 3300, "state": "TX" }, { "_id": "78559", "city": "LA FERIA", "loc": [ -97.826115, 26.166556 ], "pop": 8446, "state": "TX" }, { "_id": "78563", "city": "LINN", "loc": [ -98.17986999999999, 26.542054 ], "pop": 1244, "state": "TX" }, { "_id": "78566", "city": "BAYVIEW", "loc": [ -97.490402, 26.091068 ], "pop": 9033, "state": "TX" }, { "_id": "78569", "city": "LYFORD", "loc": [ -97.78165300000001, 26.408926 ], "pop": 2757, "state": "TX" }, { "_id": "78570", "city": "MERCEDES", "loc": [ -97.918503, 26.15133 ], "pop": 21450, "state": "TX" }, { "_id": "78572", "city": "ALTON", "loc": [ -98.342647, 26.24153 ], "pop": 67604, "state": "TX" }, { "_id": "78577", "city": "PHARR", "loc": [ -98.187022, 26.177053 ], "pop": 36070, "state": "TX" }, { "_id": "78578", "city": "PORT ISABEL", "loc": [ -97.254389, 26.08764 ], "pop": 9335, "state": "TX" }, { "_id": "78580", "city": "RAYMONDVILLE", "loc": [ -97.79666, 26.479243 ], "pop": 11642, "state": "TX" }, { "_id": "78582", "city": "RIO GRANDE CITY", "loc": [ -98.810444, 26.394194 ], "pop": 19113, "state": "TX" }, { "_id": "78583", "city": "RIO HONDO", "loc": [ -97.551311, 26.233855 ], "pop": 4990, "state": "TX" }, { "_id": "78584", "city": "ROMA", "loc": [ -99.00247899999999, 26.421545 ], "pop": 14612, "state": "TX" }, { "_id": "78586", "city": "SAN BENITO", "loc": [ -97.64474800000001, 26.133659 ], "pop": 28609, "state": "TX" }, { "_id": "78588", "city": "SAN ISIDRO", "loc": [ -98.416147, 26.721404 ], "pop": 468, "state": "TX" }, { "_id": "78589", "city": "SAN JUAN", "loc": [ -98.153729, 26.204375 ], "pop": 18419, "state": "TX" }, { "_id": "78590", "city": "SAN PERLITA", "loc": [ -97.61569900000001, 26.483156 ], "pop": 886, "state": "TX" }, { "_id": "78591", "city": "SANTA ELENA", "loc": [ -98.519412, 26.73364 ], "pop": 223, "state": "TX" }, { "_id": "78593", "city": "SANTA ROSA", "loc": [ -97.82566300000001, 26.255508 ], "pop": 3393, "state": "TX" }, { "_id": "78594", "city": "SEBASTIAN", "loc": [ -97.774728, 26.34524 ], "pop": 2137, "state": "TX" }, { "_id": "78595", "city": "SULLIVAN CITY", "loc": [ -98.562713, 26.27197 ], "pop": 3351, "state": "TX" }, { "_id": "78596", "city": "WESLACO", "loc": [ -97.988714, 26.169444 ], "pop": 40652, "state": "TX" }, { "_id": "78597", "city": "SOUTH PADRE ISLA", "loc": [ -97.167294, 26.111105 ], "pop": 1796, "state": "TX" }, { "_id": "78598", "city": "PORT MANSFIELD", "loc": [ -97.427982, 26.555237 ], "pop": 287, "state": "TX" }, { "_id": "78602", "city": "BASTROP", "loc": [ -97.292101, 30.13883 ], "pop": 10588, "state": "TX" }, { "_id": "78603", "city": "BEBE", "loc": [ -97.626594, 29.422211 ], "pop": 82, "state": "TX" }, { "_id": "78605", "city": "BERTRAM", "loc": [ -98.052932, 30.741082 ], "pop": 1622, "state": "TX" }, { "_id": "78606", "city": "BLANCO", "loc": [ -98.410663, 30.087359 ], "pop": 3152, "state": "TX" }, { "_id": "78607", "city": "BLUFFTON", "loc": [ -98.51503, 30.825633 ], "pop": 31, "state": "TX" }, { "_id": "78608", "city": "BRIGGS", "loc": [ -97.97022800000001, 30.932546 ], "pop": 715, "state": "TX" }, { "_id": "78609", "city": "BUCHANAN DAM", "loc": [ -98.453226, 30.759765 ], "pop": 1457, "state": "TX" }, { "_id": "78610", "city": "BUDA", "loc": [ -97.85342199999999, 30.091758 ], "pop": 7487, "state": "TX" }, { "_id": "78611", "city": "BURNET", "loc": [ -98.26424, 30.776597 ], "pop": 8460, "state": "TX" }, { "_id": "78612", "city": "CEDAR CREEK", "loc": [ -97.497602, 30.096636 ], "pop": 8026, "state": "TX" }, { "_id": "78613", "city": "CEDAR PARK", "loc": [ -97.817571, 30.477165 ], "pop": 22192, "state": "TX" }, { "_id": "78614", "city": "COST", "loc": [ -97.553124, 29.432098 ], "pop": 286, "state": "TX" }, { "_id": "78615", "city": "COUPLAND", "loc": [ -97.330364, 30.532357 ], "pop": 2311, "state": "TX" }, { "_id": "78616", "city": "DALE", "loc": [ -97.580968, 29.952785 ], "pop": 2666, "state": "TX" }, { "_id": "78617", "city": "DEL VALLE", "loc": [ -97.613443, 30.174492 ], "pop": 5635, "state": "TX" }, { "_id": "78618", "city": "DOSS", "loc": [ -99.17072, 30.461319 ], "pop": 54, "state": "TX" }, { "_id": "78619", "city": "DRIFTWOOD", "loc": [ -98.05237200000001, 30.159351 ], "pop": 1064, "state": "TX" }, { "_id": "78620", "city": "DRIPPING SPRINGS", "loc": [ -98.102947, 30.226768 ], "pop": 3453, "state": "TX" }, { "_id": "78621", "city": "ELGIN", "loc": [ -97.37374800000001, 30.323136 ], "pop": 9852, "state": "TX" }, { "_id": "78623", "city": "FISCHER", "loc": [ -98.25828300000001, 29.969588 ], "pop": 459, "state": "TX" }, { "_id": "78624", "city": "FREDERICKSBURG", "loc": [ -98.87992800000001, 30.281658 ], "pop": 15125, "state": "TX" }, { "_id": "78626", "city": "GEORGETOWN", "loc": [ -97.670704, 30.633038 ], "pop": 8153, "state": "TX" }, { "_id": "78628", "city": "ANDICE", "loc": [ -97.70093900000001, 30.659364 ], "pop": 14100, "state": "TX" }, { "_id": "78629", "city": "GONZALES", "loc": [ -97.449456, 29.50857 ], "pop": 11297, "state": "TX" }, { "_id": "78631", "city": "HARPER", "loc": [ -99.24104800000001, 30.281637 ], "pop": 1144, "state": "TX" }, { "_id": "78632", "city": "HARWOOD", "loc": [ -97.490622, 29.666108 ], "pop": 295, "state": "TX" }, { "_id": "78634", "city": "HUTTO", "loc": [ -97.56720300000001, 30.525725 ], "pop": 2314, "state": "TX" }, { "_id": "78635", "city": "HYE", "loc": [ -98.539607, 30.226866 ], "pop": 341, "state": "TX" }, { "_id": "78636", "city": "JOHNSON CITY", "loc": [ -98.36908200000001, 30.294806 ], "pop": 2219, "state": "TX" }, { "_id": "78638", "city": "KINGSBURY", "loc": [ -97.830634, 29.672566 ], "pop": 1073, "state": "TX" }, { "_id": "78639", "city": "KINGSLAND", "loc": [ -98.447492, 30.666212 ], "pop": 2797, "state": "TX" }, { "_id": "78640", "city": "UHLAND", "loc": [ -97.83710600000001, 30.0043 ], "pop": 8770, "state": "TX" }, { "_id": "78641", "city": "LEANDER", "loc": [ -97.87516599999999, 30.552888 ], "pop": 10882, "state": "TX" }, { "_id": "78642", "city": "LIBERTY HILL", "loc": [ -97.93159799999999, 30.662953 ], "pop": 2028, "state": "TX" }, { "_id": "78643", "city": "SUNRISE BEACH", "loc": [ -98.652727, 30.722533 ], "pop": 4802, "state": "TX" }, { "_id": "78644", "city": "LOCKHART", "loc": [ -97.676922, 29.886759 ], "pop": 11690, "state": "TX" }, { "_id": "78645", "city": "JONESTOWN", "loc": [ -97.97023, 30.459796 ], "pop": 4060, "state": "TX" }, { "_id": "78648", "city": "LULING", "loc": [ -97.649947, 29.682621 ], "pop": 6587, "state": "TX" }, { "_id": "78650", "city": "MC DADE", "loc": [ -97.238556, 30.296816 ], "pop": 721, "state": "TX" }, { "_id": "78652", "city": "MANCHACA", "loc": [ -97.853793, 30.127267 ], "pop": 4049, "state": "TX" }, { "_id": "78653", "city": "MANOR", "loc": [ -97.532295, 30.338817 ], "pop": 5359, "state": "TX" }, { "_id": "78654", "city": "CYPRESS MILL", "loc": [ -98.30699199999999, 30.57228 ], "pop": 13422, "state": "TX" }, { "_id": "78655", "city": "MARTINDALE", "loc": [ -97.79331999999999, 29.793328 ], "pop": 2081, "state": "TX" }, { "_id": "78656", "city": "MAXWELL", "loc": [ -97.852852, 29.878628 ], "pop": 3974, "state": "TX" }, { "_id": "78659", "city": "PAIGE", "loc": [ -97.119771, 30.185799 ], "pop": 1294, "state": "TX" }, { "_id": "78660", "city": "PFLUGERVILLE", "loc": [ -97.629895, 30.442133 ], "pop": 12297, "state": "TX" }, { "_id": "78662", "city": "RED ROCK", "loc": [ -97.408058, 29.990616 ], "pop": 1963, "state": "TX" }, { "_id": "78663", "city": "ROUND MOUNTAIN", "loc": [ -98.436514, 30.442879 ], "pop": 169, "state": "TX" }, { "_id": "78664", "city": "ROUND ROCK", "loc": [ -97.66802800000001, 30.51452 ], "pop": 20142, "state": "TX" }, { "_id": "78665", "city": "SANDY", "loc": [ -98.509846, 30.339127 ], "pop": 91, "state": "TX" }, { "_id": "78666", "city": "SAN MARCOS", "loc": [ -97.94041799999999, 29.875359 ], "pop": 39087, "state": "TX" }, { "_id": "78669", "city": "SPICEWOOD", "loc": [ -98.05392000000001, 30.389945 ], "pop": 2235, "state": "TX" }, { "_id": "78671", "city": "ALBERT", "loc": [ -98.655468, 30.224921 ], "pop": 777, "state": "TX" }, { "_id": "78672", "city": "TOW", "loc": [ -98.459647, 30.860867 ], "pop": 874, "state": "TX" }, { "_id": "78675", "city": "WILLOW CITY", "loc": [ -98.66458900000001, 30.454889 ], "pop": 104, "state": "TX" }, { "_id": "78676", "city": "WIMBERLEY", "loc": [ -98.11230999999999, 30.026471 ], "pop": 7004, "state": "TX" }, { "_id": "78677", "city": "WRIGHTSBORO", "loc": [ -97.503531, 29.357772 ], "pop": 26, "state": "TX" }, { "_id": "78681", "city": "ROUND ROCK", "loc": [ -97.706171, 30.508431 ], "pop": 17196, "state": "TX" }, { "_id": "78701", "city": "AUSTIN", "loc": [ -97.742559, 30.271289 ], "pop": 3857, "state": "TX" }, { "_id": "78702", "city": "AUSTIN", "loc": [ -97.716589, 30.263817 ], "pop": 21432, "state": "TX" }, { "_id": "78703", "city": "AUSTIN", "loc": [ -97.764809, 30.290671 ], "pop": 18253, "state": "TX" }, { "_id": "78704", "city": "AUSTIN", "loc": [ -97.765788, 30.242831 ], "pop": 39211, "state": "TX" }, { "_id": "78705", "city": "AUSTIN", "loc": [ -97.739627, 30.289619 ], "pop": 23679, "state": "TX" }, { "_id": "78717", "city": "AUSTIN", "loc": [ -97.747187, 30.505972 ], "pop": 2516, "state": "TX" }, { "_id": "78719", "city": "AUSTIN", "loc": [ -97.666701, 30.180243 ], "pop": 5368, "state": "TX" }, { "_id": "78721", "city": "AUSTIN", "loc": [ -97.686798, 30.272144 ], "pop": 9091, "state": "TX" }, { "_id": "78722", "city": "AUSTIN", "loc": [ -97.71495, 30.289305 ], "pop": 5588, "state": "TX" }, { "_id": "78723", "city": "AUSTIN", "loc": [ -97.68494099999999, 30.308515 ], "pop": 22972, "state": "TX" }, { "_id": "78724", "city": "AUSTIN", "loc": [ -97.63958700000001, 30.295982 ], "pop": 6465, "state": "TX" }, { "_id": "78725", "city": "AUSTIN", "loc": [ -97.624301, 30.256186 ], "pop": 2764, "state": "TX" }, { "_id": "78726", "city": "AUSTIN", "loc": [ -97.832649, 30.43 ], "pop": 871, "state": "TX" }, { "_id": "78727", "city": "AUSTIN", "loc": [ -97.719488, 30.425422 ], "pop": 14276, "state": "TX" }, { "_id": "78728", "city": "AUSTIN", "loc": [ -97.681123, 30.441679 ], "pop": 8051, "state": "TX" }, { "_id": "78729", "city": "AUSTIN", "loc": [ -97.768787, 30.45206 ], "pop": 16611, "state": "TX" }, { "_id": "78730", "city": "AUSTIN", "loc": [ -97.824062, 30.360745 ], "pop": 1021, "state": "TX" }, { "_id": "78731", "city": "AUSTIN", "loc": [ -97.760887, 30.347129 ], "pop": 23276, "state": "TX" }, { "_id": "78732", "city": "AUSTIN", "loc": [ -97.900685, 30.375233 ], "pop": 919, "state": "TX" }, { "_id": "78733", "city": "AUSTIN", "loc": [ -97.86663299999999, 30.331355 ], "pop": 4083, "state": "TX" }, { "_id": "78734", "city": "LAKEWAY", "loc": [ -97.95755800000001, 30.377404 ], "pop": 7495, "state": "TX" }, { "_id": "78735", "city": "AUSTIN", "loc": [ -97.84142300000001, 30.248978 ], "pop": 3463, "state": "TX" }, { "_id": "78736", "city": "AUSTIN", "loc": [ -97.91596800000001, 30.244433 ], "pop": 5812, "state": "TX" }, { "_id": "78737", "city": "AUSTIN", "loc": [ -97.94274900000001, 30.210692 ], "pop": 4135, "state": "TX" }, { "_id": "78738", "city": "AUSTIN", "loc": [ -97.982367, 30.333708 ], "pop": 606, "state": "TX" }, { "_id": "78739", "city": "AUSTIN", "loc": [ -97.878433, 30.172026 ], "pop": 3104, "state": "TX" }, { "_id": "78741", "city": "AUSTIN", "loc": [ -97.722317, 30.231513 ], "pop": 25424, "state": "TX" }, { "_id": "78742", "city": "AUSTIN", "loc": [ -97.670349, 30.231296 ], "pop": 1653, "state": "TX" }, { "_id": "78744", "city": "AUSTIN", "loc": [ -97.74723, 30.18764 ], "pop": 23418, "state": "TX" }, { "_id": "78745", "city": "AUSTIN", "loc": [ -97.795599, 30.206298 ], "pop": 48151, "state": "TX" }, { "_id": "78746", "city": "WEST LAKE HILLS", "loc": [ -97.80812899999999, 30.285009 ], "pop": 18855, "state": "TX" }, { "_id": "78747", "city": "CREEDMOOR", "loc": [ -97.76212700000001, 30.130235 ], "pop": 3070, "state": "TX" }, { "_id": "78748", "city": "AUSTIN", "loc": [ -97.822474, 30.174311 ], "pop": 16288, "state": "TX" }, { "_id": "78749", "city": "AUSTIN", "loc": [ -97.85075500000001, 30.216641 ], "pop": 13674, "state": "TX" }, { "_id": "78750", "city": "AUSTIN", "loc": [ -97.79667600000001, 30.422401 ], "pop": 8867, "state": "TX" }, { "_id": "78751", "city": "AUSTIN", "loc": [ -97.724163, 30.309288 ], "pop": 12715, "state": "TX" }, { "_id": "78752", "city": "AUSTIN", "loc": [ -97.700394, 30.331562 ], "pop": 13311, "state": "TX" }, { "_id": "78753", "city": "AUSTIN", "loc": [ -97.682658, 30.36485 ], "pop": 26823, "state": "TX" }, { "_id": "78754", "city": "AUSTIN", "loc": [ -97.667267, 30.342331 ], "pop": 2328, "state": "TX" }, { "_id": "78756", "city": "AUSTIN", "loc": [ -97.73903199999999, 30.322312 ], "pop": 7525, "state": "TX" }, { "_id": "78757", "city": "AUSTIN", "loc": [ -97.731617, 30.343732 ], "pop": 11723, "state": "TX" }, { "_id": "78758", "city": "AUSTIN", "loc": [ -97.707758, 30.376431 ], "pop": 43246, "state": "TX" }, { "_id": "78759", "city": "AUSTIN", "loc": [ -97.752602, 30.403614 ], "pop": 27479, "state": "TX" }, { "_id": "78801", "city": "UVALDE", "loc": [ -99.793074, 29.217238 ], "pop": 19725, "state": "TX" }, { "_id": "78827", "city": "ASHERTON", "loc": [ -99.748611, 28.436421 ], "pop": 1869, "state": "TX" }, { "_id": "78828", "city": "BARKSDALE", "loc": [ -100.070983, 29.708488 ], "pop": 353, "state": "TX" }, { "_id": "78829", "city": "BATESVILLE", "loc": [ -99.611457, 28.928648 ], "pop": 1512, "state": "TX" }, { "_id": "78830", "city": "BIG WELLS", "loc": [ -99.57808300000001, 28.569344 ], "pop": 882, "state": "TX" }, { "_id": "78832", "city": "BRACKETTVILLE", "loc": [ -100.415495, 29.30963 ], "pop": 3119, "state": "TX" }, { "_id": "78833", "city": "CAMP WOOD", "loc": [ -100.00838, 29.679491 ], "pop": 1017, "state": "TX" }, { "_id": "78834", "city": "CARRIZO SPRINGS", "loc": [ -99.863513, 28.52779 ], "pop": 7682, "state": "TX" }, { "_id": "78837", "city": "COMSTOCK", "loc": [ -101.262755, 29.74842 ], "pop": 497, "state": "TX" }, { "_id": "78838", "city": "CONCAN", "loc": [ -99.68424400000001, 29.524057 ], "pop": 201, "state": "TX" }, { "_id": "78839", "city": "CRYSTAL CITY", "loc": [ -99.826412, 28.686953 ], "pop": 9130, "state": "TX" }, { "_id": "78840", "city": "LAUGHLIN A F B", "loc": [ -100.891555, 29.373881 ], "pop": 38233, "state": "TX" }, { "_id": "78850", "city": "D HANIS", "loc": [ -99.28348800000001, 29.3398 ], "pop": 1337, "state": "TX" }, { "_id": "78851", "city": "DRYDEN", "loc": [ -102.33207, 30.165108 ], "pop": 1410, "state": "TX" }, { "_id": "78852", "city": "EAGLE PASS", "loc": [ -100.48176, 28.702786 ], "pop": 35136, "state": "TX" }, { "_id": "78861", "city": "DUNLAY", "loc": [ -99.12763699999999, 29.356065 ], "pop": 8114, "state": "TX" }, { "_id": "78870", "city": "KNIPPA", "loc": [ -99.637171, 29.291119 ], "pop": 618, "state": "TX" }, { "_id": "78872", "city": "LA PRYOR", "loc": [ -99.85074, 28.948848 ], "pop": 1520, "state": "TX" }, { "_id": "78873", "city": "LEAKEY", "loc": [ -99.747913, 29.768951 ], "pop": 1142, "state": "TX" }, { "_id": "78877", "city": "SPOFFORD", "loc": [ -100.574181, 28.942688 ], "pop": 1242, "state": "TX" }, { "_id": "78879", "city": "RIO FRIO", "loc": [ -99.77233699999999, 29.658295 ], "pop": 253, "state": "TX" }, { "_id": "78880", "city": "ROCKSPRINGS", "loc": [ -100.231029, 30.018756 ], "pop": 1904, "state": "TX" }, { "_id": "78881", "city": "SABINAL", "loc": [ -99.478109, 29.326668 ], "pop": 2203, "state": "TX" }, { "_id": "78883", "city": "TARPLEY", "loc": [ -99.24687400000001, 29.645494 ], "pop": 20, "state": "TX" }, { "_id": "78884", "city": "UTOPIA", "loc": [ -99.558454, 29.597197 ], "pop": 593, "state": "TX" }, { "_id": "78885", "city": "VANDERPOOL", "loc": [ -99.555542, 29.741779 ], "pop": 227, "state": "TX" }, { "_id": "78886", "city": "YANCEY", "loc": [ -99.14277, 29.140398 ], "pop": 368, "state": "TX" }, { "_id": "78931", "city": "BLEIBLERVILLE", "loc": [ -96.418719, 29.967572 ], "pop": 1226, "state": "TX" }, { "_id": "78932", "city": "CARMINE", "loc": [ -96.686077, 30.140351 ], "pop": 356, "state": "TX" }, { "_id": "78933", "city": "CAT SPRING", "loc": [ -96.390029, 29.751204 ], "pop": 658, "state": "TX" }, { "_id": "78934", "city": "COLUMBUS", "loc": [ -96.5527, 29.703247 ], "pop": 5234, "state": "TX" }, { "_id": "78935", "city": "ALLEYTON", "loc": [ -96.46312, 29.745286 ], "pop": 273, "state": "TX" }, { "_id": "78938", "city": "ELLINGER", "loc": [ -96.69663, 29.845915 ], "pop": 374, "state": "TX" }, { "_id": "78940", "city": "FAYETTEVILLE", "loc": [ -96.646317, 29.886789 ], "pop": 2290, "state": "TX" }, { "_id": "78941", "city": "FLATONIA", "loc": [ -97.098685, 29.709493 ], "pop": 2934, "state": "TX" }, { "_id": "78942", "city": "GIDDINGS", "loc": [ -96.93322000000001, 30.177725 ], "pop": 6799, "state": "TX" }, { "_id": "78944", "city": "INDUSTRY", "loc": [ -96.518849, 29.971789 ], "pop": 1258, "state": "TX" }, { "_id": "78945", "city": "LA GRANGE", "loc": [ -96.885988, 29.903978 ], "pop": 10019, "state": "TX" }, { "_id": "78946", "city": "LEDBETTER", "loc": [ -96.761276, 30.238307 ], "pop": 806, "state": "TX" }, { "_id": "78947", "city": "LEXINGTON", "loc": [ -97.052387, 30.419144 ], "pop": 3138, "state": "TX" }, { "_id": "78948", "city": "LINCOLN", "loc": [ -96.970159, 30.317693 ], "pop": 1228, "state": "TX" }, { "_id": "78949", "city": "MULDOON", "loc": [ -97.100562, 29.799305 ], "pop": 8, "state": "TX" }, { "_id": "78950", "city": "NEW ULM", "loc": [ -96.537963, 29.814248 ], "pop": 689, "state": "TX" }, { "_id": "78953", "city": "ROSANKY", "loc": [ -97.311875, 29.924122 ], "pop": 1345, "state": "TX" }, { "_id": "78954", "city": "ROUND TOP", "loc": [ -96.734058, 30.041131 ], "pop": 1127, "state": "TX" }, { "_id": "78956", "city": "SCHULENBURG", "loc": [ -96.91056399999999, 29.688247 ], "pop": 3703, "state": "TX" }, { "_id": "78957", "city": "SMITHVILLE", "loc": [ -97.149396, 30.017813 ], "pop": 5244, "state": "TX" }, { "_id": "78959", "city": "WAELDER", "loc": [ -97.295798, 29.6868 ], "pop": 1105, "state": "TX" }, { "_id": "78962", "city": "WEIMAR", "loc": [ -96.755045, 29.678707 ], "pop": 3854, "state": "TX" }, { "_id": "78963", "city": "WEST POINT", "loc": [ -97.036129, 29.95235 ], "pop": 58, "state": "TX" }, { "_id": "79001", "city": "ADRIAN", "loc": [ -102.69699, 35.275807 ], "pop": 307, "state": "TX" }, { "_id": "79005", "city": "BOOKER", "loc": [ -100.523791, 36.442948 ], "pop": 1454, "state": "TX" }, { "_id": "79007", "city": "PHILLIPS", "loc": [ -101.403245, 35.664299 ], "pop": 17339, "state": "TX" }, { "_id": "79009", "city": "BOVINA", "loc": [ -102.806115, 34.481504 ], "pop": 2805, "state": "TX" }, { "_id": "79011", "city": "BRISCOE", "loc": [ -100.167923, 35.58547 ], "pop": 469, "state": "TX" }, { "_id": "79014", "city": "GLAZIER", "loc": [ -100.353875, 35.885906 ], "pop": 3720, "state": "TX" }, { "_id": "79015", "city": "CANYON", "loc": [ -101.924705, 34.977222 ], "pop": 14389, "state": "TX" }, { "_id": "79018", "city": "CHANNING", "loc": [ -102.334269, 35.782572 ], "pop": 648, "state": "TX" }, { "_id": "79019", "city": "CLAUDE", "loc": [ -101.381271, 35.096715 ], "pop": 1903, "state": "TX" }, { "_id": "79022", "city": "DALHART", "loc": [ -102.517658, 36.073183 ], "pop": 7051, "state": "TX" }, { "_id": "79027", "city": "DIMMITT", "loc": [ -102.304634, 34.534089 ], "pop": 7088, "state": "TX" }, { "_id": "79029", "city": "DUMAS", "loc": [ -101.967984, 35.882315 ], "pop": 15902, "state": "TX" }, { "_id": "79031", "city": "EARTH", "loc": [ -102.421284, 34.241521 ], "pop": 1704, "state": "TX" }, { "_id": "79034", "city": "FOLLETT", "loc": [ -100.206776, 36.430923 ], "pop": 983, "state": "TX" }, { "_id": "79035", "city": "BLACK", "loc": [ -102.719139, 34.640298 ], "pop": 4788, "state": "TX" }, { "_id": "79036", "city": "FRITCH", "loc": [ -101.584482, 35.644121 ], "pop": 5073, "state": "TX" }, { "_id": "79039", "city": "GROOM", "loc": [ -101.12846, 35.216761 ], "pop": 827, "state": "TX" }, { "_id": "79040", "city": "GRUVER", "loc": [ -101.408906, 36.286805 ], "pop": 2053, "state": "TX" }, { "_id": "79041", "city": "HALE CENTER", "loc": [ -101.873623, 34.066943 ], "pop": 3139, "state": "TX" }, { "_id": "79042", "city": "HAPPY", "loc": [ -101.825632, 34.721899 ], "pop": 839, "state": "TX" }, { "_id": "79043", "city": "HART", "loc": [ -102.115534, 34.387838 ], "pop": 1430, "state": "TX" }, { "_id": "79044", "city": "HARTLEY", "loc": [ -102.52213, 35.931122 ], "pop": 724, "state": "TX" }, { "_id": "79045", "city": "HEREFORD", "loc": [ -102.40503, 34.837037 ], "pop": 19090, "state": "TX" }, { "_id": "79046", "city": "HIGGINS", "loc": [ -100.095191, 36.136504 ], "pop": 672, "state": "TX" }, { "_id": "79052", "city": "KRESS", "loc": [ -101.73705, 34.373703 ], "pop": 1643, "state": "TX" }, { "_id": "79056", "city": "LIPSCOMB", "loc": [ -100.270164, 36.223031 ], "pop": 34, "state": "TX" }, { "_id": "79057", "city": "KELLERVILLE", "loc": [ -100.611303, 35.234051 ], "pop": 1151, "state": "TX" }, { "_id": "79059", "city": "MIAMI", "loc": [ -100.702715, 35.719301 ], "pop": 1025, "state": "TX" }, { "_id": "79061", "city": "MOBEETIE", "loc": [ -100.424158, 35.529717 ], "pop": 421, "state": "TX" }, { "_id": "79062", "city": "MORSE", "loc": [ -101.47288, 36.059579 ], "pop": 169, "state": "TX" }, { "_id": "79063", "city": "NAZARETH", "loc": [ -102.106914, 34.544356 ], "pop": 443, "state": "TX" }, { "_id": "79064", "city": "OLTON", "loc": [ -102.141415, 34.184418 ], "pop": 2747, "state": "TX" }, { "_id": "79065", "city": "PAMPA", "loc": [ -100.957885, 35.538043 ], "pop": 22816, "state": "TX" }, { "_id": "79068", "city": "PANHANDLE", "loc": [ -101.43037, 35.380841 ], "pop": 3669, "state": "TX" }, { "_id": "79070", "city": "PERRYTON", "loc": [ -100.815558, 36.374825 ], "pop": 9128, "state": "TX" }, { "_id": "79072", "city": "PLAINVIEW", "loc": [ -101.725896, 34.196194 ], "pop": 27037, "state": "TX" }, { "_id": "79079", "city": "TWITTY", "loc": [ -100.262152, 35.220596 ], "pop": 2927, "state": "TX" }, { "_id": "79080", "city": "SKELLYTOWN", "loc": [ -101.172134, 35.568489 ], "pop": 739, "state": "TX" }, { "_id": "79081", "city": "SPEARMAN", "loc": [ -101.195234, 36.192689 ], "pop": 3626, "state": "TX" }, { "_id": "79082", "city": "SPRINGLAKE", "loc": [ -102.308999, 34.23932 ], "pop": 331, "state": "TX" }, { "_id": "79083", "city": "STINNETT", "loc": [ -101.450011, 35.837661 ], "pop": 3277, "state": "TX" }, { "_id": "79084", "city": "STRATFORD", "loc": [ -101.988568, 36.33349 ], "pop": 2858, "state": "TX" }, { "_id": "79085", "city": "SUMMERFIELD", "loc": [ -102.49919, 34.727244 ], "pop": 109, "state": "TX" }, { "_id": "79086", "city": "SUNRAY", "loc": [ -101.812334, 36.009707 ], "pop": 1963, "state": "TX" }, { "_id": "79087", "city": "TEXLINE", "loc": [ -102.984516, 36.374034 ], "pop": 672, "state": "TX" }, { "_id": "79088", "city": "VIGO PARK", "loc": [ -101.762864, 34.540258 ], "pop": 5651, "state": "TX" }, { "_id": "79092", "city": "VEGA", "loc": [ -102.356572, 35.373212 ], "pop": 1738, "state": "TX" }, { "_id": "79094", "city": "WAYSIDE", "loc": [ -101.545434, 34.803353 ], "pop": 118, "state": "TX" }, { "_id": "79095", "city": "WELLINGTON", "loc": [ -100.220721, 34.871726 ], "pop": 3324, "state": "TX" }, { "_id": "79096", "city": "WHEELER", "loc": [ -100.256824, 35.431852 ], "pop": 2062, "state": "TX" }, { "_id": "79097", "city": "WHITE DEER", "loc": [ -101.173993, 35.42781 ], "pop": 1341, "state": "TX" }, { "_id": "79098", "city": "WILDORADO", "loc": [ -102.211754, 35.19156 ], "pop": 296, "state": "TX" }, { "_id": "79101", "city": "AMARILLO", "loc": [ -101.842052, 35.203238 ], "pop": 2355, "state": "TX" }, { "_id": "79102", "city": "AMARILLO", "loc": [ -101.84963, 35.199854 ], "pop": 9091, "state": "TX" }, { "_id": "79103", "city": "AMARILLO", "loc": [ -101.797587, 35.175134 ], "pop": 5336, "state": "TX" }, { "_id": "79104", "city": "AMARILLO", "loc": [ -101.797503, 35.193918 ], "pop": 12468, "state": "TX" }, { "_id": "79106", "city": "AMARILLO", "loc": [ -101.894918, 35.197741 ], "pop": 29728, "state": "TX" }, { "_id": "79107", "city": "AMARILLO", "loc": [ -101.805962, 35.230866 ], "pop": 29593, "state": "TX" }, { "_id": "79108", "city": "AMARILLO", "loc": [ -101.830025, 35.277866 ], "pop": 8461, "state": "TX" }, { "_id": "79109", "city": "AMARILLO", "loc": [ -101.886764, 35.166332 ], "pop": 41676, "state": "TX" }, { "_id": "79110", "city": "AMARILLO", "loc": [ -101.864063, 35.154468 ], "pop": 17159, "state": "TX" }, { "_id": "79111", "city": "AMARILLO", "loc": [ -101.670342, 35.228619 ], "pop": 2194, "state": "TX" }, { "_id": "79118", "city": "AMARILLO", "loc": [ -101.834936, 35.07629 ], "pop": 6981, "state": "TX" }, { "_id": "79119", "city": "AMARILLO", "loc": [ -101.97432, 35.064214 ], "pop": 968, "state": "TX" }, { "_id": "79121", "city": "AMARILLO", "loc": [ -101.926594, 35.169689 ], "pop": 3454, "state": "TX" }, { "_id": "79124", "city": "AMARILLO", "loc": [ -101.942952, 35.270269 ], "pop": 3694, "state": "TX" }, { "_id": "79201", "city": "KIRKLAND", "loc": [ -100.21017, 34.428124 ], "pop": 5862, "state": "TX" }, { "_id": "79220", "city": "AFTON", "loc": [ -100.802131, 33.771837 ], "pop": 132, "state": "TX" }, { "_id": "79225", "city": "CHILLICOTHE", "loc": [ -99.515669, 34.243946 ], "pop": 1186, "state": "TX" }, { "_id": "79226", "city": "CLARENDON", "loc": [ -100.895157, 34.952878 ], "pop": 2884, "state": "TX" }, { "_id": "79227", "city": "CROWELL", "loc": [ -99.698345, 33.991208 ], "pop": 1794, "state": "TX" }, { "_id": "79229", "city": "DICKENS", "loc": [ -100.819695, 33.627996 ], "pop": 569, "state": "TX" }, { "_id": "79230", "city": "DODSON", "loc": [ -100.028593, 34.764354 ], "pop": 197, "state": "TX" }, { "_id": "79232", "city": "DUMONT", "loc": [ -100.319829, 33.656735 ], "pop": 344, "state": "TX" }, { "_id": "79234", "city": "FLOMOT", "loc": [ -101.003824, 34.232076 ], "pop": 38, "state": "TX" }, { "_id": "79235", "city": "FLOYDADA", "loc": [ -101.334564, 33.974296 ], "pop": 5075, "state": "TX" }, { "_id": "79237", "city": "HEDLEY", "loc": [ -100.680632, 34.869787 ], "pop": 812, "state": "TX" }, { "_id": "79239", "city": "LAKEVIEW", "loc": [ -100.725921, 34.672437 ], "pop": 358, "state": "TX" }, { "_id": "79241", "city": "LOCKNEY", "loc": [ -101.425934, 34.145827 ], "pop": 3422, "state": "TX" }, { "_id": "79243", "city": "MCADOO", "loc": [ -100.983293, 33.741265 ], "pop": 149, "state": "TX" }, { "_id": "79244", "city": "MATADOR", "loc": [ -100.836138, 34.052507 ], "pop": 1173, "state": "TX" }, { "_id": "79245", "city": "MEMPHIS", "loc": [ -100.534653, 34.712237 ], "pop": 2843, "state": "TX" }, { "_id": "79248", "city": "CHALK", "loc": [ -100.305917, 34.019154 ], "pop": 2260, "state": "TX" }, { "_id": "79250", "city": "PETERSBURG", "loc": [ -101.604591, 33.876806 ], "pop": 1608, "state": "TX" }, { "_id": "79251", "city": "QUAIL", "loc": [ -100.425243, 34.917969 ], "pop": 73, "state": "TX" }, { "_id": "79252", "city": "QUANAH", "loc": [ -99.749438, 34.29555 ], "pop": 4097, "state": "TX" }, { "_id": "79255", "city": "QUITAQUE", "loc": [ -101.046458, 34.379605 ], "pop": 674, "state": "TX" }, { "_id": "79256", "city": "ROARING SPRINGS", "loc": [ -100.852818, 33.897669 ], "pop": 321, "state": "TX" }, { "_id": "79257", "city": "SILVERTON", "loc": [ -101.316899, 34.464089 ], "pop": 1297, "state": "TX" }, { "_id": "79259", "city": "TELL", "loc": [ -100.396482, 34.378164 ], "pop": 70, "state": "TX" }, { "_id": "79260", "city": "TRUSCOTT", "loc": [ -99.66245499999999, 33.75323 ], "pop": 54, "state": "TX" }, { "_id": "79261", "city": "TURKEY", "loc": [ -100.844875, 34.403644 ], "pop": 704, "state": "TX" }, { "_id": "79311", "city": "ABERNATHY", "loc": [ -101.861111, 33.849961 ], "pop": 3482, "state": "TX" }, { "_id": "79312", "city": "AMHERST", "loc": [ -102.441614, 33.997608 ], "pop": 1266, "state": "TX" }, { "_id": "79313", "city": "ANTON", "loc": [ -102.165165, 33.804278 ], "pop": 1625, "state": "TX" }, { "_id": "79316", "city": "BROWNFIELD", "loc": [ -102.276157, 33.169801 ], "pop": 11954, "state": "TX" }, { "_id": "79320", "city": "BULA", "loc": [ -102.656426, 33.89696 ], "pop": 113, "state": "TX" }, { "_id": "79322", "city": "CROSBYTON", "loc": [ -101.228733, 33.656159 ], "pop": 2711, "state": "TX" }, { "_id": "79323", "city": "DENVER CITY", "loc": [ -102.831251, 32.971114 ], "pop": 6697, "state": "TX" }, { "_id": "79324", "city": "ENOCHS", "loc": [ -102.764107, 33.850225 ], "pop": 53, "state": "TX" }, { "_id": "79325", "city": "FARWELL", "loc": [ -102.990064, 34.386025 ], "pop": 2270, "state": "TX" }, { "_id": "79326", "city": "FIELDTON", "loc": [ -102.269692, 34.091878 ], "pop": 48, "state": "TX" }, { "_id": "79329", "city": "IDALOU", "loc": [ -101.678579, 33.650376 ], "pop": 4632, "state": "TX" }, { "_id": "79331", "city": "LAMESA", "loc": [ -101.956914, 32.736677 ], "pop": 12989, "state": "TX" }, { "_id": "79336", "city": "LEVELLAND", "loc": [ -102.367591, 33.578778 ], "pop": 20952, "state": "TX" }, { "_id": "79339", "city": "LITTLEFIELD", "loc": [ -102.320697, 33.921195 ], "pop": 7766, "state": "TX" }, { "_id": "79342", "city": "LOOP", "loc": [ -102.422084, 32.916169 ], "pop": 393, "state": "TX" }, { "_id": "79343", "city": "LORENZO", "loc": [ -101.527736, 33.666626 ], "pop": 1753, "state": "TX" }, { "_id": "79344", "city": "MAPLE", "loc": [ -102.926588, 33.8622 ], "pop": 234, "state": "TX" }, { "_id": "79345", "city": "MEADOW", "loc": [ -102.249196, 33.332098 ], "pop": 1234, "state": "TX" }, { "_id": "79346", "city": "MORTON", "loc": [ -102.779619, 33.715718 ], "pop": 3569, "state": "TX" }, { "_id": "79347", "city": "MULESHOE", "loc": [ -102.749631, 34.219308 ], "pop": 6664, "state": "TX" }, { "_id": "79351", "city": "ODONNELL", "loc": [ -101.827099, 32.977331 ], "pop": 1381, "state": "TX" }, { "_id": "79353", "city": "PEP", "loc": [ -102.56558, 33.810434 ], "pop": 66, "state": "TX" }, { "_id": "79355", "city": "PLAINS", "loc": [ -102.829367, 33.189354 ], "pop": 2089, "state": "TX" }, { "_id": "79356", "city": "POST", "loc": [ -101.39216, 33.201695 ], "pop": 5143, "state": "TX" }, { "_id": "79357", "city": "CONE", "loc": [ -101.382738, 33.678977 ], "pop": 2840, "state": "TX" }, { "_id": "79358", "city": "ROPESVILLE", "loc": [ -102.15841, 33.457499 ], "pop": 1556, "state": "TX" }, { "_id": "79359", "city": "SEAGRAVES", "loc": [ -102.578075, 32.93172 ], "pop": 3307, "state": "TX" }, { "_id": "79360", "city": "SEMINOLE", "loc": [ -102.682761, 32.721045 ], "pop": 10423, "state": "TX" }, { "_id": "79363", "city": "SHALLOWATER", "loc": [ -101.983626, 33.691859 ], "pop": 4342, "state": "TX" }, { "_id": "79364", "city": "RANSOM CANYON", "loc": [ -101.65192, 33.436795 ], "pop": 7118, "state": "TX" }, { "_id": "79366", "city": "RANSOM CANYON", "loc": [ -101.690805, 33.533019 ], "pop": 1248, "state": "TX" }, { "_id": "79370", "city": "SPUR", "loc": [ -100.857116, 33.479016 ], "pop": 1718, "state": "TX" }, { "_id": "79371", "city": "SUDAN", "loc": [ -102.525525, 34.069661 ], "pop": 1210, "state": "TX" }, { "_id": "79373", "city": "TAHOKA", "loc": [ -101.821976, 33.198803 ], "pop": 4309, "state": "TX" }, { "_id": "79376", "city": "TOKIO", "loc": [ -102.576753, 33.18259 ], "pop": 30, "state": "TX" }, { "_id": "79377", "city": "WELCH", "loc": [ -102.106792, 32.893827 ], "pop": 575, "state": "TX" }, { "_id": "79379", "city": "WHITEFACE", "loc": [ -102.638941, 33.586575 ], "pop": 808, "state": "TX" }, { "_id": "79381", "city": "WILSON", "loc": [ -101.712231, 33.329862 ], "pop": 1068, "state": "TX" }, { "_id": "79382", "city": "WOLFFORTH", "loc": [ -102.026101, 33.530381 ], "pop": 3101, "state": "TX" }, { "_id": "79401", "city": "LUBBOCK", "loc": [ -101.860634, 33.586527 ], "pop": 10240, "state": "TX" }, { "_id": "79403", "city": "LUBBOCK", "loc": [ -101.80982, 33.619573 ], "pop": 17237, "state": "TX" }, { "_id": "79404", "city": "LUBBOCK", "loc": [ -101.833263, 33.525979 ], "pop": 12158, "state": "TX" }, { "_id": "79405", "city": "LUBBOCK", "loc": [ -101.850655, 33.570972 ], "pop": 2903, "state": "TX" }, { "_id": "79406", "city": "LUBBOCK", "loc": [ -101.877828, 33.581934 ], "pop": 5582, "state": "TX" }, { "_id": "79407", "city": "LUBBOCK", "loc": [ -101.942333, 33.568369 ], "pop": 12783, "state": "TX" }, { "_id": "79410", "city": "LUBBOCK", "loc": [ -101.890377, 33.56931 ], "pop": 9955, "state": "TX" }, { "_id": "79411", "city": "LUBBOCK", "loc": [ -101.862593, 33.570393 ], "pop": 4715, "state": "TX" }, { "_id": "79412", "city": "LUBBOCK", "loc": [ -101.857737, 33.546313 ], "pop": 14245, "state": "TX" }, { "_id": "79413", "city": "LUBBOCK", "loc": [ -101.887142, 33.546597 ], "pop": 20238, "state": "TX" }, { "_id": "79414", "city": "LUBBOCK", "loc": [ -101.918666, 33.549728 ], "pop": 16893, "state": "TX" }, { "_id": "79415", "city": "LUBBOCK", "loc": [ -101.876015, 33.602117 ], "pop": 13384, "state": "TX" }, { "_id": "79416", "city": "LUBBOCK", "loc": [ -101.936705, 33.592397 ], "pop": 20774, "state": "TX" }, { "_id": "79423", "city": "LUBBOCK", "loc": [ -101.87946, 33.514604 ], "pop": 17308, "state": "TX" }, { "_id": "79424", "city": "LUBBOCK", "loc": [ -101.93439, 33.515866 ], "pop": 22873, "state": "TX" }, { "_id": "79489", "city": "REESE AIR FORCE", "loc": [ -102.028792, 33.594344 ], "pop": 312, "state": "TX" }, { "_id": "79501", "city": "ANSON", "loc": [ -99.895301, 32.748894 ], "pop": 3724, "state": "TX" }, { "_id": "79502", "city": "ASPERMONT", "loc": [ -100.234372, 33.130059 ], "pop": 1424, "state": "TX" }, { "_id": "79503", "city": "AVOCA", "loc": [ -99.69642, 32.883225 ], "pop": 248, "state": "TX" }, { "_id": "79504", "city": "BAIRD", "loc": [ -99.37766000000001, 32.391557 ], "pop": 2267, "state": "TX" }, { "_id": "79506", "city": "BLACKWELL", "loc": [ -100.311078, 32.082044 ], "pop": 697, "state": "TX" }, { "_id": "79510", "city": "CLYDE", "loc": [ -99.518445, 32.380289 ], "pop": 7664, "state": "TX" }, { "_id": "79511", "city": "COAHOMA", "loc": [ -101.319681, 32.294215 ], "pop": 2365, "state": "TX" }, { "_id": "79512", "city": "COLORADO CITY", "loc": [ -100.860948, 32.398736 ], "pop": 5874, "state": "TX" }, { "_id": "79517", "city": "FLUVANNA", "loc": [ -101.041966, 32.781022 ], "pop": 707, "state": "TX" }, { "_id": "79518", "city": "GIRARD", "loc": [ -100.693688, 33.363202 ], "pop": 132, "state": "TX" }, { "_id": "79519", "city": "GOLDSBORO", "loc": [ -99.677457, 32.048213 ], "pop": 27, "state": "TX" }, { "_id": "79520", "city": "HAMLIN", "loc": [ -100.128014, 32.879893 ], "pop": 3271, "state": "TX" }, { "_id": "79521", "city": "HASKELL", "loc": [ -99.730923, 33.157993 ], "pop": 3917, "state": "TX" }, { "_id": "79525", "city": "HAWLEY", "loc": [ -99.79599399999999, 32.594965 ], "pop": 4405, "state": "TX" }, { "_id": "79526", "city": "HERMLEIGH", "loc": [ -100.754714, 32.629441 ], "pop": 942, "state": "TX" }, { "_id": "79527", "city": "IRA", "loc": [ -101.025419, 32.621274 ], "pop": 949, "state": "TX" }, { "_id": "79528", "city": "JAYTON", "loc": [ -100.582482, 33.251774 ], "pop": 708, "state": "TX" }, { "_id": "79529", "city": "KNOX CITY", "loc": [ -99.8137, 33.418294 ], "pop": 1751, "state": "TX" }, { "_id": "79530", "city": "LAWN", "loc": [ -99.73508099999999, 32.136012 ], "pop": 619, "state": "TX" }, { "_id": "79532", "city": "LORAINE", "loc": [ -100.72851, 32.385047 ], "pop": 1300, "state": "TX" }, { "_id": "79533", "city": "LUEDERS", "loc": [ -99.672792, 32.762339 ], "pop": 839, "state": "TX" }, { "_id": "79534", "city": "MC CAULLEY", "loc": [ -100.216784, 32.778654 ], "pop": 272, "state": "TX" }, { "_id": "79535", "city": "MARYNEAL", "loc": [ -100.497178, 32.202639 ], "pop": 123, "state": "TX" }, { "_id": "79536", "city": "MERKEL", "loc": [ -99.99244299999999, 32.444371 ], "pop": 4906, "state": "TX" }, { "_id": "79537", "city": "NOLAN", "loc": [ -100.267053, 32.279333 ], "pop": 254, "state": "TX" }, { "_id": "79538", "city": "NOVICE", "loc": [ -99.59353, 32.000927 ], "pop": 421, "state": "TX" }, { "_id": "79539", "city": "O BRIEN", "loc": [ -99.847303, 33.374869 ], "pop": 314, "state": "TX" }, { "_id": "79540", "city": "OLD GLORY", "loc": [ -100.153155, 33.184162 ], "pop": 431, "state": "TX" }, { "_id": "79541", "city": "OVALO", "loc": [ -99.822873, 32.155257 ], "pop": 326, "state": "TX" }, { "_id": "79543", "city": "ROBY", "loc": [ -100.400766, 32.722016 ], "pop": 1333, "state": "TX" }, { "_id": "79544", "city": "ROCHESTER", "loc": [ -99.85936599999999, 33.310457 ], "pop": 707, "state": "TX" }, { "_id": "79545", "city": "ROSCOE", "loc": [ -100.539088, 32.427558 ], "pop": 2168, "state": "TX" }, { "_id": "79546", "city": "ROTAN", "loc": [ -100.470489, 32.855521 ], "pop": 2449, "state": "TX" }, { "_id": "79547", "city": "RULE", "loc": [ -99.889354, 33.184163 ], "pop": 993, "state": "TX" }, { "_id": "79548", "city": "SAGERTON", "loc": [ -99.892329, 33.051321 ], "pop": 351, "state": "TX" }, { "_id": "79549", "city": "DERMOTT", "loc": [ -100.907485, 32.715105 ], "pop": 16206, "state": "TX" }, { "_id": "79553", "city": "STAMFORD", "loc": [ -99.78592999999999, 32.945323 ], "pop": 4338, "state": "TX" }, { "_id": "79556", "city": "SWEETWATER", "loc": [ -100.397908, 32.472589 ], "pop": 14064, "state": "TX" }, { "_id": "79560", "city": "SYLVESTER", "loc": [ -100.242497, 32.717909 ], "pop": 240, "state": "TX" }, { "_id": "79561", "city": "TRENT", "loc": [ -100.119488, 32.489752 ], "pop": 494, "state": "TX" }, { "_id": "79562", "city": "TUSCOLA", "loc": [ -99.82438999999999, 32.234955 ], "pop": 2980, "state": "TX" }, { "_id": "79563", "city": "TYE", "loc": [ -99.86843399999999, 32.447728 ], "pop": 903, "state": "TX" }, { "_id": "79565", "city": "WESTBROOK", "loc": [ -100.990719, 32.353195 ], "pop": 842, "state": "TX" }, { "_id": "79566", "city": "WINGATE", "loc": [ -100.118311, 32.031777 ], "pop": 313, "state": "TX" }, { "_id": "79567", "city": "WINTERS", "loc": [ -99.95511399999999, 31.962028 ], "pop": 3876, "state": "TX" }, { "_id": "79601", "city": "ABILENE", "loc": [ -99.718208, 32.468155 ], "pop": 16713, "state": "TX" }, { "_id": "79602", "city": "ABILENE", "loc": [ -99.721448, 32.41783 ], "pop": 16432, "state": "TX" }, { "_id": "79603", "city": "ABILENE", "loc": [ -99.761916, 32.467852 ], "pop": 24123, "state": "TX" }, { "_id": "79605", "city": "ABILENE", "loc": [ -99.772374, 32.431987 ], "pop": 29862, "state": "TX" }, { "_id": "79606", "city": "ABILENE", "loc": [ -99.77457800000001, 32.392038 ], "pop": 17332, "state": "TX" }, { "_id": "79607", "city": "DYESS AFB", "loc": [ -99.82214, 32.418956 ], "pop": 4965, "state": "TX" }, { "_id": "79701", "city": "MIDLAND", "loc": [ -102.06261, 31.989636 ], "pop": 32926, "state": "TX" }, { "_id": "79703", "city": "MIDLAND", "loc": [ -102.136854, 31.972106 ], "pop": 23167, "state": "TX" }, { "_id": "79705", "city": "MIDLAND", "loc": [ -102.091483, 32.029473 ], "pop": 27708, "state": "TX" }, { "_id": "79707", "city": "MIDLAND", "loc": [ -102.147599, 32.019911 ], "pop": 22810, "state": "TX" }, { "_id": "79713", "city": "ACKERLY", "loc": [ -101.795132, 32.609085 ], "pop": 793, "state": "TX" }, { "_id": "79714", "city": "ANDREWS", "loc": [ -102.540926, 32.320125 ], "pop": 14338, "state": "TX" }, { "_id": "79718", "city": "BALMORHEA", "loc": [ -103.693316, 31.012361 ], "pop": 1655, "state": "TX" }, { "_id": "79719", "city": "BARSTOW", "loc": [ -103.397086, 31.463908 ], "pop": 701, "state": "TX" }, { "_id": "79720", "city": "VEALMOOR", "loc": [ -101.467517, 32.241767 ], "pop": 29733, "state": "TX" }, { "_id": "79730", "city": "COYANOSA", "loc": [ -103.053815, 31.229547 ], "pop": 341, "state": "TX" }, { "_id": "79731", "city": "CRANE", "loc": [ -102.354382, 31.396949 ], "pop": 4652, "state": "TX" }, { "_id": "79734", "city": "FORT DAVIS", "loc": [ -103.936434, 30.613144 ], "pop": 1607, "state": "TX" }, { "_id": "79735", "city": "FORT STOCKTON", "loc": [ -102.879942, 30.890785 ], "pop": 11755, "state": "TX" }, { "_id": "79738", "city": "GAIL", "loc": [ -101.450032, 32.752334 ], "pop": 799, "state": "TX" }, { "_id": "79739", "city": "GARDEN CITY", "loc": [ -101.526912, 31.849078 ], "pop": 1447, "state": "TX" }, { "_id": "79741", "city": "GOLDSMITH", "loc": [ -102.625047, 31.95412 ], "pop": 442, "state": "TX" }, { "_id": "79742", "city": "GRANDFALLS", "loc": [ -102.856778, 31.345856 ], "pop": 748, "state": "TX" }, { "_id": "79743", "city": "IMPERIAL", "loc": [ -102.710918, 31.237264 ], "pop": 557, "state": "TX" }, { "_id": "79744", "city": "IRAAN", "loc": [ -101.915175, 30.915564 ], "pop": 1596, "state": "TX" }, { "_id": "79745", "city": "KERMIT", "loc": [ -103.091269, 31.85496 ], "pop": 7370, "state": "TX" }, { "_id": "79748", "city": "KNOTT", "loc": [ -101.651731, 32.412489 ], "pop": 245, "state": "TX" }, { "_id": "79749", "city": "LENORAH", "loc": [ -101.761137, 32.439157 ], "pop": 529, "state": "TX" }, { "_id": "79752", "city": "MC CAMEY", "loc": [ -102.215325, 31.131894 ], "pop": 2950, "state": "TX" }, { "_id": "79754", "city": "MENTONE", "loc": [ -103.550316, 31.738374 ], "pop": 107, "state": "TX" }, { "_id": "79755", "city": "MIDKIFF", "loc": [ -101.926913, 31.306761 ], "pop": 1497, "state": "TX" }, { "_id": "79756", "city": "MONAHANS", "loc": [ -102.900273, 31.581294 ], "pop": 11296, "state": "TX" }, { "_id": "79758", "city": "GARDENDALE", "loc": [ -102.357237, 32.024476 ], "pop": 1536, "state": "TX" }, { "_id": "79761", "city": "ODESSA", "loc": [ -102.352252, 31.857945 ], "pop": 30126, "state": "TX" }, { "_id": "79762", "city": "ODESSA", "loc": [ -102.354806, 31.889029 ], "pop": 34327, "state": "TX" }, { "_id": "79763", "city": "ODESSA", "loc": [ -102.416179, 31.834085 ], "pop": 30550, "state": "TX" }, { "_id": "79764", "city": "ODESSA", "loc": [ -102.437465, 31.876683 ], "pop": 17919, "state": "TX" }, { "_id": "79765", "city": "ODESSA", "loc": [ -102.394403, 31.937548 ], "pop": 2240, "state": "TX" }, { "_id": "79766", "city": "ODESSA", "loc": [ -102.344863, 31.782683 ], "pop": 1794, "state": "TX" }, { "_id": "79772", "city": "VERHALEN", "loc": [ -103.508129, 31.414384 ], "pop": 14197, "state": "TX" }, { "_id": "79777", "city": "PYOTE", "loc": [ -103.139676, 31.539491 ], "pop": 370, "state": "TX" }, { "_id": "79781", "city": "SHEFFIELD", "loc": [ -101.859963, 30.693549 ], "pop": 428, "state": "TX" }, { "_id": "79782", "city": "STANTON", "loc": [ -101.809887, 32.139992 ], "pop": 3776, "state": "TX" }, { "_id": "79783", "city": "TARZAN", "loc": [ -101.960723, 32.357523 ], "pop": 643, "state": "TX" }, { "_id": "79789", "city": "WINK", "loc": [ -103.156084, 31.752673 ], "pop": 1256, "state": "TX" }, { "_id": "79821", "city": "ANTHONY", "loc": [ -106.597625, 31.990718 ], "pop": 3341, "state": "TX" }, { "_id": "79830", "city": "ALPINE", "loc": [ -103.654089, 30.263111 ], "pop": 7648, "state": "TX" }, { "_id": "79834", "city": "BIG BEND NATIONA", "loc": [ -103.330626, 29.147657 ], "pop": 249, "state": "TX" }, { "_id": "79835", "city": "CANUTILLO", "loc": [ -106.592888, 31.934379 ], "pop": 8585, "state": "TX" }, { "_id": "79836", "city": "CLINT", "loc": [ -106.20383, 31.549418 ], "pop": 17337, "state": "TX" }, { "_id": "79837", "city": "DELL CITY", "loc": [ -105.209902, 31.923975 ], "pop": 915, "state": "TX" }, { "_id": "79839", "city": "FORT HANCOCK", "loc": [ -105.823448, 31.296887 ], "pop": 1108, "state": "TX" }, { "_id": "79842", "city": "MARATHON", "loc": [ -103.221397, 30.18858 ], "pop": 725, "state": "TX" }, { "_id": "79843", "city": "MARFA", "loc": [ -104.084835, 30.292982 ], "pop": 3155, "state": "TX" }, { "_id": "79845", "city": "PRESIDIO", "loc": [ -104.35511, 29.557302 ], "pop": 3482, "state": "TX" }, { "_id": "79847", "city": "SALT FLAT", "loc": [ -104.611467, 31.359027 ], "pop": 317, "state": "TX" }, { "_id": "79851", "city": "SIERRA BLANCA", "loc": [ -105.321874, 31.193821 ], "pop": 892, "state": "TX" }, { "_id": "79852", "city": "TERLINGUA", "loc": [ -103.559671, 29.31648 ], "pop": 59, "state": "TX" }, { "_id": "79854", "city": "VALENTINE", "loc": [ -104.481096, 30.620043 ], "pop": 339, "state": "TX" }, { "_id": "79855", "city": "KENT", "loc": [ -104.832249, 31.042879 ], "pop": 3090, "state": "TX" }, { "_id": "79901", "city": "EL PASO", "loc": [ -106.478311, 31.758411 ], "pop": 17467, "state": "TX" }, { "_id": "79902", "city": "EL PASO", "loc": [ -106.493165, 31.776317 ], "pop": 26404, "state": "TX" }, { "_id": "79903", "city": "EL PASO", "loc": [ -106.440569, 31.786213 ], "pop": 20768, "state": "TX" }, { "_id": "79904", "city": "EL PASO", "loc": [ -106.438135, 31.853334 ], "pop": 35732, "state": "TX" }, { "_id": "79905", "city": "EL PASO", "loc": [ -106.430445, 31.767447 ], "pop": 32865, "state": "TX" }, { "_id": "79906", "city": "FORT BLISS", "loc": [ -106.421611, 31.807631 ], "pop": 11364, "state": "TX" }, { "_id": "79907", "city": "EL PASO", "loc": [ -106.329281, 31.708908 ], "pop": 58052, "state": "TX" }, { "_id": "79908", "city": "FORT BLISS", "loc": [ -106.386711, 31.82753 ], "pop": 2918, "state": "TX" }, { "_id": "79912", "city": "EL PASO", "loc": [ -106.536433, 31.838309 ], "pop": 46537, "state": "TX" }, { "_id": "79915", "city": "EL PASO", "loc": [ -106.368605, 31.743234 ], "pop": 46356, "state": "TX" }, { "_id": "79916", "city": "FORT BLISS", "loc": [ -106.159157, 31.794873 ], "pop": 6703, "state": "TX" }, { "_id": "79922", "city": "EL PASO", "loc": [ -106.573176, 31.821767 ], "pop": 8540, "state": "TX" }, { "_id": "79924", "city": "EL PASO", "loc": [ -106.414857, 31.902098 ], "pop": 57215, "state": "TX" }, { "_id": "79925", "city": "EL PASO", "loc": [ -106.361317, 31.781402 ], "pop": 41235, "state": "TX" }, { "_id": "79927", "city": "HORIZON CITY", "loc": [ -106.273064, 31.653014 ], "pop": 30011, "state": "TX" }, { "_id": "79930", "city": "EL PASO", "loc": [ -106.456754, 31.804795 ], "pop": 29792, "state": "TX" }, { "_id": "79932", "city": "EL PASO", "loc": [ -106.593186, 31.862334 ], "pop": 14909, "state": "TX" }, { "_id": "79934", "city": "EL PASO", "loc": [ -106.407328, 31.938585 ], "pop": 2983, "state": "TX" }, { "_id": "79935", "city": "EL PASO", "loc": [ -106.330258, 31.771847 ], "pop": 20465, "state": "TX" }, { "_id": "79936", "city": "EL PASO", "loc": [ -106.30159, 31.767655 ], "pop": 52031, "state": "TX" }, { "_id": "80002", "city": "ARVADA", "loc": [ -105.098402, 39.794533 ], "pop": 12065, "state": "CO" }, { "_id": "80003", "city": "ARVADA", "loc": [ -105.065549, 39.828572 ], "pop": 32980, "state": "CO" }, { "_id": "80004", "city": "ARVADA", "loc": [ -105.11771, 39.814066 ], "pop": 33260, "state": "CO" }, { "_id": "80005", "city": "ARVADA", "loc": [ -105.109719, 39.842189 ], "pop": 22613, "state": "CO" }, { "_id": "80010", "city": "AURORA", "loc": [ -104.864618, 39.736788 ], "pop": 27090, "state": "CO" }, { "_id": "80011", "city": "AURORA", "loc": [ -104.815233, 39.737809 ], "pop": 36021, "state": "CO" }, { "_id": "80012", "city": "AURORA", "loc": [ -104.837693, 39.698672 ], "pop": 37711, "state": "CO" }, { "_id": "80013", "city": "AURORA", "loc": [ -104.784566, 39.657457 ], "pop": 45335, "state": "CO" }, { "_id": "80014", "city": "AURORA", "loc": [ -104.834954, 39.666171 ], "pop": 31059, "state": "CO" }, { "_id": "80015", "city": "AURORA", "loc": [ -104.787438, 39.62552 ], "pop": 28161, "state": "CO" }, { "_id": "80016", "city": "AURORA", "loc": [ -104.741734, 39.618713 ], "pop": 4085, "state": "CO" }, { "_id": "80017", "city": "AURORA", "loc": [ -104.788093, 39.694827 ], "pop": 25910, "state": "CO" }, { "_id": "80018", "city": "AURORA", "loc": [ -104.707102, 39.710179 ], "pop": 321, "state": "CO" }, { "_id": "80019", "city": "AURORA", "loc": [ -104.706906, 39.765608 ], "pop": 46, "state": "CO" }, { "_id": "80020", "city": "BROOMFIELD", "loc": [ -105.060902, 39.924513 ], "pop": 31533, "state": "CO" }, { "_id": "80021", "city": "WESTMINSTER", "loc": [ -105.102837, 39.875996 ], "pop": 20461, "state": "CO" }, { "_id": "80022", "city": "COMMERCE CITY", "loc": [ -104.911349, 39.825875 ], "pop": 23205, "state": "CO" }, { "_id": "80026", "city": "LAFAYETTE", "loc": [ -105.096346, 39.997964 ], "pop": 17111, "state": "CO" }, { "_id": "80027", "city": "LOUISVILLE", "loc": [ -105.145557, 39.978942 ], "pop": 12612, "state": "CO" }, { "_id": "80030", "city": "WESTMINSTER", "loc": [ -105.037086, 39.854238 ], "pop": 43235, "state": "CO" }, { "_id": "80033", "city": "WHEAT RIDGE", "loc": [ -105.096195, 39.774036 ], "pop": 23040, "state": "CO" }, { "_id": "80045", "city": "AURORA", "loc": [ -104.837954, 39.748014 ], "pop": 1715, "state": "CO" }, { "_id": "80101", "city": "AGATE", "loc": [ -103.984575, 39.420256 ], "pop": 230, "state": "CO" }, { "_id": "80102", "city": "BENNETT", "loc": [ -104.427284, 39.725398 ], "pop": 3885, "state": "CO" }, { "_id": "80103", "city": "BYERS", "loc": [ -104.201872, 39.698454 ], "pop": 1448, "state": "CO" }, { "_id": "80104", "city": "CASTLE ROCK", "loc": [ -104.860187, 39.39256 ], "pop": 11763, "state": "CO" }, { "_id": "80105", "city": "DEER TRAIL", "loc": [ -104.068003, 39.593121 ], "pop": 634, "state": "CO" }, { "_id": "80106", "city": "ELBERT", "loc": [ -104.574631, 39.096892 ], "pop": 1808, "state": "CO" }, { "_id": "80107", "city": "ELIZABETH", "loc": [ -104.591961, 39.383618 ], "pop": 4973, "state": "CO" }, { "_id": "80110", "city": "CHERRY HILLS VIL", "loc": [ -104.990022, 39.646027 ], "pop": 40226, "state": "CO" }, { "_id": "80111", "city": "CHERRY HILLS VIL", "loc": [ -104.882832, 39.610327 ], "pop": 20230, "state": "CO" }, { "_id": "80112", "city": "ENGLEWOOD", "loc": [ -104.901115, 39.58051 ], "pop": 20210, "state": "CO" }, { "_id": "80116", "city": "FRANKTOWN", "loc": [ -104.725569, 39.372841 ], "pop": 3742, "state": "CO" }, { "_id": "80117", "city": "KIOWA", "loc": [ -104.452263, 39.323972 ], "pop": 680, "state": "CO" }, { "_id": "80118", "city": "LARKSPUR", "loc": [ -104.854587, 39.201079 ], "pop": 1424, "state": "CO" }, { "_id": "80120", "city": "LITTLETON", "loc": [ -105.0044, 39.599426 ], "pop": 24992, "state": "CO" }, { "_id": "80121", "city": "GREENWOOD VILLAG", "loc": [ -104.957285, 39.605835 ], "pop": 17238, "state": "CO" }, { "_id": "80122", "city": "LITTLETON", "loc": [ -104.955673, 39.581418 ], "pop": 31135, "state": "CO" }, { "_id": "80123", "city": "BOW MAR", "loc": [ -105.07766, 39.596854 ], "pop": 59418, "state": "CO" }, { "_id": "80124", "city": "LITTLETON", "loc": [ -104.897204, 39.55061 ], "pop": 5393, "state": "CO" }, { "_id": "80125", "city": "LITTLETON", "loc": [ -105.056098, 39.484466 ], "pop": 3230, "state": "CO" }, { "_id": "80126", "city": "HIGHLANDS RANCH", "loc": [ -104.963751, 39.55134 ], "pop": 13649, "state": "CO" }, { "_id": "80127", "city": "LITTLETON", "loc": [ -105.132811, 39.591968 ], "pop": 23204, "state": "CO" }, { "_id": "80132", "city": "MONUMENT", "loc": [ -104.85416, 39.100726 ], "pop": 7411, "state": "CO" }, { "_id": "80133", "city": "PALMER LAKE", "loc": [ -104.914795, 39.120498 ], "pop": 1237, "state": "CO" }, { "_id": "80134", "city": "PARKER", "loc": [ -104.734904, 39.505466 ], "pop": 19466, "state": "CO" }, { "_id": "80135", "city": "DECKERS", "loc": [ -105.008305, 39.330109 ], "pop": 3257, "state": "CO" }, { "_id": "80136", "city": "STRASBURG", "loc": [ -104.268258, 39.781359 ], "pop": 1197, "state": "CO" }, { "_id": "80137", "city": "WATKINS", "loc": [ -104.583391, 39.762317 ], "pop": 406, "state": "CO" }, { "_id": "80202", "city": "DENVER", "loc": [ -104.994591, 39.749107 ], "pop": 2816, "state": "CO" }, { "_id": "80203", "city": "DENVER", "loc": [ -104.981111, 39.731285 ], "pop": 15775, "state": "CO" }, { "_id": "80204", "city": "DENVER", "loc": [ -105.025854, 39.734022 ], "pop": 27439, "state": "CO" }, { "_id": "80205", "city": "DENVER", "loc": [ -104.966141, 39.758993 ], "pop": 24169, "state": "CO" }, { "_id": "80206", "city": "DENVER", "loc": [ -104.9524, 39.733109 ], "pop": 19145, "state": "CO" }, { "_id": "80207", "city": "DENVER", "loc": [ -104.91771, 39.758425 ], "pop": 20955, "state": "CO" }, { "_id": "80209", "city": "DENVER", "loc": [ -104.968587, 39.707437 ], "pop": 19691, "state": "CO" }, { "_id": "80210", "city": "DENVER", "loc": [ -104.963124, 39.679003 ], "pop": 30868, "state": "CO" }, { "_id": "80211", "city": "DENVER", "loc": [ -105.020377, 39.766515 ], "pop": 34679, "state": "CO" }, { "_id": "80212", "city": "MOUNTAIN VIEW", "loc": [ -105.046979, 39.772396 ], "pop": 17745, "state": "CO" }, { "_id": "80214", "city": "EDGEWATER", "loc": [ -105.062036, 39.746931 ], "pop": 13154, "state": "CO" }, { "_id": "80215", "city": "LAKEWOOD", "loc": [ -105.102329, 39.744033 ], "pop": 27556, "state": "CO" }, { "_id": "80216", "city": "DENVER", "loc": [ -104.966946, 39.783469 ], "pop": 9113, "state": "CO" }, { "_id": "80218", "city": "DENVER", "loc": [ -104.971652, 39.732747 ], "pop": 14916, "state": "CO" }, { "_id": "80219", "city": "DENVER", "loc": [ -105.034134, 39.695624 ], "pop": 48234, "state": "CO" }, { "_id": "80220", "city": "DENVER", "loc": [ -104.912866, 39.7312 ], "pop": 35520, "state": "CO" }, { "_id": "80221", "city": "FEDERAL HEIGHTS", "loc": [ -105.007985, 39.840562 ], "pop": 54069, "state": "CO" }, { "_id": "80222", "city": "GLENDALE", "loc": [ -104.927992, 39.682803 ], "pop": 28373, "state": "CO" }, { "_id": "80223", "city": "DENVER", "loc": [ -105.002799, 39.700239 ], "pop": 16692, "state": "CO" }, { "_id": "80224", "city": "DENVER", "loc": [ -104.910778, 39.687995 ], "pop": 14918, "state": "CO" }, { "_id": "80226", "city": "LAKEWOOD", "loc": [ -105.066703, 39.712186 ], "pop": 13675, "state": "CO" }, { "_id": "80227", "city": "DENVER", "loc": [ -105.085359, 39.666746 ], "pop": 26932, "state": "CO" }, { "_id": "80228", "city": "LAKEWOOD", "loc": [ -105.143009, 39.696898 ], "pop": 25008, "state": "CO" }, { "_id": "80229", "city": "THORNTON", "loc": [ -104.961749, 39.860998 ], "pop": 33512, "state": "CO" }, { "_id": "80231", "city": "DENVER", "loc": [ -104.884326, 39.679324 ], "pop": 35985, "state": "CO" }, { "_id": "80232", "city": "LAKEWOOD", "loc": [ -105.094524, 39.697282 ], "pop": 35087, "state": "CO" }, { "_id": "80233", "city": "NORTHGLENN", "loc": [ -104.958257, 39.901222 ], "pop": 30749, "state": "CO" }, { "_id": "80234", "city": "NORTHGLENN", "loc": [ -105.004474, 39.905479 ], "pop": 13350, "state": "CO" }, { "_id": "80235", "city": "DENVER", "loc": [ -105.079466, 39.647175 ], "pop": 5783, "state": "CO" }, { "_id": "80236", "city": "DENVER", "loc": [ -105.037595, 39.653535 ], "pop": 12979, "state": "CO" }, { "_id": "80237", "city": "DENVER", "loc": [ -104.89866, 39.64314 ], "pop": 14211, "state": "CO" }, { "_id": "80239", "city": "DENVER", "loc": [ -104.828837, 39.787757 ], "pop": 17622, "state": "CO" }, { "_id": "80241", "city": "NORTHGLENN", "loc": [ -104.941809, 39.927792 ], "pop": 10108, "state": "CO" }, { "_id": "80249", "city": "DENVER", "loc": [ -104.75565, 39.778264 ], "pop": 2740, "state": "CO" }, { "_id": "80301", "city": "BOULDER", "loc": [ -105.21426, 40.049733 ], "pop": 18174, "state": "CO" }, { "_id": "80302", "city": "BOULDER", "loc": [ -105.285131, 40.017235 ], "pop": 29384, "state": "CO" }, { "_id": "80303", "city": "BOULDER", "loc": [ -105.239178, 39.991381 ], "pop": 39860, "state": "CO" }, { "_id": "80304", "city": "BOULDER", "loc": [ -105.277073, 40.037482 ], "pop": 21550, "state": "CO" }, { "_id": "80401", "city": "GOLDEN", "loc": [ -105.191528, 39.730548 ], "pop": 32876, "state": "CO" }, { "_id": "80403", "city": "GOLDEN", "loc": [ -105.282516, 39.823219 ], "pop": 13159, "state": "CO" }, { "_id": "80421", "city": "BAILEY", "loc": [ -105.469282, 39.448233 ], "pop": 4448, "state": "CO" }, { "_id": "80422", "city": "BLACK HAWK", "loc": [ -105.503991, 39.801105 ], "pop": 551, "state": "CO" }, { "_id": "80423", "city": "BOND", "loc": [ -106.676273, 39.869119 ], "pop": 149, "state": "CO" }, { "_id": "80428", "city": "CLARK", "loc": [ -106.921482, 40.726783 ], "pop": 455, "state": "CO" }, { "_id": "80429", "city": "CLIMAX", "loc": [ -106.258027, 39.298804 ], "pop": 346, "state": "CO" }, { "_id": "80430", "city": "COALMONT", "loc": [ -106.532134, 40.538252 ], "pop": 88, "state": "CO" }, { "_id": "80433", "city": "CONIFER", "loc": [ -105.316873, 39.519735 ], "pop": 5919, "state": "CO" }, { "_id": "80435", "city": "KEYSTONE", "loc": [ -106.057345, 39.574827 ], "pop": 12881, "state": "CO" }, { "_id": "80439", "city": "EVERGREEN", "loc": [ -105.340248, 39.637405 ], "pop": 19250, "state": "CO" }, { "_id": "80440", "city": "FAIRPLAY", "loc": [ -105.999416, 39.225617 ], "pop": 1030, "state": "CO" }, { "_id": "80441", "city": "FOXTON", "loc": [ -105.24815, 39.372056 ], "pop": 127, "state": "CO" }, { "_id": "80446", "city": "GRANBY", "loc": [ -105.889916, 40.012834 ], "pop": 4839, "state": "CO" }, { "_id": "80447", "city": "GRAND LAKE", "loc": [ -105.860488, 40.228862 ], "pop": 1202, "state": "CO" }, { "_id": "80452", "city": "IDAHO SPRINGS", "loc": [ -105.598261, 39.740192 ], "pop": 5113, "state": "CO" }, { "_id": "80455", "city": "JAMESTOWN", "loc": [ -105.418971, 40.10056 ], "pop": 654, "state": "CO" }, { "_id": "80456", "city": "JEFFERSON", "loc": [ -105.78633, 39.300926 ], "pop": 157, "state": "CO" }, { "_id": "80459", "city": "KREMMLING", "loc": [ -106.395472, 40.063224 ], "pop": 1580, "state": "CO" }, { "_id": "80461", "city": "LEADVILLE", "loc": [ -106.301545, 39.249742 ], "pop": 5544, "state": "CO" }, { "_id": "80463", "city": "MC COY", "loc": [ -106.730906, 39.913377 ], "pop": 61, "state": "CO" }, { "_id": "80465", "city": "MORRISON", "loc": [ -105.174641, 39.612452 ], "pop": 13657, "state": "CO" }, { "_id": "80466", "city": "NEDERLAND", "loc": [ -105.481265, 39.970259 ], "pop": 2621, "state": "CO" }, { "_id": "80467", "city": "OAK CREEK", "loc": [ -106.929621, 40.256733 ], "pop": 1135, "state": "CO" }, { "_id": "80468", "city": "PARSHALL", "loc": [ -106.225492, 40.053765 ], "pop": 345, "state": "CO" }, { "_id": "80470", "city": "PINE", "loc": [ -105.374116, 39.46667 ], "pop": 2827, "state": "CO" }, { "_id": "80471", "city": "PINECLIFFE", "loc": [ -105.354004, 39.942898 ], "pop": 225, "state": "CO" }, { "_id": "80474", "city": "ROLLINSVILLE", "loc": [ -105.472596, 39.910757 ], "pop": 343, "state": "CO" }, { "_id": "80479", "city": "TOPONAS", "loc": [ -106.908172, 40.119601 ], "pop": 697, "state": "CO" }, { "_id": "80480", "city": "WALDEN", "loc": [ -106.276728, 40.709978 ], "pop": 1517, "state": "CO" }, { "_id": "80481", "city": "WARD", "loc": [ -105.508023, 40.072572 ], "pop": 159, "state": "CO" }, { "_id": "80487", "city": "STEAMBOAT SPRING", "loc": [ -106.8457, 40.474124 ], "pop": 9773, "state": "CO" }, { "_id": "80501", "city": "LONGMONT", "loc": [ -105.10095, 40.177921 ], "pop": 47166, "state": "CO" }, { "_id": "80503", "city": "LONGMONT", "loc": [ -105.162432, 40.15588 ], "pop": 16814, "state": "CO" }, { "_id": "80504", "city": "LONGMONT", "loc": [ -104.950446, 40.130615 ], "pop": 3716, "state": "CO" }, { "_id": "80510", "city": "ALLENSPARK", "loc": [ -105.520064, 40.226775 ], "pop": 183, "state": "CO" }, { "_id": "80512", "city": "BELLVUE", "loc": [ -105.260977, 40.626528 ], "pop": 1982, "state": "CO" }, { "_id": "80513", "city": "BERTHOUD", "loc": [ -105.105459, 40.299333 ], "pop": 6886, "state": "CO" }, { "_id": "80514", "city": "DACONO", "loc": [ -104.929705, 40.08361 ], "pop": 2223, "state": "CO" }, { "_id": "80515", "city": "DRAKE", "loc": [ -105.296925, 40.443257 ], "pop": 721, "state": "CO" }, { "_id": "80516", "city": "ERIE", "loc": [ -105.068583, 40.059746 ], "pop": 304, "state": "CO" }, { "_id": "80517", "city": "ESTES PARK", "loc": [ -105.514163, 40.365761 ], "pop": 6428, "state": "CO" }, { "_id": "80521", "city": "FORT COLLINS", "loc": [ -105.103884, 40.581293 ], "pop": 30059, "state": "CO" }, { "_id": "80524", "city": "FORT COLLINS", "loc": [ -105.05811, 40.59865 ], "pop": 21204, "state": "CO" }, { "_id": "80525", "city": "FORT COLLINS", "loc": [ -105.054715, 40.538354 ], "pop": 31263, "state": "CO" }, { "_id": "80526", "city": "FORT COLLINS", "loc": [ -105.107646, 40.547294 ], "pop": 29180, "state": "CO" }, { "_id": "80534", "city": "JOHNSTOWN", "loc": [ -104.923558, 40.335526 ], "pop": 2601, "state": "CO" }, { "_id": "80535", "city": "LAPORTE", "loc": [ -105.148757, 40.634683 ], "pop": 2300, "state": "CO" }, { "_id": "80536", "city": "VIRGINIA DALE", "loc": [ -105.367745, 40.779878 ], "pop": 513, "state": "CO" }, { "_id": "80537", "city": "LOVELAND", "loc": [ -105.09164, 40.384917 ], "pop": 24502, "state": "CO" }, { "_id": "80538", "city": "LOVELAND", "loc": [ -105.089985, 40.426239 ], "pop": 26449, "state": "CO" }, { "_id": "80540", "city": "LYONS", "loc": [ -105.323071, 40.235715 ], "pop": 3696, "state": "CO" }, { "_id": "80543", "city": "MILLIKEN", "loc": [ -104.876137, 40.310656 ], "pop": 2632, "state": "CO" }, { "_id": "80545", "city": "RED FEATHER LAKE", "loc": [ -105.624455, 40.796451 ], "pop": 440, "state": "CO" }, { "_id": "80549", "city": "WELLINGTON", "loc": [ -105.031844, 40.725525 ], "pop": 3309, "state": "CO" }, { "_id": "80550", "city": "WINDSOR", "loc": [ -104.899442, 40.483663 ], "pop": 6724, "state": "CO" }, { "_id": "80601", "city": "LOCHBUI", "loc": [ -104.810278, 39.980553 ], "pop": 20533, "state": "CO" }, { "_id": "80610", "city": "AULT", "loc": [ -104.735629, 40.593772 ], "pop": 2684, "state": "CO" }, { "_id": "80611", "city": "BRIGGSDALE", "loc": [ -104.28707, 40.639192 ], "pop": 259, "state": "CO" }, { "_id": "80612", "city": "CARR", "loc": [ -104.885865, 40.866551 ], "pop": 94, "state": "CO" }, { "_id": "80615", "city": "EATON", "loc": [ -104.714559, 40.527272 ], "pop": 2902, "state": "CO" }, { "_id": "80620", "city": "EVANS", "loc": [ -104.697095, 40.380255 ], "pop": 6262, "state": "CO" }, { "_id": "80621", "city": "WATTENBURG", "loc": [ -104.865639, 40.078876 ], "pop": 12913, "state": "CO" }, { "_id": "80622", "city": "GALETON", "loc": [ -104.597254, 40.515034 ], "pop": 360, "state": "CO" }, { "_id": "80624", "city": "GILL", "loc": [ -104.499995, 40.469586 ], "pop": 130, "state": "CO" }, { "_id": "80631", "city": "GARDEN CITY", "loc": [ -104.704756, 40.413968 ], "pop": 53905, "state": "CO" }, { "_id": "80634", "city": "GREELEY", "loc": [ -104.754113, 40.410947 ], "pop": 14100, "state": "CO" }, { "_id": "80640", "city": "HENDERSON", "loc": [ -104.871834, 39.898304 ], "pop": 1388, "state": "CO" }, { "_id": "80642", "city": "HUDSON", "loc": [ -104.653208, 40.060555 ], "pop": 2369, "state": "CO" }, { "_id": "80643", "city": "KEENESBURG", "loc": [ -104.446366, 40.095847 ], "pop": 1979, "state": "CO" }, { "_id": "80644", "city": "KERSEY", "loc": [ -104.528768, 40.396305 ], "pop": 2843, "state": "CO" }, { "_id": "80645", "city": "LA SALLE", "loc": [ -104.726784, 40.321138 ], "pop": 4455, "state": "CO" }, { "_id": "80648", "city": "NUNN", "loc": [ -104.785012, 40.726483 ], "pop": 505, "state": "CO" }, { "_id": "80649", "city": "ORCHARD", "loc": [ -104.097325, 40.363946 ], "pop": 277, "state": "CO" }, { "_id": "80650", "city": "PIERCE", "loc": [ -104.763764, 40.635911 ], "pop": 1020, "state": "CO" }, { "_id": "80651", "city": "PLATTEVILLE", "loc": [ -104.802776, 40.213121 ], "pop": 2577, "state": "CO" }, { "_id": "80652", "city": "ROGGEN", "loc": [ -104.315747, 40.207445 ], "pop": 150, "state": "CO" }, { "_id": "80653", "city": "WELDONA", "loc": [ -103.967755, 40.368093 ], "pop": 328, "state": "CO" }, { "_id": "80654", "city": "HOYT", "loc": [ -104.052814, 40.205651 ], "pop": 1746, "state": "CO" }, { "_id": "80701", "city": "FORT MORGAN", "loc": [ -103.803119, 40.254084 ], "pop": 13263, "state": "CO" }, { "_id": "80720", "city": "AKRON", "loc": [ -103.225885, 40.180315 ], "pop": 2559, "state": "CO" }, { "_id": "80721", "city": "AMHERST", "loc": [ -102.170567, 40.682386 ], "pop": 86, "state": "CO" }, { "_id": "80722", "city": "ATWOOD", "loc": [ -103.039301, 40.517432 ], "pop": 140, "state": "CO" }, { "_id": "80723", "city": "BRUSH", "loc": [ -103.62788, 40.260255 ], "pop": 5603, "state": "CO" }, { "_id": "80726", "city": "CROOK", "loc": [ -102.847174, 40.874743 ], "pop": 638, "state": "CO" }, { "_id": "80727", "city": "ECKLEY", "loc": [ -102.482776, 40.113775 ], "pop": 242, "state": "CO" }, { "_id": "80728", "city": "FLEMING", "loc": [ -102.868821, 40.637019 ], "pop": 853, "state": "CO" }, { "_id": "80729", "city": "GROVER", "loc": [ -104.234613, 40.871635 ], "pop": 492, "state": "CO" }, { "_id": "80731", "city": "HAXTUN", "loc": [ -102.605175, 40.640587 ], "pop": 1569, "state": "CO" }, { "_id": "80733", "city": "HILLROSE", "loc": [ -103.541816, 40.307186 ], "pop": 516, "state": "CO" }, { "_id": "80734", "city": "HOLYOKE", "loc": [ -102.282545, 40.582542 ], "pop": 2642, "state": "CO" }, { "_id": "80735", "city": "HALE", "loc": [ -102.211563, 39.733147 ], "pop": 393, "state": "CO" }, { "_id": "80736", "city": "ILIFF", "loc": [ -103.096808, 40.769174 ], "pop": 778, "state": "CO" }, { "_id": "80737", "city": "JULESBURG", "loc": [ -102.257501, 40.97083 ], "pop": 1712, "state": "CO" }, { "_id": "80740", "city": "LINDON", "loc": [ -103.314471, 39.830849 ], "pop": 136, "state": "CO" }, { "_id": "80741", "city": "WILLARD", "loc": [ -103.34471, 40.511548 ], "pop": 959, "state": "CO" }, { "_id": "80742", "city": "NEW RAYMER", "loc": [ -103.838982, 40.685079 ], "pop": 310, "state": "CO" }, { "_id": "80743", "city": "OTIS", "loc": [ -102.939219, 40.202989 ], "pop": 1102, "state": "CO" }, { "_id": "80744", "city": "OVID", "loc": [ -102.387396, 40.945865 ], "pop": 563, "state": "CO" }, { "_id": "80745", "city": "PADRONI", "loc": [ -103.358163, 40.954911 ], "pop": 72, "state": "CO" }, { "_id": "80747", "city": "PEETZ", "loc": [ -103.116606, 40.95195 ], "pop": 451, "state": "CO" }, { "_id": "80749", "city": "SEDGWICK", "loc": [ -102.529122, 40.910317 ], "pop": 415, "state": "CO" }, { "_id": "80750", "city": "SNYDER", "loc": [ -103.597134, 40.330655 ], "pop": 134, "state": "CO" }, { "_id": "80751", "city": "STERLING", "loc": [ -103.221183, 40.63062 ], "pop": 13524, "state": "CO" }, { "_id": "80754", "city": "STONEHAM", "loc": [ -103.638687, 40.686994 ], "pop": 141, "state": "CO" }, { "_id": "80755", "city": "VERNON", "loc": [ -102.319343, 39.933127 ], "pop": 318, "state": "CO" }, { "_id": "80757", "city": "LAST CHANCE", "loc": [ -103.578033, 39.938105 ], "pop": 265, "state": "CO" }, { "_id": "80758", "city": "LAIRD", "loc": [ -102.233751, 40.104917 ], "pop": 3396, "state": "CO" }, { "_id": "80759", "city": "YUMA", "loc": [ -102.707174, 40.130063 ], "pop": 3811, "state": "CO" }, { "_id": "80801", "city": "ANTON", "loc": [ -103.434296, 39.686527 ], "pop": 240, "state": "CO" }, { "_id": "80802", "city": "ARAPAHOE", "loc": [ -102.19401, 38.841716 ], "pop": 335, "state": "CO" }, { "_id": "80804", "city": "ARRIBA", "loc": [ -103.270968, 39.30253 ], "pop": 388, "state": "CO" }, { "_id": "80805", "city": "BETHUNE", "loc": [ -102.428142, 39.344771 ], "pop": 543, "state": "CO" }, { "_id": "80807", "city": "BURLINGTON", "loc": [ -102.258281, 39.310649 ], "pop": 3982, "state": "CO" }, { "_id": "80808", "city": "CALHAN", "loc": [ -104.355274, 38.964773 ], "pop": 2955, "state": "CO" }, { "_id": "80809", "city": "NORTH POLE", "loc": [ -104.993684, 38.921314 ], "pop": 2259, "state": "CO" }, { "_id": "80810", "city": "CHEYENNE WELLS", "loc": [ -102.358173, 38.819762 ], "pop": 1364, "state": "CO" }, { "_id": "80812", "city": "COPE", "loc": [ -102.988098, 39.746227 ], "pop": 626, "state": "CO" }, { "_id": "80814", "city": "DIVIDE", "loc": [ -105.19937, 38.957622 ], "pop": 1675, "state": "CO" }, { "_id": "80815", "city": "FLAGLER", "loc": [ -103.062395, 39.312654 ], "pop": 854, "state": "CO" }, { "_id": "80816", "city": "FLORISSANT", "loc": [ -105.226106, 38.827669 ], "pop": 2480, "state": "CO" }, { "_id": "80817", "city": "FOUNTAIN", "loc": [ -104.700469, 38.699563 ], "pop": 11570, "state": "CO" }, { "_id": "80818", "city": "GENOA", "loc": [ -103.460689, 39.338328 ], "pop": 320, "state": "CO" }, { "_id": "80820", "city": "GUFFEY", "loc": [ -105.57835, 38.814584 ], "pop": 300, "state": "CO" }, { "_id": "80821", "city": "HUGO", "loc": [ -103.498971, 39.084318 ], "pop": 1064, "state": "CO" }, { "_id": "80822", "city": "JOES", "loc": [ -102.615134, 39.672771 ], "pop": 315, "state": "CO" }, { "_id": "80823", "city": "KARVAL", "loc": [ -103.500613, 38.71194 ], "pop": 339, "state": "CO" }, { "_id": "80824", "city": "KIRK", "loc": [ -102.477554, 39.617072 ], "pop": 479, "state": "CO" }, { "_id": "80825", "city": "KIT CARSON", "loc": [ -102.819842, 38.803984 ], "pop": 698, "state": "CO" }, { "_id": "80827", "city": "LAKE GEORGE", "loc": [ -105.434654, 39.034233 ], "pop": 587, "state": "CO" }, { "_id": "80828", "city": "LIMON", "loc": [ -103.685572, 39.27126 ], "pop": 2244, "state": "CO" }, { "_id": "80829", "city": "MANITOU SPRINGS", "loc": [ -104.905839, 38.854994 ], "pop": 4989, "state": "CO" }, { "_id": "80830", "city": "MATHESON", "loc": [ -103.913165, 39.132044 ], "pop": 439, "state": "CO" }, { "_id": "80831", "city": "PEYTON", "loc": [ -104.54722, 38.954097 ], "pop": 3707, "state": "CO" }, { "_id": "80832", "city": "RAMAH", "loc": [ -104.124733, 39.073571 ], "pop": 561, "state": "CO" }, { "_id": "80833", "city": "RUSH", "loc": [ -104.024065, 38.764248 ], "pop": 408, "state": "CO" }, { "_id": "80834", "city": "SEIBERT", "loc": [ -102.882184, 39.318329 ], "pop": 364, "state": "CO" }, { "_id": "80835", "city": "SIMLA", "loc": [ -104.086236, 39.146457 ], "pop": 580, "state": "CO" }, { "_id": "80836", "city": "STRATTON", "loc": [ -102.597928, 39.308733 ], "pop": 1102, "state": "CO" }, { "_id": "80840", "city": "UNITED STATES AI", "loc": [ -104.860139, 38.990448 ], "pop": 9062, "state": "CO" }, { "_id": "80861", "city": "VONA", "loc": [ -102.739287, 39.323564 ], "pop": 295, "state": "CO" }, { "_id": "80863", "city": "WOODLAND PARK", "loc": [ -105.062292, 38.996929 ], "pop": 8272, "state": "CO" }, { "_id": "80864", "city": "YODER", "loc": [ -104.218353, 38.775252 ], "pop": 511, "state": "CO" }, { "_id": "80903", "city": "COLORADO SPRINGS", "loc": [ -104.814466, 38.838832 ], "pop": 13972, "state": "CO" }, { "_id": "80904", "city": "COLORADO SPRINGS", "loc": [ -104.859513, 38.853318 ], "pop": 17366, "state": "CO" }, { "_id": "80905", "city": "COLORADO SPRINGS", "loc": [ -104.836997, 38.837692 ], "pop": 3435, "state": "CO" }, { "_id": "80906", "city": "COLORADO SPRINGS", "loc": [ -104.819893, 38.790164 ], "pop": 38856, "state": "CO" }, { "_id": "80907", "city": "COLORADO SPRINGS", "loc": [ -104.817034, 38.876001 ], "pop": 25123, "state": "CO" }, { "_id": "80908", "city": "COLORADO SPRINGS", "loc": [ -104.693331, 39.023745 ], "pop": 6803, "state": "CO" }, { "_id": "80909", "city": "COLORADO SPRINGS", "loc": [ -104.773483, 38.852038 ], "pop": 34887, "state": "CO" }, { "_id": "80910", "city": "COLORADO SPRINGS", "loc": [ -104.770299, 38.815164 ], "pop": 24867, "state": "CO" }, { "_id": "80911", "city": "COLORADO SPRINGS", "loc": [ -104.722322, 38.745665 ], "pop": 22116, "state": "CO" }, { "_id": "80913", "city": "FORT CARSON", "loc": [ -104.782218, 38.741967 ], "pop": 11309, "state": "CO" }, { "_id": "80914", "city": "CHEYENNE MTN AFB", "loc": [ -104.719052, 38.784241 ], "pop": 0, "state": "CO" }, { "_id": "80915", "city": "COLORADO SPRINGS", "loc": [ -104.713422, 38.855845 ], "pop": 18209, "state": "CO" }, { "_id": "80916", "city": "COLORADO SPRINGS", "loc": [ -104.74034, 38.807619 ], "pop": 26402, "state": "CO" }, { "_id": "80917", "city": "COLORADO SPRINGS", "loc": [ -104.739904, 38.886027 ], "pop": 27664, "state": "CO" }, { "_id": "80918", "city": "COLORADO SPRINGS", "loc": [ -104.773444, 38.912924 ], "pop": 36410, "state": "CO" }, { "_id": "80919", "city": "COLORADO SPRINGS", "loc": [ -104.84642, 38.926795 ], "pop": 17468, "state": "CO" }, { "_id": "80920", "city": "COLORADO SPRINGS", "loc": [ -104.766951, 38.949732 ], "pop": 16907, "state": "CO" }, { "_id": "80921", "city": "COLORADO SPRINGS", "loc": [ -104.814042, 39.048674 ], "pop": 3539, "state": "CO" }, { "_id": "80922", "city": "COLORADO SPRINGS", "loc": [ -104.698161, 38.90503 ], "pop": 1836, "state": "CO" }, { "_id": "80925", "city": "COLORADO SPRINGS", "loc": [ -104.660087, 38.731329 ], "pop": 2550, "state": "CO" }, { "_id": "80926", "city": "COLORADO SPRINGS", "loc": [ -104.85051, 38.698073 ], "pop": 1040, "state": "CO" }, { "_id": "80928", "city": "COLORADO SPRINGS", "loc": [ -104.457043, 38.623261 ], "pop": 273, "state": "CO" }, { "_id": "80929", "city": "COLORADO SPRINGS", "loc": [ -104.607857, 38.796837 ], "pop": 197, "state": "CO" }, { "_id": "80930", "city": "COLORADO SPRINGS", "loc": [ -104.526924, 38.828926 ], "pop": 484, "state": "CO" }, { "_id": "81001", "city": "PUEBLO", "loc": [ -104.584828, 38.287876 ], "pop": 28837, "state": "CO" }, { "_id": "81003", "city": "PUEBLO", "loc": [ -104.62337, 38.284277 ], "pop": 13461, "state": "CO" }, { "_id": "81004", "city": "PUEBLO", "loc": [ -104.627829, 38.244063 ], "pop": 25748, "state": "CO" }, { "_id": "81005", "city": "PUEBLO", "loc": [ -104.660031, 38.235157 ], "pop": 26273, "state": "CO" }, { "_id": "81006", "city": "PUEBLO", "loc": [ -104.531834, 38.24465 ], "pop": 12277, "state": "CO" }, { "_id": "81007", "city": "PUEBLO WEST", "loc": [ -104.743264, 38.319975 ], "pop": 4592, "state": "CO" }, { "_id": "81008", "city": "PUEBLO", "loc": [ -104.628433, 38.313251 ], "pop": 5953, "state": "CO" }, { "_id": "81020", "city": "AGUILAR", "loc": [ -104.676926, 37.393304 ], "pop": 928, "state": "CO" }, { "_id": "81021", "city": "ARLINGTON", "loc": [ -103.369741, 38.40677 ], "pop": 28, "state": "CO" }, { "_id": "81022", "city": "NORTH AVONDALE", "loc": [ -104.359686, 38.211603 ], "pop": 1483, "state": "CO" }, { "_id": "81023", "city": "BEULAH", "loc": [ -104.97245, 38.083712 ], "pop": 867, "state": "CO" }, { "_id": "81025", "city": "BOONE", "loc": [ -104.25851, 38.264614 ], "pop": 976, "state": "CO" }, { "_id": "81026", "city": "BRANDON", "loc": [ -102.781906, 38.485133 ], "pop": 1094, "state": "CO" }, { "_id": "81027", "city": "BRANSON", "loc": [ -103.874115, 37.051775 ], "pop": 140, "state": "CO" }, { "_id": "81028", "city": "BRISTOL", "loc": [ -102.342642, 38.133184 ], "pop": 256, "state": "CO" }, { "_id": "81029", "city": "CAMPO", "loc": [ -102.546423, 37.119547 ], "pop": 487, "state": "CO" }, { "_id": "81036", "city": "CHIVINGTON", "loc": [ -102.50536, 38.444141 ], "pop": 123, "state": "CO" }, { "_id": "81039", "city": "FOWLER", "loc": [ -104.029908, 38.123071 ], "pop": 1877, "state": "CO" }, { "_id": "81040", "city": "FARISITA", "loc": [ -105.237397, 37.763753 ], "pop": 428, "state": "CO" }, { "_id": "81041", "city": "GRANADA", "loc": [ -102.32712, 38.054485 ], "pop": 741, "state": "CO" }, { "_id": "81043", "city": "HARTMAN", "loc": [ -102.186609, 38.145291 ], "pop": 256, "state": "CO" }, { "_id": "81044", "city": "CADDOA", "loc": [ -102.933145, 38.107347 ], "pop": 263, "state": "CO" }, { "_id": "81045", "city": "HASWELL", "loc": [ -103.150543, 38.447431 ], "pop": 109, "state": "CO" }, { "_id": "81047", "city": "HOLLY", "loc": [ -102.141466, 38.0205 ], "pop": 1480, "state": "CO" }, { "_id": "81049", "city": "VILLEGREEN", "loc": [ -103.358348, 37.331189 ], "pop": 389, "state": "CO" }, { "_id": "81050", "city": "TIMPAS", "loc": [ -103.549068, 37.991552 ], "pop": 11742, "state": "CO" }, { "_id": "81052", "city": "LAMAR", "loc": [ -102.619195, 38.084136 ], "pop": 9903, "state": "CO" }, { "_id": "81054", "city": "DEORA", "loc": [ -103.208492, 38.065514 ], "pop": 4217, "state": "CO" }, { "_id": "81055", "city": "CUCHARA", "loc": [ -105.012994, 37.498292 ], "pop": 1234, "state": "CO" }, { "_id": "81057", "city": "MC CLAVE", "loc": [ -102.816934, 38.150484 ], "pop": 568, "state": "CO" }, { "_id": "81058", "city": "MANZANOLA", "loc": [ -103.876602, 38.110861 ], "pop": 961, "state": "CO" }, { "_id": "81059", "city": "DELHI", "loc": [ -104.13074, 37.478533 ], "pop": 237, "state": "CO" }, { "_id": "81062", "city": "OLNEY SPRINGS", "loc": [ -103.941033, 38.201877 ], "pop": 706, "state": "CO" }, { "_id": "81063", "city": "ORDWAY", "loc": [ -103.800277, 38.209546 ], "pop": 2692, "state": "CO" }, { "_id": "81064", "city": "UTLEYVILLE", "loc": [ -102.893106, 37.355885 ], "pop": 383, "state": "CO" }, { "_id": "81067", "city": "ROCKY FORD", "loc": [ -103.725143, 38.049016 ], "pop": 5946, "state": "CO" }, { "_id": "81069", "city": "RYE", "loc": [ -104.886257, 37.937145 ], "pop": 2369, "state": "CO" }, { "_id": "81071", "city": "TOWNER", "loc": [ -102.295367, 38.462172 ], "pop": 162, "state": "CO" }, { "_id": "81073", "city": "SPRINGFIELD", "loc": [ -102.617322, 37.406727 ], "pop": 1992, "state": "CO" }, { "_id": "81076", "city": "SUGAR CITY", "loc": [ -103.655557, 38.244368 ], "pop": 400, "state": "CO" }, { "_id": "81081", "city": "TRINCHERA", "loc": [ -104.118354, 37.075662 ], "pop": 21, "state": "CO" }, { "_id": "81082", "city": "JANSEN", "loc": [ -104.500715, 37.175475 ], "pop": 10978, "state": "CO" }, { "_id": "81084", "city": "LYCAN", "loc": [ -102.320128, 37.57476 ], "pop": 183, "state": "CO" }, { "_id": "81087", "city": "VILAS", "loc": [ -102.44374, 37.373043 ], "pop": 145, "state": "CO" }, { "_id": "81089", "city": "FARISTA", "loc": [ -104.804301, 37.638159 ], "pop": 4347, "state": "CO" }, { "_id": "81090", "city": "WALSH", "loc": [ -102.253716, 37.352057 ], "pop": 1366, "state": "CO" }, { "_id": "81091", "city": "WESTON", "loc": [ -104.824749, 37.170211 ], "pop": 1094, "state": "CO" }, { "_id": "81092", "city": "WILEY", "loc": [ -102.714734, 38.158978 ], "pop": 711, "state": "CO" }, { "_id": "81101", "city": "ALAMOSA", "loc": [ -105.878602, 37.470274 ], "pop": 12580, "state": "CO" }, { "_id": "81120", "city": "ANTONITO", "loc": [ -106.037946, 37.085473 ], "pop": 2246, "state": "CO" }, { "_id": "81121", "city": "ARBOLES", "loc": [ -107.390749, 37.101633 ], "pop": 587, "state": "CO" }, { "_id": "81122", "city": "BAYFIELD", "loc": [ -107.613728, 37.260328 ], "pop": 3866, "state": "CO" }, { "_id": "81123", "city": "BLANCA", "loc": [ -105.517784, 37.431702 ], "pop": 429, "state": "CO" }, { "_id": "81125", "city": "CENTER", "loc": [ -106.090628, 37.734295 ], "pop": 4419, "state": "CO" }, { "_id": "81130", "city": "CREEDE", "loc": [ -106.927679, 37.816367 ], "pop": 558, "state": "CO" }, { "_id": "81132", "city": "LA GARITA", "loc": [ -106.350502, 37.671346 ], "pop": 2791, "state": "CO" }, { "_id": "81133", "city": "FORT GARLAND", "loc": [ -105.404879, 37.426978 ], "pop": 725, "state": "CO" }, { "_id": "81136", "city": "HOOPER", "loc": [ -105.871193, 37.723203 ], "pop": 265, "state": "CO" }, { "_id": "81137", "city": "IGNACIO", "loc": [ -107.639465, 37.126412 ], "pop": 3494, "state": "CO" }, { "_id": "81140", "city": "LA JARA", "loc": [ -106.005427, 37.290726 ], "pop": 2274, "state": "CO" }, { "_id": "81143", "city": "MOFFAT", "loc": [ -105.841051, 38.045195 ], "pop": 737, "state": "CO" }, { "_id": "81144", "city": "MONTE VISTA", "loc": [ -106.140833, 37.573095 ], "pop": 6041, "state": "CO" }, { "_id": "81146", "city": "MOSCA", "loc": [ -105.806866, 37.635796 ], "pop": 399, "state": "CO" }, { "_id": "81147", "city": "PAGOSA SPRINGS", "loc": [ -107.038497, 37.252345 ], "pop": 4758, "state": "CO" }, { "_id": "81149", "city": "SAGUACHE", "loc": [ -106.187592, 38.09775 ], "pop": 895, "state": "CO" }, { "_id": "81150", "city": "SAN ACACIO", "loc": [ -105.439949, 37.201347 ], "pop": 1146, "state": "CO" }, { "_id": "81151", "city": "SANFORD", "loc": [ -105.928588, 37.208724 ], "pop": 3037, "state": "CO" }, { "_id": "81152", "city": "MESITA", "loc": [ -105.575625, 37.05057 ], "pop": 252, "state": "CO" }, { "_id": "81153", "city": "SAN PABLO", "loc": [ -105.346196, 37.134872 ], "pop": 638, "state": "CO" }, { "_id": "81154", "city": "SOUTH FORK", "loc": [ -106.612451, 37.67248 ], "pop": 722, "state": "CO" }, { "_id": "81155", "city": "VILLA GROVE", "loc": [ -106.110183, 38.2952 ], "pop": 53, "state": "CO" }, { "_id": "81201", "city": "SALIDA", "loc": [ -105.997818, 38.525909 ], "pop": 7658, "state": "CO" }, { "_id": "81210", "city": "ALMONT", "loc": [ -106.627099, 38.64997 ], "pop": 150, "state": "CO" }, { "_id": "81211", "city": "BUENA VISTA", "loc": [ -106.147121, 38.838003 ], "pop": 5220, "state": "CO" }, { "_id": "81212", "city": "CANON CITY", "loc": [ -105.217829, 38.445074 ], "pop": 23049, "state": "CO" }, { "_id": "81220", "city": "CIMARRON", "loc": [ -107.482366, 38.387633 ], "pop": 84, "state": "CO" }, { "_id": "81224", "city": "CRESTED BUTTE", "loc": [ -106.961899, 38.869081 ], "pop": 1750, "state": "CO" }, { "_id": "81226", "city": "FLORENCE", "loc": [ -105.123233, 38.385016 ], "pop": 4461, "state": "CO" }, { "_id": "81228", "city": "GRANITE", "loc": [ -106.311417, 39.095294 ], "pop": 79, "state": "CO" }, { "_id": "81230", "city": "GUNNISON", "loc": [ -106.931013, 38.551056 ], "pop": 7814, "state": "CO" }, { "_id": "81233", "city": "HOWARD", "loc": [ -105.747124, 38.388519 ], "pop": 485, "state": "CO" }, { "_id": "81235", "city": "LAKE CITY", "loc": [ -107.302037, 37.986769 ], "pop": 467, "state": "CO" }, { "_id": "81236", "city": "NATHROP", "loc": [ -106.116576, 38.710343 ], "pop": 440, "state": "CO" }, { "_id": "81239", "city": "PARLIN", "loc": [ -106.677995, 38.508762 ], "pop": 67, "state": "CO" }, { "_id": "81240", "city": "PENROSE", "loc": [ -105.011325, 38.433622 ], "pop": 3166, "state": "CO" }, { "_id": "81241", "city": "PITKIN", "loc": [ -106.516774, 38.608542 ], "pop": 53, "state": "CO" }, { "_id": "81243", "city": "POWDERHORN", "loc": [ -107.108449, 38.282165 ], "pop": 11, "state": "CO" }, { "_id": "81251", "city": "TWIN LAKES", "loc": [ -106.435079, 39.090231 ], "pop": 49, "state": "CO" }, { "_id": "81252", "city": "WESTCLIFFE", "loc": [ -105.433154, 38.123023 ], "pop": 1569, "state": "CO" }, { "_id": "81253", "city": "WETMORE", "loc": [ -105.106441, 38.189857 ], "pop": 357, "state": "CO" }, { "_id": "81301", "city": "DURANGO", "loc": [ -107.861684, 37.287388 ], "pop": 23506, "state": "CO" }, { "_id": "81320", "city": "CAHONE", "loc": [ -108.579442, 37.69163 ], "pop": 384, "state": "CO" }, { "_id": "81321", "city": "CORTEZ", "loc": [ -108.583726, 37.354949 ], "pop": 11937, "state": "CO" }, { "_id": "81323", "city": "DOLORES", "loc": [ -108.471748, 37.466571 ], "pop": 1770, "state": "CO" }, { "_id": "81324", "city": "DOVE CREEK", "loc": [ -108.918147, 37.763199 ], "pop": 1120, "state": "CO" }, { "_id": "81325", "city": "EGNAR", "loc": [ -108.929889, 37.934448 ], "pop": 119, "state": "CO" }, { "_id": "81326", "city": "HESPERUS", "loc": [ -108.121917, 37.165368 ], "pop": 1303, "state": "CO" }, { "_id": "81327", "city": "LEWIS", "loc": [ -108.61891, 37.47101 ], "pop": 1455, "state": "CO" }, { "_id": "81328", "city": "MANCOS", "loc": [ -108.298242, 37.347133 ], "pop": 2141, "state": "CO" }, { "_id": "81331", "city": "PLEASANT VIEW", "loc": [ -108.809487, 37.588763 ], "pop": 223, "state": "CO" }, { "_id": "81334", "city": "TOWAOC", "loc": [ -108.719993, 37.208408 ], "pop": 1135, "state": "CO" }, { "_id": "81335", "city": "YELLOW JACKET", "loc": [ -108.785167, 37.499526 ], "pop": 126, "state": "CO" }, { "_id": "81401", "city": "MONTROSE", "loc": [ -107.875182, 38.46783 ], "pop": 17834, "state": "CO" }, { "_id": "81410", "city": "AUSTIN", "loc": [ -107.97384, 38.797544 ], "pop": 1258, "state": "CO" }, { "_id": "81411", "city": "BEDROCK", "loc": [ -108.953224, 38.384352 ], "pop": 191, "state": "CO" }, { "_id": "81413", "city": "CEDAREDGE", "loc": [ -107.926786, 38.911878 ], "pop": 3254, "state": "CO" }, { "_id": "81415", "city": "CRAWFORD", "loc": [ -107.614864, 38.69408 ], "pop": 882, "state": "CO" }, { "_id": "81416", "city": "DELTA", "loc": [ -108.060421, 38.734891 ], "pop": 8644, "state": "CO" }, { "_id": "81418", "city": "ECKERT", "loc": [ -107.962452, 38.844982 ], "pop": 1211, "state": "CO" }, { "_id": "81419", "city": "HOTCHKISS", "loc": [ -107.747173, 38.812417 ], "pop": 2735, "state": "CO" }, { "_id": "81422", "city": "NATURITA", "loc": [ -108.572836, 38.222559 ], "pop": 554, "state": "CO" }, { "_id": "81423", "city": "NORWOOD", "loc": [ -108.284472, 38.110406 ], "pop": 1079, "state": "CO" }, { "_id": "81424", "city": "NUCLA", "loc": [ -108.547644, 38.268219 ], "pop": 1135, "state": "CO" }, { "_id": "81425", "city": "OLATHE", "loc": [ -107.992118, 38.597575 ], "pop": 4246, "state": "CO" }, { "_id": "81426", "city": "OPHIR", "loc": [ -107.851961, 37.856197 ], "pop": 138, "state": "CO" }, { "_id": "81427", "city": "OURAY", "loc": [ -107.67261, 38.02576 ], "pop": 686, "state": "CO" }, { "_id": "81428", "city": "PAONIA", "loc": [ -107.598483, 38.864978 ], "pop": 3314, "state": "CO" }, { "_id": "81430", "city": "PLACERVILLE", "loc": [ -108.024775, 38.008759 ], "pop": 467, "state": "CO" }, { "_id": "81431", "city": "REDVALE", "loc": [ -108.389536, 38.186452 ], "pop": 409, "state": "CO" }, { "_id": "81432", "city": "RIDGWAY", "loc": [ -107.753341, 38.138074 ], "pop": 1299, "state": "CO" }, { "_id": "81433", "city": "SILVERTON", "loc": [ -107.666686, 37.808995 ], "pop": 745, "state": "CO" }, { "_id": "81434", "city": "SOMERSET", "loc": [ -107.378145, 38.946801 ], "pop": 180, "state": "CO" }, { "_id": "81435", "city": "TELLURIDE", "loc": [ -107.821371, 37.940028 ], "pop": 1850, "state": "CO" }, { "_id": "81501", "city": "GRAND JUNCTION", "loc": [ -108.545692, 39.078326 ], "pop": 19665, "state": "CO" }, { "_id": "81503", "city": "GRAND JUNCTION", "loc": [ -108.575609, 39.056777 ], "pop": 20467, "state": "CO" }, { "_id": "81504", "city": "FRUITVALE", "loc": [ -108.489094, 39.083136 ], "pop": 16754, "state": "CO" }, { "_id": "81505", "city": "GRAND JUNCTION", "loc": [ -108.596834, 39.107097 ], "pop": 4877, "state": "CO" }, { "_id": "81506", "city": "GRAND JUNCTION", "loc": [ -108.54911, 39.103209 ], "pop": 7471, "state": "CO" }, { "_id": "81520", "city": "CLIFTON", "loc": [ -108.449628, 39.0805 ], "pop": 8408, "state": "CO" }, { "_id": "81521", "city": "FRUITA", "loc": [ -108.721757, 39.163656 ], "pop": 6230, "state": "CO" }, { "_id": "81522", "city": "GATEWAY", "loc": [ -108.791344, 38.915136 ], "pop": 752, "state": "CO" }, { "_id": "81524", "city": "LOMA", "loc": [ -108.814902, 39.227896 ], "pop": 1067, "state": "CO" }, { "_id": "81525", "city": "MACK", "loc": [ -108.929597, 39.255367 ], "pop": 176, "state": "CO" }, { "_id": "81526", "city": "PALISADE", "loc": [ -108.367977, 39.103178 ], "pop": 4366, "state": "CO" }, { "_id": "81527", "city": "WHITEWATER", "loc": [ -108.399042, 38.974422 ], "pop": 664, "state": "CO" }, { "_id": "81601", "city": "GLENWOOD SPRINGS", "loc": [ -107.325188, 39.529607 ], "pop": 9606, "state": "CO" }, { "_id": "81610", "city": "DINOSAUR", "loc": [ -108.965184, 40.256609 ], "pop": 498, "state": "CO" }, { "_id": "81611", "city": "ASPEN", "loc": [ -106.823593, 39.195139 ], "pop": 7431, "state": "CO" }, { "_id": "81621", "city": "BASALT", "loc": [ -106.998752, 39.353466 ], "pop": 3248, "state": "CO" }, { "_id": "81623", "city": "MARBLE", "loc": [ -107.171012, 39.385431 ], "pop": 9406, "state": "CO" }, { "_id": "81624", "city": "COLLBRAN", "loc": [ -107.924945, 39.245267 ], "pop": 1043, "state": "CO" }, { "_id": "81625", "city": "CRAIG", "loc": [ -107.561458, 40.522351 ], "pop": 10242, "state": "CO" }, { "_id": "81630", "city": "DE BEQUE", "loc": [ -108.230405, 39.311764 ], "pop": 464, "state": "CO" }, { "_id": "81631", "city": "EAGLE", "loc": [ -106.75884, 39.634138 ], "pop": 3368, "state": "CO" }, { "_id": "81633", "city": "ELK SPRINGS", "loc": [ -108.419729, 40.414588 ], "pop": 10, "state": "CO" }, { "_id": "81635", "city": "BATTLEMENT MESA", "loc": [ -108.038038, 39.440729 ], "pop": 2602, "state": "CO" }, { "_id": "81637", "city": "GYPSUM", "loc": [ -106.967083, 39.661848 ], "pop": 2593, "state": "CO" }, { "_id": "81638", "city": "HAMILTON", "loc": [ -107.584089, 40.32504 ], "pop": 191, "state": "CO" }, { "_id": "81639", "city": "HAYDEN", "loc": [ -107.257055, 40.494487 ], "pop": 2028, "state": "CO" }, { "_id": "81640", "city": "MAYBELL", "loc": [ -108.272264, 40.650649 ], "pop": 351, "state": "CO" }, { "_id": "81641", "city": "MEEKER", "loc": [ -107.892498, 40.038726 ], "pop": 3094, "state": "CO" }, { "_id": "81642", "city": "MEREDITH", "loc": [ -106.67823, 39.335348 ], "pop": 76, "state": "CO" }, { "_id": "81643", "city": "MESA", "loc": [ -108.104401, 39.161161 ], "pop": 741, "state": "CO" }, { "_id": "81647", "city": "NEW CASTLE", "loc": [ -107.542758, 39.570922 ], "pop": 2719, "state": "CO" }, { "_id": "81648", "city": "RANGELY", "loc": [ -108.799148, 40.082844 ], "pop": 2740, "state": "CO" }, { "_id": "81650", "city": "RIFLE", "loc": [ -107.789804, 39.549073 ], "pop": 7146, "state": "CO" }, { "_id": "81652", "city": "SILT", "loc": [ -107.657411, 39.541464 ], "pop": 2430, "state": "CO" }, { "_id": "81653", "city": "SLATER", "loc": [ -107.497178, 40.947985 ], "pop": 65, "state": "CO" }, { "_id": "81654", "city": "SNOWMASS", "loc": [ -106.950839, 39.250059 ], "pop": 2627, "state": "CO" }, { "_id": "81657", "city": "VAIL", "loc": [ -106.463454, 39.623793 ], "pop": 11449, "state": "CO" }, { "_id": "82001", "city": "CHEYENNE", "loc": [ -104.796234, 41.143719 ], "pop": 33107, "state": "WY" }, { "_id": "82007", "city": "CHEYENNE", "loc": [ -104.810745, 41.108433 ], "pop": 15050, "state": "WY" }, { "_id": "82009", "city": "CHEYENNE", "loc": [ -104.802328, 41.183566 ], "pop": 22028, "state": "WY" }, { "_id": "82050", "city": "ALBIN", "loc": [ -104.150542, 41.434237 ], "pop": 310, "state": "WY" }, { "_id": "82051", "city": "LARAMIE", "loc": [ -105.819708, 41.562721 ], "pop": 22, "state": "WY" }, { "_id": "82052", "city": "BUFORD", "loc": [ -105.469697, 41.142115 ], "pop": 97, "state": "WY" }, { "_id": "82053", "city": "BURNS", "loc": [ -104.315521, 41.200297 ], "pop": 1303, "state": "WY" }, { "_id": "82054", "city": "CARPENTER", "loc": [ -104.276514, 41.042819 ], "pop": 222, "state": "WY" }, { "_id": "82055", "city": "CENTENNIAL", "loc": [ -105.99451, 41.339149 ], "pop": 446, "state": "WY" }, { "_id": "82058", "city": "GARRETT", "loc": [ -105.550534, 42.142015 ], "pop": 120, "state": "WY" }, { "_id": "82063", "city": "JELM", "loc": [ -105.925727, 41.145723 ], "pop": 470, "state": "WY" }, { "_id": "82070", "city": "LARAMIE", "loc": [ -105.581146, 41.312907 ], "pop": 29327, "state": "WY" }, { "_id": "82080", "city": "MC FADDEN", "loc": [ -106.137861, 41.6327 ], "pop": 79, "state": "WY" }, { "_id": "82081", "city": "MERIDEN", "loc": [ -104.286606, 41.54236 ], "pop": 40, "state": "WY" }, { "_id": "82082", "city": "PINE BLUFFS", "loc": [ -104.066591, 41.178799 ], "pop": 1082, "state": "WY" }, { "_id": "82083", "city": "ROCK RIVER", "loc": [ -105.974629, 41.746073 ], "pop": 236, "state": "WY" }, { "_id": "82084", "city": "TIE SIDING", "loc": [ -105.446222, 41.052785 ], "pop": 19, "state": "WY" }, { "_id": "82190", "city": "FISHING BRIDGE", "loc": [ -110.674366, 44.853913 ], "pop": 443, "state": "WY" }, { "_id": "82201", "city": "WHEATLAND", "loc": [ -104.967852, 42.049467 ], "pop": 5952, "state": "WY" }, { "_id": "82210", "city": "CHUGWATER", "loc": [ -104.817916, 41.748668 ], "pop": 295, "state": "WY" }, { "_id": "82212", "city": "FORT LARAMIE", "loc": [ -104.522595, 42.213314 ], "pop": 325, "state": "WY" }, { "_id": "82213", "city": "GLENDO", "loc": [ -105.000013, 42.500352 ], "pop": 471, "state": "WY" }, { "_id": "82214", "city": "GUERNSEY", "loc": [ -104.751164, 42.265513 ], "pop": 1319, "state": "WY" }, { "_id": "82215", "city": "HARTVILLE", "loc": [ -104.729564, 42.33339 ], "pop": 108, "state": "WY" }, { "_id": "82217", "city": "HAWK SPRINGS", "loc": [ -104.329498, 41.741481 ], "pop": 125, "state": "WY" }, { "_id": "82219", "city": "JAY EM", "loc": [ -104.311437, 42.357399 ], "pop": 399, "state": "WY" }, { "_id": "82220", "city": "KEELINE", "loc": [ -104.720277, 42.839062 ], "pop": 209, "state": "WY" }, { "_id": "82221", "city": "LAGRANGE", "loc": [ -104.19738, 41.642311 ], "pop": 413, "state": "WY" }, { "_id": "82222", "city": "LANCE CREEK", "loc": [ -104.544958, 43.231636 ], "pop": 181, "state": "WY" }, { "_id": "82223", "city": "LINGLE", "loc": [ -104.331992, 42.134624 ], "pop": 714, "state": "WY" }, { "_id": "82224", "city": "LOST SPRINGS", "loc": [ -104.920901, 42.729835 ], "pop": 6, "state": "WY" }, { "_id": "82225", "city": "LUSK", "loc": [ -104.465076, 42.765953 ], "pop": 1724, "state": "WY" }, { "_id": "82229", "city": "SHAWNEE", "loc": [ -105.032447, 42.839464 ], "pop": 137, "state": "WY" }, { "_id": "82240", "city": "TORRINGTON", "loc": [ -104.191662, 42.062377 ], "pop": 9575, "state": "WY" }, { "_id": "82242", "city": "VAN TASSELL", "loc": [ -104.315073, 42.830004 ], "pop": 385, "state": "WY" }, { "_id": "82243", "city": "VETERAN", "loc": [ -104.370899, 41.982091 ], "pop": 148, "state": "WY" }, { "_id": "82244", "city": "YODER", "loc": [ -104.353507, 41.912018 ], "pop": 674, "state": "WY" }, { "_id": "82301", "city": "RAWLINS", "loc": [ -107.234883, 41.795131 ], "pop": 9914, "state": "WY" }, { "_id": "82310", "city": "JEFFREY CITY", "loc": [ -107.872422, 42.540201 ], "pop": 253, "state": "WY" }, { "_id": "82321", "city": "BAGGS", "loc": [ -107.668733, 41.031191 ], "pop": 384, "state": "WY" }, { "_id": "82322", "city": "BAIROIL", "loc": [ -107.563288, 42.232721 ], "pop": 236, "state": "WY" }, { "_id": "82323", "city": "DIXON", "loc": [ -107.560354, 41.044631 ], "pop": 253, "state": "WY" }, { "_id": "82325", "city": "ENCAMPMENT", "loc": [ -106.780285, 41.205353 ], "pop": 946, "state": "WY" }, { "_id": "82327", "city": "HANNA", "loc": [ -106.528283, 41.87264 ], "pop": 1585, "state": "WY" }, { "_id": "82329", "city": "MEDICINE BOW", "loc": [ -106.201228, 41.903002 ], "pop": 409, "state": "WY" }, { "_id": "82331", "city": "RYAN PARK", "loc": [ -106.797538, 41.446293 ], "pop": 2462, "state": "WY" }, { "_id": "82332", "city": "SAVERY", "loc": [ -107.42338, 41.039485 ], "pop": 97, "state": "WY" }, { "_id": "82334", "city": "SINCLAIR", "loc": [ -107.109083, 41.779741 ], "pop": 530, "state": "WY" }, { "_id": "82336", "city": "WAMSUTTER", "loc": [ -108.151674, 41.658278 ], "pop": 516, "state": "WY" }, { "_id": "82401", "city": "WORLAND", "loc": [ -107.95626, 44.013796 ], "pop": 7693, "state": "WY" }, { "_id": "82410", "city": "BASIN", "loc": [ -108.043787, 44.378765 ], "pop": 1580, "state": "WY" }, { "_id": "82411", "city": "BURLINGTON", "loc": [ -108.432669, 44.444218 ], "pop": 435, "state": "WY" }, { "_id": "82414", "city": "CODY", "loc": [ -109.075611, 44.523135 ], "pop": 11985, "state": "WY" }, { "_id": "82421", "city": "DEAVER", "loc": [ -108.597948, 44.925695 ], "pop": 499, "state": "WY" }, { "_id": "82426", "city": "GREYBULL", "loc": [ -108.079503, 44.491881 ], "pop": 2460, "state": "WY" }, { "_id": "82428", "city": "HYATTVILLE", "loc": [ -107.605318, 44.250693 ], "pop": 97, "state": "WY" }, { "_id": "82431", "city": "LOVELL", "loc": [ -108.414107, 44.833637 ], "pop": 4322, "state": "WY" }, { "_id": "82432", "city": "MANDERSON", "loc": [ -107.953423, 44.311931 ], "pop": 657, "state": "WY" }, { "_id": "82433", "city": "MEETEETSE", "loc": [ -108.950045, 44.196202 ], "pop": 1010, "state": "WY" }, { "_id": "82434", "city": "OTTO", "loc": [ -108.304673, 44.405644 ], "pop": 120, "state": "WY" }, { "_id": "82435", "city": "POWELL", "loc": [ -108.777322, 44.756077 ], "pop": 9608, "state": "WY" }, { "_id": "82441", "city": "SHELL", "loc": [ -107.824333, 44.563649 ], "pop": 355, "state": "WY" }, { "_id": "82442", "city": "TEN SLEEP", "loc": [ -107.415305, 43.997848 ], "pop": 695, "state": "WY" }, { "_id": "82443", "city": "GRASS CREEK", "loc": [ -108.231297, 43.662152 ], "pop": 4809, "state": "WY" }, { "_id": "82450", "city": "WAPITI", "loc": [ -109.432629, 44.47967 ], "pop": 214, "state": "WY" }, { "_id": "82501", "city": "GAS HILLS", "loc": [ -108.411335, 43.045786 ], "pop": 15471, "state": "WY" }, { "_id": "82510", "city": "ARAPAHOE", "loc": [ -108.494134, 42.967936 ], "pop": 605, "state": "WY" }, { "_id": "82512", "city": "CROWHEART", "loc": [ -109.296043, 43.371569 ], "pop": 157, "state": "WY" }, { "_id": "82513", "city": "DUBOIS", "loc": [ -109.649175, 43.545136 ], "pop": 1493, "state": "WY" }, { "_id": "82514", "city": "FORT WASHAKIE", "loc": [ -108.896445, 43.004761 ], "pop": 1131, "state": "WY" }, { "_id": "82516", "city": "KINNEAR", "loc": [ -108.615428, 43.131777 ], "pop": 420, "state": "WY" }, { "_id": "82520", "city": "ETHETE", "loc": [ -108.738288, 42.859678 ], "pop": 11770, "state": "WY" }, { "_id": "82523", "city": "PAVILLION", "loc": [ -108.604394, 43.198515 ], "pop": 1681, "state": "WY" }, { "_id": "82601", "city": "CASPER", "loc": [ -106.316571, 42.845763 ], "pop": 21224, "state": "WY" }, { "_id": "82604", "city": "CASPER", "loc": [ -106.389634, 42.826073 ], "pop": 24812, "state": "WY" }, { "_id": "82609", "city": "CASPER", "loc": [ -106.280649, 42.840629 ], "pop": 12789, "state": "WY" }, { "_id": "82620", "city": "ALCOVA", "loc": [ -106.610199, 42.568383 ], "pop": 10, "state": "WY" }, { "_id": "82630", "city": "ARMINTO", "loc": [ -107.343611, 43.120883 ], "pop": 14, "state": "WY" }, { "_id": "82633", "city": "DOUGLAS", "loc": [ -105.385484, 42.762558 ], "pop": 7502, "state": "WY" }, { "_id": "82636", "city": "EVANSVILLE", "loc": [ -106.263886, 42.861384 ], "pop": 1621, "state": "WY" }, { "_id": "82637", "city": "GLENROCK", "loc": [ -105.857911, 42.867495 ], "pop": 3483, "state": "WY" }, { "_id": "82639", "city": "KAYCEE", "loc": [ -106.56323, 43.723625 ], "pop": 876, "state": "WY" }, { "_id": "82642", "city": "LYSITE", "loc": [ -107.648781, 43.328417 ], "pop": 81, "state": "WY" }, { "_id": "82643", "city": "MIDWEST", "loc": [ -106.266818, 43.410829 ], "pop": 756, "state": "WY" }, { "_id": "82649", "city": "SHOSHONI", "loc": [ -108.100667, 43.245707 ], "pop": 600, "state": "WY" }, { "_id": "82701", "city": "NEWCASTLE", "loc": [ -104.226205, 43.851098 ], "pop": 4833, "state": "WY" }, { "_id": "82710", "city": "ALADDIN", "loc": [ -104.19314, 44.747331 ], "pop": 230, "state": "WY" }, { "_id": "82712", "city": "BEULAH", "loc": [ -104.153095, 44.573575 ], "pop": 187, "state": "WY" }, { "_id": "82714", "city": "DEVILS TOWER", "loc": [ -104.793638, 44.617067 ], "pop": 119, "state": "WY" }, { "_id": "82715", "city": "FOUR CORNERS", "loc": [ -104.122897, 44.100747 ], "pop": 38, "state": "WY" }, { "_id": "82716", "city": "GILLETTE", "loc": [ -105.497442, 44.282009 ], "pop": 25968, "state": "WY" }, { "_id": "82720", "city": "HULETT", "loc": [ -104.617367, 44.735222 ], "pop": 1054, "state": "WY" }, { "_id": "82721", "city": "PINE HAVEN", "loc": [ -104.905904, 44.299932 ], "pop": 1820, "state": "WY" }, { "_id": "82723", "city": "OSAGE", "loc": [ -104.4226, 43.998982 ], "pop": 292, "state": "WY" }, { "_id": "82724", "city": "OSHOTO", "loc": [ -104.937659, 44.583023 ], "pop": 57, "state": "WY" }, { "_id": "82725", "city": "RECLUSE", "loc": [ -105.776005, 44.786149 ], "pop": 183, "state": "WY" }, { "_id": "82727", "city": "ROZET", "loc": [ -105.245875, 44.305825 ], "pop": 900, "state": "WY" }, { "_id": "82729", "city": "SUNDANCE", "loc": [ -104.383696, 44.405755 ], "pop": 1827, "state": "WY" }, { "_id": "82730", "city": "UPTON", "loc": [ -104.635159, 44.089271 ], "pop": 1355, "state": "WY" }, { "_id": "82731", "city": "GILLETTE", "loc": [ -105.373236, 44.835689 ], "pop": 187, "state": "WY" }, { "_id": "82732", "city": "WRIGHT", "loc": [ -105.532327, 43.829349 ], "pop": 2132, "state": "WY" }, { "_id": "82801", "city": "SHERIDAN", "loc": [ -106.964795, 44.78486 ], "pop": 20025, "state": "WY" }, { "_id": "82831", "city": "ARVADA", "loc": [ -106.109191, 44.689876 ], "pop": 107, "state": "WY" }, { "_id": "82832", "city": "BANNER", "loc": [ -106.87331, 44.590804 ], "pop": 983, "state": "WY" }, { "_id": "82834", "city": "BUFFALO", "loc": [ -106.70726, 44.34847 ], "pop": 5269, "state": "WY" }, { "_id": "82835", "city": "CLEARMONT", "loc": [ -106.458071, 44.66101 ], "pop": 350, "state": "WY" }, { "_id": "82836", "city": "DAYTON", "loc": [ -107.302605, 44.877958 ], "pop": 986, "state": "WY" }, { "_id": "82838", "city": "PARKMAN", "loc": [ -107.325393, 44.964965 ], "pop": 148, "state": "WY" }, { "_id": "82839", "city": "ACME", "loc": [ -107.159833, 44.904789 ], "pop": 868, "state": "WY" }, { "_id": "82842", "city": "STORY", "loc": [ -107.049229, 44.607169 ], "pop": 63, "state": "WY" }, { "_id": "82844", "city": "RANCHESTER", "loc": [ -107.303429, 44.768228 ], "pop": 32, "state": "WY" }, { "_id": "82901", "city": "ROCK SPRINGS", "loc": [ -109.230047, 41.605957 ], "pop": 23927, "state": "WY" }, { "_id": "82922", "city": "BONDURANT", "loc": [ -110.335287, 43.223798 ], "pop": 116, "state": "WY" }, { "_id": "82923", "city": "BOULDER", "loc": [ -109.540105, 42.688146 ], "pop": 112, "state": "WY" }, { "_id": "82925", "city": "CORA", "loc": [ -109.915351, 43.139921 ], "pop": 30, "state": "WY" }, { "_id": "82930", "city": "EVANSTON", "loc": [ -110.963067, 41.260947 ], "pop": 12577, "state": "WY" }, { "_id": "82933", "city": "FORT BRIDGER", "loc": [ -110.347428, 41.28282 ], "pop": 3777, "state": "WY" }, { "_id": "82935", "city": "GREEN RIVER", "loc": [ -109.471445, 41.51959 ], "pop": 13956, "state": "WY" }, { "_id": "82936", "city": "LONETREE", "loc": [ -110.172862, 41.049144 ], "pop": 24, "state": "WY" }, { "_id": "82937", "city": "LYMAN", "loc": [ -110.292629, 41.329136 ], "pop": 2327, "state": "WY" }, { "_id": "82938", "city": "MC KINNON", "loc": [ -109.874536, 41.040898 ], "pop": 188, "state": "WY" }, { "_id": "82941", "city": "PINEDALE", "loc": [ -109.856088, 42.854331 ], "pop": 2326, "state": "WY" }, { "_id": "83001", "city": "COLTER BAY", "loc": [ -110.766277, 43.460734 ], "pop": 9078, "state": "WY" }, { "_id": "83011", "city": "KELLY", "loc": [ -110.544186, 43.609361 ], "pop": 203, "state": "WY" }, { "_id": "83012", "city": "MOOSE", "loc": [ -110.857493, 43.771201 ], "pop": 519, "state": "WY" }, { "_id": "83013", "city": "MORAN", "loc": [ -110.329429, 43.881635 ], "pop": 191, "state": "WY" }, { "_id": "83014", "city": "WILSON", "loc": [ -110.874199, 43.49922 ], "pop": 1099, "state": "WY" }, { "_id": "83101", "city": "KEMMERER", "loc": [ -110.52834, 41.788661 ], "pop": 4258, "state": "WY" }, { "_id": "83110", "city": "AFTON", "loc": [ -110.941976, 42.712829 ], "pop": 3201, "state": "WY" }, { "_id": "83111", "city": "AUBURN", "loc": [ -110.994415, 42.805114 ], "pop": 488, "state": "WY" }, { "_id": "83112", "city": "BEDFORD", "loc": [ -110.95556, 42.932336 ], "pop": 1177, "state": "WY" }, { "_id": "83113", "city": "MARBLETON", "loc": [ -110.132954, 42.552059 ], "pop": 1861, "state": "WY" }, { "_id": "83114", "city": "COKEVILLE", "loc": [ -110.916419, 42.057983 ], "pop": 905, "state": "WY" }, { "_id": "83115", "city": "DANIEL", "loc": [ -110.133624, 42.917629 ], "pop": 398, "state": "WY" }, { "_id": "83118", "city": "ETNA", "loc": [ -111.015996, 43.138606 ], "pop": 524, "state": "WY" }, { "_id": "83120", "city": "FREEDOM", "loc": [ -111.029178, 43.017167 ], "pop": 212, "state": "WY" }, { "_id": "83122", "city": "GROVER", "loc": [ -110.924392, 42.796472 ], "pop": 335, "state": "WY" }, { "_id": "83123", "city": "LA BARGE", "loc": [ -110.210865, 42.24734 ], "pop": 606, "state": "WY" }, { "_id": "83126", "city": "SMOOT", "loc": [ -110.922351, 42.619238 ], "pop": 414, "state": "WY" }, { "_id": "83127", "city": "THAYNE", "loc": [ -111.011354, 42.933026 ], "pop": 505, "state": "WY" }, { "_id": "83201", "city": "POCATELLO", "loc": [ -112.438142, 42.887592 ], "pop": 33282, "state": "ID" }, { "_id": "83202", "city": "CHUBBUCK", "loc": [ -112.474873, 42.926548 ], "pop": 11385, "state": "ID" }, { "_id": "83203", "city": "FORT HALL", "loc": [ -112.459854, 42.988717 ], "pop": 1566, "state": "ID" }, { "_id": "83204", "city": "POCATELLO", "loc": [ -112.443352, 42.846463 ], "pop": 15605, "state": "ID" }, { "_id": "83210", "city": "STERLING", "loc": [ -112.818124, 42.976717 ], "pop": 2653, "state": "ID" }, { "_id": "83211", "city": "AMERICAN FALLS", "loc": [ -112.870714, 42.789876 ], "pop": 5867, "state": "ID" }, { "_id": "83212", "city": "ARBON", "loc": [ -112.558481, 42.502634 ], "pop": 121, "state": "ID" }, { "_id": "83213", "city": "ARCO", "loc": [ -113.317559, 43.635521 ], "pop": 1823, "state": "ID" }, { "_id": "83214", "city": "ARIMO", "loc": [ -112.174649, 42.559953 ], "pop": 333, "state": "ID" }, { "_id": "83217", "city": "BANCROFT", "loc": [ -111.842944, 42.720463 ], "pop": 988, "state": "ID" }, { "_id": "83220", "city": "BERN", "loc": [ -111.392595, 42.319144 ], "pop": 261, "state": "ID" }, { "_id": "83221", "city": "BLACKFOOT", "loc": [ -112.361545, 43.194327 ], "pop": 18202, "state": "ID" }, { "_id": "83226", "city": "CHALLIS", "loc": [ -114.19463, 44.496912 ], "pop": 2426, "state": "ID" }, { "_id": "83227", "city": "CLAYTON", "loc": [ -114.410189, 44.273289 ], "pop": 41, "state": "ID" }, { "_id": "83228", "city": "CLIFTON", "loc": [ -111.995737, 42.215972 ], "pop": 538, "state": "ID" }, { "_id": "83230", "city": "CONDA", "loc": [ -111.54023, 42.717126 ], "pop": 21, "state": "ID" }, { "_id": "83231", "city": "DARLINGTON", "loc": [ -113.380284, 43.7715 ], "pop": 12, "state": "ID" }, { "_id": "83232", "city": "DAYTON", "loc": [ -111.985836, 42.11836 ], "pop": 659, "state": "ID" }, { "_id": "83234", "city": "DOWNEY", "loc": [ -112.109019, 42.418127 ], "pop": 939, "state": "ID" }, { "_id": "83235", "city": "ELLIS", "loc": [ -114.001594, 44.878829 ], "pop": 192, "state": "ID" }, { "_id": "83236", "city": "FIRTH", "loc": [ -112.158819, 43.302066 ], "pop": 2878, "state": "ID" }, { "_id": "83237", "city": "FRANKLIN", "loc": [ -111.822862, 42.030389 ], "pop": 1699, "state": "ID" }, { "_id": "83238", "city": "GENEVA", "loc": [ -111.072185, 42.313585 ], "pop": 125, "state": "ID" }, { "_id": "83241", "city": "GRACE", "loc": [ -111.739981, 42.549978 ], "pop": 2050, "state": "ID" }, { "_id": "83243", "city": "HOLBROOK", "loc": [ -112.693404, 42.222148 ], "pop": 213, "state": "ID" }, { "_id": "83245", "city": "INKOM", "loc": [ -112.246474, 42.796379 ], "pop": 823, "state": "ID" }, { "_id": "83246", "city": "LAVA HOT SPRINGS", "loc": [ -112.017644, 42.618474 ], "pop": 512, "state": "ID" }, { "_id": "83250", "city": "MC CAMMON", "loc": [ -112.175758, 42.63362 ], "pop": 2603, "state": "ID" }, { "_id": "83251", "city": "MACKAY", "loc": [ -113.611984, 43.91106 ], "pop": 1207, "state": "ID" }, { "_id": "83252", "city": "MALAD CITY", "loc": [ -112.262045, 42.180783 ], "pop": 3110, "state": "ID" }, { "_id": "83253", "city": "PATTERSON", "loc": [ -113.916039, 44.701745 ], "pop": 210, "state": "ID" }, { "_id": "83254", "city": "MONTPELIER", "loc": [ -111.31946, 42.35199 ], "pop": 4292, "state": "ID" }, { "_id": "83255", "city": "MOORE", "loc": [ -113.260349, 43.782094 ], "pop": 1083, "state": "ID" }, { "_id": "83260", "city": "OVID", "loc": [ -111.451109, 42.311423 ], "pop": 290, "state": "ID" }, { "_id": "83261", "city": "PARIS", "loc": [ -111.402938, 42.207065 ], "pop": 852, "state": "ID" }, { "_id": "83262", "city": "PINGREE", "loc": [ -112.449035, 43.195618 ], "pop": 7340, "state": "ID" }, { "_id": "83263", "city": "PRESTON", "loc": [ -111.856516, 42.110917 ], "pop": 5402, "state": "ID" }, { "_id": "83271", "city": "ROCKLAND", "loc": [ -112.853982, 42.555582 ], "pop": 478, "state": "ID" }, { "_id": "83272", "city": "SAINT CHARLES", "loc": [ -111.389744, 42.112812 ], "pop": 199, "state": "ID" }, { "_id": "83274", "city": "SHELLEY", "loc": [ -112.107549, 43.376901 ], "pop": 6164, "state": "ID" }, { "_id": "83276", "city": "SODA SPRINGS", "loc": [ -111.569896, 42.671819 ], "pop": 3871, "state": "ID" }, { "_id": "83278", "city": "STANLEY", "loc": [ -114.725414, 44.22908 ], "pop": 444, "state": "ID" }, { "_id": "83280", "city": "STONE", "loc": [ -112.711473, 42.038983 ], "pop": 169, "state": "ID" }, { "_id": "83283", "city": "THATCHER", "loc": [ -111.78899, 42.331959 ], "pop": 207, "state": "ID" }, { "_id": "83285", "city": "WAYAN", "loc": [ -111.254056, 43.02691 ], "pop": 117, "state": "ID" }, { "_id": "83286", "city": "WESTON", "loc": [ -111.97154, 42.044621 ], "pop": 727, "state": "ID" }, { "_id": "83287", "city": "FISH HAVEN", "loc": [ -111.463323, 42.045926 ], "pop": 65, "state": "ID" }, { "_id": "83301", "city": "TWIN FALLS", "loc": [ -114.469265, 42.556495 ], "pop": 34539, "state": "ID" }, { "_id": "83302", "city": "ROGERSON", "loc": [ -114.603794, 42.219567 ], "pop": 92, "state": "ID" }, { "_id": "83313", "city": "BELLEVUE", "loc": [ -114.249804, 43.439694 ], "pop": 2150, "state": "ID" }, { "_id": "83314", "city": "BLISS", "loc": [ -114.910387, 42.944859 ], "pop": 845, "state": "ID" }, { "_id": "83316", "city": "BUHL", "loc": [ -114.782545, 42.600763 ], "pop": 8014, "state": "ID" }, { "_id": "83318", "city": "BURLEY", "loc": [ -113.793081, 42.524442 ], "pop": 12406, "state": "ID" }, { "_id": "83320", "city": "CAREY", "loc": [ -113.892567, 43.274443 ], "pop": 820, "state": "ID" }, { "_id": "83321", "city": "CASTLEFORD", "loc": [ -114.873433, 42.521015 ], "pop": 365, "state": "ID" }, { "_id": "83322", "city": "CORRAL", "loc": [ -115.00871, 43.307127 ], "pop": 59, "state": "ID" }, { "_id": "83323", "city": "DECLO", "loc": [ -113.644794, 42.524005 ], "pop": 2592, "state": "ID" }, { "_id": "83324", "city": "DIETRICH", "loc": [ -114.266408, 42.91254 ], "pop": 178, "state": "ID" }, { "_id": "83325", "city": "EDEN", "loc": [ -114.162762, 42.580374 ], "pop": 1762, "state": "ID" }, { "_id": "83326", "city": "ELBA", "loc": [ -113.663559, 42.180865 ], "pop": 163, "state": "ID" }, { "_id": "83327", "city": "FAIRFIELD", "loc": [ -114.790845, 43.367504 ], "pop": 668, "state": "ID" }, { "_id": "83328", "city": "FILER", "loc": [ -114.614047, 42.565269 ], "pop": 4176, "state": "ID" }, { "_id": "83330", "city": "GOODING", "loc": [ -114.711966, 42.937345 ], "pop": 4846, "state": "ID" }, { "_id": "83332", "city": "HAGERMAN", "loc": [ -114.88697, 42.814205 ], "pop": 1613, "state": "ID" }, { "_id": "83333", "city": "HAILEY", "loc": [ -114.306398, 43.523861 ], "pop": 4683, "state": "ID" }, { "_id": "83334", "city": "HANSEN", "loc": [ -114.299364, 42.524895 ], "pop": 1525, "state": "ID" }, { "_id": "83335", "city": "HAZELTON", "loc": [ -114.134984, 42.595462 ], "pop": 705, "state": "ID" }, { "_id": "83336", "city": "HEYBURN", "loc": [ -113.770885, 42.559922 ], "pop": 4757, "state": "ID" }, { "_id": "83338", "city": "JEROME", "loc": [ -114.501244, 42.71784 ], "pop": 12671, "state": "ID" }, { "_id": "83340", "city": "OBSIDIAN", "loc": [ -114.373664, 43.675459 ], "pop": 5823, "state": "ID" }, { "_id": "83341", "city": "KIMBERLY", "loc": [ -114.365725, 42.528656 ], "pop": 3779, "state": "ID" }, { "_id": "83342", "city": "NAF", "loc": [ -113.448656, 42.364652 ], "pop": 2315, "state": "ID" }, { "_id": "83343", "city": "MINIDOKA", "loc": [ -113.620033, 42.759784 ], "pop": 1379, "state": "ID" }, { "_id": "83344", "city": "MURTAUGH", "loc": [ -114.160641, 42.477597 ], "pop": 1019, "state": "ID" }, { "_id": "83346", "city": "OAKLEY", "loc": [ -113.906945, 42.347561 ], "pop": 2056, "state": "ID" }, { "_id": "83347", "city": "PAUL", "loc": [ -113.797125, 42.623999 ], "pop": 3464, "state": "ID" }, { "_id": "83348", "city": "PICABO", "loc": [ -114.086065, 43.310149 ], "pop": 76, "state": "ID" }, { "_id": "83349", "city": "RICHFIELD", "loc": [ -114.15079, 43.058839 ], "pop": 789, "state": "ID" }, { "_id": "83350", "city": "ACEQUIA", "loc": [ -113.66699, 42.621467 ], "pop": 9761, "state": "ID" }, { "_id": "83352", "city": "SHOSHONE", "loc": [ -114.382176, 42.947353 ], "pop": 2341, "state": "ID" }, { "_id": "83355", "city": "WENDELL", "loc": [ -114.715391, 42.757868 ], "pop": 4400, "state": "ID" }, { "_id": "83401", "city": "AMMON", "loc": [ -111.990626, 43.517679 ], "pop": 27974, "state": "ID" }, { "_id": "83402", "city": "IDAHO FALLS", "loc": [ -112.057762, 43.493373 ], "pop": 20716, "state": "ID" }, { "_id": "83404", "city": "IDAHO FALLS", "loc": [ -112.012449, 43.475043 ], "pop": 14962, "state": "ID" }, { "_id": "83406", "city": "IDAHO FALLS", "loc": [ -111.966052, 43.473233 ], "pop": 5935, "state": "ID" }, { "_id": "83420", "city": "ASHTON", "loc": [ -111.619526, 43.988078 ], "pop": 8639, "state": "ID" }, { "_id": "83422", "city": "DRIGGS", "loc": [ -111.119896, 43.726291 ], "pop": 1495, "state": "ID" }, { "_id": "83423", "city": "DUBOIS", "loc": [ -112.325852, 44.185769 ], "pop": 650, "state": "ID" }, { "_id": "83424", "city": "FELT", "loc": [ -111.189496, 43.872407 ], "pop": 40, "state": "ID" }, { "_id": "83425", "city": "HAMER", "loc": [ -112.187189, 43.930751 ], "pop": 396, "state": "ID" }, { "_id": "83427", "city": "IONA", "loc": [ -111.928356, 43.525946 ], "pop": 1491, "state": "ID" }, { "_id": "83429", "city": "ISLAND PARK", "loc": [ -111.367914, 44.446606 ], "pop": 35, "state": "ID" }, { "_id": "83431", "city": "LEWISVILLE", "loc": [ -112.018884, 43.672476 ], "pop": 1565, "state": "ID" }, { "_id": "83434", "city": "MENAN", "loc": [ -111.983702, 43.726576 ], "pop": 1789, "state": "ID" }, { "_id": "83435", "city": "MONTEVIEW", "loc": [ -112.578321, 43.986242 ], "pop": 441, "state": "ID" }, { "_id": "83436", "city": "NEWDALE", "loc": [ -111.604192, 43.888078 ], "pop": 430, "state": "ID" }, { "_id": "83440", "city": "REXBURG", "loc": [ -111.789022, 43.809968 ], "pop": 19157, "state": "ID" }, { "_id": "83442", "city": "RIGBY", "loc": [ -111.900481, 43.671462 ], "pop": 8178, "state": "ID" }, { "_id": "83443", "city": "RIRIE", "loc": [ -111.760692, 43.631961 ], "pop": 1749, "state": "ID" }, { "_id": "83444", "city": "ROBERTS", "loc": [ -112.119591, 43.7116 ], "pop": 1436, "state": "ID" }, { "_id": "83445", "city": "SAINT ANTHONY", "loc": [ -111.523156, 44.274499 ], "pop": 747, "state": "ID" }, { "_id": "83446", "city": "SPENCER", "loc": [ -112.098821, 44.281444 ], "pop": 112, "state": "ID" }, { "_id": "83448", "city": "SUGAR CITY", "loc": [ -111.79004, 43.866852 ], "pop": 4517, "state": "ID" }, { "_id": "83449", "city": "SWAN VALLEY", "loc": [ -111.279358, 43.405826 ], "pop": 441, "state": "ID" }, { "_id": "83450", "city": "TERRETON", "loc": [ -112.420041, 43.858635 ], "pop": 1537, "state": "ID" }, { "_id": "83451", "city": "TETON", "loc": [ -111.668145, 43.898751 ], "pop": 1086, "state": "ID" }, { "_id": "83452", "city": "TETONIA", "loc": [ -111.186997, 43.843713 ], "pop": 820, "state": "ID" }, { "_id": "83455", "city": "VICTOR", "loc": [ -111.125934, 43.614827 ], "pop": 1084, "state": "ID" }, { "_id": "83462", "city": "CARMEN", "loc": [ -113.857267, 45.255016 ], "pop": 195, "state": "ID" }, { "_id": "83463", "city": "GIBBONSVILLE", "loc": [ -113.956466, 45.484608 ], "pop": 230, "state": "ID" }, { "_id": "83464", "city": "LEADORE", "loc": [ -113.492586, 44.738909 ], "pop": 594, "state": "ID" }, { "_id": "83466", "city": "NORTH FORK", "loc": [ -113.857287, 45.377605 ], "pop": 267, "state": "ID" }, { "_id": "83467", "city": "SALMON", "loc": [ -113.878356, 45.157142 ], "pop": 5159, "state": "ID" }, { "_id": "83469", "city": "SHOUP", "loc": [ -114.405987, 45.18514 ], "pop": 67, "state": "ID" }, { "_id": "83501", "city": "SOUTH GATE PLAZA", "loc": [ -116.987714, 46.389457 ], "pop": 29650, "state": "ID" }, { "_id": "83520", "city": "AHSAHKA", "loc": [ -116.371537, 46.510318 ], "pop": 335, "state": "ID" }, { "_id": "83522", "city": "COTTONWOOD", "loc": [ -116.373306, 46.044789 ], "pop": 1791, "state": "ID" }, { "_id": "83523", "city": "CRAIGMONT", "loc": [ -116.467655, 46.245292 ], "pop": 820, "state": "ID" }, { "_id": "83524", "city": "CULDESAC", "loc": [ -116.653579, 46.378012 ], "pop": 1161, "state": "ID" }, { "_id": "83525", "city": "DIXIE", "loc": [ -115.359158, 45.888897 ], "pop": 755, "state": "ID" }, { "_id": "83526", "city": "FERDINAND", "loc": [ -116.39817, 46.134877 ], "pop": 323, "state": "ID" }, { "_id": "83530", "city": "GRANGEVILLE", "loc": [ -116.107639, 45.927239 ], "pop": 4791, "state": "ID" }, { "_id": "83533", "city": "GREENCREEK", "loc": [ -116.27239, 46.115523 ], "pop": 269, "state": "ID" }, { "_id": "83535", "city": "JULIAETTA", "loc": [ -116.718849, 46.575376 ], "pop": 1014, "state": "ID" }, { "_id": "83536", "city": "KAMIAH", "loc": [ -116.034742, 46.21856 ], "pop": 2970, "state": "ID" }, { "_id": "83537", "city": "KENDRICK", "loc": [ -116.604895, 46.628628 ], "pop": 970, "state": "ID" }, { "_id": "83538", "city": "KEUTERVILLE", "loc": [ -116.535583, 45.929443 ], "pop": 0, "state": "ID" }, { "_id": "83539", "city": "CLEARWATER", "loc": [ -115.92396, 46.125859 ], "pop": 2704, "state": "ID" }, { "_id": "83540", "city": "LAPWAI", "loc": [ -116.790225, 46.412403 ], "pop": 1784, "state": "ID" }, { "_id": "83541", "city": "LENORE", "loc": [ -116.513015, 46.535408 ], "pop": 473, "state": "ID" }, { "_id": "83542", "city": "LUCILE", "loc": [ -116.266899, 45.556963 ], "pop": 216, "state": "ID" }, { "_id": "83543", "city": "NEZPERCE", "loc": [ -116.239281, 46.247533 ], "pop": 650, "state": "ID" }, { "_id": "83544", "city": "OROFINO", "loc": [ -116.240417, 46.495197 ], "pop": 5738, "state": "ID" }, { "_id": "83545", "city": "PECK", "loc": [ -116.411394, 46.480661 ], "pop": 295, "state": "ID" }, { "_id": "83546", "city": "PIERCE", "loc": [ -115.807071, 46.492424 ], "pop": 900, "state": "ID" }, { "_id": "83547", "city": "POLLOCK", "loc": [ -116.351742, 45.306754 ], "pop": 274, "state": "ID" }, { "_id": "83548", "city": "REUBENS", "loc": [ -116.533334, 46.336112 ], "pop": 121, "state": "ID" }, { "_id": "83549", "city": "RIGGINS", "loc": [ -116.300553, 45.397006 ], "pop": 818, "state": "ID" }, { "_id": "83553", "city": "WEIPPE", "loc": [ -115.938593, 46.38069 ], "pop": 1193, "state": "ID" }, { "_id": "83554", "city": "WHITE BIRD", "loc": [ -116.2889, 45.752096 ], "pop": 393, "state": "ID" }, { "_id": "83555", "city": "WINCHESTER", "loc": [ -116.620382, 46.238334 ], "pop": 380, "state": "ID" }, { "_id": "83601", "city": "ATLANTA", "loc": [ -115.357042, 43.567436 ], "pop": 208, "state": "ID" }, { "_id": "83602", "city": "BANKS", "loc": [ -115.983737, 44.149152 ], "pop": 494, "state": "ID" }, { "_id": "83604", "city": "GRASMERE", "loc": [ -115.677259, 42.76006 ], "pop": 609, "state": "ID" }, { "_id": "83605", "city": "CALDWELL", "loc": [ -116.700038, 43.662719 ], "pop": 32407, "state": "ID" }, { "_id": "83610", "city": "CAMBRIDGE", "loc": [ -116.675717, 44.59216 ], "pop": 962, "state": "ID" }, { "_id": "83611", "city": "WEST MOUNTAIN", "loc": [ -116.027676, 44.493273 ], "pop": 1681, "state": "ID" }, { "_id": "83612", "city": "COUNCIL", "loc": [ -116.451833, 44.762754 ], "pop": 1606, "state": "ID" }, { "_id": "83615", "city": "DONNELLY", "loc": [ -116.08578, 44.74937 ], "pop": 681, "state": "ID" }, { "_id": "83616", "city": "EAGLE", "loc": [ -116.361966, 43.706879 ], "pop": 6874, "state": "ID" }, { "_id": "83617", "city": "MONTOUR", "loc": [ -116.511459, 43.879152 ], "pop": 11189, "state": "ID" }, { "_id": "83619", "city": "FRUITLAND", "loc": [ -116.914259, 44.002658 ], "pop": 4611, "state": "ID" }, { "_id": "83622", "city": "GARDEN VALLEY", "loc": [ -115.824311, 44.090932 ], "pop": 513, "state": "ID" }, { "_id": "83623", "city": "GLENNS FERRY", "loc": [ -115.315973, 42.962202 ], "pop": 2040, "state": "ID" }, { "_id": "83624", "city": "GRAND VIEW", "loc": [ -116.08187, 42.810101 ], "pop": 1449, "state": "ID" }, { "_id": "83627", "city": "HAMMETT", "loc": [ -115.565839, 42.981755 ], "pop": 73, "state": "ID" }, { "_id": "83628", "city": "HOMEDALE", "loc": [ -116.947228, 43.613844 ], "pop": 3079, "state": "ID" }, { "_id": "83629", "city": "HORSESHOE BEND", "loc": [ -116.180898, 43.922882 ], "pop": 1111, "state": "ID" }, { "_id": "83631", "city": "IDAHO CITY", "loc": [ -115.918436, 43.758601 ], "pop": 1324, "state": "ID" }, { "_id": "83632", "city": "INDIAN VALLEY", "loc": [ -116.442969, 44.549134 ], "pop": 188, "state": "ID" }, { "_id": "83633", "city": "KING HILL", "loc": [ -115.269098, 42.936104 ], "pop": 357, "state": "ID" }, { "_id": "83634", "city": "KUNA", "loc": [ -116.381859, 43.487034 ], "pop": 8141, "state": "ID" }, { "_id": "83636", "city": "LETHA", "loc": [ -116.585004, 43.840306 ], "pop": 29, "state": "ID" }, { "_id": "83637", "city": "LOWMAN", "loc": [ -115.528488, 44.110616 ], "pop": 63, "state": "ID" }, { "_id": "83638", "city": "MC CALL", "loc": [ -116.078873, 44.891784 ], "pop": 3681, "state": "ID" }, { "_id": "83639", "city": "MARSING", "loc": [ -116.823968, 43.539866 ], "pop": 2281, "state": "ID" }, { "_id": "83641", "city": "MELBA", "loc": [ -116.548875, 43.37842 ], "pop": 1116, "state": "ID" }, { "_id": "83642", "city": "MERIDIAN", "loc": [ -116.397538, 43.614963 ], "pop": 19033, "state": "ID" }, { "_id": "83643", "city": "MESA", "loc": [ -116.42113, 44.657747 ], "pop": 279, "state": "ID" }, { "_id": "83644", "city": "MIDDLETON", "loc": [ -116.61122, 43.719052 ], "pop": 3898, "state": "ID" }, { "_id": "83645", "city": "MIDVALE", "loc": [ -116.703838, 44.441979 ], "pop": 621, "state": "ID" }, { "_id": "83647", "city": "MOUNTAIN HOME", "loc": [ -115.696334, 43.139223 ], "pop": 12235, "state": "ID" }, { "_id": "83648", "city": "MOUNTAIN HOME A", "loc": [ -115.873609, 43.049315 ], "pop": 6304, "state": "ID" }, { "_id": "83650", "city": "OREANA", "loc": [ -116.605379, 43.207296 ], "pop": 1156, "state": "ID" }, { "_id": "83651", "city": "NAMPA", "loc": [ -116.584818, 43.58342 ], "pop": 16068, "state": "ID" }, { "_id": "83654", "city": "NEW MEADOWS", "loc": [ -116.287438, 44.993969 ], "pop": 1179, "state": "ID" }, { "_id": "83655", "city": "NEW PLYMOUTH", "loc": [ -116.804818, 43.959021 ], "pop": 3165, "state": "ID" }, { "_id": "83657", "city": "OLA", "loc": [ -116.290915, 44.235026 ], "pop": 159, "state": "ID" }, { "_id": "83660", "city": "PARMA", "loc": [ -116.940066, 43.789576 ], "pop": 4477, "state": "ID" }, { "_id": "83661", "city": "PAYETTE", "loc": [ -116.920277, 44.07818 ], "pop": 7913, "state": "ID" }, { "_id": "83669", "city": "STAR", "loc": [ -116.496735, 43.701296 ], "pop": 1579, "state": "ID" }, { "_id": "83670", "city": "SWEET", "loc": [ -116.323215, 43.99475 ], "pop": 344, "state": "ID" }, { "_id": "83672", "city": "WEISER", "loc": [ -116.96507, 44.25222 ], "pop": 6967, "state": "ID" }, { "_id": "83676", "city": "WILDER", "loc": [ -116.912199, 43.657851 ], "pop": 3042, "state": "ID" }, { "_id": "83677", "city": "YELLOW PINE", "loc": [ -115.49634, 44.969809 ], "pop": 68, "state": "ID" }, { "_id": "83686", "city": "NAMPA", "loc": [ -116.565962, 43.544125 ], "pop": 17886, "state": "ID" }, { "_id": "83687", "city": "NAMPA", "loc": [ -116.536024, 43.593657 ], "pop": 10589, "state": "ID" }, { "_id": "83702", "city": "BOISE", "loc": [ -116.205192, 43.632237 ], "pop": 19423, "state": "ID" }, { "_id": "83703", "city": "BOISE", "loc": [ -116.252396, 43.660051 ], "pop": 17005, "state": "ID" }, { "_id": "83704", "city": "BOISE", "loc": [ -116.295099, 43.633001 ], "pop": 40912, "state": "ID" }, { "_id": "83705", "city": "BOISE", "loc": [ -116.219104, 43.585077 ], "pop": 25402, "state": "ID" }, { "_id": "83706", "city": "BOISE", "loc": [ -116.191006, 43.588495 ], "pop": 24826, "state": "ID" }, { "_id": "83709", "city": "BOISE", "loc": [ -116.29407, 43.574085 ], "pop": 30382, "state": "ID" }, { "_id": "83712", "city": "BOISE", "loc": [ -116.164924, 43.602311 ], "pop": 7572, "state": "ID" }, { "_id": "83714", "city": "GARDEN CITY", "loc": [ -116.265751, 43.643036 ], "pop": 5897, "state": "ID" }, { "_id": "83801", "city": "ATHOL", "loc": [ -116.731821, 47.92674 ], "pop": 2520, "state": "ID" }, { "_id": "83802", "city": "AVERY", "loc": [ -115.866012, 47.271431 ], "pop": 113, "state": "ID" }, { "_id": "83803", "city": "BAYVIEW", "loc": [ -116.568745, 47.96535 ], "pop": 722, "state": "ID" }, { "_id": "83804", "city": "BLANCHARD", "loc": [ -116.990865, 48.022344 ], "pop": 507, "state": "ID" }, { "_id": "83805", "city": "BONNERS FERRY", "loc": [ -116.332178, 48.730642 ], "pop": 5219, "state": "ID" }, { "_id": "83808", "city": "CALDER", "loc": [ -116.222793, 47.274135 ], "pop": 77, "state": "ID" }, { "_id": "83809", "city": "CAREYWOOD", "loc": [ -116.598761, 48.062494 ], "pop": 361, "state": "ID" }, { "_id": "83810", "city": "CATALDO", "loc": [ -116.443138, 47.552169 ], "pop": 982, "state": "ID" }, { "_id": "83811", "city": "CLARK FORK", "loc": [ -116.169865, 48.140457 ], "pop": 971, "state": "ID" }, { "_id": "83812", "city": "CLARKIA", "loc": [ -116.277408, 47.044477 ], "pop": 85, "state": "ID" }, { "_id": "83813", "city": "COCOLALLA", "loc": [ -116.657051, 48.124828 ], "pop": 715, "state": "ID" }, { "_id": "83814", "city": "COEUR D ALENE", "loc": [ -116.784976, 47.692841 ], "pop": 33589, "state": "ID" }, { "_id": "83821", "city": "COOLIN", "loc": [ -116.840823, 48.522754 ], "pop": 194, "state": "ID" }, { "_id": "83822", "city": "OLD TOWN", "loc": [ -116.927382, 48.187988 ], "pop": 2229, "state": "ID" }, { "_id": "83823", "city": "DEARY", "loc": [ -116.523782, 46.806062 ], "pop": 1483, "state": "ID" }, { "_id": "83824", "city": "DESMET", "loc": [ -116.893746, 47.125954 ], "pop": 265, "state": "ID" }, { "_id": "83827", "city": "ELK RIVER", "loc": [ -116.179943, 46.782972 ], "pop": 154, "state": "ID" }, { "_id": "83830", "city": "FERNWOOD", "loc": [ -116.383126, 47.116027 ], "pop": 372, "state": "ID" }, { "_id": "83832", "city": "GENESEE", "loc": [ -116.928991, 46.571394 ], "pop": 1241, "state": "ID" }, { "_id": "83833", "city": "HARRISON", "loc": [ -116.744607, 47.501692 ], "pop": 1077, "state": "ID" }, { "_id": "83834", "city": "HARVARD", "loc": [ -116.702524, 46.937647 ], "pop": 226, "state": "ID" }, { "_id": "83835", "city": "HAYDEN LAKE", "loc": [ -116.776821, 47.773853 ], "pop": 9287, "state": "ID" }, { "_id": "83836", "city": "HOPE", "loc": [ -116.279504, 48.244402 ], "pop": 687, "state": "ID" }, { "_id": "83837", "city": "KELLOGG", "loc": [ -116.125281, 47.543069 ], "pop": 4640, "state": "ID" }, { "_id": "83839", "city": "KINGSTON", "loc": [ -116.288722, 47.550881 ], "pop": 690, "state": "ID" }, { "_id": "83842", "city": "MEDIMONT", "loc": [ -116.568291, 47.462482 ], "pop": 32, "state": "ID" }, { "_id": "83843", "city": "MOSCOW", "loc": [ -116.989683, 46.730921 ], "pop": 21714, "state": "ID" }, { "_id": "83845", "city": "MOYIE SPRINGS", "loc": [ -116.179603, 48.746434 ], "pop": 1496, "state": "ID" }, { "_id": "83846", "city": "MULLAN", "loc": [ -115.792603, 47.470906 ], "pop": 995, "state": "ID" }, { "_id": "83847", "city": "NAPLES", "loc": [ -116.319636, 48.60491 ], "pop": 1556, "state": "ID" }, { "_id": "83848", "city": "NORDMAN", "loc": [ -116.92126, 48.566944 ], "pop": 446, "state": "ID" }, { "_id": "83850", "city": "PINEHURST", "loc": [ -116.264679, 47.501823 ], "pop": 371, "state": "ID" }, { "_id": "83851", "city": "PLUMMER", "loc": [ -116.866161, 47.327782 ], "pop": 1439, "state": "ID" }, { "_id": "83853", "city": "PORTHILL", "loc": [ -116.477517, 48.992037 ], "pop": 61, "state": "ID" }, { "_id": "83854", "city": "POST FALLS", "loc": [ -116.935349, 47.720475 ], "pop": 14952, "state": "ID" }, { "_id": "83855", "city": "POTLATCH", "loc": [ -116.914101, 46.944833 ], "pop": 1836, "state": "ID" }, { "_id": "83856", "city": "PRIEST RIVER", "loc": [ -116.906617, 48.16637 ], "pop": 4345, "state": "ID" }, { "_id": "83857", "city": "PRINCETON", "loc": [ -116.828728, 46.899556 ], "pop": 733, "state": "ID" }, { "_id": "83858", "city": "RATHDRUM", "loc": [ -116.887294, 47.824107 ], "pop": 4798, "state": "ID" }, { "_id": "83860", "city": "SAGLE", "loc": [ -116.5455, 48.2035 ], "pop": 3512, "state": "ID" }, { "_id": "83861", "city": "SAINT MARIES", "loc": [ -116.568107, 47.297727 ], "pop": 5894, "state": "ID" }, { "_id": "83864", "city": "SANDPOINT", "loc": [ -116.533249, 48.311989 ], "pop": 12421, "state": "ID" }, { "_id": "83868", "city": "SMELTERVILLE", "loc": [ -116.240113, 47.537096 ], "pop": 2272, "state": "ID" }, { "_id": "83869", "city": "SPIRIT LAKE", "loc": [ -116.868046, 47.965652 ], "pop": 860, "state": "ID" }, { "_id": "83870", "city": "TENSED", "loc": [ -116.902716, 47.170735 ], "pop": 332, "state": "ID" }, { "_id": "83871", "city": "TROY", "loc": [ -116.768105, 46.742648 ], "pop": 1481, "state": "ID" }, { "_id": "83872", "city": "VIOLA", "loc": [ -116.97319, 46.858293 ], "pop": 519, "state": "ID" }, { "_id": "83873", "city": "WALLACE", "loc": [ -115.962001, 47.490842 ], "pop": 4688, "state": "ID" }, { "_id": "83876", "city": "WORLEY", "loc": [ -116.905634, 47.429213 ], "pop": 845, "state": "ID" }, { "_id": "84001", "city": "ALTAMONT", "loc": [ -110.446356, 40.370225 ], "pop": 146, "state": "UT" }, { "_id": "84002", "city": "ALTONAH", "loc": [ -110.438499, 40.441894 ], "pop": 10, "state": "UT" }, { "_id": "84003", "city": "AMERICAN FORK", "loc": [ -111.794107, 40.392784 ], "pop": 21864, "state": "UT" }, { "_id": "84004", "city": "ALPINE", "loc": [ -111.768861, 40.461591 ], "pop": 3665, "state": "UT" }, { "_id": "84006", "city": "BINGHAM CANYON", "loc": [ -112.097718, 40.564614 ], "pop": 631, "state": "UT" }, { "_id": "84007", "city": "BLUEBELL", "loc": [ -110.294122, 40.351728 ], "pop": 1443, "state": "UT" }, { "_id": "84010", "city": "BOUNTIFUL", "loc": [ -111.872658, 40.877513 ], "pop": 41077, "state": "UT" }, { "_id": "84012", "city": "BRIDGELAND", "loc": [ -110.160264, 40.230411 ], "pop": 849, "state": "UT" }, { "_id": "84013", "city": "CEDAR VALLEY", "loc": [ -111.968985, 40.142516 ], "pop": 1836, "state": "UT" }, { "_id": "84014", "city": "CENTERVILLE", "loc": [ -111.87701, 40.926772 ], "pop": 11989, "state": "UT" }, { "_id": "84015", "city": "CLEARFIELD", "loc": [ -112.048224, 41.129388 ], "pop": 25972, "state": "UT" }, { "_id": "84017", "city": "COALVILLE", "loc": [ -111.407108, 40.924385 ], "pop": 3217, "state": "UT" }, { "_id": "84018", "city": "CROYDON", "loc": [ -111.523092, 41.068915 ], "pop": 117, "state": "UT" }, { "_id": "84020", "city": "DRAPER", "loc": [ -111.88096, 40.504599 ], "pop": 5602, "state": "UT" }, { "_id": "84021", "city": "DUCHESNE", "loc": [ -110.618094, 39.95398 ], "pop": 38, "state": "UT" }, { "_id": "84022", "city": "DUGWAY", "loc": [ -112.872905, 40.526892 ], "pop": 79, "state": "UT" }, { "_id": "84023", "city": "DUTCH JOHN", "loc": [ -109.354255, 40.932244 ], "pop": 174, "state": "UT" }, { "_id": "84025", "city": "FARMINGTON", "loc": [ -111.893785, 40.988913 ], "pop": 10307, "state": "UT" }, { "_id": "84026", "city": "FORT DUCHESNE", "loc": [ -109.863726, 40.301411 ], "pop": 1649, "state": "UT" }, { "_id": "84028", "city": "GARDEN CITY", "loc": [ -111.407033, 41.93764 ], "pop": 254, "state": "UT" }, { "_id": "84029", "city": "GRANTSVILLE", "loc": [ -112.461766, 40.60054 ], "pop": 4741, "state": "UT" }, { "_id": "84031", "city": "HANNA", "loc": [ -110.809748, 40.450135 ], "pop": 54, "state": "UT" }, { "_id": "84032", "city": "HEBER CITY", "loc": [ -111.405088, 40.494703 ], "pop": 7913, "state": "UT" }, { "_id": "84035", "city": "JENSEN", "loc": [ -109.350982, 40.378715 ], "pop": 471, "state": "UT" }, { "_id": "84036", "city": "KAMAS", "loc": [ -111.261877, 40.641432 ], "pop": 2433, "state": "UT" }, { "_id": "84037", "city": "KAYSVILLE", "loc": [ -111.932607, 41.037527 ], "pop": 21132, "state": "UT" }, { "_id": "84038", "city": "LAKETOWN", "loc": [ -111.268853, 41.81068 ], "pop": 430, "state": "UT" }, { "_id": "84039", "city": "LAPOINT", "loc": [ -109.804102, 40.400285 ], "pop": 362, "state": "UT" }, { "_id": "84040", "city": "LAYTON", "loc": [ -111.927365, 41.084576 ], "pop": 13289, "state": "UT" }, { "_id": "84041", "city": "LAYTON", "loc": [ -111.970354, 41.087905 ], "pop": 33600, "state": "UT" }, { "_id": "84042", "city": "LINDON", "loc": [ -111.714358, 40.34119 ], "pop": 3819, "state": "UT" }, { "_id": "84043", "city": "LEHI", "loc": [ -111.850606, 40.395845 ], "pop": 9188, "state": "UT" }, { "_id": "84044", "city": "MAGNA", "loc": [ -112.080867, 40.700879 ], "pop": 17841, "state": "UT" }, { "_id": "84046", "city": "MANILA", "loc": [ -109.723503, 40.968494 ], "pop": 516, "state": "UT" }, { "_id": "84047", "city": "MIDVALE", "loc": [ -111.885066, 40.615178 ], "pop": 25001, "state": "UT" }, { "_id": "84049", "city": "MIDWAY", "loc": [ -111.477575, 40.50934 ], "pop": 1837, "state": "UT" }, { "_id": "84050", "city": "MORGAN", "loc": [ -111.716339, 41.067832 ], "pop": 5411, "state": "UT" }, { "_id": "84051", "city": "MOUNTAIN HOME", "loc": [ -110.767018, 40.191999 ], "pop": 236, "state": "UT" }, { "_id": "84052", "city": "MYTON", "loc": [ -110.048056, 40.194049 ], "pop": 940, "state": "UT" }, { "_id": "84053", "city": "NEOLA", "loc": [ -110.037221, 40.449149 ], "pop": 810, "state": "UT" }, { "_id": "84054", "city": "NORTH SALT LAKE", "loc": [ -111.904116, 40.844064 ], "pop": 7216, "state": "UT" }, { "_id": "84056", "city": "HILL AIR FORCE B", "loc": [ -111.995565, 41.116962 ], "pop": 5432, "state": "UT" }, { "_id": "84057", "city": "OREM", "loc": [ -111.695293, 40.313407 ], "pop": 38292, "state": "UT" }, { "_id": "84058", "city": "VINEYARD", "loc": [ -111.694301, 40.280761 ], "pop": 29323, "state": "UT" }, { "_id": "84060", "city": "PARK CITY", "loc": [ -111.528021, 40.695724 ], "pop": 8976, "state": "UT" }, { "_id": "84061", "city": "PEOA", "loc": [ -111.302467, 40.720937 ], "pop": 892, "state": "UT" }, { "_id": "84062", "city": "PLEASANT GROVE", "loc": [ -111.733284, 40.371986 ], "pop": 15703, "state": "UT" }, { "_id": "84063", "city": "RANDLETT", "loc": [ -109.730102, 40.21865 ], "pop": 78, "state": "UT" }, { "_id": "84064", "city": "RANDOLPH", "loc": [ -111.185578, 41.656328 ], "pop": 682, "state": "UT" }, { "_id": "84065", "city": "LARK", "loc": [ -111.954661, 40.53789 ], "pop": 28444, "state": "UT" }, { "_id": "84066", "city": "ROOSEVELT", "loc": [ -110.010782, 40.310229 ], "pop": 6725, "state": "UT" }, { "_id": "84067", "city": "ROY", "loc": [ -112.038177, 41.172365 ], "pop": 22166, "state": "UT" }, { "_id": "84069", "city": "RUSH VALLEY", "loc": [ -112.744033, 40.233625 ], "pop": 1893, "state": "UT" }, { "_id": "84070", "city": "SANDY", "loc": [ -111.881625, 40.579379 ], "pop": 19422, "state": "UT" }, { "_id": "84071", "city": "STOCKTON", "loc": [ -112.425214, 40.350451 ], "pop": 490, "state": "UT" }, { "_id": "84072", "city": "TABIONA", "loc": [ -110.702108, 40.382691 ], "pop": 440, "state": "UT" }, { "_id": "84073", "city": "TALMAGE", "loc": [ -110.396529, 40.174569 ], "pop": 1743, "state": "UT" }, { "_id": "84074", "city": "TOOELE", "loc": [ -112.300214, 40.545445 ], "pop": 17588, "state": "UT" }, { "_id": "84075", "city": "SYRACUSE", "loc": [ -112.0451, 41.086423 ], "pop": 9737, "state": "UT" }, { "_id": "84076", "city": "TRIDELL", "loc": [ -109.835906, 40.443593 ], "pop": 363, "state": "UT" }, { "_id": "84078", "city": "VERNAL", "loc": [ -109.546883, 40.440613 ], "pop": 17641, "state": "UT" }, { "_id": "84080", "city": "VERNON", "loc": [ -112.425961, 40.082609 ], "pop": 200, "state": "UT" }, { "_id": "84082", "city": "WALLSBURG", "loc": [ -111.464934, 40.365697 ], "pop": 649, "state": "UT" }, { "_id": "84083", "city": "TROUT CREEK", "loc": [ -113.993573, 40.597396 ], "pop": 1801, "state": "UT" }, { "_id": "84084", "city": "WEST JORDAN", "loc": [ -111.967662, 40.625429 ], "pop": 36145, "state": "UT" }, { "_id": "84085", "city": "WHITEROCKS", "loc": [ -109.917244, 40.452771 ], "pop": 858, "state": "UT" }, { "_id": "84086", "city": "WOODRUFF", "loc": [ -111.186848, 41.488783 ], "pop": 359, "state": "UT" }, { "_id": "84087", "city": "WOODS CROSS", "loc": [ -111.902712, 40.887447 ], "pop": 8170, "state": "UT" }, { "_id": "84088", "city": "WEST JORDAN", "loc": [ -111.964385, 40.595913 ], "pop": 18592, "state": "UT" }, { "_id": "84092", "city": "ALTA", "loc": [ -111.82736, 40.560245 ], "pop": 25465, "state": "UT" }, { "_id": "84093", "city": "SANDY", "loc": [ -111.830989, 40.592651 ], "pop": 26702, "state": "UT" }, { "_id": "84094", "city": "SANDY", "loc": [ -111.861716, 40.568757 ], "pop": 26375, "state": "UT" }, { "_id": "84101", "city": "SALT LAKE CITY", "loc": [ -111.896657, 40.755851 ], "pop": 2449, "state": "UT" }, { "_id": "84102", "city": "SALT LAKE CITY", "loc": [ -111.862721, 40.760034 ], "pop": 15367, "state": "UT" }, { "_id": "84103", "city": "SALT LAKE CITY", "loc": [ -111.874891, 40.777584 ], "pop": 21427, "state": "UT" }, { "_id": "84104", "city": "SALT LAKE CITY", "loc": [ -111.925979, 40.74985 ], "pop": 16951, "state": "UT" }, { "_id": "84105", "city": "SALT LAKE CITY", "loc": [ -111.858087, 40.737236 ], "pop": 22228, "state": "UT" }, { "_id": "84106", "city": "SALT LAKE CITY", "loc": [ -111.854841, 40.705597 ], "pop": 30496, "state": "UT" }, { "_id": "84107", "city": "MURRAY", "loc": [ -111.878383, 40.659014 ], "pop": 28403, "state": "UT" }, { "_id": "84108", "city": "SALT LAKE CITY", "loc": [ -111.825822, 40.737136 ], "pop": 16873, "state": "UT" }, { "_id": "84109", "city": "SALT LAKE CITY", "loc": [ -111.814218, 40.704251 ], "pop": 24049, "state": "UT" }, { "_id": "84111", "city": "SALT LAKE CITY", "loc": [ -111.881, 40.754834 ], "pop": 8978, "state": "UT" }, { "_id": "84112", "city": "SALT LAKE CITY", "loc": [ -111.827827, 40.752372 ], "pop": 2555, "state": "UT" }, { "_id": "84113", "city": "SALT LAKE CITY", "loc": [ -111.841825, 40.763057 ], "pop": 1093, "state": "UT" }, { "_id": "84115", "city": "SOUTH SALT LAKE", "loc": [ -111.883828, 40.715797 ], "pop": 21776, "state": "UT" }, { "_id": "84116", "city": "SALT LAKE CITY", "loc": [ -111.929054, 40.785697 ], "pop": 23880, "state": "UT" }, { "_id": "84117", "city": "HOLLADAY", "loc": [ -111.832943, 40.666302 ], "pop": 23063, "state": "UT" }, { "_id": "84118", "city": "KEARNS", "loc": [ -111.98521, 40.652759 ], "pop": 55999, "state": "UT" }, { "_id": "84119", "city": "WEST VALLEY CITY", "loc": [ -111.952964, 40.690977 ], "pop": 38892, "state": "UT" }, { "_id": "84120", "city": "WEST VALLEY CITY", "loc": [ -112.009783, 40.68708 ], "pop": 52854, "state": "UT" }, { "_id": "84121", "city": "COTTONWOOD", "loc": [ -111.82468, 40.623247 ], "pop": 40235, "state": "UT" }, { "_id": "84123", "city": "MURRAY", "loc": [ -111.919483, 40.660479 ], "pop": 27766, "state": "UT" }, { "_id": "84124", "city": "HOLLADAY", "loc": [ -111.820833, 40.67966 ], "pop": 20402, "state": "UT" }, { "_id": "84302", "city": "BRIGHAM CITY", "loc": [ -112.015177, 41.507921 ], "pop": 17119, "state": "UT" }, { "_id": "84305", "city": "CLARKSTON", "loc": [ -112.04859, 41.91877 ], "pop": 665, "state": "UT" }, { "_id": "84306", "city": "COLLINSTON", "loc": [ -112.124219, 41.78777 ], "pop": 952, "state": "UT" }, { "_id": "84307", "city": "CORINNE", "loc": [ -112.151388, 41.544986 ], "pop": 1201, "state": "UT" }, { "_id": "84308", "city": "CORNISH", "loc": [ -111.954241, 41.970178 ], "pop": 250, "state": "UT" }, { "_id": "84309", "city": "DEWEYVILLE", "loc": [ -112.094717, 41.697226 ], "pop": 491, "state": "UT" }, { "_id": "84310", "city": "EDEN", "loc": [ -111.855765, 41.330279 ], "pop": 1707, "state": "UT" }, { "_id": "84311", "city": "FIELDING", "loc": [ -112.118978, 41.811817 ], "pop": 703, "state": "UT" }, { "_id": "84312", "city": "GARLAND", "loc": [ -112.151635, 41.741319 ], "pop": 2208, "state": "UT" }, { "_id": "84313", "city": "GROUSE CREEK", "loc": [ -113.854043, 41.629727 ], "pop": 124, "state": "UT" }, { "_id": "84314", "city": "HONEYVILLE", "loc": [ -112.097425, 41.623754 ], "pop": 2236, "state": "UT" }, { "_id": "84315", "city": "HOOPER", "loc": [ -112.090371, 41.18267 ], "pop": 10540, "state": "UT" }, { "_id": "84317", "city": "HUNTSVILLE", "loc": [ -111.761821, 41.272139 ], "pop": 2247, "state": "UT" }, { "_id": "84319", "city": "HYRUM", "loc": [ -111.849, 41.631096 ], "pop": 5352, "state": "UT" }, { "_id": "84320", "city": "LEWISTON", "loc": [ -111.876814, 41.970087 ], "pop": 1418, "state": "UT" }, { "_id": "84321", "city": "LOGAN", "loc": [ -111.822613, 41.747025 ], "pop": 40074, "state": "UT" }, { "_id": "84324", "city": "MANTUA", "loc": [ -111.941646, 41.497496 ], "pop": 715, "state": "UT" }, { "_id": "84325", "city": "MENDON", "loc": [ -111.981692, 41.709989 ], "pop": 1015, "state": "UT" }, { "_id": "84328", "city": "PARADISE", "loc": [ -111.829665, 41.560009 ], "pop": 916, "state": "UT" }, { "_id": "84329", "city": "PARK VALLEY", "loc": [ -113.34776, 41.855125 ], "pop": 281, "state": "UT" }, { "_id": "84332", "city": "PROVIDENCE", "loc": [ -111.824389, 41.69522 ], "pop": 7650, "state": "UT" }, { "_id": "84333", "city": "RICHMOND", "loc": [ -111.806922, 41.928223 ], "pop": 2556, "state": "UT" }, { "_id": "84335", "city": "SMITHFIELD", "loc": [ -111.852813, 41.840328 ], "pop": 7376, "state": "UT" }, { "_id": "84336", "city": "SNOWVILLE", "loc": [ -112.353391, 41.840321 ], "pop": 1982, "state": "UT" }, { "_id": "84337", "city": "TREMONTON", "loc": [ -112.181293, 41.701564 ], "pop": 6439, "state": "UT" }, { "_id": "84338", "city": "TRENTON", "loc": [ -111.934033, 41.910453 ], "pop": 450, "state": "UT" }, { "_id": "84339", "city": "WELLSVILLE", "loc": [ -111.931676, 41.634302 ], "pop": 2461, "state": "UT" }, { "_id": "84340", "city": "WILLARD", "loc": [ -112.031653, 41.398944 ], "pop": 2034, "state": "UT" }, { "_id": "84401", "city": "OGDEN", "loc": [ -111.962121, 41.22148 ], "pop": 21276, "state": "UT" }, { "_id": "84403", "city": "OGDEN", "loc": [ -111.948927, 41.189412 ], "pop": 28751, "state": "UT" }, { "_id": "84404", "city": "OGDEN", "loc": [ -111.983686, 41.262727 ], "pop": 35790, "state": "UT" }, { "_id": "84405", "city": "OGDEN", "loc": [ -111.980945, 41.173928 ], "pop": 18982, "state": "UT" }, { "_id": "84414", "city": "OGDEN", "loc": [ -111.968924, 41.311201 ], "pop": 16891, "state": "UT" }, { "_id": "84501", "city": "PRICE", "loc": [ -110.808117, 39.602013 ], "pop": 11741, "state": "UT" }, { "_id": "84510", "city": "ANETH", "loc": [ -109.298281, 37.214671 ], "pop": 3442, "state": "UT" }, { "_id": "84511", "city": "BLANDING", "loc": [ -109.486599, 37.586342 ], "pop": 4469, "state": "UT" }, { "_id": "84520", "city": "EAST CARBON", "loc": [ -110.411308, 39.546088 ], "pop": 1628, "state": "UT" }, { "_id": "84523", "city": "FERRON", "loc": [ -111.146698, 39.069196 ], "pop": 2349, "state": "UT" }, { "_id": "84525", "city": "GREEN RIVER", "loc": [ -110.159817, 39.000243 ], "pop": 919, "state": "UT" }, { "_id": "84526", "city": "HELPER", "loc": [ -110.856, 39.673684 ], "pop": 4005, "state": "UT" }, { "_id": "84528", "city": "HUNTINGTON", "loc": [ -110.974094, 39.29202 ], "pop": 7137, "state": "UT" }, { "_id": "84531", "city": "MEXICAN HAT", "loc": [ -109.991865, 37.118429 ], "pop": 647, "state": "UT" }, { "_id": "84532", "city": "MOAB", "loc": [ -109.527087, 38.567674 ], "pop": 6337, "state": "UT" }, { "_id": "84533", "city": "BULLFROG", "loc": [ -110.506917, 37.459898 ], "pop": 125, "state": "UT" }, { "_id": "84535", "city": "MONTICELLO", "loc": [ -109.315289, 37.921709 ], "pop": 2527, "state": "UT" }, { "_id": "84536", "city": "MONUMENT VALLEY", "loc": [ -110.427335, 37.061425 ], "pop": 1411, "state": "UT" }, { "_id": "84540", "city": "THOMPSON", "loc": [ -109.794482, 38.988065 ], "pop": 210, "state": "UT" }, { "_id": "84542", "city": "WELLINGTON", "loc": [ -110.736954, 39.537257 ], "pop": 2854, "state": "UT" }, { "_id": "84601", "city": "PROVO", "loc": [ -111.675504, 40.231949 ], "pop": 20121, "state": "UT" }, { "_id": "84604", "city": "PROVO", "loc": [ -111.654906, 40.260681 ], "pop": 43841, "state": "UT" }, { "_id": "84606", "city": "PROVO", "loc": [ -111.644724, 40.234675 ], "pop": 23536, "state": "UT" }, { "_id": "84621", "city": "AXTELL", "loc": [ -111.824303, 39.053248 ], "pop": 167, "state": "UT" }, { "_id": "84622", "city": "CENTERFIELD", "loc": [ -111.818516, 39.125083 ], "pop": 945, "state": "UT" }, { "_id": "84624", "city": "DELTA", "loc": [ -112.531892, 39.375534 ], "pop": 5673, "state": "UT" }, { "_id": "84627", "city": "EPHRAIM", "loc": [ -111.582301, 39.359983 ], "pop": 3492, "state": "UT" }, { "_id": "84628", "city": "EUREKA", "loc": [ -112.117448, 39.954094 ], "pop": 600, "state": "UT" }, { "_id": "84629", "city": "FAIRVIEW", "loc": [ -111.495287, 39.645318 ], "pop": 2089, "state": "UT" }, { "_id": "84630", "city": "FAYETTE", "loc": [ -111.849712, 39.231533 ], "pop": 207, "state": "UT" }, { "_id": "84631", "city": "FILLMORE", "loc": [ -112.331321, 38.980539 ], "pop": 3930, "state": "UT" }, { "_id": "84634", "city": "GUNNISON", "loc": [ -111.816701, 39.154464 ], "pop": 1330, "state": "UT" }, { "_id": "84635", "city": "HINCKLEY", "loc": [ -112.671577, 39.330842 ], "pop": 983, "state": "UT" }, { "_id": "84642", "city": "MANTI", "loc": [ -111.651372, 39.235389 ], "pop": 3088, "state": "UT" }, { "_id": "84645", "city": "MONA", "loc": [ -111.848001, 39.838165 ], "pop": 826, "state": "UT" }, { "_id": "84647", "city": "MOUNT PLEASANT", "loc": [ -111.503854, 39.523227 ], "pop": 4979, "state": "UT" }, { "_id": "84648", "city": "NEPHI", "loc": [ -111.8359, 39.692275 ], "pop": 4200, "state": "UT" }, { "_id": "84650", "city": "OASIS", "loc": [ -112.648079, 39.27067 ], "pop": 500, "state": "UT" }, { "_id": "84651", "city": "PAYSON", "loc": [ -111.732138, 40.044866 ], "pop": 13960, "state": "UT" }, { "_id": "84653", "city": "WOODLAND HILLS", "loc": [ -111.65906, 40.042702 ], "pop": 3766, "state": "UT" }, { "_id": "84654", "city": "SALINA", "loc": [ -111.881072, 38.956028 ], "pop": 3716, "state": "UT" }, { "_id": "84655", "city": "GENOLA", "loc": [ -111.793819, 39.980356 ], "pop": 3647, "state": "UT" }, { "_id": "84660", "city": "SPANISH FORK", "loc": [ -111.646246, 40.10991 ], "pop": 12851, "state": "UT" }, { "_id": "84663", "city": "SPRINGVILLE", "loc": [ -111.598664, 40.162528 ], "pop": 14403, "state": "UT" }, { "_id": "84664", "city": "MAPLETON", "loc": [ -111.580122, 40.133711 ], "pop": 3427, "state": "UT" }, { "_id": "84701", "city": "VENICE", "loc": [ -112.062253, 38.757075 ], "pop": 8412, "state": "UT" }, { "_id": "84710", "city": "ALTON", "loc": [ -112.548389, 37.469905 ], "pop": 159, "state": "UT" }, { "_id": "84712", "city": "ANTIMONY", "loc": [ -111.993029, 38.1015 ], "pop": 90, "state": "UT" }, { "_id": "84713", "city": "BEAVER", "loc": [ -112.629916, 38.28071 ], "pop": 2560, "state": "UT" }, { "_id": "84714", "city": "BERYL", "loc": [ -113.619586, 37.96005 ], "pop": 12, "state": "UT" }, { "_id": "84716", "city": "BOULDER", "loc": [ -111.426646, 37.916606 ], "pop": 131, "state": "UT" }, { "_id": "84717", "city": "BRYCE CANYON", "loc": [ -112.074311, 37.608427 ], "pop": 958, "state": "UT" }, { "_id": "84719", "city": "BRIAN HEAD", "loc": [ -112.843698, 37.698465 ], "pop": 111, "state": "UT" }, { "_id": "84720", "city": "PINTURA", "loc": [ -113.074513, 37.689544 ], "pop": 17392, "state": "UT" }, { "_id": "84722", "city": "CENTRAL", "loc": [ -113.717199, 37.567734 ], "pop": 1127, "state": "UT" }, { "_id": "84726", "city": "ESCALANTE", "loc": [ -111.603695, 37.769839 ], "pop": 955, "state": "UT" }, { "_id": "84728", "city": "GARRISON", "loc": [ -113.894858, 39.074382 ], "pop": 247, "state": "UT" }, { "_id": "84729", "city": "GLENDALE", "loc": [ -112.603491, 37.321897 ], "pop": 287, "state": "UT" }, { "_id": "84731", "city": "GREENVILLE", "loc": [ -112.708404, 38.263582 ], "pop": 116, "state": "UT" }, { "_id": "84734", "city": "HANKSVILLE", "loc": [ -110.813744, 38.252051 ], "pop": 373, "state": "UT" }, { "_id": "84737", "city": "HURRICANE", "loc": [ -113.224706, 37.169098 ], "pop": 9174, "state": "UT" }, { "_id": "84739", "city": "JOSEPH", "loc": [ -112.225119, 38.622092 ], "pop": 289, "state": "UT" }, { "_id": "84741", "city": "BIG WATER", "loc": [ -112.345374, 37.072085 ], "pop": 4174, "state": "UT" }, { "_id": "84743", "city": "KINGSTON", "loc": [ -112.204864, 38.215772 ], "pop": 825, "state": "UT" }, { "_id": "84747", "city": "FREMONT", "loc": [ -111.629233, 38.417266 ], "pop": 987, "state": "UT" }, { "_id": "84750", "city": "MARYSVALE", "loc": [ -112.251848, 38.444924 ], "pop": 452, "state": "UT" }, { "_id": "84751", "city": "MILFORD", "loc": [ -112.993377, 38.331071 ], "pop": 2089, "state": "UT" }, { "_id": "84753", "city": "MODENA", "loc": [ -113.919282, 37.799452 ], "pop": 9, "state": "UT" }, { "_id": "84754", "city": "AUSTIN", "loc": [ -112.132434, 38.645305 ], "pop": 2995, "state": "UT" }, { "_id": "84755", "city": "MOUNT CARMEL", "loc": [ -112.670034, 37.237821 ], "pop": 43, "state": "UT" }, { "_id": "84756", "city": "NEWCASTLE", "loc": [ -113.661479, 37.736049 ], "pop": 758, "state": "UT" }, { "_id": "84758", "city": "ORDERVILLE", "loc": [ -112.642045, 37.274419 ], "pop": 506, "state": "UT" }, { "_id": "84759", "city": "PANGUITCH", "loc": [ -112.436886, 37.80777 ], "pop": 1797, "state": "UT" }, { "_id": "84760", "city": "PARAGONAH", "loc": [ -112.773972, 37.89172 ], "pop": 334, "state": "UT" }, { "_id": "84761", "city": "PAROWAN", "loc": [ -112.832251, 37.844861 ], "pop": 1988, "state": "UT" }, { "_id": "84766", "city": "SEVIER", "loc": [ -112.392126, 38.590709 ], "pop": 19, "state": "UT" }, { "_id": "84770", "city": "ST GEORGE", "loc": [ -113.595261, 37.106651 ], "pop": 33146, "state": "UT" }, { "_id": "84772", "city": "SUMMIT", "loc": [ -112.913407, 37.803397 ], "pop": 185, "state": "UT" }, { "_id": "84773", "city": "TEASDALE", "loc": [ -111.43346, 38.285334 ], "pop": 430, "state": "UT" }, { "_id": "84775", "city": "TORREY", "loc": [ -111.547439, 38.334993 ], "pop": 436, "state": "UT" }, { "_id": "84780", "city": "WASHINGTON", "loc": [ -113.505043, 37.136379 ], "pop": 4134, "state": "UT" }, { "_id": "84781", "city": "PINE VALLEY", "loc": [ -113.517708, 37.389772 ], "pop": 31, "state": "UT" }, { "_id": "84782", "city": "VEYO", "loc": [ -113.666758, 37.35896 ], "pop": 449, "state": "UT" }, { "_id": "84783", "city": "DAMMERON VALLEY", "loc": [ -113.658553, 37.284899 ], "pop": 499, "state": "UT" }, { "_id": "85003", "city": "PHOENIX", "loc": [ -112.077428, 33.451095 ], "pop": 10633, "state": "AZ" }, { "_id": "85004", "city": "PHOENIX", "loc": [ -112.068584, 33.455708 ], "pop": 4491, "state": "AZ" }, { "_id": "85006", "city": "PHOENIX", "loc": [ -112.047357, 33.465016 ], "pop": 26747, "state": "AZ" }, { "_id": "85007", "city": "PHOENIX", "loc": [ -112.089326, 33.452298 ], "pop": 13650, "state": "AZ" }, { "_id": "85008", "city": "PHOENIX", "loc": [ -111.998381, 33.466457 ], "pop": 41733, "state": "AZ" }, { "_id": "85009", "city": "PHOENIX", "loc": [ -112.128368, 33.456373 ], "pop": 41512, "state": "AZ" }, { "_id": "85012", "city": "PHOENIX", "loc": [ -112.067816, 33.509744 ], "pop": 6141, "state": "AZ" }, { "_id": "85013", "city": "PHOENIX", "loc": [ -112.082657, 33.508493 ], "pop": 18467, "state": "AZ" }, { "_id": "85014", "city": "PHOENIX", "loc": [ -112.05557, 33.510263 ], "pop": 22646, "state": "AZ" }, { "_id": "85015", "city": "PHOENIX", "loc": [ -112.101064, 33.508164 ], "pop": 32497, "state": "AZ" }, { "_id": "85016", "city": "PHOENIX", "loc": [ -112.030496, 33.502117 ], "pop": 29527, "state": "AZ" }, { "_id": "85017", "city": "PHOENIX", "loc": [ -112.121232, 33.515263 ], "pop": 27741, "state": "AZ" }, { "_id": "85018", "city": "PHOENIX", "loc": [ -111.988259, 33.495796 ], "pop": 32926, "state": "AZ" }, { "_id": "85019", "city": "PHOENIX", "loc": [ -112.141681, 33.512284 ], "pop": 21879, "state": "AZ" }, { "_id": "85020", "city": "PHOENIX", "loc": [ -112.055888, 33.562281 ], "pop": 29043, "state": "AZ" }, { "_id": "85021", "city": "PHOENIX", "loc": [ -112.092686, 33.559965 ], "pop": 31201, "state": "AZ" }, { "_id": "85022", "city": "PHOENIX", "loc": [ -112.052008, 33.631513 ], "pop": 33573, "state": "AZ" }, { "_id": "85023", "city": "PHOENIX", "loc": [ -112.111838, 33.632383 ], "pop": 54668, "state": "AZ" }, { "_id": "85024", "city": "PHOENIX", "loc": [ -112.036956, 33.661664 ], "pop": 14090, "state": "AZ" }, { "_id": "85027", "city": "NEW RIVER STAGE", "loc": [ -112.102723, 33.667157 ], "pop": 24843, "state": "AZ" }, { "_id": "85028", "city": "PHOENIX", "loc": [ -112.008724, 33.585115 ], "pop": 22662, "state": "AZ" }, { "_id": "85029", "city": "PHOENIX", "loc": [ -112.119913, 33.596133 ], "pop": 40764, "state": "AZ" }, { "_id": "85031", "city": "PHOENIX", "loc": [ -112.16963, 33.493909 ], "pop": 21088, "state": "AZ" }, { "_id": "85032", "city": "PHOENIX", "loc": [ -112.004369, 33.623807 ], "pop": 53113, "state": "AZ" }, { "_id": "85033", "city": "PHOENIX", "loc": [ -112.213185, 33.494426 ], "pop": 41367, "state": "AZ" }, { "_id": "85034", "city": "PHOENIX", "loc": [ -112.042135, 33.441251 ], "pop": 9824, "state": "AZ" }, { "_id": "85035", "city": "PHOENIX", "loc": [ -112.183177, 33.472353 ], "pop": 35384, "state": "AZ" }, { "_id": "85037", "city": "PHOENIX", "loc": [ -112.246763, 33.491278 ], "pop": 13924, "state": "AZ" }, { "_id": "85039", "city": "PHOENIX", "loc": [ -112.288573, 33.495362 ], "pop": 7914, "state": "AZ" }, { "_id": "85040", "city": "PHOENIX", "loc": [ -112.03126, 33.390475 ], "pop": 47527, "state": "AZ" }, { "_id": "85041", "city": "PHOENIX", "loc": [ -112.095437, 33.388882 ], "pop": 29343, "state": "AZ" }, { "_id": "85043", "city": "PHOENIX", "loc": [ -112.197245, 33.449056 ], "pop": 7054, "state": "AZ" }, { "_id": "85044", "city": "PHOENIX", "loc": [ -111.9943, 33.329124 ], "pop": 32053, "state": "AZ" }, { "_id": "85051", "city": "PHOENIX", "loc": [ -112.133168, 33.559113 ], "pop": 35671, "state": "AZ" }, { "_id": "85201", "city": "MESA", "loc": [ -111.846931, 33.43174 ], "pop": 40017, "state": "AZ" }, { "_id": "85202", "city": "MESA", "loc": [ -111.872429, 33.385095 ], "pop": 40729, "state": "AZ" }, { "_id": "85203", "city": "MESA", "loc": [ -111.805697, 33.436952 ], "pop": 32853, "state": "AZ" }, { "_id": "85204", "city": "MESA", "loc": [ -111.789554, 33.399168 ], "pop": 55180, "state": "AZ" }, { "_id": "85205", "city": "MESA", "loc": [ -111.712939, 33.43685 ], "pop": 35676, "state": "AZ" }, { "_id": "85206", "city": "MESA", "loc": [ -111.724223, 33.402603 ], "pop": 21274, "state": "AZ" }, { "_id": "85207", "city": "MESA", "loc": [ -111.64256, 33.432073 ], "pop": 12547, "state": "AZ" }, { "_id": "85208", "city": "MESA", "loc": [ -111.651297, 33.398416 ], "pop": 22113, "state": "AZ" }, { "_id": "85210", "city": "MESA", "loc": [ -111.842757, 33.38867 ], "pop": 32467, "state": "AZ" }, { "_id": "85213", "city": "MESA", "loc": [ -111.773114, 33.436688 ], "pop": 23500, "state": "AZ" }, { "_id": "85219", "city": "GOLD CANYON", "loc": [ -111.51331, 33.360787 ], "pop": 14112, "state": "AZ" }, { "_id": "85220", "city": "APACHE JUNCTION", "loc": [ -111.571818, 33.415211 ], "pop": 19342, "state": "AZ" }, { "_id": "85222", "city": "ELEVEN MILE CORN", "loc": [ -111.756093, 32.892667 ], "pop": 26134, "state": "AZ" }, { "_id": "85224", "city": "CHANDLER", "loc": [ -111.863156, 33.330091 ], "pop": 54023, "state": "AZ" }, { "_id": "85225", "city": "CHANDLER", "loc": [ -111.823881, 33.310505 ], "pop": 15678, "state": "AZ" }, { "_id": "85226", "city": "CHANDLER", "loc": [ -111.919827, 33.30917 ], "pop": 17639, "state": "AZ" }, { "_id": "85228", "city": "COOLIDGE", "loc": [ -111.534378, 32.957399 ], "pop": 10698, "state": "AZ" }, { "_id": "85231", "city": "ELOY", "loc": [ -111.583275, 32.750929 ], "pop": 10670, "state": "AZ" }, { "_id": "85232", "city": "FLORENCE", "loc": [ -111.361234, 32.996881 ], "pop": 9888, "state": "AZ" }, { "_id": "85234", "city": "GILBERT", "loc": [ -111.780876, 33.352746 ], "pop": 32606, "state": "AZ" }, { "_id": "85236", "city": "HIGLEY", "loc": [ -111.696926, 33.302382 ], "pop": 3583, "state": "AZ" }, { "_id": "85237", "city": "KEARNY", "loc": [ -110.91227, 33.059443 ], "pop": 2736, "state": "AZ" }, { "_id": "85239", "city": "MOBILE", "loc": [ -112.075228, 32.987379 ], "pop": 5026, "state": "AZ" }, { "_id": "85240", "city": "WILLIAMS AFB", "loc": [ -111.668801, 33.310289 ], "pop": 2574, "state": "AZ" }, { "_id": "85242", "city": "ARIZONA BOYS RAN", "loc": [ -111.643596, 33.238577 ], "pop": 2569, "state": "AZ" }, { "_id": "85247", "city": "SACATON", "loc": [ -111.775162, 33.097699 ], "pop": 6792, "state": "AZ" }, { "_id": "85248", "city": "SUN LAKES", "loc": [ -111.866899, 33.223056 ], "pop": 9399, "state": "AZ" }, { "_id": "85249", "city": "CHANDLER", "loc": [ -111.774486, 33.241384 ], "pop": 3871, "state": "AZ" }, { "_id": "85250", "city": "SCOTTSDALE", "loc": [ -111.904926, 33.521767 ], "pop": 16133, "state": "AZ" }, { "_id": "85251", "city": "SCOTTSDALE", "loc": [ -111.916697, 33.493559 ], "pop": 30869, "state": "AZ" }, { "_id": "85253", "city": "PARADISE VALLEY", "loc": [ -111.956546, 33.549439 ], "pop": 15289, "state": "AZ" }, { "_id": "85254", "city": "SCOTTSDALE", "loc": [ -111.955422, 33.616476 ], "pop": 37414, "state": "AZ" }, { "_id": "85255", "city": "SCOTTSDALE", "loc": [ -111.889213, 33.696801 ], "pop": 2927, "state": "AZ" }, { "_id": "85256", "city": "SCOTTSDALE", "loc": [ -111.85333, 33.485793 ], "pop": 3367, "state": "AZ" }, { "_id": "85257", "city": "SCOTTSDALE", "loc": [ -111.915129, 33.46693 ], "pop": 30182, "state": "AZ" }, { "_id": "85258", "city": "SCOTTSDALE", "loc": [ -111.893067, 33.564747 ], "pop": 20867, "state": "AZ" }, { "_id": "85259", "city": "SCOTTSDALE", "loc": [ -111.840438, 33.587943 ], "pop": 7802, "state": "AZ" }, { "_id": "85260", "city": "SCOTTSDALE", "loc": [ -111.88671, 33.601323 ], "pop": 17908, "state": "AZ" }, { "_id": "85262", "city": "SCOTTSDALE", "loc": [ -111.779135, 33.77524 ], "pop": 1614, "state": "AZ" }, { "_id": "85264", "city": "FORT MCDOWELL", "loc": [ -111.68062, 33.611807 ], "pop": 619, "state": "AZ" }, { "_id": "85268", "city": "FOUNTAIN HILLS", "loc": [ -111.723685, 33.608489 ], "pop": 10030, "state": "AZ" }, { "_id": "85272", "city": "STANFIELD", "loc": [ -111.965987, 32.882321 ], "pop": 644, "state": "AZ" }, { "_id": "85273", "city": "SUPERIOR", "loc": [ -111.09846, 33.288716 ], "pop": 3901, "state": "AZ" }, { "_id": "85281", "city": "TEMPE", "loc": [ -111.926144, 33.422675 ], "pop": 49218, "state": "AZ" }, { "_id": "85282", "city": "TEMPE", "loc": [ -111.924896, 33.391669 ], "pop": 47890, "state": "AZ" }, { "_id": "85283", "city": "TEMPE", "loc": [ -111.93122, 33.366524 ], "pop": 38332, "state": "AZ" }, { "_id": "85284", "city": "TEMPE", "loc": [ -111.919696, 33.336302 ], "pop": 12320, "state": "AZ" }, { "_id": "85292", "city": "WINKELMAN", "loc": [ -110.772682, 33.00572 ], "pop": 1977, "state": "AZ" }, { "_id": "85301", "city": "GLENDALE", "loc": [ -112.176703, 33.531122 ], "pop": 46331, "state": "AZ" }, { "_id": "85302", "city": "GLENDALE", "loc": [ -112.175289, 33.567487 ], "pop": 32094, "state": "AZ" }, { "_id": "85303", "city": "GLENDALE", "loc": [ -112.214937, 33.526215 ], "pop": 16045, "state": "AZ" }, { "_id": "85304", "city": "GLENDALE", "loc": [ -112.174575, 33.594289 ], "pop": 26463, "state": "AZ" }, { "_id": "85305", "city": "GLENDALE", "loc": [ -112.248232, 33.529103 ], "pop": 1424, "state": "AZ" }, { "_id": "85306", "city": "GLENDALE", "loc": [ -112.177563, 33.623882 ], "pop": 23493, "state": "AZ" }, { "_id": "85307", "city": "LUKE AFB", "loc": [ -112.326735, 33.534879 ], "pop": 4120, "state": "AZ" }, { "_id": "85308", "city": "GLENDALE", "loc": [ -112.169391, 33.653924 ], "pop": 31532, "state": "AZ" }, { "_id": "85309", "city": "LUKE AFB", "loc": [ -112.356186, 33.539993 ], "pop": 3601, "state": "AZ" }, { "_id": "85310", "city": "GLENDALE", "loc": [ -112.164131, 33.704726 ], "pop": 5369, "state": "AZ" }, { "_id": "85321", "city": "WHY", "loc": [ -112.858681, 32.373485 ], "pop": 3288, "state": "AZ" }, { "_id": "85322", "city": "ARLINGTON", "loc": [ -112.789058, 33.313317 ], "pop": 329, "state": "AZ" }, { "_id": "85323", "city": "AVONDALE", "loc": [ -112.343754, 33.432114 ], "pop": 12321, "state": "AZ" }, { "_id": "85324", "city": "ROCK SPRINGS", "loc": [ -112.130956, 34.073197 ], "pop": 1819, "state": "AZ" }, { "_id": "85326", "city": "BUCKEYE", "loc": [ -112.607728, 33.38896 ], "pop": 13086, "state": "AZ" }, { "_id": "85328", "city": "CIBOLA", "loc": [ -114.512204, 33.614886 ], "pop": 1285, "state": "AZ" }, { "_id": "85331", "city": "CAVE CREEK", "loc": [ -112.015106, 33.821896 ], "pop": 13654, "state": "AZ" }, { "_id": "85332", "city": "CONGRESS", "loc": [ -112.76801, 34.176425 ], "pop": 2314, "state": "AZ" }, { "_id": "85333", "city": "DATELAND", "loc": [ -113.463126, 32.867886 ], "pop": 659, "state": "AZ" }, { "_id": "85335", "city": "EL MIRAGE", "loc": [ -112.324147, 33.608153 ], "pop": 5234, "state": "AZ" }, { "_id": "85337", "city": "GILA BEND", "loc": [ -112.746832, 32.93059 ], "pop": 2898, "state": "AZ" }, { "_id": "85338", "city": "GOODYEAR", "loc": [ -112.383385, 33.436809 ], "pop": 5819, "state": "AZ" }, { "_id": "85339", "city": "LAVEEN", "loc": [ -112.171618, 33.343572 ], "pop": 6187, "state": "AZ" }, { "_id": "85340", "city": "LITCHFIELD PARK", "loc": [ -112.380497, 33.494127 ], "pop": 6349, "state": "AZ" }, { "_id": "85342", "city": "MORRISTOWN", "loc": [ -112.548331, 33.772993 ], "pop": 2878, "state": "AZ" }, { "_id": "85343", "city": "PALO VERDE", "loc": [ -112.646662, 33.34848 ], "pop": 669, "state": "AZ" }, { "_id": "85344", "city": "EMPIRE LANDING", "loc": [ -114.266342, 34.0254 ], "pop": 11143, "state": "AZ" }, { "_id": "85345", "city": "PEORIA", "loc": [ -112.234424, 33.576135 ], "pop": 37607, "state": "AZ" }, { "_id": "85347", "city": "ROLL", "loc": [ -113.564287, 32.936635 ], "pop": 959, "state": "AZ" }, { "_id": "85348", "city": "SALOME", "loc": [ -113.571459, 33.748141 ], "pop": 1279, "state": "AZ" }, { "_id": "85350", "city": "SOMERTON", "loc": [ -114.7127, 32.563398 ], "pop": 15339, "state": "AZ" }, { "_id": "85351", "city": "SUN CITY", "loc": [ -112.279701, 33.606104 ], "pop": 31102, "state": "AZ" }, { "_id": "85353", "city": "TOLLESON", "loc": [ -112.277444, 33.434686 ], "pop": 9485, "state": "AZ" }, { "_id": "85354", "city": "TONOPAH", "loc": [ -112.952785, 33.422797 ], "pop": 95, "state": "AZ" }, { "_id": "85355", "city": "WADDELL", "loc": [ -112.43869, 33.567285 ], "pop": 2125, "state": "AZ" }, { "_id": "85356", "city": "WELLTON", "loc": [ -114.176616, 32.749251 ], "pop": 4778, "state": "AZ" }, { "_id": "85361", "city": "WITTMANN", "loc": [ -112.446578, 33.726425 ], "pop": 789, "state": "AZ" }, { "_id": "85362", "city": "YARNELL", "loc": [ -112.62166, 34.414076 ], "pop": 455, "state": "AZ" }, { "_id": "85363", "city": "YOUNGTOWN", "loc": [ -112.301305, 33.590751 ], "pop": 2351, "state": "AZ" }, { "_id": "85364", "city": "YUMA", "loc": [ -114.642362, 32.701507 ], "pop": 57131, "state": "AZ" }, { "_id": "85365", "city": "YUMA PROVING GRO", "loc": [ -114.548633, 32.671352 ], "pop": 28179, "state": "AZ" }, { "_id": "85373", "city": "SUN CITY", "loc": [ -112.321397, 33.658756 ], "pop": 25878, "state": "AZ" }, { "_id": "85374", "city": "SURPRISE", "loc": [ -112.33143, 33.630028 ], "pop": 5042, "state": "AZ" }, { "_id": "85375", "city": "SUN CITY WEST", "loc": [ -112.255434, 33.662576 ], "pop": 5702, "state": "AZ" }, { "_id": "85381", "city": "PEORIA", "loc": [ -112.223723, 33.604761 ], "pop": 9624, "state": "AZ" }, { "_id": "85382", "city": "PEORIA", "loc": [ -112.207177, 33.63083 ], "pop": 1738, "state": "AZ" }, { "_id": "85390", "city": "WICKENBURG", "loc": [ -112.738973, 33.911282 ], "pop": 7994, "state": "AZ" }, { "_id": "85501", "city": "GLOBE", "loc": [ -110.789247, 33.402426 ], "pop": 13240, "state": "AZ" }, { "_id": "85530", "city": "BYLAS", "loc": [ -110.11702, 33.126549 ], "pop": 1371, "state": "AZ" }, { "_id": "85533", "city": "CLIFTON", "loc": [ -109.246199, 33.132343 ], "pop": 376, "state": "AZ" }, { "_id": "85534", "city": "FRANKLIN", "loc": [ -109.129575, 32.793976 ], "pop": 2395, "state": "AZ" }, { "_id": "85535", "city": "EDEN", "loc": [ -109.953682, 33.028629 ], "pop": 55, "state": "AZ" }, { "_id": "85539", "city": "MIAMI", "loc": [ -110.881182, 33.431928 ], "pop": 4866, "state": "AZ" }, { "_id": "85540", "city": "MORENCI", "loc": [ -109.311517, 33.043593 ], "pop": 5223, "state": "AZ" }, { "_id": "85541", "city": "PAYSON", "loc": [ -111.287774, 34.219779 ], "pop": 13456, "state": "AZ" }, { "_id": "85542", "city": "PERIDOT", "loc": [ -110.37252, 33.478874 ], "pop": 4878, "state": "AZ" }, { "_id": "85543", "city": "PIMA", "loc": [ -109.856009, 32.909661 ], "pop": 2881, "state": "AZ" }, { "_id": "85544", "city": "STRAWBERRY", "loc": [ -111.473483, 34.390915 ], "pop": 1903, "state": "AZ" }, { "_id": "85545", "city": "ROOSEVELT", "loc": [ -110.974884, 33.635753 ], "pop": 65, "state": "AZ" }, { "_id": "85546", "city": "SAFFORD", "loc": [ -109.626641, 32.829491 ], "pop": 2676, "state": "AZ" }, { "_id": "85550", "city": "SAN CARLOS", "loc": [ -110.395323, 33.310643 ], "pop": 2307, "state": "AZ" }, { "_id": "85552", "city": "THATCHER", "loc": [ -109.730245, 32.819902 ], "pop": 15375, "state": "AZ" }, { "_id": "85602", "city": "BENSON", "loc": [ -110.294113, 31.98826 ], "pop": 6141, "state": "AZ" }, { "_id": "85603", "city": "BISBEE", "loc": [ -109.911736, 31.408557 ], "pop": 8471, "state": "AZ" }, { "_id": "85606", "city": "COCHISE", "loc": [ -109.92393, 32.097891 ], "pop": 290, "state": "AZ" }, { "_id": "85607", "city": "DOUGLAS", "loc": [ -109.544698, 31.35111 ], "pop": 17350, "state": "AZ" }, { "_id": "85610", "city": "ELFRIDA", "loc": [ -109.619277, 31.713891 ], "pop": 1655, "state": "AZ" }, { "_id": "85611", "city": "ELGIN", "loc": [ -110.611403, 31.66002 ], "pop": 638, "state": "AZ" }, { "_id": "85613", "city": "FORT HUACHUCA", "loc": [ -110.344131, 31.558735 ], "pop": 8710, "state": "AZ" }, { "_id": "85614", "city": "GREEN VALLEY", "loc": [ -111.000253, 31.854271 ], "pop": 15530, "state": "AZ" }, { "_id": "85615", "city": "HEREFORD", "loc": [ -110.204728, 31.403545 ], "pop": 1762, "state": "AZ" }, { "_id": "85616", "city": "HUACHUCA CITY", "loc": [ -110.333414, 31.663896 ], "pop": 3639, "state": "AZ" }, { "_id": "85617", "city": "MC NEAL", "loc": [ -109.630971, 31.502969 ], "pop": 3135, "state": "AZ" }, { "_id": "85618", "city": "MAMMOTH", "loc": [ -110.643961, 32.723875 ], "pop": 1876, "state": "AZ" }, { "_id": "85621", "city": "NOGALES", "loc": [ -110.943508, 31.376969 ], "pop": 25506, "state": "AZ" }, { "_id": "85623", "city": "ORACLE", "loc": [ -110.796126, 32.600506 ], "pop": 3833, "state": "AZ" }, { "_id": "85624", "city": "PATAGONIA", "loc": [ -110.696774, 31.535317 ], "pop": 1430, "state": "AZ" }, { "_id": "85625", "city": "PEARCE", "loc": [ -109.795032, 31.966608 ], "pop": 2421, "state": "AZ" }, { "_id": "85629", "city": "SAHUARITA", "loc": [ -111.000154, 31.945169 ], "pop": 2973, "state": "AZ" }, { "_id": "85630", "city": "SAINT DAVID", "loc": [ -110.215377, 31.897251 ], "pop": 1928, "state": "AZ" }, { "_id": "85631", "city": "SAN MANUEL", "loc": [ -110.656788, 32.695831 ], "pop": 6253, "state": "AZ" }, { "_id": "85632", "city": "PORTAL", "loc": [ -109.367152, 32.208167 ], "pop": 1485, "state": "AZ" }, { "_id": "85634", "city": "PISINEMO", "loc": [ -111.922207, 32.031572 ], "pop": 9003, "state": "AZ" }, { "_id": "85635", "city": "SIERRA VISTA", "loc": [ -110.266565, 31.536467 ], "pop": 33700, "state": "AZ" }, { "_id": "85637", "city": "SONOITA", "loc": [ -110.724418, 31.866154 ], "pop": 1399, "state": "AZ" }, { "_id": "85638", "city": "TOMBSTONE", "loc": [ -110.058449, 31.721598 ], "pop": 1556, "state": "AZ" }, { "_id": "85640", "city": "AMADO", "loc": [ -111.039693, 31.594194 ], "pop": 813, "state": "AZ" }, { "_id": "85641", "city": "VAIL", "loc": [ -110.88375, 32.035926 ], "pop": 2843, "state": "AZ" }, { "_id": "85643", "city": "WILLCOX", "loc": [ -109.863111, 32.372977 ], "pop": 7297, "state": "AZ" }, { "_id": "85645", "city": "AMADO", "loc": [ -111.072233, 31.643759 ], "pop": 1157, "state": "AZ" }, { "_id": "85653", "city": "MARANA", "loc": [ -111.273621, 32.404749 ], "pop": 7562, "state": "AZ" }, { "_id": "85701", "city": "TUCSON", "loc": [ -110.969445, 32.213873 ], "pop": 5191, "state": "AZ" }, { "_id": "85704", "city": "CASAS ADOBES", "loc": [ -110.984593, 32.329175 ], "pop": 24039, "state": "AZ" }, { "_id": "85705", "city": "TUCSON", "loc": [ -110.984536, 32.269088 ], "pop": 52751, "state": "AZ" }, { "_id": "85706", "city": "TUCSON", "loc": [ -110.945127, 32.139172 ], "pop": 52458, "state": "AZ" }, { "_id": "85708", "city": "TUCSON", "loc": [ -110.869283, 32.179989 ], "pop": 6191, "state": "AZ" }, { "_id": "85710", "city": "TUCSON", "loc": [ -110.824046, 32.213813 ], "pop": 52679, "state": "AZ" }, { "_id": "85711", "city": "TUCSON", "loc": [ -110.882892, 32.212729 ], "pop": 40024, "state": "AZ" }, { "_id": "85712", "city": "TUCSON", "loc": [ -110.886919, 32.250043 ], "pop": 28813, "state": "AZ" }, { "_id": "85713", "city": "TUCSON", "loc": [ -110.973896, 32.194065 ], "pop": 40625, "state": "AZ" }, { "_id": "85714", "city": "TUCSON", "loc": [ -110.971891, 32.170657 ], "pop": 16488, "state": "AZ" }, { "_id": "85715", "city": "TUCSON", "loc": [ -110.834837, 32.269213 ], "pop": 33197, "state": "AZ" }, { "_id": "85716", "city": "TUCSON", "loc": [ -110.922176, 32.246815 ], "pop": 32258, "state": "AZ" }, { "_id": "85718", "city": "TUCSON", "loc": [ -110.917882, 32.311154 ], "pop": 22441, "state": "AZ" }, { "_id": "85719", "city": "TUCSON", "loc": [ -110.949142, 32.247426 ], "pop": 39019, "state": "AZ" }, { "_id": "85730", "city": "TUCSON", "loc": [ -110.81904, 32.180951 ], "pop": 33251, "state": "AZ" }, { "_id": "85735", "city": "TUCSON", "loc": [ -111.260758, 32.057796 ], "pop": 2987, "state": "AZ" }, { "_id": "85736", "city": "TUCSON", "loc": [ -111.317842, 31.667909 ], "pop": 1130, "state": "AZ" }, { "_id": "85737", "city": "ORO VALLEY", "loc": [ -110.954463, 32.431679 ], "pop": 14077, "state": "AZ" }, { "_id": "85741", "city": "TUCSON", "loc": [ -111.041873, 32.347215 ], "pop": 36400, "state": "AZ" }, { "_id": "85743", "city": "TUCSON", "loc": [ -111.177071, 32.33655 ], "pop": 4507, "state": "AZ" }, { "_id": "85745", "city": "TUCSON", "loc": [ -111.017907, 32.243359 ], "pop": 25143, "state": "AZ" }, { "_id": "85746", "city": "TUCSON", "loc": [ -111.050569, 32.142244 ], "pop": 34683, "state": "AZ" }, { "_id": "85747", "city": "TUCSON", "loc": [ -110.667337, 32.071142 ], "pop": 2286, "state": "AZ" }, { "_id": "85748", "city": "TUCSON", "loc": [ -110.775765, 32.214981 ], "pop": 9675, "state": "AZ" }, { "_id": "85749", "city": "TUCSON", "loc": [ -110.765829, 32.273285 ], "pop": 14254, "state": "AZ" }, { "_id": "85901", "city": "SHOW LOW", "loc": [ -110.054633, 34.060117 ], "pop": 16493, "state": "AZ" }, { "_id": "85920", "city": "ALPINE", "loc": [ -109.12829, 33.827878 ], "pop": 243, "state": "AZ" }, { "_id": "85922", "city": "BLUE", "loc": [ -109.06849, 33.651245 ], "pop": 14, "state": "AZ" }, { "_id": "85924", "city": "CONCHO", "loc": [ -109.674096, 34.445787 ], "pop": 949, "state": "AZ" }, { "_id": "85925", "city": "EAGAR", "loc": [ -109.246933, 33.954571 ], "pop": 482, "state": "AZ" }, { "_id": "85928", "city": "HEBER", "loc": [ -110.568647, 34.4163 ], "pop": 1856, "state": "AZ" }, { "_id": "85929", "city": "LAKESIDE", "loc": [ -109.986878, 34.166224 ], "pop": 5350, "state": "AZ" }, { "_id": "85935", "city": "PINETOP", "loc": [ -109.919668, 34.117459 ], "pop": 1938, "state": "AZ" }, { "_id": "85936", "city": "SAINT JOHNS", "loc": [ -109.379617, 34.501008 ], "pop": 3844, "state": "AZ" }, { "_id": "85937", "city": "SNOWFLAKE", "loc": [ -110.080742, 34.495859 ], "pop": 6678, "state": "AZ" }, { "_id": "85938", "city": "SPRINGERVILLE", "loc": [ -109.304066, 34.119333 ], "pop": 6560, "state": "AZ" }, { "_id": "86001", "city": "FLAGSTAFF", "loc": [ -111.661979, 35.185911 ], "pop": 30174, "state": "AZ" }, { "_id": "86004", "city": "FLAGSTAFF", "loc": [ -111.574109, 35.225736 ], "pop": 26878, "state": "AZ" }, { "_id": "86021", "city": "COLORADO CITY", "loc": [ -112.952427, 36.976266 ], "pop": 3065, "state": "AZ" }, { "_id": "86022", "city": "FREDONIA", "loc": [ -112.497864, 36.904397 ], "pop": 1393, "state": "AZ" }, { "_id": "86025", "city": "HOLBROOK", "loc": [ -110.143412, 34.908451 ], "pop": 5567, "state": "AZ" }, { "_id": "86030", "city": "HOTEVILLA", "loc": [ -110.566107, 36.211141 ], "pop": 271, "state": "AZ" }, { "_id": "86033", "city": "KAYENTA", "loc": [ -110.265229, 36.688327 ], "pop": 7549, "state": "AZ" }, { "_id": "86034", "city": "KEAMS CANYON", "loc": [ -110.284461, 35.808206 ], "pop": 3240, "state": "AZ" }, { "_id": "86035", "city": "LEUPP", "loc": [ -110.992651, 35.336528 ], "pop": 2396, "state": "AZ" }, { "_id": "86036", "city": "MARBLE CANYON", "loc": [ -111.558166, 36.956943 ], "pop": 564, "state": "AZ" }, { "_id": "86038", "city": "MORMON LAKE", "loc": [ -111.454914, 34.916896 ], "pop": 55, "state": "AZ" }, { "_id": "86039", "city": "KYKOTSMOVI VILLA", "loc": [ -110.368805, 35.579084 ], "pop": 167, "state": "AZ" }, { "_id": "86040", "city": "GREENEHAVEN", "loc": [ -111.43847, 36.896625 ], "pop": 8428, "state": "AZ" }, { "_id": "86042", "city": "POLACCA", "loc": [ -110.51114, 35.811812 ], "pop": 1723, "state": "AZ" }, { "_id": "86043", "city": "SECOND MESA", "loc": [ -110.6472, 35.903782 ], "pop": 1653, "state": "AZ" }, { "_id": "86044", "city": "TONALEA", "loc": [ -110.882042, 35.934555 ], "pop": 158, "state": "AZ" }, { "_id": "86045", "city": "TUBA CITY", "loc": [ -111.268566, 36.103729 ], "pop": 10514, "state": "AZ" }, { "_id": "86046", "city": "WILLIAMS", "loc": [ -112.17075, 35.543398 ], "pop": 6117, "state": "AZ" }, { "_id": "86047", "city": "WINSLOW", "loc": [ -110.511382, 35.16078 ], "pop": 17429, "state": "AZ" }, { "_id": "86053", "city": "KAIBITO", "loc": [ -111.136973, 36.484798 ], "pop": 6098, "state": "AZ" }, { "_id": "86054", "city": "SHONTO", "loc": [ -110.647743, 36.61594 ], "pop": 2049, "state": "AZ" }, { "_id": "86301", "city": "PRESCOTT", "loc": [ -113.022459, 34.629909 ], "pop": 915, "state": "AZ" }, { "_id": "86303", "city": "GROOM CREEK", "loc": [ -112.473459, 34.558577 ], "pop": 36617, "state": "AZ" }, { "_id": "86314", "city": "PRESCOTT VALLEY", "loc": [ -112.326378, 34.601934 ], "pop": 11396, "state": "AZ" }, { "_id": "86320", "city": "ASH FORK", "loc": [ -112.502681, 35.214998 ], "pop": 563, "state": "AZ" }, { "_id": "86321", "city": "BAGDAD", "loc": [ -113.175535, 34.578484 ], "pop": 1596, "state": "AZ" }, { "_id": "86322", "city": "CAMP VERDE", "loc": [ -111.855131, 34.569733 ], "pop": 6250, "state": "AZ" }, { "_id": "86323", "city": "CHINO VALLEY", "loc": [ -112.473099, 34.775739 ], "pop": 7285, "state": "AZ" }, { "_id": "86324", "city": "CLARKDALE", "loc": [ -112.033417, 34.747793 ], "pop": 7574, "state": "AZ" }, { "_id": "86325", "city": "CORNVILLE", "loc": [ -111.908556, 34.725593 ], "pop": 2612, "state": "AZ" }, { "_id": "86326", "city": "COTTONWOOD", "loc": [ -112.009099, 34.705547 ], "pop": 8530, "state": "AZ" }, { "_id": "86327", "city": "DEWEY", "loc": [ -112.256665, 34.536753 ], "pop": 3965, "state": "AZ" }, { "_id": "86332", "city": "KIRKLAND", "loc": [ -112.896641, 34.454149 ], "pop": 186, "state": "AZ" }, { "_id": "86333", "city": "MAYER", "loc": [ -112.129551, 34.365535 ], "pop": 3248, "state": "AZ" }, { "_id": "86334", "city": "PAULDEN", "loc": [ -112.544105, 35.03129 ], "pop": 24, "state": "AZ" }, { "_id": "86335", "city": "RIMROCK", "loc": [ -111.784222, 34.63799 ], "pop": 1743, "state": "AZ" }, { "_id": "86336", "city": "SEDONA", "loc": [ -111.750627, 34.826645 ], "pop": 13225, "state": "AZ" }, { "_id": "86337", "city": "SELIGMAN", "loc": [ -112.954805, 35.321246 ], "pop": 693, "state": "AZ" }, { "_id": "86343", "city": "CROWN KING", "loc": [ -112.333971, 34.224062 ], "pop": 105, "state": "AZ" }, { "_id": "86401", "city": "KINGMAN", "loc": [ -114.05689, 35.258379 ], "pop": 32002, "state": "AZ" }, { "_id": "86403", "city": "DESERT HILLS", "loc": [ -114.308083, 34.492879 ], "pop": 26718, "state": "AZ" }, { "_id": "86412", "city": "HUALAPAI", "loc": [ -113.295324, 35.540732 ], "pop": 2, "state": "AZ" }, { "_id": "86430", "city": "BULLHEAD CITY", "loc": [ -114.588816, 35.014832 ], "pop": 3196, "state": "AZ" }, { "_id": "86432", "city": "LITTLEFIELD", "loc": [ -113.913693, 36.866524 ], "pop": 87, "state": "AZ" }, { "_id": "86434", "city": "PEACH SPRINGS", "loc": [ -113.420199, 35.537795 ], "pop": 798, "state": "AZ" }, { "_id": "86435", "city": "SUPAI", "loc": [ -112.693212, 36.224157 ], "pop": 423, "state": "AZ" }, { "_id": "86436", "city": "TOPOCK", "loc": [ -114.481666, 34.778388 ], "pop": 912, "state": "AZ" }, { "_id": "86440", "city": "MOHAVE VALLEY", "loc": [ -114.595115, 34.892942 ], "pop": 4139, "state": "AZ" }, { "_id": "86441", "city": "DOLAN SPRINGS", "loc": [ -114.547771, 35.774789 ], "pop": 68, "state": "AZ" }, { "_id": "86442", "city": "BULLHEAD CITY", "loc": [ -114.594737, 35.106001 ], "pop": 22394, "state": "AZ" }, { "_id": "86444", "city": "MEADVIEW", "loc": [ -114.327696, 35.813733 ], "pop": 118, "state": "AZ" }, { "_id": "86502", "city": "CHAMBERS", "loc": [ -109.37389, 35.143044 ], "pop": 1085, "state": "AZ" }, { "_id": "86503", "city": "CHINLE", "loc": [ -109.603693, 36.130367 ], "pop": 10679, "state": "AZ" }, { "_id": "86505", "city": "GANADO", "loc": [ -109.283168, 35.651844 ], "pop": 23428, "state": "AZ" }, { "_id": "86507", "city": "LUKACHUKAI", "loc": [ -109.244614, 36.418111 ], "pop": 1665, "state": "AZ" }, { "_id": "86509", "city": "NAVAJO", "loc": [ -109.396217, 34.817202 ], "pop": 41, "state": "AZ" }, { "_id": "86510", "city": "PINON", "loc": [ -110.221077, 36.100243 ], "pop": 5911, "state": "AZ" }, { "_id": "86514", "city": "TEEC NOS POS", "loc": [ -109.359039, 36.779694 ], "pop": 4941, "state": "AZ" }, { "_id": "86535", "city": "DENNEHOTSO", "loc": [ -109.861001, 36.777286 ], "pop": 1693, "state": "AZ" }, { "_id": "86538", "city": "MANY FARMS", "loc": [ -109.634021, 36.408259 ], "pop": 4172, "state": "AZ" }, { "_id": "86556", "city": "TSAILE", "loc": [ -109.217627, 36.307075 ], "pop": 1593, "state": "AZ" }, { "_id": "87001", "city": "ALGODONES", "loc": [ -106.616589, 35.428527 ], "pop": 0, "state": "NM" }, { "_id": "87002", "city": "BOYS RANCH", "loc": [ -106.761215, 34.645562 ], "pop": 14826, "state": "NM" }, { "_id": "87004", "city": "BERNALILLO", "loc": [ -106.530873, 35.328506 ], "pop": 7113, "state": "NM" }, { "_id": "87005", "city": "BLUEWATER", "loc": [ -108.191663, 35.164724 ], "pop": 1611, "state": "NM" }, { "_id": "87006", "city": "BOSQUE", "loc": [ -106.8038, 34.49956 ], "pop": 276, "state": "NM" }, { "_id": "87007", "city": "CASA BLANCA", "loc": [ -107.433907, 35.035222 ], "pop": 2986, "state": "NM" }, { "_id": "87008", "city": "CEDAR CREST", "loc": [ -106.361737, 35.128506 ], "pop": 1860, "state": "NM" }, { "_id": "87009", "city": "CEDARVALE", "loc": [ -105.734516, 34.388028 ], "pop": 66, "state": "NM" }, { "_id": "87010", "city": "CERRILLOS", "loc": [ -106.131683, 35.422965 ], "pop": 788, "state": "NM" }, { "_id": "87013", "city": "CUBA", "loc": [ -107.188462, 36.048201 ], "pop": 2764, "state": "NM" }, { "_id": "87014", "city": "CUBERO", "loc": [ -107.856722, 35.117372 ], "pop": 16704, "state": "NM" }, { "_id": "87015", "city": "EDGEWOOD", "loc": [ -106.187207, 35.077603 ], "pop": 3032, "state": "NM" }, { "_id": "87016", "city": "ESTANCIA", "loc": [ -106.135024, 34.769983 ], "pop": 2634, "state": "NM" }, { "_id": "87017", "city": "GALLINA", "loc": [ -106.661388, 36.171429 ], "pop": 1003, "state": "NM" }, { "_id": "87018", "city": "COUNSELOR", "loc": [ -106.949789, 36.118386 ], "pop": 566, "state": "NM" }, { "_id": "87020", "city": "GRANTS", "loc": [ -107.935662, 35.359802 ], "pop": 428, "state": "NM" }, { "_id": "87023", "city": "JARALES", "loc": [ -107.029912, 34.648156 ], "pop": 9, "state": "NM" }, { "_id": "87024", "city": "JEMEZ PUEBLO", "loc": [ -106.721894, 35.624315 ], "pop": 2256, "state": "NM" }, { "_id": "87025", "city": "JEMEZ SPRINGS", "loc": [ -106.771393, 35.892689 ], "pop": 1, "state": "NM" }, { "_id": "87026", "city": "CANONCITO", "loc": [ -107.105843, 35.085305 ], "pop": 1272, "state": "NM" }, { "_id": "87027", "city": "LA JARA", "loc": [ -106.992335, 36.119383 ], "pop": 5, "state": "NM" }, { "_id": "87028", "city": "LAJOYA", "loc": [ -106.84279, 34.343444 ], "pop": 74, "state": "NM" }, { "_id": "87029", "city": "LINDRITH", "loc": [ -106.925352, 36.336141 ], "pop": 574, "state": "NM" }, { "_id": "87031", "city": "LOS LUNAS", "loc": [ -106.711537, 34.780607 ], "pop": 23560, "state": "NM" }, { "_id": "87035", "city": "MORIARTY", "loc": [ -106.060871, 34.988878 ], "pop": 5570, "state": "NM" }, { "_id": "87036", "city": "MOUNTAINAIR", "loc": [ -106.257738, 34.515775 ], "pop": 1442, "state": "NM" }, { "_id": "87041", "city": "COCHITI PUEBLO", "loc": [ -106.343472, 35.603104 ], "pop": 1527, "state": "NM" }, { "_id": "87042", "city": "PERALTA", "loc": [ -106.687159, 34.833188 ], "pop": 2672, "state": "NM" }, { "_id": "87043", "city": "PLACITAS", "loc": [ -106.529279, 35.309175 ], "pop": 8357, "state": "NM" }, { "_id": "87044", "city": "PONDEROSA", "loc": [ -106.654421, 35.797576 ], "pop": 1092, "state": "NM" }, { "_id": "87045", "city": "PREWITT", "loc": [ -108.103798, 35.35466 ], "pop": 1114, "state": "NM" }, { "_id": "87046", "city": "REGINA", "loc": [ -107.071932, 36.20283 ], "pop": 0, "state": "NM" }, { "_id": "87047", "city": "SANDIA PARK", "loc": [ -106.323846, 35.168275 ], "pop": 2672, "state": "NM" }, { "_id": "87048", "city": "CORRALES", "loc": [ -106.620034, 35.233888 ], "pop": 4900, "state": "NM" }, { "_id": "87050", "city": "SAN MATEO", "loc": [ -107.70498, 35.222614 ], "pop": 912, "state": "NM" }, { "_id": "87052", "city": "SANTO DOMINGO PU", "loc": [ -106.361275, 35.513892 ], "pop": 3030, "state": "NM" }, { "_id": "87053", "city": "ZIA PUEBLO", "loc": [ -106.737467, 35.524241 ], "pop": 877, "state": "NM" }, { "_id": "87055", "city": "SEBOYETA", "loc": [ -107.382281, 35.149322 ], "pop": 1356, "state": "NM" }, { "_id": "87056", "city": "STANLEY", "loc": [ -106.028299, 35.12948 ], "pop": 552, "state": "NM" }, { "_id": "87059", "city": "TIJERAS", "loc": [ -106.306226, 35.044563 ], "pop": 6861, "state": "NM" }, { "_id": "87062", "city": "VEGUITA", "loc": [ -106.759148, 34.485032 ], "pop": 817, "state": "NM" }, { "_id": "87063", "city": "WILLARD", "loc": [ -106.030706, 34.57543 ], "pop": 276, "state": "NM" }, { "_id": "87068", "city": "BOSQUE FARMS", "loc": [ -106.697506, 34.876366 ], "pop": 6286, "state": "NM" }, { "_id": "87102", "city": "ALBUQUERQUE", "loc": [ -106.648171, 35.081831 ], "pop": 20645, "state": "NM" }, { "_id": "87104", "city": "ALBUQUERQUE", "loc": [ -106.671215, 35.103822 ], "pop": 11889, "state": "NM" }, { "_id": "87105", "city": "ALBUQUERQUE", "loc": [ -106.689341, 35.044761 ], "pop": 50233, "state": "NM" }, { "_id": "87106", "city": "ALBUQUERQUE", "loc": [ -106.616917, 35.079011 ], "pop": 26482, "state": "NM" }, { "_id": "87107", "city": "ALBUQUERQUE", "loc": [ -106.642747, 35.134742 ], "pop": 30302, "state": "NM" }, { "_id": "87108", "city": "ALBUQUERQUE", "loc": [ -106.574864, 35.072586 ], "pop": 36704, "state": "NM" }, { "_id": "87109", "city": "ALBUQUERQUE", "loc": [ -106.569004, 35.15058 ], "pop": 39310, "state": "NM" }, { "_id": "87110", "city": "ALBUQUERQUE", "loc": [ -106.578052, 35.110417 ], "pop": 42652, "state": "NM" }, { "_id": "87111", "city": "ALBUQUERQUE", "loc": [ -106.522164, 35.134724 ], "pop": 47455, "state": "NM" }, { "_id": "87112", "city": "ALBUQUERQUE", "loc": [ -106.518338, 35.101026 ], "pop": 45478, "state": "NM" }, { "_id": "87113", "city": "ALBUQUERQUE", "loc": [ -106.601467, 35.175906 ], "pop": 3622, "state": "NM" }, { "_id": "87114", "city": "ALAMEDA", "loc": [ -106.659138, 35.195612 ], "pop": 16352, "state": "NM" }, { "_id": "87115", "city": "KIRTLAND A F B E", "loc": [ -106.513896, 34.904876 ], "pop": 0, "state": "NM" }, { "_id": "87116", "city": "ALBUQUERQUE", "loc": [ -106.550605, 35.056116 ], "pop": 5761, "state": "NM" }, { "_id": "87118", "city": "ALBUQUERQUE", "loc": [ -106.595802, 35.055443 ], "pop": 3067, "state": "NM" }, { "_id": "87120", "city": "ALBUQUERQUE", "loc": [ -106.704137, 35.142146 ], "pop": 23796, "state": "NM" }, { "_id": "87121", "city": "ALBUQUERQUE", "loc": [ -106.726861, 35.051209 ], "pop": 22253, "state": "NM" }, { "_id": "87122", "city": "ALBUQUERQUE", "loc": [ -106.510176, 35.178715 ], "pop": 6127, "state": "NM" }, { "_id": "87123", "city": "ALBUQUERQUE", "loc": [ -106.509003, 35.07166 ], "pop": 33808, "state": "NM" }, { "_id": "87124", "city": "RIO RANCHO", "loc": [ -106.681756, 35.249347 ], "pop": 29586, "state": "NM" }, { "_id": "87301", "city": "GALLUP", "loc": [ -108.741352, 35.506475 ], "pop": 32311, "state": "NM" }, { "_id": "87310", "city": "BRIMHALL", "loc": [ -108.581469, 35.800503 ], "pop": 119, "state": "NM" }, { "_id": "87312", "city": "CONTINENTAL DIVI", "loc": [ -108.469256, 35.504295 ], "pop": 704, "state": "NM" }, { "_id": "87313", "city": "CROWNPOINT", "loc": [ -108.02709, 35.720557 ], "pop": 6400, "state": "NM" }, { "_id": "87315", "city": "FENCE LAKE", "loc": [ -108.693392, 34.734385 ], "pop": 112, "state": "NM" }, { "_id": "87320", "city": "MEXICAN SPRINGS", "loc": [ -108.818964, 35.783727 ], "pop": 562, "state": "NM" }, { "_id": "87321", "city": "RAMAH", "loc": [ -108.491951, 35.132375 ], "pop": 517, "state": "NM" }, { "_id": "87323", "city": "THOREAU", "loc": [ -107.830218, 35.57869 ], "pop": 4254, "state": "NM" }, { "_id": "87324", "city": "TOADLENA", "loc": [ -108.750647, 36.073202 ], "pop": 2097, "state": "NM" }, { "_id": "87325", "city": "TOHATCHI", "loc": [ -108.687818, 35.768609 ], "pop": 5648, "state": "NM" }, { "_id": "87327", "city": "ZUNI", "loc": [ -108.833611, 35.06845 ], "pop": 7382, "state": "NM" }, { "_id": "87328", "city": "NAVAJO", "loc": [ -109.022621, 35.894193 ], "pop": 2715, "state": "NM" }, { "_id": "87401", "city": "FARMINGTON", "loc": [ -108.199531, 36.706514 ], "pop": 36782, "state": "NM" }, { "_id": "87402", "city": "FARMINGTON", "loc": [ -108.147766, 36.768503 ], "pop": 7238, "state": "NM" }, { "_id": "87410", "city": "AZTEC", "loc": [ -108.010982, 36.820499 ], "pop": 10951, "state": "NM" }, { "_id": "87412", "city": "BLANCO", "loc": [ -107.795276, 36.725612 ], "pop": 1007, "state": "NM" }, { "_id": "87413", "city": "BLOOMFIELD", "loc": [ -107.978437, 36.695475 ], "pop": 9612, "state": "NM" }, { "_id": "87415", "city": "FLORA VISTA", "loc": [ -108.082683, 36.802771 ], "pop": 2634, "state": "NM" }, { "_id": "87416", "city": "FRUITLAND", "loc": [ -108.45339, 36.76323 ], "pop": 819, "state": "NM" }, { "_id": "87417", "city": "KIRTLAND", "loc": [ -108.350956, 36.740953 ], "pop": 5087, "state": "NM" }, { "_id": "87418", "city": "LA PLATA", "loc": [ -108.179243, 36.957632 ], "pop": 163, "state": "NM" }, { "_id": "87419", "city": "NAVAJO DAM", "loc": [ -107.670991, 36.833838 ], "pop": 32, "state": "NM" }, { "_id": "87420", "city": "SHIPROCK", "loc": [ -108.735479, 36.655981 ], "pop": 14805, "state": "NM" }, { "_id": "87421", "city": "WATERFLOW", "loc": [ -108.431083, 36.780092 ], "pop": 378, "state": "NM" }, { "_id": "87501", "city": "POJOAQUE VALLEY", "loc": [ -105.974818, 35.702472 ], "pop": 51715, "state": "NM" }, { "_id": "87505", "city": "SANTA FE", "loc": [ -105.981994, 35.619623 ], "pop": 34054, "state": "NM" }, { "_id": "87510", "city": "ABIQUIU", "loc": [ -106.244859, 36.176923 ], "pop": 1538, "state": "NM" }, { "_id": "87513", "city": "ARROYO HONDO", "loc": [ -105.621998, 36.531848 ], "pop": 1333, "state": "NM" }, { "_id": "87514", "city": "ARROYO SECO", "loc": [ -105.594609, 36.504568 ], "pop": 782, "state": "NM" }, { "_id": "87520", "city": "CHAMA", "loc": [ -106.582928, 36.896214 ], "pop": 1103, "state": "NM" }, { "_id": "87521", "city": "CHAMISAL", "loc": [ -105.68461, 36.160411 ], "pop": 2147, "state": "NM" }, { "_id": "87522", "city": "CUNDIYO", "loc": [ -105.911441, 36.011906 ], "pop": 4380, "state": "NM" }, { "_id": "87524", "city": "COSTILLA", "loc": [ -105.501586, 36.952556 ], "pop": 495, "state": "NM" }, { "_id": "87527", "city": "DIXON", "loc": [ -105.86148, 36.179 ], "pop": 1320, "state": "NM" }, { "_id": "87528", "city": "DULCE", "loc": [ -107.060179, 36.859808 ], "pop": 2936, "state": "NM" }, { "_id": "87530", "city": "EL RITO", "loc": [ -106.21917, 36.364694 ], "pop": 928, "state": "NM" }, { "_id": "87531", "city": "EMBUDO", "loc": [ -106.024187, 36.137028 ], "pop": 3377, "state": "NM" }, { "_id": "87532", "city": "ESPANOLA", "loc": [ -106.071697, 35.987157 ], "pop": 9437, "state": "NM" }, { "_id": "87535", "city": "GLORIETA", "loc": [ -105.790316, 35.566645 ], "pop": 1246, "state": "NM" }, { "_id": "87537", "city": "HERNANDEZ", "loc": [ -106.139579, 36.073811 ], "pop": 832, "state": "NM" }, { "_id": "87539", "city": "LA MADERA", "loc": [ -106.13443, 36.246387 ], "pop": 75, "state": "NM" }, { "_id": "87540", "city": "LAMY", "loc": [ -105.940906, 35.431057 ], "pop": 516, "state": "NM" }, { "_id": "87544", "city": "LOS ALAMOS", "loc": [ -106.267624, 35.866321 ], "pop": 18122, "state": "NM" }, { "_id": "87549", "city": "OJO CALIENTE", "loc": [ -105.915507, 36.40991 ], "pop": 453, "state": "NM" }, { "_id": "87552", "city": "PECOS", "loc": [ -105.670104, 35.571011 ], "pop": 2534, "state": "NM" }, { "_id": "87553", "city": "PENASCO", "loc": [ -105.734245, 36.176023 ], "pop": 632, "state": "NM" }, { "_id": "87556", "city": "QUESTA", "loc": [ -105.560984, 36.72572 ], "pop": 2881, "state": "NM" }, { "_id": "87557", "city": "RANCHOS DE TAOS", "loc": [ -105.608576, 36.335692 ], "pop": 174, "state": "NM" }, { "_id": "87560", "city": "RIBERA", "loc": [ -105.465228, 35.334448 ], "pop": 1619, "state": "NM" }, { "_id": "87563", "city": "RUTHERON", "loc": [ -106.685267, 36.647146 ], "pop": 38, "state": "NM" }, { "_id": "87564", "city": "SAN CRISTOBAL", "loc": [ -105.635968, 36.611638 ], "pop": 326, "state": "NM" }, { "_id": "87565", "city": "SAN JOSE", "loc": [ -105.438341, 35.456949 ], "pop": 844, "state": "NM" }, { "_id": "87566", "city": "SAN JUAN PUEBLO", "loc": [ -106.079267, 36.048886 ], "pop": 5209, "state": "NM" }, { "_id": "87567", "city": "SANTA CRUZ", "loc": [ -106.031839, 35.986011 ], "pop": 5947, "state": "NM" }, { "_id": "87571", "city": "TAOS", "loc": [ -105.584732, 36.395288 ], "pop": 13297, "state": "NM" }, { "_id": "87573", "city": "TERERRO", "loc": [ -105.645725, 35.736881 ], "pop": 99, "state": "NM" }, { "_id": "87575", "city": "TIERRA AMARILLA", "loc": [ -106.556972, 36.680481 ], "pop": 1865, "state": "NM" }, { "_id": "87579", "city": "VADITO", "loc": [ -105.67818, 36.191305 ], "pop": 360, "state": "NM" }, { "_id": "87580", "city": "VALDEZ", "loc": [ -105.506971, 36.569699 ], "pop": 238, "state": "NM" }, { "_id": "87581", "city": "VALLECITOS", "loc": [ -106.085942, 36.516284 ], "pop": 576, "state": "NM" }, { "_id": "87701", "city": "LAS VEGAS", "loc": [ -105.227162, 35.594862 ], "pop": 19567, "state": "NM" }, { "_id": "87711", "city": "ANTON CHICO", "loc": [ -105.141041, 35.159262 ], "pop": 296, "state": "NM" }, { "_id": "87713", "city": "CHACON", "loc": [ -105.385411, 36.138805 ], "pop": 180, "state": "NM" }, { "_id": "87714", "city": "CIMARRON", "loc": [ -105.069694, 36.457424 ], "pop": 1582, "state": "NM" }, { "_id": "87715", "city": "CLEVELAND", "loc": [ -105.43262, 35.989831 ], "pop": 228, "state": "NM" }, { "_id": "87718", "city": "EAGLE NEST", "loc": [ -105.275561, 36.53255 ], "pop": 463, "state": "NM" }, { "_id": "87722", "city": "GUADALUPITA", "loc": [ -105.127814, 36.113046 ], "pop": 52, "state": "NM" }, { "_id": "87724", "city": "LA LOMA", "loc": [ -105.096864, 35.191562 ], "pop": 233, "state": "NM" }, { "_id": "87725", "city": "LEDOUX", "loc": [ -105.421555, 35.919118 ], "pop": 179, "state": "NM" }, { "_id": "87728", "city": "MAXWELL", "loc": [ -104.56395, 36.543393 ], "pop": 390, "state": "NM" }, { "_id": "87729", "city": "MIAMI", "loc": [ -104.811769, 36.28955 ], "pop": 65, "state": "NM" }, { "_id": "87730", "city": "MILLS", "loc": [ -104.227743, 36.128144 ], "pop": 21, "state": "NM" }, { "_id": "87731", "city": "MONTEZUMA", "loc": [ -105.409729, 35.682959 ], "pop": 62, "state": "NM" }, { "_id": "87732", "city": "MORA", "loc": [ -105.312837, 36.00405 ], "pop": 2636, "state": "NM" }, { "_id": "87733", "city": "ALBERT", "loc": [ -103.746132, 35.715938 ], "pop": 373, "state": "NM" }, { "_id": "87734", "city": "OCATE", "loc": [ -105.06595, 36.10366 ], "pop": 327, "state": "NM" }, { "_id": "87740", "city": "RATON", "loc": [ -104.434881, 36.895187 ], "pop": 8449, "state": "NM" }, { "_id": "87742", "city": "ROCIADA", "loc": [ -105.314716, 35.822648 ], "pop": 480, "state": "NM" }, { "_id": "87743", "city": "ROY", "loc": [ -104.149698, 35.952248 ], "pop": 499, "state": "NM" }, { "_id": "87745", "city": "SAPELLO", "loc": [ -105.107735, 35.762012 ], "pop": 2, "state": "NM" }, { "_id": "87746", "city": "SOLANO", "loc": [ -104.1221, 35.837828 ], "pop": 87, "state": "NM" }, { "_id": "87747", "city": "SPRINGER", "loc": [ -104.592705, 36.37672 ], "pop": 1976, "state": "NM" }, { "_id": "87750", "city": "VALMORA", "loc": [ -104.911587, 35.794033 ], "pop": 138, "state": "NM" }, { "_id": "87752", "city": "WAGON MOUND", "loc": [ -104.691, 35.981361 ], "pop": 524, "state": "NM" }, { "_id": "87801", "city": "SOCORRO", "loc": [ -106.890659, 34.047853 ], "pop": 9663, "state": "NM" }, { "_id": "87815", "city": "BINGHAM", "loc": [ -106.021163, 34.043864 ], "pop": 33, "state": "NM" }, { "_id": "87820", "city": "ARAGON", "loc": [ -108.546589, 33.88592 ], "pop": 149, "state": "NM" }, { "_id": "87821", "city": "DATIL", "loc": [ -108.018284, 34.04269 ], "pop": 340, "state": "NM" }, { "_id": "87823", "city": "LEMITAR", "loc": [ -106.904381, 34.155999 ], "pop": 439, "state": "NM" }, { "_id": "87825", "city": "ALAMO", "loc": [ -107.340647, 34.241178 ], "pop": 2715, "state": "NM" }, { "_id": "87827", "city": "PIE TOWN", "loc": [ -108.368187, 34.324282 ], "pop": 396, "state": "NM" }, { "_id": "87828", "city": "POLVADERA", "loc": [ -106.897505, 34.134672 ], "pop": 225, "state": "NM" }, { "_id": "87829", "city": "QUEMADO", "loc": [ -108.757835, 34.265158 ], "pop": 188, "state": "NM" }, { "_id": "87830", "city": "RESERVE", "loc": [ -108.800918, 33.688074 ], "pop": 1172, "state": "NM" }, { "_id": "87831", "city": "SAN ACACIA", "loc": [ -106.904884, 34.228328 ], "pop": 522, "state": "NM" }, { "_id": "87901", "city": "TRUTH OR CONSEQU", "loc": [ -107.248794, 33.139478 ], "pop": 7794, "state": "NM" }, { "_id": "87930", "city": "ARREY", "loc": [ -107.354368, 32.802057 ], "pop": 555, "state": "NM" }, { "_id": "87931", "city": "CABALLO", "loc": [ -107.347113, 33.013452 ], "pop": 860, "state": "NM" }, { "_id": "87932", "city": "CUCHILLO", "loc": [ -107.456536, 33.370269 ], "pop": 125, "state": "NM" }, { "_id": "87933", "city": "DERRY", "loc": [ -107.284271, 32.808561 ], "pop": 118, "state": "NM" }, { "_id": "87936", "city": "GARFIELD", "loc": [ -107.270409, 32.755749 ], "pop": 432, "state": "NM" }, { "_id": "87937", "city": "HATCH", "loc": [ -107.159028, 32.658335 ], "pop": 2314, "state": "NM" }, { "_id": "87940", "city": "RINCON", "loc": [ -107.064343, 32.65969 ], "pop": 394, "state": "NM" }, { "_id": "87941", "city": "SALEM", "loc": [ -107.215689, 32.709322 ], "pop": 709, "state": "NM" }, { "_id": "87942", "city": "WILLIAMSBURG", "loc": [ -107.337583, 33.226498 ], "pop": 58, "state": "NM" }, { "_id": "87943", "city": "WINSTON", "loc": [ -107.667456, 33.306089 ], "pop": 97, "state": "NM" }, { "_id": "88001", "city": "LAS CRUCES", "loc": [ -106.746034, 32.321641 ], "pop": 57502, "state": "NM" }, { "_id": "88002", "city": "WHITE SANDS MISS", "loc": [ -106.49236, 32.382669 ], "pop": 2616, "state": "NM" }, { "_id": "88005", "city": "LAS CRUCES", "loc": [ -106.79908, 32.316076 ], "pop": 40042, "state": "NM" }, { "_id": "88020", "city": "ANIMAS", "loc": [ -108.585695, 31.793696 ], "pop": 1291, "state": "NM" }, { "_id": "88021", "city": "CHAPARRAL", "loc": [ -106.573452, 31.934505 ], "pop": 24480, "state": "NM" }, { "_id": "88023", "city": "VANADIUM", "loc": [ -108.107667, 32.756334 ], "pop": 3694, "state": "NM" }, { "_id": "88025", "city": "BUCKHORN", "loc": [ -108.477951, 32.813466 ], "pop": 1822, "state": "NM" }, { "_id": "88026", "city": "CENTRAL", "loc": [ -108.162698, 32.779767 ], "pop": 3161, "state": "NM" }, { "_id": "88030", "city": "DEMING", "loc": [ -107.746559, 32.231808 ], "pop": 18110, "state": "NM" }, { "_id": "88039", "city": "GLENWOOD", "loc": [ -108.774282, 33.304789 ], "pop": 318, "state": "NM" }, { "_id": "88041", "city": "SAN LORENZO", "loc": [ -108.082185, 32.853311 ], "pop": 271, "state": "NM" }, { "_id": "88042", "city": "HILLSBORO", "loc": [ -107.6276, 32.923913 ], "pop": 305, "state": "NM" }, { "_id": "88043", "city": "HURLEY", "loc": [ -108.15162, 32.64799 ], "pop": 1775, "state": "NM" }, { "_id": "88044", "city": "LA MESA", "loc": [ -106.701103, 32.082312 ], "pop": 3370, "state": "NM" }, { "_id": "88045", "city": "ROAD FORKS", "loc": [ -108.754657, 32.314032 ], "pop": 4667, "state": "NM" }, { "_id": "88047", "city": "MESILLA PARK", "loc": [ -106.637016, 32.297725 ], "pop": 83, "state": "NM" }, { "_id": "88048", "city": "MESQUITE", "loc": [ -106.667626, 32.145958 ], "pop": 3568, "state": "NM" }, { "_id": "88049", "city": "MIMBRES", "loc": [ -107.942326, 32.860936 ], "pop": 818, "state": "NM" }, { "_id": "88061", "city": "SILVER CITY", "loc": [ -108.274916, 32.789986 ], "pop": 16135, "state": "NM" }, { "_id": "88101", "city": "CLOVIS", "loc": [ -103.221391, 34.412585 ], "pop": 39152, "state": "NM" }, { "_id": "88112", "city": "BROADVIEW", "loc": [ -103.129235, 34.803956 ], "pop": 175, "state": "NM" }, { "_id": "88113", "city": "CAUSEY", "loc": [ -103.150201, 33.892926 ], "pop": 229, "state": "NM" }, { "_id": "88114", "city": "CROSSROADS", "loc": [ -103.356387, 33.527186 ], "pop": 17, "state": "NM" }, { "_id": "88116", "city": "ELIDA", "loc": [ -103.632341, 33.940468 ], "pop": 503, "state": "NM" }, { "_id": "88118", "city": "FLOYD", "loc": [ -103.582707, 34.251951 ], "pop": 681, "state": "NM" }, { "_id": "88119", "city": "FORT SUMNER", "loc": [ -104.231689, 34.460018 ], "pop": 1934, "state": "NM" }, { "_id": "88120", "city": "GRADY", "loc": [ -103.298043, 34.810697 ], "pop": 265, "state": "NM" }, { "_id": "88121", "city": "HOUSE", "loc": [ -103.920256, 34.695156 ], "pop": 235, "state": "NM" }, { "_id": "88123", "city": "LINGO", "loc": [ -103.208161, 33.696291 ], "pop": 52, "state": "NM" }, { "_id": "88124", "city": "MELROSE", "loc": [ -103.632507, 34.44787 ], "pop": 976, "state": "NM" }, { "_id": "88125", "city": "MILNESAND", "loc": [ -103.278189, 33.60501 ], "pop": 10, "state": "NM" }, { "_id": "88126", "city": "PEP", "loc": [ -103.327208, 33.897032 ], "pop": 369, "state": "NM" }, { "_id": "88130", "city": "PORTALES", "loc": [ -103.336311, 34.179915 ], "pop": 14828, "state": "NM" }, { "_id": "88132", "city": "ROGERS", "loc": [ -103.127527, 34.024759 ], "pop": 30, "state": "NM" }, { "_id": "88133", "city": "SAINT VRAIN", "loc": [ -103.453239, 34.465205 ], "pop": 188, "state": "NM" }, { "_id": "88134", "city": "TAIBAN", "loc": [ -104.032899, 34.424829 ], "pop": 94, "state": "NM" }, { "_id": "88135", "city": "TEXICO", "loc": [ -103.061544, 34.395795 ], "pop": 1451, "state": "NM" }, { "_id": "88136", "city": "YESO", "loc": [ -104.527582, 34.474962 ], "pop": 224, "state": "NM" }, { "_id": "88201", "city": "ROSWELL", "loc": [ -104.525857, 33.388504 ], "pop": 53644, "state": "NM" }, { "_id": "88210", "city": "ARTESIA", "loc": [ -104.407401, 32.838355 ], "pop": 14689, "state": "NM" }, { "_id": "88213", "city": "CAPROCK", "loc": [ -103.639009, 33.393855 ], "pop": 19, "state": "NM" }, { "_id": "88220", "city": "CARLSBAD", "loc": [ -104.239539, 32.411867 ], "pop": 31888, "state": "NM" }, { "_id": "88230", "city": "DEXTER", "loc": [ -104.383285, 33.191006 ], "pop": 2056, "state": "NM" }, { "_id": "88231", "city": "EUNICE", "loc": [ -103.159407, 32.439225 ], "pop": 3014, "state": "NM" }, { "_id": "88232", "city": "HAGERMAN", "loc": [ -104.329778, 33.107643 ], "pop": 1409, "state": "NM" }, { "_id": "88240", "city": "HOBBS", "loc": [ -103.137246, 32.72217 ], "pop": 36880, "state": "NM" }, { "_id": "88250", "city": "HOPE", "loc": [ -104.729921, 32.81561 ], "pop": 177, "state": "NM" }, { "_id": "88252", "city": "JAL", "loc": [ -103.199724, 32.112816 ], "pop": 2335, "state": "NM" }, { "_id": "88253", "city": "LAKE ARTHUR", "loc": [ -104.406412, 33.017106 ], "pop": 740, "state": "NM" }, { "_id": "88256", "city": "LOVING", "loc": [ -104.091376, 32.274034 ], "pop": 1851, "state": "NM" }, { "_id": "88260", "city": "LOVINGTON", "loc": [ -103.348849, 32.951166 ], "pop": 12046, "state": "NM" }, { "_id": "88264", "city": "MALJAMAR", "loc": [ -103.723401, 32.842281 ], "pop": 61, "state": "NM" }, { "_id": "88265", "city": "MONUMENT", "loc": [ -103.270256, 32.587405 ], "pop": 0, "state": "NM" }, { "_id": "88266", "city": "OIL CENTER", "loc": [ -103.301915, 32.490383 ], "pop": 0, "state": "NM" }, { "_id": "88267", "city": "TATUM", "loc": [ -103.314, 33.260018 ], "pop": 1393, "state": "NM" }, { "_id": "88301", "city": "CARRIZOZO", "loc": [ -105.869617, 33.64962 ], "pop": 1288, "state": "NM" }, { "_id": "88310", "city": "ALAMOGORDO", "loc": [ -105.948544, 32.893186 ], "pop": 31204, "state": "NM" }, { "_id": "88314", "city": "BENT", "loc": [ -105.863472, 33.148014 ], "pop": 172, "state": "NM" }, { "_id": "88316", "city": "CAPITAN", "loc": [ -105.526906, 33.560232 ], "pop": 1760, "state": "NM" }, { "_id": "88317", "city": "CLOUDCROFT", "loc": [ -105.939028, 32.574067 ], "pop": 4482, "state": "NM" }, { "_id": "88318", "city": "CORONA", "loc": [ -105.533873, 34.169259 ], "pop": 496, "state": "NM" }, { "_id": "88321", "city": "ENCINO", "loc": [ -105.483914, 34.61496 ], "pop": 290, "state": "NM" }, { "_id": "88324", "city": "GLENCOE", "loc": [ -105.502991, 33.386738 ], "pop": 68, "state": "NM" }, { "_id": "88330", "city": "HOLLOMAN AIR FOR", "loc": [ -106.07845, 32.862093 ], "pop": 5896, "state": "NM" }, { "_id": "88336", "city": "HONDO", "loc": [ -105.388854, 33.462518 ], "pop": 160, "state": "NM" }, { "_id": "88337", "city": "LA LUZ", "loc": [ -105.953397, 32.977449 ], "pop": 2302, "state": "NM" }, { "_id": "88338", "city": "LINCOLN", "loc": [ -105.528427, 33.492912 ], "pop": 150, "state": "NM" }, { "_id": "88339", "city": "MAYHILL", "loc": [ -105.518056, 32.907048 ], "pop": 237, "state": "NM" }, { "_id": "88340", "city": "MESCALERO", "loc": [ -105.774293, 33.216436 ], "pop": 2695, "state": "NM" }, { "_id": "88341", "city": "NOGAL", "loc": [ -105.703631, 33.499552 ], "pop": 312, "state": "NM" }, { "_id": "88343", "city": "PICACHO", "loc": [ -105.083382, 33.345642 ], "pop": 38, "state": "NM" }, { "_id": "88344", "city": "PINON", "loc": [ -105.415708, 32.639584 ], "pop": 92, "state": "NM" }, { "_id": "88345", "city": "RUIDOSO", "loc": [ -105.650994, 33.347406 ], "pop": 6883, "state": "NM" }, { "_id": "88346", "city": "RUIDOSO DOWNS", "loc": [ -105.538306, 33.357718 ], "pop": 367, "state": "NM" }, { "_id": "88347", "city": "SACRAMENTO", "loc": [ -105.621128, 32.805221 ], "pop": 69, "state": "NM" }, { "_id": "88348", "city": "SAN PATRICIO", "loc": [ -105.349798, 33.38775 ], "pop": 532, "state": "NM" }, { "_id": "88351", "city": "TINNIE", "loc": [ -105.202681, 33.337308 ], "pop": 165, "state": "NM" }, { "_id": "88352", "city": "TULAROSA", "loc": [ -106.010789, 33.065049 ], "pop": 4583, "state": "NM" }, { "_id": "88353", "city": "VAUGHN", "loc": [ -105.192558, 34.624074 ], "pop": 741, "state": "NM" }, { "_id": "88354", "city": "WEED", "loc": [ -105.506296, 32.80519 ], "pop": 196, "state": "NM" }, { "_id": "88401", "city": "TUCUMCARI", "loc": [ -103.717935, 35.168003 ], "pop": 8634, "state": "NM" }, { "_id": "88410", "city": "AMISTAD", "loc": [ -103.212954, 35.898276 ], "pop": 170, "state": "NM" }, { "_id": "88411", "city": "BARD", "loc": [ -103.317778, 35.115364 ], "pop": 358, "state": "NM" }, { "_id": "88412", "city": "BUEYEROS", "loc": [ -103.666894, 36.013541 ], "pop": 7, "state": "NM" }, { "_id": "88414", "city": "CAPULIN", "loc": [ -103.993599, 36.747453 ], "pop": 62, "state": "NM" }, { "_id": "88415", "city": "CLAYTON", "loc": [ -103.188823, 36.441378 ], "pop": 2886, "state": "NM" }, { "_id": "88416", "city": "CONCHAS DAM", "loc": [ -104.205231, 35.378561 ], "pop": 218, "state": "NM" }, { "_id": "88417", "city": "CUERVO", "loc": [ -104.399867, 35.01013 ], "pop": 66, "state": "NM" }, { "_id": "88418", "city": "DES MOINES", "loc": [ -103.873853, 36.729069 ], "pop": 278, "state": "NM" }, { "_id": "88419", "city": "FOLSOM", "loc": [ -103.839925, 36.86896 ], "pop": 172, "state": "NM" }, { "_id": "88421", "city": "GARITA", "loc": [ -104.441911, 35.350182 ], "pop": 113, "state": "NM" }, { "_id": "88422", "city": "GLADSTONE", "loc": [ -103.893081, 36.307741 ], "pop": 45, "state": "NM" }, { "_id": "88424", "city": "GRENVILLE", "loc": [ -103.415521, 36.725396 ], "pop": 185, "state": "NM" }, { "_id": "88426", "city": "LOGAN", "loc": [ -103.438339, 35.368051 ], "pop": 962, "state": "NM" }, { "_id": "88427", "city": "MC ALISTER", "loc": [ -103.657169, 34.749206 ], "pop": 171, "state": "NM" }, { "_id": "88429", "city": "MOUNT DORA", "loc": [ -103.416667, 36.498795 ], "pop": 27, "state": "NM" }, { "_id": "88430", "city": "NARA VISA", "loc": [ -103.131738, 35.617963 ], "pop": 170, "state": "NM" }, { "_id": "88431", "city": "NEWKIRK", "loc": [ -104.243323, 35.084746 ], "pop": 40, "state": "NM" }, { "_id": "88432", "city": "PUERTO DE LUNA", "loc": [ -104.619645, 34.847826 ], "pop": 66, "state": "NM" }, { "_id": "88433", "city": "QUAY", "loc": [ -103.78176, 34.929916 ], "pop": 10, "state": "NM" }, { "_id": "88434", "city": "SAN JON", "loc": [ -103.284599, 35.119848 ], "pop": 283, "state": "NM" }, { "_id": "88435", "city": "PASTURA", "loc": [ -104.682155, 34.933276 ], "pop": 2714, "state": "NM" }, { "_id": "88436", "city": "SEDAN", "loc": [ -103.14488, 36.226027 ], "pop": 105, "state": "NM" }, { "_id": "88437", "city": "SENECA", "loc": [ -103.089394, 36.6279 ], "pop": 54, "state": "NM" }, { "_id": "88438", "city": "STEAD", "loc": [ -103.121117, 36.12359 ], "pop": 140, "state": "NM" }, { "_id": "88439", "city": "TREMENTINA", "loc": [ -104.616341, 35.584945 ], "pop": 125, "state": "NM" }, { "_id": "88441", "city": "BELL RANCH", "loc": [ -104.111991, 35.638425 ], "pop": 80, "state": "NM" }, { "_id": "89001", "city": "ALAMO", "loc": [ -115.308032, 37.325866 ], "pop": 926, "state": "NV" }, { "_id": "89005", "city": "BOULDER CITY", "loc": [ -114.834413, 35.972711 ], "pop": 12920, "state": "NV" }, { "_id": "89008", "city": "CALIENTE", "loc": [ -114.509727, 37.612817 ], "pop": 1214, "state": "NV" }, { "_id": "89013", "city": "GOLDFIELD", "loc": [ -117.269379, 37.834364 ], "pop": 712, "state": "NV" }, { "_id": "89014", "city": "HENDERSON", "loc": [ -115.077968, 36.056435 ], "pop": 27761, "state": "NV" }, { "_id": "89015", "city": "HENDERSON", "loc": [ -114.971809, 36.035705 ], "pop": 35694, "state": "NV" }, { "_id": "89017", "city": "HIKO", "loc": [ -115.177158, 37.651695 ], "pop": 97, "state": "NV" }, { "_id": "89018", "city": "INDIAN SPRINGS", "loc": [ -115.581067, 36.407223 ], "pop": 4114, "state": "NV" }, { "_id": "89019", "city": "GOODSPRINGS", "loc": [ -115.469154, 35.854839 ], "pop": 1344, "state": "NV" }, { "_id": "89020", "city": "AMARGOSA VALLEY", "loc": [ -116.57755, 36.944007 ], "pop": 3506, "state": "NV" }, { "_id": "89029", "city": "LAUGHLIN", "loc": [ -114.636769, 35.132138 ], "pop": 4801, "state": "NV" }, { "_id": "89030", "city": "NORTH LAS VEGAS", "loc": [ -114.851389, 36.4475 ], "pop": 16, "state": "NV" }, { "_id": "89031", "city": "NORTH LAS VEGAS", "loc": [ -115.124832, 36.206228 ], "pop": 48113, "state": "NV" }, { "_id": "89040", "city": "OVERTON", "loc": [ -114.378202, 36.637236 ], "pop": 8191, "state": "NV" }, { "_id": "89041", "city": "PAHRUMP", "loc": [ -116.014661, 36.204039 ], "pop": 7440, "state": "NV" }, { "_id": "89043", "city": "PIOCHE", "loc": [ -114.396824, 37.898097 ], "pop": 1538, "state": "NV" }, { "_id": "89045", "city": "ROUND MOUNTAIN", "loc": [ -117.127989, 38.682886 ], "pop": 1302, "state": "NV" }, { "_id": "89046", "city": "COTTONWOOD COVE", "loc": [ -114.924182, 35.447601 ], "pop": 948, "state": "NV" }, { "_id": "89047", "city": "SILVERPEAK", "loc": [ -117.94592, 37.76444 ], "pop": 632, "state": "NV" }, { "_id": "89049", "city": "TONOPAH", "loc": [ -117.089886, 38.204273 ], "pop": 4724, "state": "NV" }, { "_id": "89101", "city": "LAS VEGAS", "loc": [ -115.122366, 36.172082 ], "pop": 40270, "state": "NV" }, { "_id": "89102", "city": "LAS VEGAS", "loc": [ -115.200351, 36.143303 ], "pop": 48070, "state": "NV" }, { "_id": "89103", "city": "LAS VEGAS", "loc": [ -115.216072, 36.114865 ], "pop": 33258, "state": "NV" }, { "_id": "89104", "city": "LAS VEGAS", "loc": [ -115.109195, 36.15197 ], "pop": 26805, "state": "NV" }, { "_id": "89106", "city": "LAS VEGAS", "loc": [ -115.161703, 36.184673 ], "pop": 21458, "state": "NV" }, { "_id": "89107", "city": "LAS VEGAS", "loc": [ -115.217638, 36.170457 ], "pop": 32628, "state": "NV" }, { "_id": "89108", "city": "LAS VEGAS", "loc": [ -115.223259, 36.204399 ], "pop": 46924, "state": "NV" }, { "_id": "89109", "city": "LAS VEGAS", "loc": [ -115.145378, 36.125991 ], "pop": 35139, "state": "NV" }, { "_id": "89110", "city": "LAS VEGAS", "loc": [ -115.066892, 36.173031 ], "pop": 43396, "state": "NV" }, { "_id": "89113", "city": "LAS VEGAS", "loc": [ -115.256614, 36.085366 ], "pop": 1801, "state": "NV" }, { "_id": "89115", "city": "LAS VEGAS", "loc": [ -115.067062, 36.215818 ], "pop": 51532, "state": "NV" }, { "_id": "89117", "city": "LAS VEGAS", "loc": [ -115.275518, 36.130196 ], "pop": 30271, "state": "NV" }, { "_id": "89118", "city": "LAS VEGAS", "loc": [ -115.216856, 36.081052 ], "pop": 9932, "state": "NV" }, { "_id": "89119", "city": "LAS VEGAS", "loc": [ -115.136463, 36.100836 ], "pop": 38719, "state": "NV" }, { "_id": "89120", "city": "LAS VEGAS", "loc": [ -115.088485, 36.091423 ], "pop": 16191, "state": "NV" }, { "_id": "89121", "city": "LAS VEGAS", "loc": [ -115.090219, 36.12318 ], "pop": 50168, "state": "NV" }, { "_id": "89122", "city": "LAS VEGAS", "loc": [ -115.052322, 36.120501 ], "pop": 27409, "state": "NV" }, { "_id": "89123", "city": "LAS VEGAS", "loc": [ -115.146182, 36.038273 ], "pop": 6706, "state": "NV" }, { "_id": "89124", "city": "LAS VEGAS", "loc": [ -115.095067, 35.963391 ], "pop": 2580, "state": "NV" }, { "_id": "89128", "city": "LAS VEGAS", "loc": [ -115.256252, 36.175992 ], "pop": 18956, "state": "NV" }, { "_id": "89129", "city": "LAS VEGAS", "loc": [ -115.274254, 36.245004 ], "pop": 5610, "state": "NV" }, { "_id": "89130", "city": "LAS VEGAS", "loc": [ -115.221032, 36.247137 ], "pop": 4383, "state": "NV" }, { "_id": "89131", "city": "LAS VEGAS", "loc": [ -115.241942, 36.295604 ], "pop": 1721, "state": "NV" }, { "_id": "89134", "city": "LAS VEGAS", "loc": [ -115.294123, 36.209234 ], "pop": 3630, "state": "NV" }, { "_id": "89301", "city": "ELY", "loc": [ -114.878011, 39.309356 ], "pop": 8558, "state": "NV" }, { "_id": "89310", "city": "AUSTIN", "loc": [ -117.081063, 39.507986 ], "pop": 1026, "state": "NV" }, { "_id": "89311", "city": "BAKER", "loc": [ -114.246165, 39.065996 ], "pop": 269, "state": "NV" }, { "_id": "89316", "city": "EUREKA", "loc": [ -115.994308, 39.589661 ], "pop": 1118, "state": "NV" }, { "_id": "89317", "city": "LUND", "loc": [ -115.044026, 38.904633 ], "pop": 437, "state": "NV" }, { "_id": "89403", "city": "DAYTON", "loc": [ -119.52872, 39.280594 ], "pop": 2183, "state": "NV" }, { "_id": "89404", "city": "DENIO", "loc": [ -118.731962, 41.704263 ], "pop": 199, "state": "NV" }, { "_id": "89405", "city": "EMPIRE", "loc": [ -119.655265, 40.357703 ], "pop": 246, "state": "NV" }, { "_id": "89406", "city": "FALLON", "loc": [ -118.786112, 39.470254 ], "pop": 17938, "state": "NV" }, { "_id": "89408", "city": "FERNLEY", "loc": [ -119.235044, 39.601888 ], "pop": 5188, "state": "NV" }, { "_id": "89409", "city": "GABBS", "loc": [ -117.868556, 38.880226 ], "pop": 809, "state": "NV" }, { "_id": "89410", "city": "GARDNERVILLE", "loc": [ -119.726902, 38.898268 ], "pop": 15778, "state": "NV" }, { "_id": "89412", "city": "GERLACH", "loc": [ -119.377441, 40.674645 ], "pop": 469, "state": "NV" }, { "_id": "89413", "city": "GLENBROOK", "loc": [ -119.927776, 38.993752 ], "pop": 5705, "state": "NV" }, { "_id": "89414", "city": "GOLCONDA", "loc": [ -117.334929, 40.968325 ], "pop": 411, "state": "NV" }, { "_id": "89415", "city": "HAWTHORNE", "loc": [ -118.641143, 38.534658 ], "pop": 5172, "state": "NV" }, { "_id": "89418", "city": "UNIONVILLE", "loc": [ -118.02115, 40.652217 ], "pop": 1060, "state": "NV" }, { "_id": "89419", "city": "LOVELOCK", "loc": [ -118.468915, 40.1819 ], "pop": 3276, "state": "NV" }, { "_id": "89420", "city": "LUNING", "loc": [ -118.157114, 38.406072 ], "pop": 501, "state": "NV" }, { "_id": "89423", "city": "MINDEN", "loc": [ -119.731363, 39.021766 ], "pop": 3385, "state": "NV" }, { "_id": "89424", "city": "NIXON", "loc": [ -119.464262, 39.885388 ], "pop": 610, "state": "NV" }, { "_id": "89425", "city": "OROVADA", "loc": [ -117.775458, 41.822001 ], "pop": 1039, "state": "NV" }, { "_id": "89426", "city": "PARADISE VALLEY", "loc": [ -117.572848, 41.505726 ], "pop": 244, "state": "NV" }, { "_id": "89427", "city": "SCHURZ", "loc": [ -118.775578, 38.957527 ], "pop": 802, "state": "NV" }, { "_id": "89429", "city": "SILVER SPRINGS", "loc": [ -119.270503, 39.380045 ], "pop": 3261, "state": "NV" }, { "_id": "89430", "city": "SMITH", "loc": [ -119.389005, 38.917166 ], "pop": 70, "state": "NV" }, { "_id": "89431", "city": "SPARKS", "loc": [ -119.755588, 39.547254 ], "pop": 33923, "state": "NV" }, { "_id": "89433", "city": "SUN VALLEY", "loc": [ -119.775363, 39.595477 ], "pop": 11261, "state": "NV" }, { "_id": "89434", "city": "SPARKS", "loc": [ -119.717754, 39.550229 ], "pop": 20249, "state": "NV" }, { "_id": "89436", "city": "SPARKS", "loc": [ -119.708125, 39.626861 ], "pop": 4228, "state": "NV" }, { "_id": "89440", "city": "VIRGINIA CITY", "loc": [ -119.596063, 39.387282 ], "pop": 2526, "state": "NV" }, { "_id": "89442", "city": "WADSWORTH", "loc": [ -119.291778, 39.648069 ], "pop": 757, "state": "NV" }, { "_id": "89444", "city": "WELLINGTON", "loc": [ -119.344901, 38.78762 ], "pop": 1004, "state": "NV" }, { "_id": "89445", "city": "WINNEMUCCA", "loc": [ -117.746693, 40.966418 ], "pop": 10951, "state": "NV" }, { "_id": "89447", "city": "YERINGTON", "loc": [ -119.159558, 38.986567 ], "pop": 6157, "state": "NV" }, { "_id": "89451", "city": "INCLINE VILLAGE", "loc": [ -119.95206, 39.256352 ], "pop": 7807, "state": "NV" }, { "_id": "89501", "city": "RENO", "loc": [ -119.811275, 39.526812 ], "pop": 2664, "state": "NV" }, { "_id": "89502", "city": "RENO", "loc": [ -119.776395, 39.497239 ], "pop": 38332, "state": "NV" }, { "_id": "89503", "city": "RENO", "loc": [ -119.837409, 39.5354 ], "pop": 23955, "state": "NV" }, { "_id": "89506", "city": "RENO", "loc": [ -119.873505, 39.641168 ], "pop": 24254, "state": "NV" }, { "_id": "89509", "city": "RENO", "loc": [ -119.823932, 39.498042 ], "pop": 36606, "state": "NV" }, { "_id": "89510", "city": "RENO", "loc": [ -119.602678, 39.769919 ], "pop": 613, "state": "NV" }, { "_id": "89511", "city": "RENO", "loc": [ -119.766846, 39.41512 ], "pop": 16412, "state": "NV" }, { "_id": "89512", "city": "RENO", "loc": [ -119.795699, 39.548312 ], "pop": 21009, "state": "NV" }, { "_id": "89523", "city": "RENO", "loc": [ -119.903065, 39.524917 ], "pop": 7697, "state": "NV" }, { "_id": "89701", "city": "CARSON CITY", "loc": [ -119.745904, 39.150746 ], "pop": 18817, "state": "NV" }, { "_id": "89703", "city": "CARSON CITY", "loc": [ -119.778242, 39.17036 ], "pop": 8047, "state": "NV" }, { "_id": "89704", "city": "CARSON CITY", "loc": [ -119.828624, 39.089756 ], "pop": 82, "state": "NV" }, { "_id": "89705", "city": "CARSON CITY", "loc": [ -119.782899, 39.089147 ], "pop": 2703, "state": "NV" }, { "_id": "89706", "city": "MOUNDHOUSE", "loc": [ -119.742912, 39.210876 ], "pop": 19276, "state": "NV" }, { "_id": "89801", "city": "JIGGS", "loc": [ -115.724679, 40.826247 ], "pop": 24461, "state": "NV" }, { "_id": "89820", "city": "BATTLE MOUNTAIN", "loc": [ -116.955439, 40.621985 ], "pop": 5240, "state": "NV" }, { "_id": "89821", "city": "BEOWAWE", "loc": [ -116.477387, 40.462398 ], "pop": 429, "state": "NV" }, { "_id": "89822", "city": "CARLIN", "loc": [ -116.108208, 40.717216 ], "pop": 2272, "state": "NV" }, { "_id": "89823", "city": "DEETH", "loc": [ -115.371729, 41.431033 ], "pop": 69, "state": "NV" }, { "_id": "89825", "city": "JACKPOT", "loc": [ -115.112886, 41.839591 ], "pop": 95, "state": "NV" }, { "_id": "89831", "city": "MOUNTAIN CITY", "loc": [ -116.113801, 41.870781 ], "pop": 1259, "state": "NV" }, { "_id": "89833", "city": "RUBY VALLEY", "loc": [ -115.231219, 40.399514 ], "pop": 37, "state": "NV" }, { "_id": "89834", "city": "TUSCARORA", "loc": [ -116.931141, 41.171527 ], "pop": 1, "state": "NV" }, { "_id": "89835", "city": "OASIS", "loc": [ -114.532752, 41.129798 ], "pop": 5336, "state": "NV" }, { "_id": "90001", "city": "LOS ANGELES", "loc": [ -118.247896, 33.973093 ], "pop": 51841, "state": "CA" }, { "_id": "90002", "city": "LOS ANGELES", "loc": [ -118.246213, 33.94969 ], "pop": 40629, "state": "CA" }, { "_id": "90003", "city": "LOS ANGELES", "loc": [ -118.272739, 33.965335 ], "pop": 53938, "state": "CA" }, { "_id": "90004", "city": "LOS ANGELES", "loc": [ -118.302863, 34.076163 ], "pop": 64062, "state": "CA" }, { "_id": "90005", "city": "LOS ANGELES", "loc": [ -118.301197, 34.058508 ], "pop": 35864, "state": "CA" }, { "_id": "90006", "city": "LOS ANGELES", "loc": [ -118.291687, 34.049323 ], "pop": 63389, "state": "CA" }, { "_id": "90007", "city": "LOS ANGELES", "loc": [ -118.287095, 34.029442 ], "pop": 46985, "state": "CA" }, { "_id": "90008", "city": "LOS ANGELES", "loc": [ -118.341123, 34.011643 ], "pop": 33073, "state": "CA" }, { "_id": "90010", "city": "LOS ANGELES", "loc": [ -118.302664, 34.060633 ], "pop": 5335, "state": "CA" }, { "_id": "90011", "city": "LOS ANGELES", "loc": [ -118.258189, 34.007856 ], "pop": 96074, "state": "CA" }, { "_id": "90012", "city": "LOS ANGELES", "loc": [ -118.238479, 34.061396 ], "pop": 28518, "state": "CA" }, { "_id": "90013", "city": "LOS ANGELES", "loc": [ -118.243366, 34.044841 ], "pop": 5653, "state": "CA" }, { "_id": "90014", "city": "LOS ANGELES", "loc": [ -118.250937, 34.044272 ], "pop": 2715, "state": "CA" }, { "_id": "90015", "city": "LOS ANGELES", "loc": [ -118.271613, 34.043439 ], "pop": 18880, "state": "CA" }, { "_id": "90016", "city": "LOS ANGELES", "loc": [ -118.352787, 34.029826 ], "pop": 43669, "state": "CA" }, { "_id": "90017", "city": "LOS ANGELES", "loc": [ -118.266582, 34.055864 ], "pop": 21790, "state": "CA" }, { "_id": "90018", "city": "LOS ANGELES", "loc": [ -118.315173, 34.028972 ], "pop": 48267, "state": "CA" }, { "_id": "90019", "city": "LOS ANGELES", "loc": [ -118.33426, 34.048158 ], "pop": 64996, "state": "CA" }, { "_id": "90020", "city": "LOS ANGELES", "loc": [ -118.302211, 34.066535 ], "pop": 34926, "state": "CA" }, { "_id": "90021", "city": "LOS ANGELES", "loc": [ -118.244698, 34.033303 ], "pop": 2869, "state": "CA" }, { "_id": "90022", "city": "EAST LOS ANGELES", "loc": [ -118.155319, 34.023638 ], "pop": 65065, "state": "CA" }, { "_id": "90023", "city": "LOS ANGELES", "loc": [ -118.197498, 34.024478 ], "pop": 47136, "state": "CA" }, { "_id": "90024", "city": "LOS ANGELES", "loc": [ -118.440796, 34.063691 ], "pop": 38370, "state": "CA" }, { "_id": "90025", "city": "LOS ANGELES", "loc": [ -118.448717, 34.044662 ], "pop": 37746, "state": "CA" }, { "_id": "90026", "city": "LOS ANGELES", "loc": [ -118.264641, 34.076629 ], "pop": 74751, "state": "CA" }, { "_id": "90027", "city": "LOS ANGELES", "loc": [ -118.292516, 34.104031 ], "pop": 50484, "state": "CA" }, { "_id": "90028", "city": "LOS ANGELES", "loc": [ -118.325363, 34.100549 ], "pop": 30152, "state": "CA" }, { "_id": "90029", "city": "LOS ANGELES", "loc": [ -118.294393, 34.089982 ], "pop": 41120, "state": "CA" }, { "_id": "90031", "city": "LOS ANGELES", "loc": [ -118.211279, 34.078349 ], "pop": 39706, "state": "CA" }, { "_id": "90032", "city": "LOS ANGELES", "loc": [ -118.175323, 34.081785 ], "pop": 46602, "state": "CA" }, { "_id": "90033", "city": "LOS ANGELES", "loc": [ -118.208442, 34.048676 ], "pop": 57469, "state": "CA" }, { "_id": "90034", "city": "LOS ANGELES", "loc": [ -118.400482, 34.028977 ], "pop": 53930, "state": "CA" }, { "_id": "90035", "city": "LOS ANGELES", "loc": [ -118.380615, 34.053096 ], "pop": 25723, "state": "CA" }, { "_id": "90036", "city": "LOS ANGELES", "loc": [ -118.349175, 34.069888 ], "pop": 29887, "state": "CA" }, { "_id": "90037", "city": "LOS ANGELES", "loc": [ -118.286284, 34.002982 ], "pop": 56922, "state": "CA" }, { "_id": "90038", "city": "LOS ANGELES", "loc": [ -118.321489, 34.089769 ], "pop": 33001, "state": "CA" }, { "_id": "90039", "city": "LOS ANGELES", "loc": [ -118.259428, 34.112089 ], "pop": 29189, "state": "CA" }, { "_id": "90040", "city": "CITY OF COMMERCE", "loc": [ -118.151352, 33.99471 ], "pop": 9689, "state": "CA" }, { "_id": "90041", "city": "LOS ANGELES", "loc": [ -118.208205, 34.133932 ], "pop": 26864, "state": "CA" }, { "_id": "90042", "city": "LOS ANGELES", "loc": [ -118.192902, 34.114527 ], "pop": 60003, "state": "CA" }, { "_id": "90043", "city": "LOS ANGELES", "loc": [ -118.33211, 33.987099 ], "pop": 45397, "state": "CA" }, { "_id": "90044", "city": "LOS ANGELES", "loc": [ -118.290119, 33.955089 ], "pop": 83958, "state": "CA" }, { "_id": "90045", "city": "LOS ANGELES", "loc": [ -118.394128, 33.963075 ], "pop": 36480, "state": "CA" }, { "_id": "90046", "city": "COLE", "loc": [ -118.357979, 34.09743 ], "pop": 48423, "state": "CA" }, { "_id": "90047", "city": "LOS ANGELES", "loc": [ -118.307304, 33.956896 ], "pop": 47975, "state": "CA" }, { "_id": "90048", "city": "LOS ANGELES", "loc": [ -118.371969, 34.073656 ], "pop": 20863, "state": "CA" }, { "_id": "90049", "city": "LOS ANGELES", "loc": [ -118.473967, 34.066 ], "pop": 35507, "state": "CA" }, { "_id": "90056", "city": "LOS ANGELES", "loc": [ -118.370703, 33.985329 ], "pop": 8108, "state": "CA" }, { "_id": "90057", "city": "LOS ANGELES", "loc": [ -118.276262, 34.062172 ], "pop": 39017, "state": "CA" }, { "_id": "90058", "city": "VERNON", "loc": [ -118.235365, 33.997344 ], "pop": 4090, "state": "CA" }, { "_id": "90059", "city": "LOS ANGELES", "loc": [ -118.24628, 33.929331 ], "pop": 34536, "state": "CA" }, { "_id": "90061", "city": "LOS ANGELES", "loc": [ -118.271638, 33.924493 ], "pop": 21856, "state": "CA" }, { "_id": "90062", "city": "LOS ANGELES", "loc": [ -118.307277, 34.00324 ], "pop": 27517, "state": "CA" }, { "_id": "90063", "city": "HAZARD", "loc": [ -118.185432, 34.044017 ], "pop": 61123, "state": "CA" }, { "_id": "90064", "city": "LOS ANGELES", "loc": [ -118.425911, 34.035279 ], "pop": 23530, "state": "CA" }, { "_id": "90065", "city": "LOS ANGELES", "loc": [ -118.226637, 34.107307 ], "pop": 45578, "state": "CA" }, { "_id": "90066", "city": "LOS ANGELES", "loc": [ -118.429769, 34.002956 ], "pop": 53095, "state": "CA" }, { "_id": "90067", "city": "LOS ANGELES", "loc": [ -118.409479, 34.055146 ], "pop": 2731, "state": "CA" }, { "_id": "90068", "city": "LOS ANGELES", "loc": [ -118.330476, 34.115625 ], "pop": 25615, "state": "CA" }, { "_id": "90069", "city": "WEST HOLLYWOOD", "loc": [ -118.378753, 34.090573 ], "pop": 20587, "state": "CA" }, { "_id": "90071", "city": "LOS ANGELES", "loc": [ -118.257127, 34.052043 ], "pop": 15, "state": "CA" }, { "_id": "90077", "city": "LOS ANGELES", "loc": [ -118.450155, 34.111245 ], "pop": 7989, "state": "CA" }, { "_id": "90201", "city": "BELL GARDENS", "loc": [ -118.17205, 33.969177 ], "pop": 99568, "state": "CA" }, { "_id": "90210", "city": "BEVERLY HILLS", "loc": [ -118.406477, 34.090107 ], "pop": 20700, "state": "CA" }, { "_id": "90211", "city": "BEVERLY HILLS", "loc": [ -118.383007, 34.065217 ], "pop": 7746, "state": "CA" }, { "_id": "90212", "city": "BEVERLY HILLS", "loc": [ -118.399544, 34.061855 ], "pop": 10725, "state": "CA" }, { "_id": "90220", "city": "RANCHO DOMINGUEZ", "loc": [ -118.239044, 33.890654 ], "pop": 47631, "state": "CA" }, { "_id": "90221", "city": "EAST RANCHO DOMI", "loc": [ -118.203724, 33.897324 ], "pop": 47844, "state": "CA" }, { "_id": "90222", "city": "ROSEWOOD", "loc": [ -118.234034, 33.911535 ], "pop": 28754, "state": "CA" }, { "_id": "90230", "city": "CULVER CITY", "loc": [ -118.399115, 33.994927 ], "pop": 32207, "state": "CA" }, { "_id": "90232", "city": "CULVER CITY", "loc": [ -118.397332, 34.016809 ], "pop": 16138, "state": "CA" }, { "_id": "90240", "city": "DOWNEY", "loc": [ -118.117381, 33.958135 ], "pop": 20273, "state": "CA" }, { "_id": "90241", "city": "DOWNEY", "loc": [ -118.13062, 33.941612 ], "pop": 34348, "state": "CA" }, { "_id": "90242", "city": "DOWNEY", "loc": [ -118.139465, 33.921789 ], "pop": 36988, "state": "CA" }, { "_id": "90245", "city": "EL SEGUNDO", "loc": [ -118.411924, 33.924275 ], "pop": 15162, "state": "CA" }, { "_id": "90247", "city": "GARDENA", "loc": [ -118.296122, 33.892463 ], "pop": 42072, "state": "CA" }, { "_id": "90248", "city": "GARDENA", "loc": [ -118.289312, 33.874506 ], "pop": 9529, "state": "CA" }, { "_id": "90249", "city": "GARDENA", "loc": [ -118.319854, 33.899762 ], "pop": 25806, "state": "CA" }, { "_id": "90250", "city": "HOLLY PARK", "loc": [ -118.346978, 33.913214 ], "pop": 78511, "state": "CA" }, { "_id": "90254", "city": "HERMOSA BEACH", "loc": [ -118.395511, 33.864309 ], "pop": 18289, "state": "CA" }, { "_id": "90255", "city": "HUNTINGTON PARK", "loc": [ -118.216053, 33.976879 ], "pop": 72139, "state": "CA" }, { "_id": "90260", "city": "LAWNDALE", "loc": [ -118.351014, 33.887908 ], "pop": 29576, "state": "CA" }, { "_id": "90262", "city": "LYNWOOD", "loc": [ -118.201289, 33.924076 ], "pop": 61606, "state": "CA" }, { "_id": "90265", "city": "MALIBU", "loc": [ -118.735149, 34.040184 ], "pop": 17850, "state": "CA" }, { "_id": "90266", "city": "MANHATTAN BEACH", "loc": [ -118.399562, 33.889594 ], "pop": 31984, "state": "CA" }, { "_id": "90270", "city": "MAYWOOD", "loc": [ -118.187685, 33.988992 ], "pop": 27801, "state": "CA" }, { "_id": "90272", "city": "PACIFIC PALISADE", "loc": [ -118.536874, 34.054097 ], "pop": 20984, "state": "CA" }, { "_id": "90274", "city": "PALOS VERDES EST", "loc": [ -118.374763, 33.770094 ], "pop": 60381, "state": "CA" }, { "_id": "90277", "city": "REDONDO BEACH", "loc": [ -118.383221, 33.830656 ], "pop": 33102, "state": "CA" }, { "_id": "90278", "city": "REDONDO BEACH", "loc": [ -118.371459, 33.870654 ], "pop": 34873, "state": "CA" }, { "_id": "90280", "city": "SOUTH GATE", "loc": [ -118.201349, 33.94617 ], "pop": 87026, "state": "CA" }, { "_id": "90290", "city": "TOPANGA", "loc": [ -118.602268, 34.10759 ], "pop": 5430, "state": "CA" }, { "_id": "90291", "city": "VENICE", "loc": [ -118.463463, 33.993772 ], "pop": 32987, "state": "CA" }, { "_id": "90292", "city": "MARINA DEL REY", "loc": [ -118.452475, 33.977876 ], "pop": 16572, "state": "CA" }, { "_id": "90293", "city": "PLAYA DEL REY", "loc": [ -118.437314, 33.957745 ], "pop": 11477, "state": "CA" }, { "_id": "90301", "city": "INGLEWOOD", "loc": [ -118.355575, 33.955048 ], "pop": 36481, "state": "CA" }, { "_id": "90302", "city": "INGLEWOOD", "loc": [ -118.354805, 33.974496 ], "pop": 28681, "state": "CA" }, { "_id": "90303", "city": "INGLEWOOD", "loc": [ -118.332058, 33.937691 ], "pop": 26418, "state": "CA" }, { "_id": "90304", "city": "LENNOX", "loc": [ -118.355562, 33.938514 ], "pop": 28216, "state": "CA" }, { "_id": "90305", "city": "INGLEWOOD", "loc": [ -118.32585, 33.958304 ], "pop": 14370, "state": "CA" }, { "_id": "90401", "city": "SANTA MONICA", "loc": [ -118.490708, 34.017628 ], "pop": 4813, "state": "CA" }, { "_id": "90402", "city": "SANTA MONICA", "loc": [ -118.503011, 34.034875 ], "pop": 14628, "state": "CA" }, { "_id": "90403", "city": "SANTA MONICA", "loc": [ -118.49241, 34.028658 ], "pop": 22303, "state": "CA" }, { "_id": "90404", "city": "SANTA MONICA", "loc": [ -118.4733, 34.026828 ], "pop": 22480, "state": "CA" }, { "_id": "90405", "city": "SANTA MONICA", "loc": [ -118.471708, 34.01001 ], "pop": 26081, "state": "CA" }, { "_id": "90501", "city": "TORRANCE", "loc": [ -118.31183, 33.826817 ], "pop": 37691, "state": "CA" }, { "_id": "90502", "city": "TORRANCE", "loc": [ -118.292039, 33.828555 ], "pop": 15963, "state": "CA" }, { "_id": "90503", "city": "TORRANCE", "loc": [ -118.354236, 33.839709 ], "pop": 40351, "state": "CA" }, { "_id": "90504", "city": "TORRANCE", "loc": [ -118.329517, 33.870815 ], "pop": 30245, "state": "CA" }, { "_id": "90505", "city": "TORRANCE", "loc": [ -118.350733, 33.810635 ], "pop": 33933, "state": "CA" }, { "_id": "90506", "city": "TORRANCE", "loc": [ -118.329543, 33.885367 ], "pop": 0, "state": "CA" }, { "_id": "90601", "city": "WHITTIER", "loc": [ -118.037139, 34.001119 ], "pop": 30501, "state": "CA" }, { "_id": "90602", "city": "WHITTIER", "loc": [ -118.033703, 33.96931 ], "pop": 23508, "state": "CA" }, { "_id": "90603", "city": "WHITTIER", "loc": [ -117.992685, 33.943199 ], "pop": 18063, "state": "CA" }, { "_id": "90604", "city": "WHITTIER", "loc": [ -118.012075, 33.929931 ], "pop": 36371, "state": "CA" }, { "_id": "90605", "city": "WHITTIER", "loc": [ -118.035568, 33.941338 ], "pop": 34035, "state": "CA" }, { "_id": "90606", "city": "LOS NIETOS", "loc": [ -118.065639, 33.977019 ], "pop": 30185, "state": "CA" }, { "_id": "90620", "city": "BUENA PARK", "loc": [ -118.011359, 33.840607 ], "pop": 42966, "state": "CA" }, { "_id": "90621", "city": "BUENA PARK", "loc": [ -117.994257, 33.873136 ], "pop": 27502, "state": "CA" }, { "_id": "90623", "city": "CERRITOS", "loc": [ -118.040618, 33.849017 ], "pop": 15066, "state": "CA" }, { "_id": "90630", "city": "CYPRESS", "loc": [ -118.038696, 33.818613 ], "pop": 43055, "state": "CA" }, { "_id": "90631", "city": "LA HABRA HEIGHTS", "loc": [ -117.949703, 33.932173 ], "pop": 59113, "state": "CA" }, { "_id": "90638", "city": "LA MIRADA", "loc": [ -118.010081, 33.906681 ], "pop": 40452, "state": "CA" }, { "_id": "90640", "city": "MONTEBELLO", "loc": [ -118.112986, 34.013342 ], "pop": 59068, "state": "CA" }, { "_id": "90650", "city": "NORWALK", "loc": [ -118.081767, 33.90564 ], "pop": 94188, "state": "CA" }, { "_id": "90660", "city": "PICO RIVERA", "loc": [ -118.088269, 33.98857 ], "pop": 58891, "state": "CA" }, { "_id": "90670", "city": "SANTA FE SPRINGS", "loc": [ -118.083801, 33.946407 ], "pop": 14417, "state": "CA" }, { "_id": "90680", "city": "STANTON", "loc": [ -117.994709, 33.803029 ], "pop": 25160, "state": "CA" }, { "_id": "90701", "city": "CERRITOS", "loc": [ -118.068046, 33.866568 ], "pop": 69130, "state": "CA" }, { "_id": "90704", "city": "AVALON", "loc": [ -118.343706, 33.331963 ], "pop": 3445, "state": "CA" }, { "_id": "90706", "city": "BELLFLOWER", "loc": [ -118.126527, 33.886676 ], "pop": 61650, "state": "CA" }, { "_id": "90710", "city": "HARBOR CITY", "loc": [ -118.299114, 33.797006 ], "pop": 24418, "state": "CA" }, { "_id": "90712", "city": "LAKEWOOD", "loc": [ -118.145727, 33.851201 ], "pop": 28992, "state": "CA" }, { "_id": "90713", "city": "LAKEWOOD", "loc": [ -118.111464, 33.847302 ], "pop": 26646, "state": "CA" }, { "_id": "90715", "city": "LAKEWOOD", "loc": [ -118.076707, 33.840453 ], "pop": 17983, "state": "CA" }, { "_id": "90716", "city": "HAWAIIAN GARDENS", "loc": [ -118.072964, 33.82958 ], "pop": 13921, "state": "CA" }, { "_id": "90717", "city": "RANCHO PALOS VER", "loc": [ -118.31693, 33.793339 ], "pop": 19635, "state": "CA" }, { "_id": "90720", "city": "ROSSMOOR", "loc": [ -118.069891, 33.795291 ], "pop": 21695, "state": "CA" }, { "_id": "90723", "city": "PARAMOUNT", "loc": [ -118.163152, 33.896867 ], "pop": 46679, "state": "CA" }, { "_id": "90731", "city": "SAN PEDRO", "loc": [ -118.291425, 33.733894 ], "pop": 58821, "state": "CA" }, { "_id": "90732", "city": "RANCHO PALOS VER", "loc": [ -118.310597, 33.744947 ], "pop": 26244, "state": "CA" }, { "_id": "90740", "city": "SEAL BEACH", "loc": [ -118.08428, 33.760971 ], "pop": 24537, "state": "CA" }, { "_id": "90744", "city": "WILMINGTON", "loc": [ -118.264451, 33.785475 ], "pop": 49178, "state": "CA" }, { "_id": "90745", "city": "CARSON", "loc": [ -118.268352, 33.822968 ], "pop": 50251, "state": "CA" }, { "_id": "90746", "city": "CARSON", "loc": [ -118.255449, 33.858444 ], "pop": 25970, "state": "CA" }, { "_id": "90802", "city": "LONG BEACH", "loc": [ -118.182025, 33.770553 ], "pop": 33906, "state": "CA" }, { "_id": "90803", "city": "LONG BEACH", "loc": [ -118.134073, 33.761932 ], "pop": 32492, "state": "CA" }, { "_id": "90804", "city": "SIGNAL HILL", "loc": [ -118.155187, 33.782993 ], "pop": 36092, "state": "CA" }, { "_id": "90805", "city": "LONG BEACH", "loc": [ -118.180102, 33.863457 ], "pop": 74011, "state": "CA" }, { "_id": "90806", "city": "SIGNAL HILL", "loc": [ -118.187443, 33.799319 ], "pop": 44982, "state": "CA" }, { "_id": "90807", "city": "SIGNAL HILL", "loc": [ -118.18092, 33.830712 ], "pop": 28037, "state": "CA" }, { "_id": "90808", "city": "LONG BEACH", "loc": [ -118.110299, 33.824145 ], "pop": 37809, "state": "CA" }, { "_id": "90810", "city": "CARSON", "loc": [ -118.215006, 33.810985 ], "pop": 36694, "state": "CA" }, { "_id": "90813", "city": "LONG BEACH", "loc": [ -118.183488, 33.78202 ], "pop": 58109, "state": "CA" }, { "_id": "90814", "city": "LONG BEACH", "loc": [ -118.147988, 33.771576 ], "pop": 17359, "state": "CA" }, { "_id": "90815", "city": "LONG BEACH", "loc": [ -118.119249, 33.793908 ], "pop": 38603, "state": "CA" }, { "_id": "90822", "city": "LONG BEACH", "loc": [ -118.239257, 33.744415 ], "pop": 7362, "state": "CA" }, { "_id": "91001", "city": "ALTADENA", "loc": [ -118.13919, 34.191187 ], "pop": 36013, "state": "CA" }, { "_id": "91006", "city": "ARCADIA", "loc": [ -118.026374, 34.132389 ], "pop": 30550, "state": "CA" }, { "_id": "91007", "city": "ARCADIA", "loc": [ -118.051483, 34.124271 ], "pop": 25675, "state": "CA" }, { "_id": "91010", "city": "BRADBURY", "loc": [ -117.967005, 34.137445 ], "pop": 26462, "state": "CA" }, { "_id": "91011", "city": "FLINTRIDGE", "loc": [ -118.199008, 34.209282 ], "pop": 19699, "state": "CA" }, { "_id": "91016", "city": "MONROVIA", "loc": [ -118.001376, 34.143959 ], "pop": 39015, "state": "CA" }, { "_id": "91020", "city": "MONTROSE", "loc": [ -118.230529, 34.211425 ], "pop": 6536, "state": "CA" }, { "_id": "91024", "city": "SIERRA MADRE", "loc": [ -118.051916, 34.165101 ], "pop": 10560, "state": "CA" }, { "_id": "91030", "city": "SOUTH PASADENA", "loc": [ -118.154696, 34.110939 ], "pop": 23936, "state": "CA" }, { "_id": "91040", "city": "SHADOW HILLS", "loc": [ -118.321359, 34.261025 ], "pop": 18303, "state": "CA" }, { "_id": "91042", "city": "TUJUNGA", "loc": [ -118.284856, 34.254389 ], "pop": 24853, "state": "CA" }, { "_id": "91101", "city": "PASADENA", "loc": [ -118.139119, 34.146762 ], "pop": 16045, "state": "CA" }, { "_id": "91103", "city": "PASADENA", "loc": [ -118.155119, 34.166906 ], "pop": 26641, "state": "CA" }, { "_id": "91104", "city": "PASADENA", "loc": [ -118.12609, 34.167776 ], "pop": 37973, "state": "CA" }, { "_id": "91105", "city": "PASADENA", "loc": [ -118.163577, 34.135455 ], "pop": 11165, "state": "CA" }, { "_id": "91106", "city": "PASADENA", "loc": [ -118.126647, 34.143527 ], "pop": 23854, "state": "CA" }, { "_id": "91107", "city": "PASADENA", "loc": [ -118.088905, 34.150997 ], "pop": 31390, "state": "CA" }, { "_id": "91108", "city": "SAN MARINO", "loc": [ -118.111745, 34.120698 ], "pop": 12953, "state": "CA" }, { "_id": "91201", "city": "GLENDALE", "loc": [ -118.289892, 34.171606 ], "pop": 22495, "state": "CA" }, { "_id": "91202", "city": "GLENDALE", "loc": [ -118.265649, 34.165235 ], "pop": 20331, "state": "CA" }, { "_id": "91203", "city": "GLENDALE", "loc": [ -118.263614, 34.151718 ], "pop": 12714, "state": "CA" }, { "_id": "91204", "city": "GLENDALE", "loc": [ -118.259947, 34.137871 ], "pop": 15541, "state": "CA" }, { "_id": "91205", "city": "GLENDALE", "loc": [ -118.24245, 34.137798 ], "pop": 38428, "state": "CA" }, { "_id": "91206", "city": "GLENDALE", "loc": [ -118.232217, 34.155605 ], "pop": 30415, "state": "CA" }, { "_id": "91207", "city": "GLENDALE", "loc": [ -118.245086, 34.164856 ], "pop": 8911, "state": "CA" }, { "_id": "91208", "city": "GLENDALE", "loc": [ -118.234966, 34.19212 ], "pop": 14831, "state": "CA" }, { "_id": "91214", "city": "LA CRESCENTA", "loc": [ -118.245687, 34.231619 ], "pop": 27249, "state": "CA" }, { "_id": "91301", "city": "OAK PARK", "loc": [ -118.75718, 34.157163 ], "pop": 35520, "state": "CA" }, { "_id": "91302", "city": "CALABASAS", "loc": [ -118.664103, 34.141854 ], "pop": 12690, "state": "CA" }, { "_id": "91303", "city": "CANOGA PARK", "loc": [ -118.59828, 34.199257 ], "pop": 19656, "state": "CA" }, { "_id": "91304", "city": "CANOGA PARK", "loc": [ -118.611059, 34.219671 ], "pop": 43675, "state": "CA" }, { "_id": "91306", "city": "WINNETKA", "loc": [ -118.57492, 34.2092 ], "pop": 39261, "state": "CA" }, { "_id": "91307", "city": "WEST HILLS", "loc": [ -118.638892, 34.196343 ], "pop": 22049, "state": "CA" }, { "_id": "91311", "city": "CHATSWORTH", "loc": [ -118.591357, 34.258253 ], "pop": 37225, "state": "CA" }, { "_id": "91316", "city": "ENCINO", "loc": [ -118.517542, 34.165479 ], "pop": 24538, "state": "CA" }, { "_id": "91320", "city": "NEWBURY PARK", "loc": [ -118.935798, 34.177393 ], "pop": 31941, "state": "CA" }, { "_id": "91321", "city": "NEWHALL", "loc": [ -118.523005, 34.379519 ], "pop": 23520, "state": "CA" }, { "_id": "91324", "city": "NORTHRIDGE", "loc": [ -118.546595, 34.236743 ], "pop": 23252, "state": "CA" }, { "_id": "91325", "city": "NORTHRIDGE", "loc": [ -118.51884, 34.235332 ], "pop": 28071, "state": "CA" }, { "_id": "91326", "city": "PORTER RANCH", "loc": [ -118.541235, 34.274191 ], "pop": 23466, "state": "CA" }, { "_id": "91330", "city": "CALIFORNIA STATE", "loc": [ -118.528634, 34.23805 ], "pop": 1604, "state": "CA" }, { "_id": "91331", "city": "ARLETA", "loc": [ -118.420692, 34.258081 ], "pop": 88114, "state": "CA" }, { "_id": "91335", "city": "RESEDA", "loc": [ -118.539071, 34.200663 ], "pop": 62117, "state": "CA" }, { "_id": "91340", "city": "SAN FERNANDO", "loc": [ -118.435242, 34.287509 ], "pop": 33379, "state": "CA" }, { "_id": "91342", "city": "SYLMAR", "loc": [ -118.432181, 34.30538 ], "pop": 68612, "state": "CA" }, { "_id": "91343", "city": "NORTH HILLS", "loc": [ -118.47582, 34.236636 ], "pop": 48751, "state": "CA" }, { "_id": "91344", "city": "GRANADA HILLS", "loc": [ -118.4992, 34.277068 ], "pop": 45729, "state": "CA" }, { "_id": "91345", "city": "MISSION HILLS", "loc": [ -118.458659, 34.261873 ], "pop": 14886, "state": "CA" }, { "_id": "91350", "city": "AGUA DULCE", "loc": [ -118.488955, 34.459742 ], "pop": 31741, "state": "CA" }, { "_id": "91351", "city": "CANYON COUNTRY", "loc": [ -118.449011, 34.426203 ], "pop": 47273, "state": "CA" }, { "_id": "91352", "city": "SUN VALLEY", "loc": [ -118.369853, 34.220907 ], "pop": 43722, "state": "CA" }, { "_id": "91354", "city": "VALENCIA", "loc": [ -118.537437, 34.446608 ], "pop": 7918, "state": "CA" }, { "_id": "91355", "city": "VALENCIA", "loc": [ -118.55352, 34.398456 ], "pop": 23550, "state": "CA" }, { "_id": "91356", "city": "TARZANA", "loc": [ -118.541354, 34.16708 ], "pop": 25316, "state": "CA" }, { "_id": "91360", "city": "THOUSAND OAKS", "loc": [ -118.873908, 34.209179 ], "pop": 41654, "state": "CA" }, { "_id": "91361", "city": "WESTLAKE VILLAGE", "loc": [ -118.83832, 34.147233 ], "pop": 18608, "state": "CA" }, { "_id": "91362", "city": "WESTLAKE VILLAGE", "loc": [ -118.830601, 34.191884 ], "pop": 26572, "state": "CA" }, { "_id": "91364", "city": "WOODLAND HILLS", "loc": [ -118.600019, 34.155652 ], "pop": 25638, "state": "CA" }, { "_id": "91367", "city": "WOODLAND HILLS", "loc": [ -118.615891, 34.176689 ], "pop": 34253, "state": "CA" }, { "_id": "91381", "city": "NEWHALL", "loc": [ -118.582134, 34.381067 ], "pop": 1677, "state": "CA" }, { "_id": "91384", "city": "CASTAIC", "loc": [ -118.62537, 34.482695 ], "pop": 19440, "state": "CA" }, { "_id": "91401", "city": "VAN NUYS", "loc": [ -118.432375, 34.180152 ], "pop": 35990, "state": "CA" }, { "_id": "91402", "city": "PANORAMA CITY", "loc": [ -118.447009, 34.226158 ], "pop": 52577, "state": "CA" }, { "_id": "91403", "city": "SHERMAN OAKS", "loc": [ -118.460325, 34.151407 ], "pop": 20046, "state": "CA" }, { "_id": "91405", "city": "VAN NUYS", "loc": [ -118.445636, 34.200068 ], "pop": 39669, "state": "CA" }, { "_id": "91406", "city": "VAN NUYS", "loc": [ -118.486821, 34.200568 ], "pop": 46124, "state": "CA" }, { "_id": "91411", "city": "VAN NUYS", "loc": [ -118.457396, 34.178133 ], "pop": 21616, "state": "CA" }, { "_id": "91423", "city": "SHERMAN OAKS", "loc": [ -118.432208, 34.152565 ], "pop": 27747, "state": "CA" }, { "_id": "91436", "city": "ENCINO", "loc": [ -118.488238, 34.15098 ], "pop": 13605, "state": "CA" }, { "_id": "91501", "city": "BURBANK", "loc": [ -118.300898, 34.186238 ], "pop": 15991, "state": "CA" }, { "_id": "91502", "city": "BURBANK", "loc": [ -118.305912, 34.174487 ], "pop": 9833, "state": "CA" }, { "_id": "91504", "city": "BURBANK", "loc": [ -118.326401, 34.200097 ], "pop": 22656, "state": "CA" }, { "_id": "91505", "city": "BURBANK", "loc": [ -118.344175, 34.168998 ], "pop": 27676, "state": "CA" }, { "_id": "91506", "city": "BURBANK", "loc": [ -118.323148, 34.171746 ], "pop": 18336, "state": "CA" }, { "_id": "91601", "city": "NORTH HOLLYWOOD", "loc": [ -118.371274, 34.16867 ], "pop": 33882, "state": "CA" }, { "_id": "91602", "city": "TOLUCA LAKE", "loc": [ -118.367606, 34.151095 ], "pop": 14301, "state": "CA" }, { "_id": "91604", "city": "STUDIO CITY", "loc": [ -118.391311, 34.143025 ], "pop": 24354, "state": "CA" }, { "_id": "91605", "city": "NORTH HOLLYWOOD", "loc": [ -118.400069, 34.205747 ], "pop": 50050, "state": "CA" }, { "_id": "91606", "city": "NORTH HOLLYWOOD", "loc": [ -118.386538, 34.187182 ], "pop": 39737, "state": "CA" }, { "_id": "91607", "city": "VALLEY VILLAGE", "loc": [ -118.398905, 34.167217 ], "pop": 28021, "state": "CA" }, { "_id": "91701", "city": "ALTA LOMA", "loc": [ -117.599149, 34.133922 ], "pop": 31633, "state": "CA" }, { "_id": "91702", "city": "AZUSA", "loc": [ -117.903083, 34.12476 ], "pop": 52261, "state": "CA" }, { "_id": "91706", "city": "IRWINDALE", "loc": [ -117.969539, 34.084245 ], "pop": 69464, "state": "CA" }, { "_id": "91709", "city": "CHINO HILLS", "loc": [ -117.730791, 33.979735 ], "pop": 37965, "state": "CA" }, { "_id": "91710", "city": "CHINO", "loc": [ -117.684401, 34.012532 ], "pop": 69244, "state": "CA" }, { "_id": "91711", "city": "CLAREMONT", "loc": [ -117.718293, 34.109167 ], "pop": 34096, "state": "CA" }, { "_id": "91719", "city": "CORONA", "loc": [ -117.531916, 33.861839 ], "pop": 42717, "state": "CA" }, { "_id": "91720", "city": "CORONA", "loc": [ -117.594288, 33.876995 ], "pop": 55741, "state": "CA" }, { "_id": "91722", "city": "COVINA", "loc": [ -117.906544, 34.097162 ], "pop": 31703, "state": "CA" }, { "_id": "91723", "city": "COVINA", "loc": [ -117.884285, 34.08596 ], "pop": 15590, "state": "CA" }, { "_id": "91724", "city": "COVINA", "loc": [ -117.855982, 34.093752 ], "pop": 23462, "state": "CA" }, { "_id": "91730", "city": "RANCHO CUCAMONGA", "loc": [ -117.59408, 34.107039 ], "pop": 41087, "state": "CA" }, { "_id": "91731", "city": "EL MONTE", "loc": [ -118.037108, 34.079142 ], "pop": 26178, "state": "CA" }, { "_id": "91732", "city": "EL MONTE", "loc": [ -118.01492, 34.070533 ], "pop": 58059, "state": "CA" }, { "_id": "91733", "city": "SOUTH EL MONTE", "loc": [ -118.044381, 34.055676 ], "pop": 43691, "state": "CA" }, { "_id": "91737", "city": "ALTA LOMA", "loc": [ -117.579295, 34.144883 ], "pop": 19708, "state": "CA" }, { "_id": "91739", "city": "ETIWANDA", "loc": [ -117.519329, 34.119873 ], "pop": 13553, "state": "CA" }, { "_id": "91740", "city": "GLENDORA", "loc": [ -117.855155, 34.128663 ], "pop": 48836, "state": "CA" }, { "_id": "91744", "city": "INDUSTRY", "loc": [ -117.934098, 34.029428 ], "pop": 77114, "state": "CA" }, { "_id": "91745", "city": "HACIENDA HEIGHTS", "loc": [ -117.965205, 33.997741 ], "pop": 52182, "state": "CA" }, { "_id": "91746", "city": "BASSETT", "loc": [ -117.980026, 34.050963 ], "pop": 30330, "state": "CA" }, { "_id": "91748", "city": "ROWLAND HEIGHTS", "loc": [ -117.896946, 33.981777 ], "pop": 40511, "state": "CA" }, { "_id": "91750", "city": "LA VERNE", "loc": [ -117.77077, 34.115905 ], "pop": 33621, "state": "CA" }, { "_id": "91752", "city": "MIRA LOMA", "loc": [ -117.523574, 33.993845 ], "pop": 17368, "state": "CA" }, { "_id": "91754", "city": "MONTEREY PARK", "loc": [ -118.127144, 34.053409 ], "pop": 62133, "state": "CA" }, { "_id": "91759", "city": "MT BALDY", "loc": [ -117.580219, 34.218082 ], "pop": 430, "state": "CA" }, { "_id": "91760", "city": "NORCO", "loc": [ -117.557866, 33.927983 ], "pop": 23585, "state": "CA" }, { "_id": "91761", "city": "ONTARIO", "loc": [ -117.618662, 34.031647 ], "pop": 47921, "state": "CA" }, { "_id": "91762", "city": "ONTARIO", "loc": [ -117.66647, 34.058415 ], "pop": 47653, "state": "CA" }, { "_id": "91763", "city": "MONTCLAIR", "loc": [ -117.698669, 34.073298 ], "pop": 25862, "state": "CA" }, { "_id": "91764", "city": "ONTARIO", "loc": [ -117.625402, 34.076308 ], "pop": 41958, "state": "CA" }, { "_id": "91765", "city": "DIAMOND BAR", "loc": [ -117.809822, 34.006585 ], "pop": 41920, "state": "CA" }, { "_id": "91766", "city": "PHILLIPS RANCH", "loc": [ -117.752086, 34.043268 ], "pop": 64056, "state": "CA" }, { "_id": "91767", "city": "POMONA", "loc": [ -117.736171, 34.081187 ], "pop": 41420, "state": "CA" }, { "_id": "91768", "city": "POMONA", "loc": [ -117.776312, 34.066168 ], "pop": 31007, "state": "CA" }, { "_id": "91770", "city": "ROSEMEAD", "loc": [ -118.08529, 34.065767 ], "pop": 59898, "state": "CA" }, { "_id": "91773", "city": "SAN DIMAS", "loc": [ -117.81694, 34.102263 ], "pop": 32453, "state": "CA" }, { "_id": "91775", "city": "SAN GABRIEL", "loc": [ -118.085658, 34.115486 ], "pop": 21426, "state": "CA" }, { "_id": "91776", "city": "SAN GABRIEL", "loc": [ -118.095471, 34.089027 ], "pop": 34995, "state": "CA" }, { "_id": "91780", "city": "TEMPLE CITY", "loc": [ -118.053652, 34.101586 ], "pop": 31297, "state": "CA" }, { "_id": "91786", "city": "UPLAND", "loc": [ -117.658336, 34.114432 ], "pop": 66548, "state": "CA" }, { "_id": "91789", "city": "DIAMOND BAR", "loc": [ -117.857828, 34.016625 ], "pop": 42206, "state": "CA" }, { "_id": "91790", "city": "WEST COVINA", "loc": [ -117.936643, 34.067336 ], "pop": 38113, "state": "CA" }, { "_id": "91791", "city": "WEST COVINA", "loc": [ -117.897767, 34.065267 ], "pop": 25685, "state": "CA" }, { "_id": "91792", "city": "WEST COVINA", "loc": [ -117.897459, 34.022852 ], "pop": 30496, "state": "CA" }, { "_id": "91801", "city": "ALHAMBRA", "loc": [ -118.129288, 34.091436 ], "pop": 51148, "state": "CA" }, { "_id": "91803", "city": "ALHAMBRA", "loc": [ -118.143354, 34.074514 ], "pop": 30228, "state": "CA" }, { "_id": "91901", "city": "ALPINE", "loc": [ -116.754328, 32.828161 ], "pop": 12566, "state": "CA" }, { "_id": "91902", "city": "BONITA", "loc": [ -117.022065, 32.667143 ], "pop": 16579, "state": "CA" }, { "_id": "91905", "city": "BOULEVARD", "loc": [ -116.319982, 32.671934 ], "pop": 1163, "state": "CA" }, { "_id": "91906", "city": "CAMPO", "loc": [ -116.490459, 32.660491 ], "pop": 2657, "state": "CA" }, { "_id": "91910", "city": "CHULA VISTA", "loc": [ -117.06756, 32.637139 ], "pop": 56320, "state": "CA" }, { "_id": "91911", "city": "CHULA VISTA", "loc": [ -117.056459, 32.608428 ], "pop": 65952, "state": "CA" }, { "_id": "91913", "city": "CHULA VISTA", "loc": [ -116.985237, 32.651296 ], "pop": 10079, "state": "CA" }, { "_id": "91914", "city": "CHULA VISTA", "loc": [ -116.96517, 32.65875 ], "pop": 0, "state": "CA" }, { "_id": "91915", "city": "CHULA VISTA", "loc": [ -116.940807, 32.631513 ], "pop": 12, "state": "CA" }, { "_id": "91916", "city": "DESCANSO", "loc": [ -116.602732, 32.872971 ], "pop": 1826, "state": "CA" }, { "_id": "91917", "city": "DULZURA", "loc": [ -116.728523, 32.615172 ], "pop": 352, "state": "CA" }, { "_id": "91932", "city": "IMPERIAL BEACH", "loc": [ -117.11478, 32.578289 ], "pop": 26567, "state": "CA" }, { "_id": "91934", "city": "JACUMBA", "loc": [ -116.195184, 32.624934 ], "pop": 599, "state": "CA" }, { "_id": "91935", "city": "JAMUL", "loc": [ -116.832332, 32.716289 ], "pop": 7879, "state": "CA" }, { "_id": "91941", "city": "LA MESA", "loc": [ -117.011541, 32.760431 ], "pop": 42536, "state": "CA" }, { "_id": "91942", "city": "LA MESA", "loc": [ -117.018879, 32.783506 ], "pop": 23944, "state": "CA" }, { "_id": "91945", "city": "LEMON GROVE", "loc": [ -117.032646, 32.73323 ], "pop": 24268, "state": "CA" }, { "_id": "91950", "city": "NATIONAL CITY", "loc": [ -117.089747, 32.674916 ], "pop": 52005, "state": "CA" }, { "_id": "91962", "city": "PINE VALLEY", "loc": [ -116.512733, 32.835047 ], "pop": 1801, "state": "CA" }, { "_id": "91963", "city": "POTRERO", "loc": [ -116.603748, 32.620477 ], "pop": 638, "state": "CA" }, { "_id": "91977", "city": "SPRING VALLEY", "loc": [ -116.997644, 32.724014 ], "pop": 52403, "state": "CA" }, { "_id": "91978", "city": "SPRING VALLEY", "loc": [ -116.959551, 32.732892 ], "pop": 7601, "state": "CA" }, { "_id": "91980", "city": "TECATE", "loc": [ -116.606397, 32.592205 ], "pop": 230, "state": "CA" }, { "_id": "92003", "city": "BONSALL", "loc": [ -117.18969, 33.294033 ], "pop": 2910, "state": "CA" }, { "_id": "92004", "city": "BORREGO SPRINGS", "loc": [ -116.351394, 33.238649 ], "pop": 2633, "state": "CA" }, { "_id": "92007", "city": "CARDIFF BY THE S", "loc": [ -117.274371, 33.025265 ], "pop": 10236, "state": "CA" }, { "_id": "92008", "city": "CARLSBAD", "loc": [ -117.324998, 33.160241 ], "pop": 35651, "state": "CA" }, { "_id": "92009", "city": "CARLSBAD", "loc": [ -117.261888, 33.095407 ], "pop": 27019, "state": "CA" }, { "_id": "92014", "city": "DEL MAR", "loc": [ -117.237314, 32.971474 ], "pop": 19885, "state": "CA" }, { "_id": "92019", "city": "EL CAJON", "loc": [ -116.919055, 32.777726 ], "pop": 35425, "state": "CA" }, { "_id": "92020", "city": "EL CAJON", "loc": [ -116.966504, 32.792765 ], "pop": 55176, "state": "CA" }, { "_id": "92021", "city": "EL CAJON", "loc": [ -116.922336, 32.817847 ], "pop": 51773, "state": "CA" }, { "_id": "92024", "city": "ENCINITAS", "loc": [ -117.26891, 33.053469 ], "pop": 45995, "state": "CA" }, { "_id": "92025", "city": "ESCONDIDO", "loc": [ -117.069987, 33.110117 ], "pop": 39345, "state": "CA" }, { "_id": "92026", "city": "ESCONDIDO", "loc": [ -117.097808, 33.160513 ], "pop": 37176, "state": "CA" }, { "_id": "92027", "city": "ESCONDIDO", "loc": [ -117.051966, 33.138824 ], "pop": 39305, "state": "CA" }, { "_id": "92028", "city": "FALLBROOK", "loc": [ -117.228952, 33.369015 ], "pop": 35232, "state": "CA" }, { "_id": "92029", "city": "ESCONDIDO", "loc": [ -117.112793, 33.089497 ], "pop": 18174, "state": "CA" }, { "_id": "92036", "city": "JULIAN", "loc": [ -116.565812, 33.053355 ], "pop": 2552, "state": "CA" }, { "_id": "92037", "city": "LA JOLLA", "loc": [ -117.25208, 32.845488 ], "pop": 40399, "state": "CA" }, { "_id": "92040", "city": "LAKESIDE", "loc": [ -116.920089, 32.856181 ], "pop": 41054, "state": "CA" }, { "_id": "92054", "city": "OCEANSIDE", "loc": [ -117.357294, 33.20723 ], "pop": 61760, "state": "CA" }, { "_id": "92055", "city": "MARINE CORP BASE", "loc": [ -117.409452, 33.327929 ], "pop": 13643, "state": "CA" }, { "_id": "92056", "city": "OCEANSIDE", "loc": [ -117.283089, 33.196784 ], "pop": 40161, "state": "CA" }, { "_id": "92057", "city": "OCEANSIDE", "loc": [ -117.302484, 33.240654 ], "pop": 33178, "state": "CA" }, { "_id": "92059", "city": "PALA", "loc": [ -117.071725, 33.377662 ], "pop": 1064, "state": "CA" }, { "_id": "92061", "city": "PAUMA VALLEY", "loc": [ -116.959552, 33.306285 ], "pop": 1929, "state": "CA" }, { "_id": "92064", "city": "POWAY", "loc": [ -117.040223, 32.975619 ], "pop": 43490, "state": "CA" }, { "_id": "92065", "city": "RAMONA", "loc": [ -116.853548, 33.029349 ], "pop": 27744, "state": "CA" }, { "_id": "92066", "city": "RANCHITA", "loc": [ -116.539121, 33.24055 ], "pop": 389, "state": "CA" }, { "_id": "92068", "city": "SAN LUIS REY", "loc": [ -117.306403, 33.294367 ], "pop": 9471, "state": "CA" }, { "_id": "92069", "city": "SAN MARCOS", "loc": [ -117.169716, 33.144386 ], "pop": 45382, "state": "CA" }, { "_id": "92070", "city": "SANTA YSABEL", "loc": [ -116.69635, 33.147579 ], "pop": 1263, "state": "CA" }, { "_id": "92071", "city": "SANTEE", "loc": [ -116.986154, 32.848636 ], "pop": 52816, "state": "CA" }, { "_id": "92075", "city": "SOLANA BEACH", "loc": [ -117.2598, 32.993739 ], "pop": 12259, "state": "CA" }, { "_id": "92082", "city": "VALLEY CENTER", "loc": [ -117.012232, 33.249046 ], "pop": 13196, "state": "CA" }, { "_id": "92083", "city": "VISTA", "loc": [ -117.245854, 33.187296 ], "pop": 50641, "state": "CA" }, { "_id": "92084", "city": "VISTA", "loc": [ -117.224285, 33.213118 ], "pop": 38088, "state": "CA" }, { "_id": "92086", "city": "WARNER SPRINGS", "loc": [ -116.721385, 33.303666 ], "pop": 780, "state": "CA" }, { "_id": "92101", "city": "SAN DIEGO", "loc": [ -117.159316, 32.71852 ], "pop": 20265, "state": "CA" }, { "_id": "92102", "city": "SAN DIEGO", "loc": [ -117.121858, 32.713893 ], "pop": 45265, "state": "CA" }, { "_id": "92103", "city": "SAN DIEGO", "loc": [ -117.163552, 32.746638 ], "pop": 31123, "state": "CA" }, { "_id": "92104", "city": "SAN DIEGO", "loc": [ -117.127189, 32.745425 ], "pop": 44032, "state": "CA" }, { "_id": "92105", "city": "SAN DIEGO", "loc": [ -117.094681, 32.7423 ], "pop": 63344, "state": "CA" }, { "_id": "92106", "city": "SAN DIEGO", "loc": [ -117.226829, 32.72725 ], "pop": 27640, "state": "CA" }, { "_id": "92107", "city": "SAN DIEGO", "loc": [ -117.243307, 32.742531 ], "pop": 25913, "state": "CA" }, { "_id": "92108", "city": "SAN DIEGO", "loc": [ -117.133525, 32.778327 ], "pop": 8860, "state": "CA" }, { "_id": "92109", "city": "SAN DIEGO", "loc": [ -117.240534, 32.796923 ], "pop": 44804, "state": "CA" }, { "_id": "92110", "city": "SAN DIEGO", "loc": [ -117.202847, 32.763476 ], "pop": 26787, "state": "CA" }, { "_id": "92111", "city": "SAN DIEGO", "loc": [ -117.17081, 32.797185 ], "pop": 45487, "state": "CA" }, { "_id": "92113", "city": "SAN DIEGO", "loc": [ -117.115257, 32.697047 ], "pop": 44741, "state": "CA" }, { "_id": "92114", "city": "SAN DIEGO", "loc": [ -117.05235, 32.705923 ], "pop": 62258, "state": "CA" }, { "_id": "92115", "city": "SAN DIEGO", "loc": [ -117.072056, 32.760742 ], "pop": 51418, "state": "CA" }, { "_id": "92116", "city": "SAN DIEGO", "loc": [ -117.124166, 32.762446 ], "pop": 32279, "state": "CA" }, { "_id": "92117", "city": "SAN DIEGO", "loc": [ -117.196536, 32.823948 ], "pop": 49737, "state": "CA" }, { "_id": "92118", "city": "CORONADO", "loc": [ -117.169823, 32.68069 ], "pop": 16670, "state": "CA" }, { "_id": "92119", "city": "SAN DIEGO", "loc": [ -117.026065, 32.803587 ], "pop": 24135, "state": "CA" }, { "_id": "92120", "city": "SAN DIEGO", "loc": [ -117.070708, 32.79581 ], "pop": 25375, "state": "CA" }, { "_id": "92121", "city": "SAN DIEGO", "loc": [ -117.203503, 32.891894 ], "pop": 2286, "state": "CA" }, { "_id": "92122", "city": "SAN DIEGO", "loc": [ -117.211507, 32.857736 ], "pop": 30192, "state": "CA" }, { "_id": "92123", "city": "SAN DIEGO", "loc": [ -117.139248, 32.797297 ], "pop": 23541, "state": "CA" }, { "_id": "92124", "city": "SAN DIEGO", "loc": [ -117.098613, 32.820113 ], "pop": 29171, "state": "CA" }, { "_id": "92126", "city": "SAN DIEGO", "loc": [ -117.140227, 32.916136 ], "pop": 56676, "state": "CA" }, { "_id": "92127", "city": "SAN DIEGO", "loc": [ -117.085596, 33.027854 ], "pop": 11077, "state": "CA" }, { "_id": "92128", "city": "SAN DIEGO", "loc": [ -117.068982, 33.00666 ], "pop": 30437, "state": "CA" }, { "_id": "92129", "city": "SAN DIEGO", "loc": [ -117.121308, 32.965185 ], "pop": 43092, "state": "CA" }, { "_id": "92130", "city": "SAN DIEGO", "loc": [ -117.225201, 32.955533 ], "pop": 12681, "state": "CA" }, { "_id": "92131", "city": "SAN DIEGO", "loc": [ -117.089758, 32.912343 ], "pop": 16649, "state": "CA" }, { "_id": "92135", "city": "SAN DIEGO", "loc": [ -117.19202, 32.702482 ], "pop": 8122, "state": "CA" }, { "_id": "92136", "city": "SAN DIEGO", "loc": [ -117.124678, 32.681585 ], "pop": 11750, "state": "CA" }, { "_id": "92139", "city": "SAN DIEGO", "loc": [ -117.047375, 32.680612 ], "pop": 35577, "state": "CA" }, { "_id": "92145", "city": "SAN DIEGO", "loc": [ -117.116518, 32.870365 ], "pop": 3089, "state": "CA" }, { "_id": "92154", "city": "SAN DIEGO", "loc": [ -117.070725, 32.575276 ], "pop": 59925, "state": "CA" }, { "_id": "92155", "city": "SAN DIEGO", "loc": [ -117.160335, 32.676144 ], "pop": 1570, "state": "CA" }, { "_id": "92173", "city": "SAN YSIDRO", "loc": [ -117.042976, 32.562567 ], "pop": 30131, "state": "CA" }, { "_id": "92201", "city": "CHIRIACO SUMMIT", "loc": [ -116.235729, 33.721899 ], "pop": 47118, "state": "CA" }, { "_id": "92210", "city": "INDIAN WELLS", "loc": [ -116.338129, 33.716334 ], "pop": 2599, "state": "CA" }, { "_id": "92220", "city": "BANNING", "loc": [ -116.889928, 33.92816 ], "pop": 22545, "state": "CA" }, { "_id": "92223", "city": "BEAUMONT", "loc": [ -116.970079, 33.950429 ], "pop": 16176, "state": "CA" }, { "_id": "92225", "city": "LOST LAKE", "loc": [ -114.597131, 33.605715 ], "pop": 13852, "state": "CA" }, { "_id": "92227", "city": "BRAWLEY", "loc": [ -115.529613, 32.979181 ], "pop": 20199, "state": "CA" }, { "_id": "92230", "city": "CABAZON", "loc": [ -116.773948, 33.908583 ], "pop": 1697, "state": "CA" }, { "_id": "92231", "city": "CALEXICO", "loc": [ -115.502815, 32.683227 ], "pop": 22345, "state": "CA" }, { "_id": "92233", "city": "CALIPATRIA", "loc": [ -115.511402, 33.166956 ], "pop": 4847, "state": "CA" }, { "_id": "92234", "city": "CATHEDRAL CITY", "loc": [ -116.466497, 33.809839 ], "pop": 29640, "state": "CA" }, { "_id": "92236", "city": "COACHELLA", "loc": [ -116.177231, 33.674965 ], "pop": 17147, "state": "CA" }, { "_id": "92239", "city": "EAGLE MOUNTAIN", "loc": [ -115.052603, 33.604941 ], "pop": 4499, "state": "CA" }, { "_id": "92240", "city": "DESERT HOT SPRIN", "loc": [ -116.366222, 33.904973 ], "pop": 686, "state": "CA" }, { "_id": "92242", "city": "BIG RIVER", "loc": [ -114.33928, 34.149142 ], "pop": 976, "state": "CA" }, { "_id": "92243", "city": "EL CENTRO", "loc": [ -115.566508, 32.789332 ], "pop": 39246, "state": "CA" }, { "_id": "92249", "city": "HEBER", "loc": [ -115.428281, 32.698918 ], "pop": 206, "state": "CA" }, { "_id": "92250", "city": "HOLTVILLE", "loc": [ -115.377456, 32.810387 ], "pop": 7060, "state": "CA" }, { "_id": "92251", "city": "IMPERIAL", "loc": [ -115.572984, 32.846954 ], "pop": 6092, "state": "CA" }, { "_id": "92252", "city": "JOSHUA TREE", "loc": [ -116.303763, 34.150163 ], "pop": 8227, "state": "CA" }, { "_id": "92253", "city": "LA QUINTA", "loc": [ -116.308081, 33.668474 ], "pop": 9392, "state": "CA" }, { "_id": "92256", "city": "MORONGO VALLEY", "loc": [ -116.565641, 34.060646 ], "pop": 2721, "state": "CA" }, { "_id": "92257", "city": "NILAND", "loc": [ -115.696455, 33.378373 ], "pop": 875, "state": "CA" }, { "_id": "92260", "city": "PALM CITY", "loc": [ -116.366442, 33.730842 ], "pop": 31975, "state": "CA" }, { "_id": "92262", "city": "PALM SPRINGS", "loc": [ -116.53466, 33.841406 ], "pop": 22808, "state": "CA" }, { "_id": "92264", "city": "PALM SPRINGS", "loc": [ -116.516958, 33.801828 ], "pop": 18733, "state": "CA" }, { "_id": "92267", "city": "PARKER DAM", "loc": [ -114.155969, 34.297977 ], "pop": 141, "state": "CA" }, { "_id": "92270", "city": "RANCHO MIRAGE", "loc": [ -116.422451, 33.764284 ], "pop": 9737, "state": "CA" }, { "_id": "92272", "city": "BLYTHE", "loc": [ -116.495855, 33.951256 ], "pop": 18605, "state": "CA" }, { "_id": "92274", "city": "SALTON CITY", "loc": [ -116.11584, 33.543418 ], "pop": 19112, "state": "CA" }, { "_id": "92276", "city": "THOUSAND PALMS", "loc": [ -116.371305, 33.808158 ], "pop": 5557, "state": "CA" }, { "_id": "92277", "city": "TWENTYNINE PALMS", "loc": [ -116.060133, 34.145509 ], "pop": 13371, "state": "CA" }, { "_id": "92278", "city": "TWENTYNINE PALMS", "loc": [ -116.06041, 34.237969 ], "pop": 11412, "state": "CA" }, { "_id": "92280", "city": "VIDAL", "loc": [ -114.565602, 34.156109 ], "pop": 40, "state": "CA" }, { "_id": "92281", "city": "WESTMORLAND", "loc": [ -115.630723, 33.041058 ], "pop": 1902, "state": "CA" }, { "_id": "92282", "city": "WHITE WATER", "loc": [ -116.693154, 33.927591 ], "pop": 420, "state": "CA" }, { "_id": "92283", "city": "FELICITY", "loc": [ -114.636634, 32.832922 ], "pop": 3867, "state": "CA" }, { "_id": "92284", "city": "YUCCA VALLEY", "loc": [ -116.431313, 34.155936 ], "pop": 22131, "state": "CA" }, { "_id": "92301", "city": "ADELANTO", "loc": [ -117.424189, 34.584128 ], "pop": 7176, "state": "CA" }, { "_id": "92304", "city": "AMBOY", "loc": [ -115.774907, 34.599012 ], "pop": 29, "state": "CA" }, { "_id": "92305", "city": "ANGELUS OAKS", "loc": [ -116.948482, 34.153149 ], "pop": 238, "state": "CA" }, { "_id": "92307", "city": "APPLE VALLEY", "loc": [ -117.2132, 34.529081 ], "pop": 26066, "state": "CA" }, { "_id": "92308", "city": "APPLE VALLEY", "loc": [ -117.192684, 34.469814 ], "pop": 24973, "state": "CA" }, { "_id": "92309", "city": "BAKER", "loc": [ -116.063754, 35.360573 ], "pop": 606, "state": "CA" }, { "_id": "92310", "city": "FORT IRWIN", "loc": [ -116.644759, 35.40148 ], "pop": 6735, "state": "CA" }, { "_id": "92311", "city": "BARSTOW", "loc": [ -117.038702, 34.89145 ], "pop": 33076, "state": "CA" }, { "_id": "92314", "city": "BIG BEAR CITY", "loc": [ -116.920412, 34.242233 ], "pop": 18959, "state": "CA" }, { "_id": "92316", "city": "BLOOMINGTON", "loc": [ -117.399295, 34.066198 ], "pop": 22916, "state": "CA" }, { "_id": "92320", "city": "CALIMESA", "loc": [ -117.04304, 33.994586 ], "pop": 6345, "state": "CA" }, { "_id": "92324", "city": "GRAND TERRACE", "loc": [ -117.318577, 34.057964 ], "pop": 53822, "state": "CA" }, { "_id": "92327", "city": "DAGGETT", "loc": [ -116.887555, 34.86677 ], "pop": 701, "state": "CA" }, { "_id": "92328", "city": "DEATH VALLEY", "loc": [ -116.893682, 36.467165 ], "pop": 440, "state": "CA" }, { "_id": "92332", "city": "ESSEX", "loc": [ -115.280344, 34.560626 ], "pop": 214, "state": "CA" }, { "_id": "92335", "city": "FONTANA", "loc": [ -117.455114, 34.079351 ], "pop": 81255, "state": "CA" }, { "_id": "92336", "city": "FONTANA", "loc": [ -117.437759, 34.117276 ], "pop": 27957, "state": "CA" }, { "_id": "92338", "city": "LUDLOW", "loc": [ -116.386202, 34.901779 ], "pop": 383, "state": "CA" }, { "_id": "92339", "city": "FOREST FALLS", "loc": [ -116.914147, 34.08805 ], "pop": 842, "state": "CA" }, { "_id": "92342", "city": "HELENDALE", "loc": [ -117.33666, 34.749859 ], "pop": 3612, "state": "CA" }, { "_id": "92345", "city": "HESPERIA", "loc": [ -117.302527, 34.422215 ], "pop": 52170, "state": "CA" }, { "_id": "92346", "city": "EAST HIGHLAND", "loc": [ -117.208717, 34.126969 ], "pop": 37484, "state": "CA" }, { "_id": "92347", "city": "HINKLEY", "loc": [ -117.180867, 34.92788 ], "pop": 1905, "state": "CA" }, { "_id": "92351", "city": "KELSO", "loc": [ -115.577574, 34.9678 ], "pop": 30, "state": "CA" }, { "_id": "92354", "city": "LOMA LINDA", "loc": [ -117.251286, 34.052833 ], "pop": 17855, "state": "CA" }, { "_id": "92356", "city": "LUCERNE VALLEY", "loc": [ -116.918857, 34.44695 ], "pop": 4353, "state": "CA" }, { "_id": "92358", "city": "LYTLE CREEK", "loc": [ -117.518613, 34.255755 ], "pop": 625, "state": "CA" }, { "_id": "92359", "city": "MENTONE", "loc": [ -117.112581, 34.077372 ], "pop": 5832, "state": "CA" }, { "_id": "92363", "city": "NEEDLES", "loc": [ -114.587134, 34.782369 ], "pop": 6316, "state": "CA" }, { "_id": "92364", "city": "NIPTON", "loc": [ -115.481436, 35.46761 ], "pop": 390, "state": "CA" }, { "_id": "92365", "city": "NEWBERRY SPRINGS", "loc": [ -116.746373, 34.885001 ], "pop": 4296, "state": "CA" }, { "_id": "92368", "city": "ORO GRANDE", "loc": [ -117.332733, 34.617832 ], "pop": 852, "state": "CA" }, { "_id": "92371", "city": "PHELAN", "loc": [ -117.519604, 34.444901 ], "pop": 13508, "state": "CA" }, { "_id": "92372", "city": "PINON HILLS", "loc": [ -117.640262, 34.442937 ], "pop": 1741, "state": "CA" }, { "_id": "92373", "city": "REDLANDS", "loc": [ -117.180352, 34.039659 ], "pop": 29784, "state": "CA" }, { "_id": "92374", "city": "REDLANDS", "loc": [ -117.167182, 34.064989 ], "pop": 36952, "state": "CA" }, { "_id": "92376", "city": "RIALTO", "loc": [ -117.377133, 34.113155 ], "pop": 75341, "state": "CA" }, { "_id": "92384", "city": "SHOSHONE", "loc": [ -116.264476, 35.899239 ], "pop": 353, "state": "CA" }, { "_id": "92389", "city": "TECOPA", "loc": [ -115.829824, 35.897925 ], "pop": 48, "state": "CA" }, { "_id": "92392", "city": "SPRING VALLEY LA", "loc": [ -117.319235, 34.503917 ], "pop": 51968, "state": "CA" }, { "_id": "92394", "city": "GEORGE AFB", "loc": [ -117.363516, 34.577325 ], "pop": 6815, "state": "CA" }, { "_id": "92397", "city": "WRIGHTWOOD", "loc": [ -117.6249, 34.362839 ], "pop": 4148, "state": "CA" }, { "_id": "92399", "city": "YUCAIPA", "loc": [ -117.048925, 34.028197 ], "pop": 33298, "state": "CA" }, { "_id": "92401", "city": "SAN BERNARDINO", "loc": [ -117.289753, 34.110521 ], "pop": 1193, "state": "CA" }, { "_id": "92404", "city": "SAN BERNARDINO", "loc": [ -117.260572, 34.142577 ], "pop": 50792, "state": "CA" }, { "_id": "92405", "city": "MUSCOY", "loc": [ -117.310765, 34.144101 ], "pop": 35583, "state": "CA" }, { "_id": "92407", "city": "SAN BERNARDINO", "loc": [ -117.293697, 34.20928 ], "pop": 44927, "state": "CA" }, { "_id": "92408", "city": "SAN BERNARDINO", "loc": [ -117.271059, 34.083127 ], "pop": 13378, "state": "CA" }, { "_id": "92409", "city": "SAN BERNARDINO", "loc": [ -117.241291, 34.103685 ], "pop": 1746, "state": "CA" }, { "_id": "92410", "city": "SAN BERNARDINO", "loc": [ -117.296789, 34.107729 ], "pop": 42522, "state": "CA" }, { "_id": "92411", "city": "SAN BERNARDINO", "loc": [ -117.317158, 34.121414 ], "pop": 22994, "state": "CA" }, { "_id": "92501", "city": "RIVERSIDE", "loc": [ -117.369421, 33.9924 ], "pop": 18478, "state": "CA" }, { "_id": "92503", "city": "RIVERSIDE", "loc": [ -117.458862, 33.920808 ], "pop": 55552, "state": "CA" }, { "_id": "92504", "city": "RIVERSIDE", "loc": [ -117.411948, 33.931458 ], "pop": 45308, "state": "CA" }, { "_id": "92505", "city": "RIVERSIDE", "loc": [ -117.486687, 33.922769 ], "pop": 37420, "state": "CA" }, { "_id": "92506", "city": "RIVERSIDE", "loc": [ -117.375696, 33.945485 ], "pop": 37294, "state": "CA" }, { "_id": "92507", "city": "RIVERSIDE", "loc": [ -117.338874, 33.976086 ], "pop": 45844, "state": "CA" }, { "_id": "92508", "city": "RIVERSIDE", "loc": [ -117.304264, 33.889676 ], "pop": 13582, "state": "CA" }, { "_id": "92509", "city": "RUBIDOUX", "loc": [ -117.444896, 33.997355 ], "pop": 52456, "state": "CA" }, { "_id": "92530", "city": "LAKE ELSINORE", "loc": [ -117.348535, 33.659816 ], "pop": 34619, "state": "CA" }, { "_id": "92532", "city": "LAKE ELSINORE", "loc": [ -117.271278, 33.651662 ], "pop": 6796, "state": "CA" }, { "_id": "92536", "city": "AGUANGA", "loc": [ -116.799693, 33.447306 ], "pop": 2309, "state": "CA" }, { "_id": "92539", "city": "ANZA", "loc": [ -116.71355, 33.568812 ], "pop": 1860, "state": "CA" }, { "_id": "92543", "city": "HEMET", "loc": [ -116.972974, 33.741613 ], "pop": 26985, "state": "CA" }, { "_id": "92544", "city": "HEMET", "loc": [ -116.924306, 33.738978 ], "pop": 34483, "state": "CA" }, { "_id": "92545", "city": "HEMET", "loc": [ -117.015078, 33.739857 ], "pop": 19513, "state": "CA" }, { "_id": "92548", "city": "HOMELAND", "loc": [ -117.111845, 33.74528 ], "pop": 4290, "state": "CA" }, { "_id": "92549", "city": "IDYLLWILD", "loc": [ -116.710665, 33.730433 ], "pop": 3975, "state": "CA" }, { "_id": "92553", "city": "MORENO VALLEY", "loc": [ -117.235066, 33.915719 ], "pop": 71314, "state": "CA" }, { "_id": "92555", "city": "MORENO VALLEY", "loc": [ -117.185105, 33.937659 ], "pop": 9784, "state": "CA" }, { "_id": "92557", "city": "MORENO VALLEY", "loc": [ -117.245682, 33.955257 ], "pop": 37853, "state": "CA" }, { "_id": "92561", "city": "MOUNTAIN CENTER", "loc": [ -116.581954, 33.531667 ], "pop": 1896, "state": "CA" }, { "_id": "92562", "city": "MURRIETA", "loc": [ -117.273838, 33.563071 ], "pop": 1988, "state": "CA" }, { "_id": "92563", "city": "MURRIETA", "loc": [ -117.178298, 33.56903 ], "pop": 22649, "state": "CA" }, { "_id": "92567", "city": "LAKEVIEW", "loc": [ -117.118704, 33.807712 ], "pop": 6480, "state": "CA" }, { "_id": "92570", "city": "MEAD VALLEY", "loc": [ -117.280005, 33.797535 ], "pop": 31870, "state": "CA" }, { "_id": "92571", "city": "PERRIS", "loc": [ -117.217968, 33.810979 ], "pop": 12436, "state": "CA" }, { "_id": "92582", "city": "SAN JACINTO", "loc": [ -116.981911, 33.788281 ], "pop": 3233, "state": "CA" }, { "_id": "92583", "city": "GILMAN HOT SPRIN", "loc": [ -116.955201, 33.78604 ], "pop": 15506, "state": "CA" }, { "_id": "92584", "city": "MENIFEE", "loc": [ -117.1743, 33.664744 ], "pop": 8347, "state": "CA" }, { "_id": "92585", "city": "ROMOLAND", "loc": [ -117.171899, 33.744518 ], "pop": 5231, "state": "CA" }, { "_id": "92586", "city": "SUN CITY", "loc": [ -117.196942, 33.704373 ], "pop": 15225, "state": "CA" }, { "_id": "92587", "city": "CANYON LAKE", "loc": [ -117.252653, 33.688756 ], "pop": 12522, "state": "CA" }, { "_id": "92590", "city": "TEMECULA", "loc": [ -117.182437, 33.490269 ], "pop": 2128, "state": "CA" }, { "_id": "92591", "city": "TEMECULA", "loc": [ -117.128571, 33.521687 ], "pop": 13480, "state": "CA" }, { "_id": "92592", "city": "TEMECULA", "loc": [ -117.095774, 33.498314 ], "pop": 15567, "state": "CA" }, { "_id": "92595", "city": "WILDOMAR", "loc": [ -117.263953, 33.602115 ], "pop": 4758, "state": "CA" }, { "_id": "92596", "city": "WINCHESTER", "loc": [ -117.088518, 33.624269 ], "pop": 1195, "state": "CA" }, { "_id": "92610", "city": "FOOTHILL RANCH", "loc": [ -117.664995, 33.666822 ], "pop": 3294, "state": "CA" }, { "_id": "92621", "city": "BREA", "loc": [ -117.886742, 33.922897 ], "pop": 45577, "state": "CA" }, { "_id": "92624", "city": "CAPISTRANO BEACH", "loc": [ -117.662657, 33.459115 ], "pop": 7498, "state": "CA" }, { "_id": "92625", "city": "CORONA DEL MAR", "loc": [ -117.874331, 33.602066 ], "pop": 5166, "state": "CA" }, { "_id": "92626", "city": "COSTA MESA", "loc": [ -117.909623, 33.677711 ], "pop": 45411, "state": "CA" }, { "_id": "92627", "city": "COSTA MESA", "loc": [ -117.917667, 33.647793 ], "pop": 52357, "state": "CA" }, { "_id": "92629", "city": "MONARCH BAY", "loc": [ -117.700483, 33.476964 ], "pop": 25618, "state": "CA" }, { "_id": "92630", "city": "LAKE FOREST", "loc": [ -117.68819, 33.640015 ], "pop": 51666, "state": "CA" }, { "_id": "92631", "city": "FULLERTON", "loc": [ -117.89157, 33.880519 ], "pop": 28902, "state": "CA" }, { "_id": "92632", "city": "FULLERTON", "loc": [ -117.928376, 33.865848 ], "pop": 21680, "state": "CA" }, { "_id": "92633", "city": "FULLERTON", "loc": [ -117.961043, 33.873913 ], "pop": 42033, "state": "CA" }, { "_id": "92635", "city": "FULLERTON", "loc": [ -117.927801, 33.901181 ], "pop": 10531, "state": "CA" }, { "_id": "92640", "city": "GARDEN GROVE", "loc": [ -117.92906, 33.785826 ], "pop": 43908, "state": "CA" }, { "_id": "92641", "city": "GARDEN GROVE", "loc": [ -117.975526, 33.786651 ], "pop": 29308, "state": "CA" }, { "_id": "92643", "city": "GARDEN GROVE", "loc": [ -117.930193, 33.762641 ], "pop": 39473, "state": "CA" }, { "_id": "92644", "city": "GARDEN GROVE", "loc": [ -117.96935, 33.765532 ], "pop": 20467, "state": "CA" }, { "_id": "92645", "city": "GARDEN GROVE", "loc": [ -118.02639, 33.78324 ], "pop": 16398, "state": "CA" }, { "_id": "92646", "city": "HUNTINGTON BEACH", "loc": [ -117.967771, 33.668448 ], "pop": 57915, "state": "CA" }, { "_id": "92647", "city": "HUNTINGTON BEACH", "loc": [ -118.003035, 33.721018 ], "pop": 56565, "state": "CA" }, { "_id": "92648", "city": "HUNTINGTON BEACH", "loc": [ -117.999012, 33.674577 ], "pop": 34997, "state": "CA" }, { "_id": "92649", "city": "HUNTINGTON BEACH", "loc": [ -118.045142, 33.719111 ], "pop": 34065, "state": "CA" }, { "_id": "92651", "city": "LAGUNA NIGUEL", "loc": [ -117.772351, 33.542927 ], "pop": 20315, "state": "CA" }, { "_id": "92653", "city": "LAGUNA HILLS", "loc": [ -117.70854, 33.60028 ], "pop": 45283, "state": "CA" }, { "_id": "92655", "city": "MIDWAY CITY", "loc": [ -117.983539, 33.744794 ], "pop": 6224, "state": "CA" }, { "_id": "92656", "city": "ALISO VIEJO", "loc": [ -117.708906, 33.572367 ], "pop": 16455, "state": "CA" }, { "_id": "92657", "city": "NEWPORT BEACH", "loc": [ -117.855317, 33.596382 ], "pop": 8254, "state": "CA" }, { "_id": "92660", "city": "NEWPORT BEACH", "loc": [ -117.8757, 33.630027 ], "pop": 25390, "state": "CA" }, { "_id": "92661", "city": "NEWPORT BEACH", "loc": [ -117.906237, 33.604429 ], "pop": 6123, "state": "CA" }, { "_id": "92662", "city": "NEWPORT BEACH", "loc": [ -117.891732, 33.606459 ], "pop": 3472, "state": "CA" }, { "_id": "92663", "city": "NEWPORT BEACH", "loc": [ -117.92788, 33.623084 ], "pop": 19826, "state": "CA" }, { "_id": "92665", "city": "ORANGE", "loc": [ -117.844903, 33.83096 ], "pop": 16566, "state": "CA" }, { "_id": "92666", "city": "ORANGE", "loc": [ -117.845461, 33.785258 ], "pop": 13811, "state": "CA" }, { "_id": "92667", "city": "VILLA PARK", "loc": [ -117.828421, 33.81036 ], "pop": 40937, "state": "CA" }, { "_id": "92668", "city": "ORANGE", "loc": [ -117.87532, 33.786481 ], "pop": 20139, "state": "CA" }, { "_id": "92669", "city": "ORANGE", "loc": [ -117.800285, 33.791672 ], "pop": 31583, "state": "CA" }, { "_id": "92670", "city": "PLACENTIA", "loc": [ -117.859837, 33.880323 ], "pop": 47174, "state": "CA" }, { "_id": "92672", "city": "SAN CLEMENTE", "loc": [ -117.610139, 33.430809 ], "pop": 46719, "state": "CA" }, { "_id": "92675", "city": "MISSION VIEJO", "loc": [ -117.657409, 33.511714 ], "pop": 28121, "state": "CA" }, { "_id": "92677", "city": "LAGUNA NIGUEL", "loc": [ -117.705154, 33.522871 ], "pop": 40072, "state": "CA" }, { "_id": "92679", "city": "COTO DE CAZA", "loc": [ -117.577709, 33.634576 ], "pop": 6067, "state": "CA" }, { "_id": "92680", "city": "TUSTIN", "loc": [ -117.819193, 33.73713 ], "pop": 51150, "state": "CA" }, { "_id": "92683", "city": "WESTMINSTER", "loc": [ -117.991312, 33.752756 ], "pop": 77965, "state": "CA" }, { "_id": "92686", "city": "YORBA LINDA", "loc": [ -117.799619, 33.888361 ], "pop": 41141, "state": "CA" }, { "_id": "92687", "city": "YORBA LINDA", "loc": [ -117.731162, 33.88238 ], "pop": 14429, "state": "CA" }, { "_id": "92688", "city": "RANCHO SANTA MAR", "loc": [ -117.588388, 33.651822 ], "pop": 9489, "state": "CA" }, { "_id": "92691", "city": "MISSION VIEJO", "loc": [ -117.664119, 33.617155 ], "pop": 48832, "state": "CA" }, { "_id": "92692", "city": "MISSION VIEJO", "loc": [ -117.64245, 33.610872 ], "pop": 30777, "state": "CA" }, { "_id": "92701", "city": "SANTA ANA", "loc": [ -117.857665, 33.75016 ], "pop": 63544, "state": "CA" }, { "_id": "92703", "city": "SANTA ANA", "loc": [ -117.899589, 33.746613 ], "pop": 63104, "state": "CA" }, { "_id": "92704", "city": "SANTA ANA", "loc": [ -117.904683, 33.726513 ], "pop": 77151, "state": "CA" }, { "_id": "92705", "city": "COWAN HEIGHTS", "loc": [ -117.768902, 33.74866 ], "pop": 37045, "state": "CA" }, { "_id": "92706", "city": "SANTA ANA", "loc": [ -117.881791, 33.764434 ], "pop": 30673, "state": "CA" }, { "_id": "92707", "city": "SANTA ANA HEIGHT", "loc": [ -117.870346, 33.715938 ], "pop": 56450, "state": "CA" }, { "_id": "92708", "city": "FOUNTAIN VALLEY", "loc": [ -117.952318, 33.710762 ], "pop": 54803, "state": "CA" }, { "_id": "92709", "city": "EL TORO MARINE C", "loc": [ -117.715018, 33.681287 ], "pop": 8078, "state": "CA" }, { "_id": "92714", "city": "IRVINE", "loc": [ -117.798928, 33.68764 ], "pop": 60654, "state": "CA" }, { "_id": "92715", "city": "IRVINE", "loc": [ -117.821251, 33.650884 ], "pop": 30690, "state": "CA" }, { "_id": "92718", "city": "IRVINE", "loc": [ -117.711476, 33.658179 ], "pop": 1, "state": "CA" }, { "_id": "92720", "city": "IRVINE", "loc": [ -117.765533, 33.707495 ], "pop": 23474, "state": "CA" }, { "_id": "92801", "city": "ANAHEIM", "loc": [ -117.954035, 33.842679 ], "pop": 47392, "state": "CA" }, { "_id": "92802", "city": "ANAHEIM", "loc": [ -117.92219, 33.806909 ], "pop": 36262, "state": "CA" }, { "_id": "92804", "city": "ANAHEIM", "loc": [ -117.974985, 33.81908 ], "pop": 63622, "state": "CA" }, { "_id": "92805", "city": "ANAHEIM", "loc": [ -117.906263, 33.835332 ], "pop": 55489, "state": "CA" }, { "_id": "92806", "city": "ANAHEIM", "loc": [ -117.875928, 33.837344 ], "pop": 27945, "state": "CA" }, { "_id": "92807", "city": "ANAHEIM", "loc": [ -117.787657, 33.851583 ], "pop": 35411, "state": "CA" }, { "_id": "92808", "city": "ANAHEIM", "loc": [ -117.748445, 33.857569 ], "pop": 6206, "state": "CA" }, { "_id": "93001", "city": "SAN BUENAVENTURA", "loc": [ -119.28882, 34.290531 ], "pop": 31453, "state": "CA" }, { "_id": "93003", "city": "SAN BUENAVENTURA", "loc": [ -119.2214, 34.270568 ], "pop": 44627, "state": "CA" }, { "_id": "93004", "city": "SAN BUENAVENTURA", "loc": [ -119.168727, 34.278091 ], "pop": 23430, "state": "CA" }, { "_id": "93010", "city": "CAMARILLO", "loc": [ -119.046361, 34.231328 ], "pop": 40173, "state": "CA" }, { "_id": "93012", "city": "CAMARILLO", "loc": [ -118.986648, 34.22179 ], "pop": 23489, "state": "CA" }, { "_id": "93013", "city": "CARPINTERIA", "loc": [ -119.518257, 34.403589 ], "pop": 16591, "state": "CA" }, { "_id": "93015", "city": "BARDSDALE", "loc": [ -118.904071, 34.402557 ], "pop": 15311, "state": "CA" }, { "_id": "93021", "city": "MOORPARK", "loc": [ -118.877139, 34.278421 ], "pop": 27011, "state": "CA" }, { "_id": "93022", "city": "OAK VIEW", "loc": [ -119.298168, 34.402021 ], "pop": 5611, "state": "CA" }, { "_id": "93023", "city": "OJAI", "loc": [ -119.256477, 34.44512 ], "pop": 22778, "state": "CA" }, { "_id": "93030", "city": "OXNARD", "loc": [ -119.174952, 34.214142 ], "pop": 66240, "state": "CA" }, { "_id": "93033", "city": "OXNARD", "loc": [ -119.171732, 34.168505 ], "pop": 66043, "state": "CA" }, { "_id": "93035", "city": "OXNARD", "loc": [ -119.215975, 34.182177 ], "pop": 23778, "state": "CA" }, { "_id": "93041", "city": "PORT HUENEME", "loc": [ -119.197317, 34.162572 ], "pop": 17337, "state": "CA" }, { "_id": "93042", "city": "POINT MUGU NAWC", "loc": [ -119.09931, 34.123432 ], "pop": 1707, "state": "CA" }, { "_id": "93043", "city": "PORT HUENEME CBC", "loc": [ -119.206008, 34.16212 ], "pop": 3389, "state": "CA" }, { "_id": "93060", "city": "SANTA PAULA", "loc": [ -119.071328, 34.354718 ], "pop": 28319, "state": "CA" }, { "_id": "93063", "city": "SANTA SUSANA", "loc": [ -118.699229, 34.279202 ], "pop": 47637, "state": "CA" }, { "_id": "93065", "city": "SIMI VALLEY", "loc": [ -118.765349, 34.265589 ], "pop": 55528, "state": "CA" }, { "_id": "93066", "city": "SOMIS", "loc": [ -119.011537, 34.279753 ], "pop": 3025, "state": "CA" }, { "_id": "93067", "city": "SUMMERLAND", "loc": [ -119.596016, 34.424541 ], "pop": 1330, "state": "CA" }, { "_id": "93101", "city": "SANTA BARBARA", "loc": [ -119.70782, 34.419668 ], "pop": 29235, "state": "CA" }, { "_id": "93103", "city": "SANTA BARBARA", "loc": [ -119.683275, 34.429065 ], "pop": 18199, "state": "CA" }, { "_id": "93105", "city": "SANTA BARBARA", "loc": [ -119.728538, 34.436915 ], "pop": 23284, "state": "CA" }, { "_id": "93108", "city": "MONTECITO", "loc": [ -119.64255, 34.434258 ], "pop": 12923, "state": "CA" }, { "_id": "93109", "city": "SANTA BARBARA", "loc": [ -119.7194, 34.403848 ], "pop": 11089, "state": "CA" }, { "_id": "93110", "city": "SANTA BARBARA", "loc": [ -119.764668, 34.441814 ], "pop": 15352, "state": "CA" }, { "_id": "93111", "city": "SANTA BARBARA", "loc": [ -119.802509, 34.445262 ], "pop": 17689, "state": "CA" }, { "_id": "93117", "city": "GOLETA", "loc": [ -119.861245, 34.429631 ], "pop": 45988, "state": "CA" }, { "_id": "93202", "city": "ARMONA", "loc": [ -119.705279, 36.309459 ], "pop": 752, "state": "CA" }, { "_id": "93203", "city": "ARVIN", "loc": [ -118.8336, 35.196629 ], "pop": 10613, "state": "CA" }, { "_id": "93204", "city": "AVENAL", "loc": [ -120.122716, 35.987667 ], "pop": 9882, "state": "CA" }, { "_id": "93205", "city": "BODFISH", "loc": [ -118.484656, 35.587046 ], "pop": 1407, "state": "CA" }, { "_id": "93206", "city": "BUTTONWILLOW", "loc": [ -119.465926, 35.403268 ], "pop": 1975, "state": "CA" }, { "_id": "93207", "city": "CALIFORNIA HOT S", "loc": [ -118.646317, 35.892422 ], "pop": 436, "state": "CA" }, { "_id": "93210", "city": "COALINGA", "loc": [ -120.348928, 36.162435 ], "pop": 9579, "state": "CA" }, { "_id": "93212", "city": "CORCORAN", "loc": [ -119.560665, 36.086455 ], "pop": 16228, "state": "CA" }, { "_id": "93214", "city": "CUYAMA", "loc": [ -119.661339, 34.933694 ], "pop": 808, "state": "CA" }, { "_id": "93215", "city": "DELANO", "loc": [ -119.24594, 35.771511 ], "pop": 23803, "state": "CA" }, { "_id": "93217", "city": "DI GIORGIO", "loc": [ -118.846755, 35.247604 ], "pop": 258, "state": "CA" }, { "_id": "93219", "city": "EARLIMART", "loc": [ -119.253406, 35.854195 ], "pop": 11963, "state": "CA" }, { "_id": "93221", "city": "EXETER", "loc": [ -119.12928, 36.304055 ], "pop": 11088, "state": "CA" }, { "_id": "93223", "city": "FARMERSVILLE", "loc": [ -119.205357, 36.300169 ], "pop": 6432, "state": "CA" }, { "_id": "93224", "city": "FELLOWS", "loc": [ -119.564757, 35.202579 ], "pop": 521, "state": "CA" }, { "_id": "93225", "city": "FRAZIER PARK", "loc": [ -119.035488, 34.826463 ], "pop": 5257, "state": "CA" }, { "_id": "93226", "city": "GLENNVILLE", "loc": [ -118.71693, 35.737677 ], "pop": 346, "state": "CA" }, { "_id": "93230", "city": "HANFORD", "loc": [ -119.649094, 36.331419 ], "pop": 44686, "state": "CA" }, { "_id": "93234", "city": "HURON", "loc": [ -120.101964, 36.237144 ], "pop": 7050, "state": "CA" }, { "_id": "93235", "city": "IVANHOE", "loc": [ -119.218884, 36.385622 ], "pop": 3326, "state": "CA" }, { "_id": "93238", "city": "KERNVILLE", "loc": [ -118.404723, 35.755005 ], "pop": 812, "state": "CA" }, { "_id": "93239", "city": "KETTLEMAN CITY", "loc": [ -119.964361, 36.021501 ], "pop": 1762, "state": "CA" }, { "_id": "93240", "city": "MOUNTAIN MESA", "loc": [ -118.441256, 35.617889 ], "pop": 6285, "state": "CA" }, { "_id": "93241", "city": "LAMONT", "loc": [ -118.912419, 35.257059 ], "pop": 13471, "state": "CA" }, { "_id": "93242", "city": "LATON", "loc": [ -119.715565, 36.437834 ], "pop": 2860, "state": "CA" }, { "_id": "93243", "city": "GORMAN", "loc": [ -118.879126, 34.828862 ], "pop": 1103, "state": "CA" }, { "_id": "93244", "city": "LEMONCOVE", "loc": [ -119.004986, 36.396084 ], "pop": 64, "state": "CA" }, { "_id": "93245", "city": "LEMOORE NAVAL AI", "loc": [ -119.831017, 36.309535 ], "pop": 26170, "state": "CA" }, { "_id": "93247", "city": "LINDSAY", "loc": [ -119.088427, 36.209551 ], "pop": 12983, "state": "CA" }, { "_id": "93249", "city": "LOST HILLS", "loc": [ -119.721573, 35.613111 ], "pop": 2373, "state": "CA" }, { "_id": "93250", "city": "MC FARLAND", "loc": [ -119.227156, 35.675779 ], "pop": 8494, "state": "CA" }, { "_id": "93251", "city": "MC KITTRICK", "loc": [ -119.636627, 35.303097 ], "pop": 616, "state": "CA" }, { "_id": "93252", "city": "MARICOPA", "loc": [ -119.407661, 35.038353 ], "pop": 1571, "state": "CA" }, { "_id": "93254", "city": "NEW CUYAMA", "loc": [ -119.823806, 34.996709 ], "pop": 80, "state": "CA" }, { "_id": "93255", "city": "ONYX", "loc": [ -118.190227, 35.713584 ], "pop": 380, "state": "CA" }, { "_id": "93256", "city": "PIXLEY", "loc": [ -119.256427, 35.955286 ], "pop": 4768, "state": "CA" }, { "_id": "93257", "city": "PORTERVILLE", "loc": [ -119.031549, 36.068636 ], "pop": 54599, "state": "CA" }, { "_id": "93260", "city": "POSEY", "loc": [ -118.664286, 35.813496 ], "pop": 253, "state": "CA" }, { "_id": "93262", "city": "GIANT FOREST", "loc": [ -118.772271, 36.573878 ], "pop": 132, "state": "CA" }, { "_id": "93263", "city": "SHAFTER", "loc": [ -119.280075, 35.496994 ], "pop": 12270, "state": "CA" }, { "_id": "93265", "city": "SPRINGVILLE", "loc": [ -118.796059, 36.136314 ], "pop": 3374, "state": "CA" }, { "_id": "93266", "city": "STRATFORD", "loc": [ -119.823564, 36.178976 ], "pop": 1135, "state": "CA" }, { "_id": "93267", "city": "STRATHMORE", "loc": [ -119.079163, 36.147237 ], "pop": 4774, "state": "CA" }, { "_id": "93268", "city": "TAFT", "loc": [ -119.455674, 35.148164 ], "pop": 15046, "state": "CA" }, { "_id": "93270", "city": "TERRA BELLA", "loc": [ -119.031239, 35.95698 ], "pop": 5066, "state": "CA" }, { "_id": "93271", "city": "THREE RIVERS", "loc": [ -118.88754, 36.437686 ], "pop": 2245, "state": "CA" }, { "_id": "93272", "city": "TIPTON", "loc": [ -119.30781, 36.054567 ], "pop": 2365, "state": "CA" }, { "_id": "93274", "city": "TULARE", "loc": [ -119.33802, 36.202155 ], "pop": 45567, "state": "CA" }, { "_id": "93276", "city": "TUPMAN", "loc": [ -119.341994, 35.288547 ], "pop": 280, "state": "CA" }, { "_id": "93277", "city": "VISALIA", "loc": [ -119.306471, 36.311379 ], "pop": 51620, "state": "CA" }, { "_id": "93280", "city": "POND", "loc": [ -119.344728, 35.593375 ], "pop": 13589, "state": "CA" }, { "_id": "93283", "city": "WELDON", "loc": [ -118.285856, 35.639076 ], "pop": 2049, "state": "CA" }, { "_id": "93285", "city": "WOFFORD HEIGHTS", "loc": [ -118.455877, 35.724556 ], "pop": 3480, "state": "CA" }, { "_id": "93286", "city": "WOODLAKE", "loc": [ -119.091764, 36.431334 ], "pop": 8421, "state": "CA" }, { "_id": "93287", "city": "WOODY", "loc": [ -118.843872, 35.70681 ], "pop": 72, "state": "CA" }, { "_id": "93291", "city": "VISALIA", "loc": [ -119.301029, 36.355108 ], "pop": 46656, "state": "CA" }, { "_id": "93301", "city": "BAKERSFIELD", "loc": [ -119.017063, 35.386611 ], "pop": 12822, "state": "CA" }, { "_id": "93304", "city": "BAKERSFIELD", "loc": [ -119.021793, 35.339581 ], "pop": 41870, "state": "CA" }, { "_id": "93305", "city": "COLLEGE HEIGHTS", "loc": [ -118.982042, 35.387772 ], "pop": 34046, "state": "CA" }, { "_id": "93306", "city": "BAKERSFIELD", "loc": [ -118.939104, 35.386697 ], "pop": 46699, "state": "CA" }, { "_id": "93307", "city": "BAKERSFIELD", "loc": [ -118.983851, 35.327484 ], "pop": 50585, "state": "CA" }, { "_id": "93308", "city": "BAKERSFIELD", "loc": [ -119.043319, 35.424395 ], "pop": 39454, "state": "CA" }, { "_id": "93309", "city": "BAKERSFIELD", "loc": [ -119.062713, 35.33839 ], "pop": 58179, "state": "CA" }, { "_id": "93311", "city": "BAKERSFIELD", "loc": [ -119.105647, 35.303891 ], "pop": 10321, "state": "CA" }, { "_id": "93312", "city": "GREENACRES", "loc": [ -119.15014, 35.382082 ], "pop": 15935, "state": "CA" }, { "_id": "93313", "city": "BAKERSFIELD", "loc": [ -119.050936, 35.297391 ], "pop": 11417, "state": "CA" }, { "_id": "93401", "city": "SAN LUIS OBISPO", "loc": [ -120.650933, 35.263453 ], "pop": 24638, "state": "CA" }, { "_id": "93402", "city": "LOS OSOS", "loc": [ -120.833261, 35.317203 ], "pop": 14648, "state": "CA" }, { "_id": "93405", "city": "SAN LUIS OBISPO", "loc": [ -120.681724, 35.290058 ], "pop": 31976, "state": "CA" }, { "_id": "93420", "city": "HALCYON", "loc": [ -120.57289, 35.11449 ], "pop": 21992, "state": "CA" }, { "_id": "93422", "city": "ATASCADERO", "loc": [ -120.663838, 35.475439 ], "pop": 27720, "state": "CA" }, { "_id": "93426", "city": "BRADLEY", "loc": [ -120.972793, 35.809255 ], "pop": 862, "state": "CA" }, { "_id": "93427", "city": "BUELLTON", "loc": [ -120.192233, 34.62093 ], "pop": 3883, "state": "CA" }, { "_id": "93428", "city": "CAMBRIA", "loc": [ -121.084029, 35.556568 ], "pop": 5635, "state": "CA" }, { "_id": "93430", "city": "CAYUCOS", "loc": [ -120.890791, 35.444606 ], "pop": 3384, "state": "CA" }, { "_id": "93431", "city": "CHOLAME", "loc": [ -120.194827, 35.543847 ], "pop": 206, "state": "CA" }, { "_id": "93432", "city": "CRESTON", "loc": [ -120.554238, 35.491543 ], "pop": 726, "state": "CA" }, { "_id": "93433", "city": "GROVER BEACH", "loc": [ -120.617348, 35.120969 ], "pop": 11790, "state": "CA" }, { "_id": "93434", "city": "GUADALUPE", "loc": [ -120.570329, 34.959989 ], "pop": 6064, "state": "CA" }, { "_id": "93436", "city": "LOMPOC", "loc": [ -120.450605, 34.658349 ], "pop": 49960, "state": "CA" }, { "_id": "93437", "city": "LOMPOC", "loc": [ -120.517096, 34.753215 ], "pop": 9846, "state": "CA" }, { "_id": "93442", "city": "MORRO BAY", "loc": [ -120.844745, 35.37953 ], "pop": 10475, "state": "CA" }, { "_id": "93444", "city": "NIPOMO", "loc": [ -120.489413, 35.029806 ], "pop": 11070, "state": "CA" }, { "_id": "93445", "city": "OCEANO", "loc": [ -120.608044, 35.10187 ], "pop": 6249, "state": "CA" }, { "_id": "93446", "city": "ADELAIDE", "loc": [ -120.670676, 35.635248 ], "pop": 29255, "state": "CA" }, { "_id": "93449", "city": "SHELL BEACH", "loc": [ -120.651788, 35.149212 ], "pop": 7474, "state": "CA" }, { "_id": "93450", "city": "SAN ARDO", "loc": [ -120.861191, 35.985685 ], "pop": 1684, "state": "CA" }, { "_id": "93451", "city": "PARKFIELD", "loc": [ -120.696532, 35.753209 ], "pop": 1218, "state": "CA" }, { "_id": "93452", "city": "SAN SIMEON", "loc": [ -121.144033, 35.666815 ], "pop": 500, "state": "CA" }, { "_id": "93453", "city": "CALIFORNIA VALLE", "loc": [ -120.3202, 35.341254 ], "pop": 1237, "state": "CA" }, { "_id": "93454", "city": "SANTA MARIA", "loc": [ -120.43245, 34.954538 ], "pop": 60187, "state": "CA" }, { "_id": "93455", "city": "ORCUTT", "loc": [ -120.429128, 34.879786 ], "pop": 32891, "state": "CA" }, { "_id": "93460", "city": "SANTA YNEZ", "loc": [ -120.071332, 34.623966 ], "pop": 5659, "state": "CA" }, { "_id": "93461", "city": "SHANDON", "loc": [ -120.372047, 35.651273 ], "pop": 908, "state": "CA" }, { "_id": "93463", "city": "BALLARD", "loc": [ -120.129286, 34.609931 ], "pop": 8327, "state": "CA" }, { "_id": "93465", "city": "TEMPLETON", "loc": [ -120.710737, 35.555082 ], "pop": 5795, "state": "CA" }, { "_id": "93501", "city": "MOJAVE", "loc": [ -118.173475, 35.047767 ], "pop": 4774, "state": "CA" }, { "_id": "93505", "city": "CALIFORNIA CITY", "loc": [ -117.965142, 35.127783 ], "pop": 6086, "state": "CA" }, { "_id": "93510", "city": "ACTON", "loc": [ -118.195929, 34.483541 ], "pop": 6139, "state": "CA" }, { "_id": "93512", "city": "BENTON", "loc": [ -118.498526, 37.798099 ], "pop": 241, "state": "CA" }, { "_id": "93513", "city": "BIG PINE", "loc": [ -118.291597, 37.167857 ], "pop": 1642, "state": "CA" }, { "_id": "93514", "city": "TOMS PLACE", "loc": [ -118.44156, 37.386301 ], "pop": 14072, "state": "CA" }, { "_id": "93516", "city": "BORON", "loc": [ -117.662921, 35.003748 ], "pop": 2904, "state": "CA" }, { "_id": "93517", "city": "BRIDGEPORT", "loc": [ -119.208025, 38.256601 ], "pop": 697, "state": "CA" }, { "_id": "93518", "city": "HAVILAH", "loc": [ -118.410264, 35.356798 ], "pop": 899, "state": "CA" }, { "_id": "93519", "city": "CANTIL", "loc": [ -117.993868, 35.282558 ], "pop": 222, "state": "CA" }, { "_id": "93523", "city": "NORTH EDWARDS", "loc": [ -117.915384, 34.930507 ], "pop": 8996, "state": "CA" }, { "_id": "93526", "city": "INDEPENDENCE", "loc": [ -118.204808, 36.839578 ], "pop": 889, "state": "CA" }, { "_id": "93527", "city": "PEARSONVILLE", "loc": [ -117.834844, 35.674498 ], "pop": 2633, "state": "CA" }, { "_id": "93528", "city": "JOHANNESBURG", "loc": [ -117.637325, 35.370655 ], "pop": 306, "state": "CA" }, { "_id": "93529", "city": "JUNE LAKE", "loc": [ -119.082492, 37.777324 ], "pop": 609, "state": "CA" }, { "_id": "93531", "city": "KEENE", "loc": [ -118.607563, 35.237502 ], "pop": 455, "state": "CA" }, { "_id": "93532", "city": "ELIZABETH LAKE", "loc": [ -118.444719, 34.668297 ], "pop": 2337, "state": "CA" }, { "_id": "93534", "city": "LANCASTER", "loc": [ -118.149129, 34.690888 ], "pop": 32929, "state": "CA" }, { "_id": "93535", "city": "HI VISTA", "loc": [ -118.063245, 34.684751 ], "pop": 49751, "state": "CA" }, { "_id": "93536", "city": "QUARTZ HILL", "loc": [ -118.213336, 34.673619 ], "pop": 39987, "state": "CA" }, { "_id": "93541", "city": "LEE VINING", "loc": [ -119.123413, 37.988988 ], "pop": 415, "state": "CA" }, { "_id": "93543", "city": "JUNIPER HILLS", "loc": [ -117.957405, 34.547372 ], "pop": 10046, "state": "CA" }, { "_id": "93544", "city": "CRYSTALAIRE", "loc": [ -117.798841, 34.495914 ], "pop": 1204, "state": "CA" }, { "_id": "93545", "city": "LONE PINE", "loc": [ -118.057824, 36.579781 ], "pop": 2257, "state": "CA" }, { "_id": "93546", "city": "CROWLEY LAKE", "loc": [ -118.976383, 37.642361 ], "pop": 4832, "state": "CA" }, { "_id": "93550", "city": "LAKE LOS ANGELES", "loc": [ -118.061306, 34.571483 ], "pop": 71024, "state": "CA" }, { "_id": "93551", "city": "LEONA VALLEY", "loc": [ -118.181207, 34.601404 ], "pop": 20768, "state": "CA" }, { "_id": "93553", "city": "JUNIPER HILLS", "loc": [ -117.902893, 34.491124 ], "pop": 1106, "state": "CA" }, { "_id": "93554", "city": "RANDSBURG", "loc": [ -117.726396, 35.352176 ], "pop": 190, "state": "CA" }, { "_id": "93555", "city": "CHINA LAKE NWC", "loc": [ -117.679733, 35.631376 ], "pop": 34246, "state": "CA" }, { "_id": "93560", "city": "WILLOW SPRINGS", "loc": [ -118.19636, 34.863117 ], "pop": 9898, "state": "CA" }, { "_id": "93561", "city": "BEAR VALLEY SPRI", "loc": [ -118.522227, 35.129776 ], "pop": 24466, "state": "CA" }, { "_id": "93562", "city": "ARGUS", "loc": [ -117.382992, 35.760817 ], "pop": 3189, "state": "CA" }, { "_id": "93563", "city": "VALYERMO", "loc": [ -117.8271, 34.339014 ], "pop": 1456, "state": "CA" }, { "_id": "93601", "city": "AHWAHNEE", "loc": [ -119.723251, 37.407631 ], "pop": 327, "state": "CA" }, { "_id": "93602", "city": "AUBERRY", "loc": [ -119.457202, 37.072635 ], "pop": 3179, "state": "CA" }, { "_id": "93604", "city": "BASS LAKE", "loc": [ -119.556839, 37.324359 ], "pop": 628, "state": "CA" }, { "_id": "93608", "city": "CANTUA CREEK", "loc": [ -120.335252, 36.492123 ], "pop": 1622, "state": "CA" }, { "_id": "93609", "city": "CARUTHERS", "loc": [ -119.844581, 36.535847 ], "pop": 4558, "state": "CA" }, { "_id": "93610", "city": "CHOWCHILLA", "loc": [ -120.269077, 37.101371 ], "pop": 10745, "state": "CA" }, { "_id": "93612", "city": "CLOVIS", "loc": [ -119.689757, 36.823146 ], "pop": 59963, "state": "CA" }, { "_id": "93614", "city": "COARSEGOLD", "loc": [ -119.745545, 37.221378 ], "pop": 6950, "state": "CA" }, { "_id": "93615", "city": "CUTLER", "loc": [ -119.287023, 36.524266 ], "pop": 4901, "state": "CA" }, { "_id": "93616", "city": "DEL REY", "loc": [ -119.59291, 36.654306 ], "pop": 1923, "state": "CA" }, { "_id": "93618", "city": "DINUBA", "loc": [ -119.39087, 36.534931 ], "pop": 20012, "state": "CA" }, { "_id": "93620", "city": "DOS PALOS", "loc": [ -120.633348, 37.00253 ], "pop": 9311, "state": "CA" }, { "_id": "93621", "city": "DUNLAP", "loc": [ -119.089931, 36.744635 ], "pop": 94, "state": "CA" }, { "_id": "93622", "city": "FIREBAUGH", "loc": [ -120.470048, 36.8651 ], "pop": 7435, "state": "CA" }, { "_id": "93623", "city": "FISH CAMP", "loc": [ -119.642005, 37.51692 ], "pop": 132, "state": "CA" }, { "_id": "93625", "city": "FOWLER", "loc": [ -119.671025, 36.628153 ], "pop": 5290, "state": "CA" }, { "_id": "93626", "city": "FRIANT", "loc": [ -119.696501, 37.002416 ], "pop": 871, "state": "CA" }, { "_id": "93627", "city": "HELM", "loc": [ -120.093598, 36.499231 ], "pop": 832, "state": "CA" }, { "_id": "93630", "city": "KERMAN", "loc": [ -120.072444, 36.730576 ], "pop": 11224, "state": "CA" }, { "_id": "93631", "city": "KINGSBURG", "loc": [ -119.543298, 36.508047 ], "pop": 12263, "state": "CA" }, { "_id": "93633", "city": "KINGS CANYON NAT", "loc": [ -119.068201, 36.780601 ], "pop": 472, "state": "CA" }, { "_id": "93635", "city": "LOS BANOS", "loc": [ -120.854387, 37.06266 ], "pop": 18199, "state": "CA" }, { "_id": "93637", "city": "MADERA", "loc": [ -120.081966, 36.94026 ], "pop": 20440, "state": "CA" }, { "_id": "93638", "city": "MADERA", "loc": [ -120.012778, 36.968726 ], "pop": 36525, "state": "CA" }, { "_id": "93640", "city": "MENDOTA", "loc": [ -120.409287, 36.742365 ], "pop": 8839, "state": "CA" }, { "_id": "93641", "city": "MIRAMONTE", "loc": [ -119.047718, 36.68938 ], "pop": 607, "state": "CA" }, { "_id": "93643", "city": "NORTH FORK", "loc": [ -119.514324, 37.212531 ], "pop": 2541, "state": "CA" }, { "_id": "93644", "city": "OAKHURST", "loc": [ -119.644854, 37.347561 ], "pop": 8190, "state": "CA" }, { "_id": "93645", "city": "O NEALS", "loc": [ -119.745369, 37.086874 ], "pop": 24, "state": "CA" }, { "_id": "93646", "city": "ORANGE COVE", "loc": [ -119.313502, 36.624283 ], "pop": 6374, "state": "CA" }, { "_id": "93647", "city": "OROSI", "loc": [ -119.281522, 36.546368 ], "pop": 7545, "state": "CA" }, { "_id": "93648", "city": "PARLIER", "loc": [ -119.537482, 36.610265 ], "pop": 9076, "state": "CA" }, { "_id": "93650", "city": "PINEDALE", "loc": [ -119.800359, 36.841107 ], "pop": 4164, "state": "CA" }, { "_id": "93651", "city": "PRATHER", "loc": [ -119.526771, 36.993799 ], "pop": 1446, "state": "CA" }, { "_id": "93652", "city": "RAISIN", "loc": [ -119.903158, 36.598928 ], "pop": 381, "state": "CA" }, { "_id": "93653", "city": "RAYMOND", "loc": [ -119.876567, 37.27898 ], "pop": 491, "state": "CA" }, { "_id": "93654", "city": "REEDLEY", "loc": [ -119.437785, 36.604406 ], "pop": 22370, "state": "CA" }, { "_id": "93656", "city": "RIVERDALE", "loc": [ -119.871953, 36.429525 ], "pop": 4386, "state": "CA" }, { "_id": "93657", "city": "SANGER", "loc": [ -119.547796, 36.7243 ], "pop": 27201, "state": "CA" }, { "_id": "93660", "city": "SAN JOAQUIN", "loc": [ -120.188934, 36.605869 ], "pop": 2727, "state": "CA" }, { "_id": "93662", "city": "SELMA", "loc": [ -119.617026, 36.569524 ], "pop": 21798, "state": "CA" }, { "_id": "93664", "city": "SHAVER LAKE", "loc": [ -119.273031, 37.139695 ], "pop": 925, "state": "CA" }, { "_id": "93667", "city": "TOLLHOUSE", "loc": [ -119.391415, 36.99434 ], "pop": 1820, "state": "CA" }, { "_id": "93668", "city": "TRANQUILLITY", "loc": [ -120.261655, 36.658376 ], "pop": 1297, "state": "CA" }, { "_id": "93669", "city": "WISHON", "loc": [ -119.557014, 37.281028 ], "pop": 474, "state": "CA" }, { "_id": "93675", "city": "SQUAW VALLEY", "loc": [ -119.181449, 36.707146 ], "pop": 2731, "state": "CA" }, { "_id": "93701", "city": "FRESNO", "loc": [ -119.786705, 36.748727 ], "pop": 15024, "state": "CA" }, { "_id": "93702", "city": "FRESNO", "loc": [ -119.753215, 36.739954 ], "pop": 44477, "state": "CA" }, { "_id": "93703", "city": "FRESNO", "loc": [ -119.759401, 36.768445 ], "pop": 30457, "state": "CA" }, { "_id": "93704", "city": "FIG GARDEN VILLA", "loc": [ -119.799745, 36.798781 ], "pop": 26496, "state": "CA" }, { "_id": "93705", "city": "FRESNO", "loc": [ -119.828617, 36.786285 ], "pop": 34114, "state": "CA" }, { "_id": "93706", "city": "EASTON", "loc": [ -119.820408, 36.700589 ], "pop": 33682, "state": "CA" }, { "_id": "93710", "city": "FRESNO", "loc": [ -119.76205, 36.823643 ], "pop": 29719, "state": "CA" }, { "_id": "93711", "city": "FRESNO", "loc": [ -119.831896, 36.830297 ], "pop": 29809, "state": "CA" }, { "_id": "93720", "city": "FRESNO", "loc": [ -119.765522, 36.857944 ], "pop": 21498, "state": "CA" }, { "_id": "93721", "city": "FRESNO", "loc": [ -119.784273, 36.737714 ], "pop": 6156, "state": "CA" }, { "_id": "93722", "city": "FRESNO", "loc": [ -119.880119, 36.791779 ], "pop": 33523, "state": "CA" }, { "_id": "93725", "city": "CALWA", "loc": [ -119.742477, 36.675312 ], "pop": 19698, "state": "CA" }, { "_id": "93726", "city": "FRESNO", "loc": [ -119.760445, 36.794943 ], "pop": 36325, "state": "CA" }, { "_id": "93727", "city": "FRESNO", "loc": [ -119.706055, 36.752796 ], "pop": 51417, "state": "CA" }, { "_id": "93728", "city": "FRESNO", "loc": [ -119.811314, 36.758095 ], "pop": 15386, "state": "CA" }, { "_id": "93901", "city": "SALINAS", "loc": [ -121.659589, 36.667693 ], "pop": 25605, "state": "CA" }, { "_id": "93905", "city": "SALINAS", "loc": [ -121.617606, 36.681143 ], "pop": 41956, "state": "CA" }, { "_id": "93906", "city": "SALINAS", "loc": [ -121.643805, 36.710339 ], "pop": 39534, "state": "CA" }, { "_id": "93907", "city": "PRUNEDALE", "loc": [ -121.665588, 36.765385 ], "pop": 21061, "state": "CA" }, { "_id": "93908", "city": "SALINAS", "loc": [ -121.672861, 36.601122 ], "pop": 15610, "state": "CA" }, { "_id": "93920", "city": "BIG SUR", "loc": [ -121.700897, 36.245798 ], "pop": 1669, "state": "CA" }, { "_id": "93923", "city": "CARMEL", "loc": [ -121.894875, 36.545693 ], "pop": 15293, "state": "CA" }, { "_id": "93924", "city": "CARMEL VALLEY", "loc": [ -121.724356, 36.478709 ], "pop": 6066, "state": "CA" }, { "_id": "93925", "city": "CHUALAR", "loc": [ -121.431964, 36.595042 ], "pop": 12, "state": "CA" }, { "_id": "93926", "city": "GONZALES", "loc": [ -121.410347, 36.490038 ], "pop": 12842, "state": "CA" }, { "_id": "93927", "city": "GREENFIELD", "loc": [ -121.24507, 36.320178 ], "pop": 8728, "state": "CA" }, { "_id": "93930", "city": "KING CITY", "loc": [ -121.127329, 36.202776 ], "pop": 11299, "state": "CA" }, { "_id": "93932", "city": "LOCKWOOD", "loc": [ -121.205946, 35.989287 ], "pop": 939, "state": "CA" }, { "_id": "93933", "city": "MARINA", "loc": [ -121.793383, 36.684922 ], "pop": 16973, "state": "CA" }, { "_id": "93940", "city": "DEL REY OAKS", "loc": [ -121.8848, 36.595642 ], "pop": 35326, "state": "CA" }, { "_id": "93941", "city": "FORT ORD", "loc": [ -121.804999, 36.644627 ], "pop": 25009, "state": "CA" }, { "_id": "93950", "city": "PACIFIC GROVE", "loc": [ -121.921957, 36.616737 ], "pop": 16040, "state": "CA" }, { "_id": "93953", "city": "PEBBLE BEACH", "loc": [ -121.942044, 36.590735 ], "pop": 5061, "state": "CA" }, { "_id": "93955", "city": "SAND CITY", "loc": [ -121.835724, 36.609208 ], "pop": 23514, "state": "CA" }, { "_id": "93960", "city": "SOLEDAD", "loc": [ -121.324286, 36.41964 ], "pop": 9046, "state": "CA" }, { "_id": "94002", "city": "BELMONT", "loc": [ -122.292671, 37.517433 ], "pop": 24960, "state": "CA" }, { "_id": "94005", "city": "BRISBANE", "loc": [ -122.400118, 37.681104 ], "pop": 2952, "state": "CA" }, { "_id": "94010", "city": "HILLSBOROUGH", "loc": [ -122.362952, 37.575884 ], "pop": 38444, "state": "CA" }, { "_id": "94014", "city": "COLMA", "loc": [ -122.452679, 37.698187 ], "pop": 40406, "state": "CA" }, { "_id": "94015", "city": "DALY CITY", "loc": [ -122.478015, 37.678696 ], "pop": 57354, "state": "CA" }, { "_id": "94019", "city": "HALF MOON BAY", "loc": [ -122.445929, 37.479057 ], "pop": 14073, "state": "CA" }, { "_id": "94020", "city": "LA HONDA", "loc": [ -122.293889, 37.272285 ], "pop": 1557, "state": "CA" }, { "_id": "94021", "city": "LOMA MAR", "loc": [ -122.281996, 37.254437 ], "pop": 237, "state": "CA" }, { "_id": "94022", "city": "LOS ALTOS", "loc": [ -122.125754, 37.381432 ], "pop": 17366, "state": "CA" }, { "_id": "94024", "city": "LOS ALTOS", "loc": [ -122.086205, 37.354745 ], "pop": 20795, "state": "CA" }, { "_id": "94025", "city": "WEST MENLO PARK", "loc": [ -122.179136, 37.453401 ], "pop": 38383, "state": "CA" }, { "_id": "94027", "city": "ATHERTON", "loc": [ -122.200198, 37.456255 ], "pop": 7312, "state": "CA" }, { "_id": "94028", "city": "LADERA", "loc": [ -122.208131, 37.378859 ], "pop": 6379, "state": "CA" }, { "_id": "94030", "city": "MILLBRAE", "loc": [ -122.401985, 37.600382 ], "pop": 20508, "state": "CA" }, { "_id": "94035", "city": "MOFFETT FIELD", "loc": [ -122.051944, 37.41001 ], "pop": 790, "state": "CA" }, { "_id": "94038", "city": "MOSS BEACH", "loc": [ -122.50683, 37.531039 ], "pop": 5415, "state": "CA" }, { "_id": "94040", "city": "MOUNTAIN VIEW", "loc": [ -122.087983, 37.385532 ], "pop": 26969, "state": "CA" }, { "_id": "94041", "city": "MOUNTAIN VIEW", "loc": [ -122.078341, 37.389347 ], "pop": 13438, "state": "CA" }, { "_id": "94043", "city": "MOUNTAIN VIEW", "loc": [ -122.077468, 37.405567 ], "pop": 28592, "state": "CA" }, { "_id": "94044", "city": "PACIFICA", "loc": [ -122.481607, 37.619559 ], "pop": 37596, "state": "CA" }, { "_id": "94060", "city": "PESCADERO", "loc": [ -122.364876, 37.206518 ], "pop": 670, "state": "CA" }, { "_id": "94061", "city": "REDWOOD CITY", "loc": [ -122.230406, 37.464661 ], "pop": 33316, "state": "CA" }, { "_id": "94062", "city": "WOODSIDE", "loc": [ -122.255879, 37.452119 ], "pop": 24947, "state": "CA" }, { "_id": "94063", "city": "REDWOOD CITY", "loc": [ -122.209134, 37.481544 ], "pop": 28251, "state": "CA" }, { "_id": "94065", "city": "REDWOOD CITY", "loc": [ -122.248564, 37.533128 ], "pop": 2285, "state": "CA" }, { "_id": "94066", "city": "SAN BRUNO", "loc": [ -122.429021, 37.624742 ], "pop": 38678, "state": "CA" }, { "_id": "94070", "city": "SAN CARLOS", "loc": [ -122.267356, 37.496859 ], "pop": 27599, "state": "CA" }, { "_id": "94074", "city": "SAN GREGORIO", "loc": [ -122.355552, 37.325513 ], "pop": 312, "state": "CA" }, { "_id": "94080", "city": "SOUTH SAN FRANCI", "loc": [ -122.4347, 37.65382 ], "pop": 54610, "state": "CA" }, { "_id": "94086", "city": "SUNNYVALE", "loc": [ -122.023771, 37.376407 ], "pop": 56215, "state": "CA" }, { "_id": "94087", "city": "SUNNYVALE", "loc": [ -122.034859, 37.350214 ], "pop": 47813, "state": "CA" }, { "_id": "94089", "city": "SUNNYVALE", "loc": [ -122.000637, 37.398255 ], "pop": 13522, "state": "CA" }, { "_id": "94102", "city": "SAN FRANCISCO", "loc": [ -122.416728, 37.781334 ], "pop": 26908, "state": "CA" }, { "_id": "94103", "city": "SAN FRANCISCO", "loc": [ -122.414664, 37.77254 ], "pop": 17867, "state": "CA" }, { "_id": "94104", "city": "SAN FRANCISCO", "loc": [ -122.401826, 37.791487 ], "pop": 760, "state": "CA" }, { "_id": "94105", "city": "SAN FRANCISCO", "loc": [ -122.389229, 37.786427 ], "pop": 2054, "state": "CA" }, { "_id": "94107", "city": "SAN FRANCISCO", "loc": [ -122.397099, 37.762147 ], "pop": 12143, "state": "CA" }, { "_id": "94108", "city": "SAN FRANCISCO", "loc": [ -122.40791, 37.792931 ], "pop": 14143, "state": "CA" }, { "_id": "94109", "city": "SAN FRANCISCO", "loc": [ -122.418579, 37.791687 ], "pop": 49396, "state": "CA" }, { "_id": "94110", "city": "SAN FRANCISCO", "loc": [ -122.415344, 37.750858 ], "pop": 70770, "state": "CA" }, { "_id": "94111", "city": "SAN FRANCISCO", "loc": [ -122.400147, 37.797376 ], "pop": 3122, "state": "CA" }, { "_id": "94112", "city": "SAN FRANCISCO", "loc": [ -122.441081, 37.71954 ], "pop": 64320, "state": "CA" }, { "_id": "94114", "city": "SAN FRANCISCO", "loc": [ -122.432977, 37.758716 ], "pop": 30698, "state": "CA" }, { "_id": "94115", "city": "SAN FRANCISCO", "loc": [ -122.435835, 37.785607 ], "pop": 28859, "state": "CA" }, { "_id": "94116", "city": "SAN FRANCISCO", "loc": [ -122.486296, 37.744144 ], "pop": 39970, "state": "CA" }, { "_id": "94117", "city": "SAN FRANCISCO", "loc": [ -122.441272, 37.771234 ], "pop": 38127, "state": "CA" }, { "_id": "94118", "city": "SAN FRANCISCO", "loc": [ -122.461414, 37.781174 ], "pop": 38499, "state": "CA" }, { "_id": "94121", "city": "SAN FRANCISCO", "loc": [ -122.489178, 37.778616 ], "pop": 40430, "state": "CA" }, { "_id": "94122", "city": "SAN FRANCISCO", "loc": [ -122.483647, 37.759326 ], "pop": 52318, "state": "CA" }, { "_id": "94123", "city": "SAN FRANCISCO", "loc": [ -122.434163, 37.799865 ], "pop": 23280, "state": "CA" }, { "_id": "94124", "city": "SAN FRANCISCO", "loc": [ -122.388649, 37.730888 ], "pop": 27239, "state": "CA" }, { "_id": "94127", "city": "SAN FRANCISCO", "loc": [ -122.457116, 37.735385 ], "pop": 17906, "state": "CA" }, { "_id": "94129", "city": "SAN FRANCISCO", "loc": [ -122.464958, 37.800507 ], "pop": 4715, "state": "CA" }, { "_id": "94130", "city": "SAN FRANCISCO", "loc": [ -122.369319, 37.823128 ], "pop": 4533, "state": "CA" }, { "_id": "94131", "city": "SAN FRANCISCO", "loc": [ -122.438335, 37.745032 ], "pop": 30521, "state": "CA" }, { "_id": "94132", "city": "SAN FRANCISCO", "loc": [ -122.47545, 37.721118 ], "pop": 23632, "state": "CA" }, { "_id": "94133", "city": "SAN FRANCISCO", "loc": [ -122.409081, 37.800175 ], "pop": 27148, "state": "CA" }, { "_id": "94134", "city": "SAN FRANCISCO", "loc": [ -122.409577, 37.718968 ], "pop": 34635, "state": "CA" }, { "_id": "94301", "city": "PALO ALTO", "loc": [ -122.149685, 37.444324 ], "pop": 15965, "state": "CA" }, { "_id": "94303", "city": "EAST PALO ALTO", "loc": [ -122.131902, 37.455641 ], "pop": 35680, "state": "CA" }, { "_id": "94304", "city": "PALO ALTO", "loc": [ -122.184234, 37.433424 ], "pop": 1835, "state": "CA" }, { "_id": "94305", "city": "STANFORD", "loc": [ -122.161867, 37.423573 ], "pop": 18097, "state": "CA" }, { "_id": "94306", "city": "PALO ALTO", "loc": [ -122.127375, 37.418009 ], "pop": 24309, "state": "CA" }, { "_id": "94401", "city": "RUSSIAN RIVER", "loc": [ -122.320262, 37.572271 ], "pop": 28190, "state": "CA" }, { "_id": "94402", "city": "SAN MATEO", "loc": [ -122.32762, 37.550685 ], "pop": 23838, "state": "CA" }, { "_id": "94403", "city": "SAN MATEO", "loc": [ -122.299796, 37.539495 ], "pop": 35630, "state": "CA" }, { "_id": "94404", "city": "FOSTER CITY", "loc": [ -122.263577, 37.551614 ], "pop": 33745, "state": "CA" }, { "_id": "94501", "city": "COAST GUARD ISLA", "loc": [ -122.260516, 37.764783 ], "pop": 76110, "state": "CA" }, { "_id": "94507", "city": "ALAMO", "loc": [ -122.022868, 37.853695 ], "pop": 8569, "state": "CA" }, { "_id": "94508", "city": "ANGWIN", "loc": [ -122.447732, 38.576906 ], "pop": 4067, "state": "CA" }, { "_id": "94509", "city": "ANTIOCH", "loc": [ -121.808906, 37.993917 ], "pop": 62830, "state": "CA" }, { "_id": "94510", "city": "BENICIA", "loc": [ -122.161392, 38.068459 ], "pop": 24545, "state": "CA" }, { "_id": "94512", "city": "BIRDS LANDING", "loc": [ -121.844318, 38.150402 ], "pop": 32, "state": "CA" }, { "_id": "94513", "city": "BRENTWOOD", "loc": [ -121.689427, 37.932415 ], "pop": 12372, "state": "CA" }, { "_id": "94514", "city": "BYRON", "loc": [ -121.602211, 37.902616 ], "pop": 5745, "state": "CA" }, { "_id": "94515", "city": "CALISTOGA", "loc": [ -122.581384, 38.582305 ], "pop": 5758, "state": "CA" }, { "_id": "94517", "city": "CLAYTON", "loc": [ -121.909967, 37.915442 ], "pop": 10353, "state": "CA" }, { "_id": "94518", "city": "CONCORD", "loc": [ -122.026296, 37.950434 ], "pop": 25516, "state": "CA" }, { "_id": "94519", "city": "CONCORD", "loc": [ -122.011948, 37.984082 ], "pop": 19032, "state": "CA" }, { "_id": "94520", "city": "CONCORD", "loc": [ -122.036178, 37.982259 ], "pop": 31474, "state": "CA" }, { "_id": "94521", "city": "CONCORD", "loc": [ -121.974955, 37.957503 ], "pop": 39005, "state": "CA" }, { "_id": "94523", "city": "PLEASANT HILL", "loc": [ -122.07371, 37.954002 ], "pop": 31046, "state": "CA" }, { "_id": "94525", "city": "CROCKETT", "loc": [ -122.217659, 38.051865 ], "pop": 3228, "state": "CA" }, { "_id": "94526", "city": "DANVILLE", "loc": [ -121.96598, 37.813985 ], "pop": 40613, "state": "CA" }, { "_id": "94528", "city": "DIABLO", "loc": [ -121.960951, 37.83883 ], "pop": 791, "state": "CA" }, { "_id": "94530", "city": "EL CERRITO", "loc": [ -122.298521, 37.915633 ], "pop": 28146, "state": "CA" }, { "_id": "94533", "city": "FAIRFIELD", "loc": [ -122.03565, 38.267084 ], "pop": 65455, "state": "CA" }, { "_id": "94535", "city": "TRAVIS AFB", "loc": [ -121.946317, 38.274313 ], "pop": 9874, "state": "CA" }, { "_id": "94536", "city": "FREMONT", "loc": [ -121.999935, 37.560493 ], "pop": 58580, "state": "CA" }, { "_id": "94538", "city": "FREMONT", "loc": [ -121.971215, 37.530815 ], "pop": 45430, "state": "CA" }, { "_id": "94539", "city": "FREMONT", "loc": [ -121.928733, 37.517579 ], "pop": 39927, "state": "CA" }, { "_id": "94541", "city": "HAYWARD", "loc": [ -122.089418, 37.674048 ], "pop": 48964, "state": "CA" }, { "_id": "94542", "city": "HAYWARD", "loc": [ -122.047236, 37.658566 ], "pop": 11165, "state": "CA" }, { "_id": "94544", "city": "HAYWARD", "loc": [ -122.067029, 37.637443 ], "pop": 58348, "state": "CA" }, { "_id": "94545", "city": "HAYWARD", "loc": [ -122.0971, 37.633245 ], "pop": 23760, "state": "CA" }, { "_id": "94546", "city": "CASTRO VALLEY", "loc": [ -122.078183, 37.701527 ], "pop": 37808, "state": "CA" }, { "_id": "94547", "city": "HERCULES", "loc": [ -122.263702, 38.006649 ], "pop": 16376, "state": "CA" }, { "_id": "94548", "city": "KNIGHTSEN", "loc": [ -121.672149, 37.9818 ], "pop": 118, "state": "CA" }, { "_id": "94549", "city": "LAFAYETTE", "loc": [ -122.11194, 37.896105 ], "pop": 25979, "state": "CA" }, { "_id": "94550", "city": "LIVERMORE", "loc": [ -121.762983, 37.68299 ], "pop": 59709, "state": "CA" }, { "_id": "94552", "city": "CASTRO VALLEY", "loc": [ -122.038113, 37.713107 ], "pop": 7936, "state": "CA" }, { "_id": "94553", "city": "PACHECO", "loc": [ -122.111693, 37.993246 ], "pop": 45532, "state": "CA" }, { "_id": "94555", "city": "FREMONT", "loc": [ -122.046925, 37.573458 ], "pop": 29437, "state": "CA" }, { "_id": "94556", "city": "MORAGA", "loc": [ -122.124185, 37.843653 ], "pop": 15988, "state": "CA" }, { "_id": "94558", "city": "SPANISH FLAT", "loc": [ -122.305518, 38.328137 ], "pop": 57901, "state": "CA" }, { "_id": "94559", "city": "NAPA", "loc": [ -122.284086, 38.290362 ], "pop": 23606, "state": "CA" }, { "_id": "94560", "city": "NEWARK", "loc": [ -122.031956, 37.536812 ], "pop": 37861, "state": "CA" }, { "_id": "94561", "city": "OAKLEY", "loc": [ -121.703623, 37.994034 ], "pop": 20920, "state": "CA" }, { "_id": "94563", "city": "ORINDA", "loc": [ -122.172848, 37.878659 ], "pop": 16883, "state": "CA" }, { "_id": "94564", "city": "PINOLE", "loc": [ -122.287477, 37.996903 ], "pop": 16920, "state": "CA" }, { "_id": "94565", "city": "SHORE ACRES", "loc": [ -121.908178, 38.016887 ], "pop": 64053, "state": "CA" }, { "_id": "94566", "city": "PLEASANTON", "loc": [ -121.8755, 37.665804 ], "pop": 32953, "state": "CA" }, { "_id": "94567", "city": "POPE VALLEY", "loc": [ -122.472244, 38.678192 ], "pop": 286, "state": "CA" }, { "_id": "94568", "city": "DUBLIN", "loc": [ -121.922589, 37.716597 ], "pop": 23275, "state": "CA" }, { "_id": "94569", "city": "PORT COSTA", "loc": [ -122.186649, 38.046013 ], "pop": 228, "state": "CA" }, { "_id": "94571", "city": "RIO VISTA", "loc": [ -121.701635, 38.163734 ], "pop": 4516, "state": "CA" }, { "_id": "94572", "city": "RODEO", "loc": [ -122.258139, 38.03069 ], "pop": 7827, "state": "CA" }, { "_id": "94574", "city": "SAINT HELENA", "loc": [ -122.461921, 38.513776 ], "pop": 9388, "state": "CA" }, { "_id": "94577", "city": "SAN LEANDRO", "loc": [ -122.158705, 37.720467 ], "pop": 36779, "state": "CA" }, { "_id": "94578", "city": "SAN LEANDRO", "loc": [ -122.123969, 37.702377 ], "pop": 31780, "state": "CA" }, { "_id": "94579", "city": "SAN LEANDRO", "loc": [ -122.150659, 37.689209 ], "pop": 15754, "state": "CA" }, { "_id": "94580", "city": "SAN LORENZO", "loc": [ -122.129547, 37.678671 ], "pop": 23010, "state": "CA" }, { "_id": "94583", "city": "SAN RAMON", "loc": [ -121.952224, 37.756188 ], "pop": 35449, "state": "CA" }, { "_id": "94585", "city": "SUISUN CITY", "loc": [ -122.042003, 38.240834 ], "pop": 31081, "state": "CA" }, { "_id": "94586", "city": "SUNOL", "loc": [ -121.898636, 37.609403 ], "pop": 953, "state": "CA" }, { "_id": "94587", "city": "UNION CITY", "loc": [ -122.049702, 37.589458 ], "pop": 52869, "state": "CA" }, { "_id": "94588", "city": "PLEASANTON", "loc": [ -121.8957, 37.687311 ], "pop": 19032, "state": "CA" }, { "_id": "94589", "city": "AMERICAN CANYON", "loc": [ -122.249333, 38.148345 ], "pop": 37599, "state": "CA" }, { "_id": "94590", "city": "VALLEJO", "loc": [ -122.247367, 38.105302 ], "pop": 35516, "state": "CA" }, { "_id": "94591", "city": "VALLEJO", "loc": [ -122.212354, 38.09853 ], "pop": 43336, "state": "CA" }, { "_id": "94592", "city": "MARE ISLAND", "loc": [ -122.27273, 38.094654 ], "pop": 3589, "state": "CA" }, { "_id": "94595", "city": "WALNUT CREEK", "loc": [ -122.070259, 37.875317 ], "pop": 16346, "state": "CA" }, { "_id": "94596", "city": "WALNUT CREEK", "loc": [ -122.054909, 37.905279 ], "pop": 38092, "state": "CA" }, { "_id": "94598", "city": "WALNUT CREEK", "loc": [ -122.025879, 37.919424 ], "pop": 24174, "state": "CA" }, { "_id": "94599", "city": "YOUNTVILLE", "loc": [ -122.358506, 38.403813 ], "pop": 1876, "state": "CA" }, { "_id": "94601", "city": "OAKLAND", "loc": [ -122.216587, 37.780595 ], "pop": 47715, "state": "CA" }, { "_id": "94602", "city": "OAKLAND", "loc": [ -122.210368, 37.801133 ], "pop": 28629, "state": "CA" }, { "_id": "94603", "city": "OAKLAND", "loc": [ -122.171017, 37.740239 ], "pop": 27303, "state": "CA" }, { "_id": "94605", "city": "OAKLAND", "loc": [ -122.163326, 37.764132 ], "pop": 38511, "state": "CA" }, { "_id": "94606", "city": "OAKLAND", "loc": [ -122.24292, 37.79565 ], "pop": 38555, "state": "CA" }, { "_id": "94607", "city": "OAKLAND", "loc": [ -122.285051, 37.807084 ], "pop": 21294, "state": "CA" }, { "_id": "94608", "city": "EMERYVILLE", "loc": [ -122.280363, 37.836466 ], "pop": 22318, "state": "CA" }, { "_id": "94609", "city": "OAKLAND", "loc": [ -122.26367, 37.836096 ], "pop": 20263, "state": "CA" }, { "_id": "94610", "city": "OAKLAND", "loc": [ -122.244322, 37.812636 ], "pop": 29637, "state": "CA" }, { "_id": "94611", "city": "PIEDMONT", "loc": [ -122.22683, 37.828157 ], "pop": 34238, "state": "CA" }, { "_id": "94612", "city": "OAKLAND", "loc": [ -122.266774, 37.808473 ], "pop": 10763, "state": "CA" }, { "_id": "94613", "city": "OAKLAND", "loc": [ -122.181585, 37.782427 ], "pop": 627, "state": "CA" }, { "_id": "94618", "city": "PIEDMONT", "loc": [ -122.24191, 37.84368 ], "pop": 15763, "state": "CA" }, { "_id": "94619", "city": "OAKLAND", "loc": [ -122.18838, 37.787786 ], "pop": 24501, "state": "CA" }, { "_id": "94621", "city": "OAKLAND", "loc": [ -122.185335, 37.758924 ], "pop": 26689, "state": "CA" }, { "_id": "94702", "city": "BERKELEY", "loc": [ -122.285126, 37.865611 ], "pop": 15004, "state": "CA" }, { "_id": "94703", "city": "BERKELEY", "loc": [ -122.274914, 37.863028 ], "pop": 18554, "state": "CA" }, { "_id": "94704", "city": "BERKELEY", "loc": [ -122.257048, 37.866428 ], "pop": 23551, "state": "CA" }, { "_id": "94705", "city": "BERKELEY", "loc": [ -122.249964, 37.85711 ], "pop": 11833, "state": "CA" }, { "_id": "94706", "city": "ALBANY", "loc": [ -122.295394, 37.890045 ], "pop": 17333, "state": "CA" }, { "_id": "94707", "city": "KENSINGTON", "loc": [ -122.276517, 37.893118 ], "pop": 9152, "state": "CA" }, { "_id": "94708", "city": "KENSINGTON", "loc": [ -122.25976, 37.890829 ], "pop": 8874, "state": "CA" }, { "_id": "94709", "city": "BERKELEY", "loc": [ -122.265461, 37.878397 ], "pop": 9927, "state": "CA" }, { "_id": "94710", "city": "BERKELEY", "loc": [ -122.295929, 37.869603 ], "pop": 6891, "state": "CA" }, { "_id": "94801", "city": "RICHMOND", "loc": [ -122.36201, 37.940039 ], "pop": 23948, "state": "CA" }, { "_id": "94803", "city": "EL SOBRANTE", "loc": [ -122.290092, 37.969287 ], "pop": 22238, "state": "CA" }, { "_id": "94804", "city": "RICHMOND", "loc": [ -122.33421, 37.926523 ], "pop": 33990, "state": "CA" }, { "_id": "94805", "city": "RICHMOND", "loc": [ -122.323756, 37.941719 ], "pop": 12342, "state": "CA" }, { "_id": "94806", "city": "SAN PABLO", "loc": [ -122.336929, 37.972374 ], "pop": 47668, "state": "CA" }, { "_id": "94901", "city": "SAN RAFAEL", "loc": [ -122.510502, 37.969144 ], "pop": 41550, "state": "CA" }, { "_id": "94903", "city": "CIVIC CENTER", "loc": [ -122.54521, 38.015044 ], "pop": 25563, "state": "CA" }, { "_id": "94904", "city": "KENTFIELD", "loc": [ -122.535501, 37.950599 ], "pop": 11820, "state": "CA" }, { "_id": "94920", "city": "BELVEDERE", "loc": [ -122.472627, 37.889885 ], "pop": 10993, "state": "CA" }, { "_id": "94922", "city": "BODEGA", "loc": [ -122.951364, 38.339264 ], "pop": 93, "state": "CA" }, { "_id": "94923", "city": "BODEGA BAY", "loc": [ -123.037308, 38.330921 ], "pop": 1427, "state": "CA" }, { "_id": "94924", "city": "BOLINAS", "loc": [ -122.694655, 37.907875 ], "pop": 1555, "state": "CA" }, { "_id": "94925", "city": "CORTE MADERA", "loc": [ -122.513202, 37.922256 ], "pop": 7974, "state": "CA" }, { "_id": "94928", "city": "ROHNERT PARK", "loc": [ -122.69408, 38.347027 ], "pop": 35730, "state": "CA" }, { "_id": "94930", "city": "FAIRFAX", "loc": [ -122.593711, 37.988289 ], "pop": 8051, "state": "CA" }, { "_id": "94931", "city": "COTATI", "loc": [ -122.704831, 38.325918 ], "pop": 6849, "state": "CA" }, { "_id": "94933", "city": "FOREST KNOLLS", "loc": [ -122.69074, 38.012178 ], "pop": 732, "state": "CA" }, { "_id": "94937", "city": "INVERNESS", "loc": [ -122.856774, 38.083514 ], "pop": 1716, "state": "CA" }, { "_id": "94938", "city": "LAGUNITAS", "loc": [ -122.701576, 38.013929 ], "pop": 276, "state": "CA" }, { "_id": "94939", "city": "LARKSPUR", "loc": [ -122.536202, 37.936743 ], "pop": 5884, "state": "CA" }, { "_id": "94940", "city": "MARSHALL", "loc": [ -122.890011, 38.176221 ], "pop": 55, "state": "CA" }, { "_id": "94941", "city": "MILL VALLEY", "loc": [ -122.533885, 37.895757 ], "pop": 27746, "state": "CA" }, { "_id": "94945", "city": "NOVATO", "loc": [ -122.571416, 38.1163 ], "pop": 15535, "state": "CA" }, { "_id": "94946", "city": "NICASIO", "loc": [ -122.696402, 38.054622 ], "pop": 665, "state": "CA" }, { "_id": "94947", "city": "NOVATO", "loc": [ -122.583691, 38.097258 ], "pop": 22759, "state": "CA" }, { "_id": "94949", "city": "NOVATO", "loc": [ -122.540408, 38.061837 ], "pop": 16219, "state": "CA" }, { "_id": "94951", "city": "PENNGROVE", "loc": [ -122.671772, 38.315948 ], "pop": 3886, "state": "CA" }, { "_id": "94952", "city": "PETALUMA", "loc": [ -122.677727, 38.240349 ], "pop": 29724, "state": "CA" }, { "_id": "94954", "city": "PETALUMA", "loc": [ -122.615536, 38.250739 ], "pop": 27667, "state": "CA" }, { "_id": "94956", "city": "POINT REYES STAT", "loc": [ -122.81621, 38.064794 ], "pop": 951, "state": "CA" }, { "_id": "94960", "city": "SAN ANSELMO", "loc": [ -122.571062, 37.984579 ], "pop": 15178, "state": "CA" }, { "_id": "94963", "city": "SAN GERONIMO", "loc": [ -122.67784, 38.017155 ], "pop": 802, "state": "CA" }, { "_id": "94965", "city": "SAUSALITO", "loc": [ -122.494555, 37.860147 ], "pop": 10032, "state": "CA" }, { "_id": "94970", "city": "STINSON BEACH", "loc": [ -122.639305, 37.901992 ], "pop": 630, "state": "CA" }, { "_id": "94972", "city": "VALLEY FORD", "loc": [ -122.924457, 38.315729 ], "pop": 114, "state": "CA" }, { "_id": "94973", "city": "WOODACRE", "loc": [ -122.638247, 38.006933 ], "pop": 1524, "state": "CA" }, { "_id": "95002", "city": "ALVISO", "loc": [ -121.968597, 37.427659 ], "pop": 2179, "state": "CA" }, { "_id": "95003", "city": "APTOS", "loc": [ -121.891979, 36.978477 ], "pop": 23964, "state": "CA" }, { "_id": "95004", "city": "AROMAS", "loc": [ -121.639781, 36.878522 ], "pop": 2713, "state": "CA" }, { "_id": "95005", "city": "BEN LOMOND", "loc": [ -122.083869, 37.086183 ], "pop": 7702, "state": "CA" }, { "_id": "95006", "city": "BOULDER CREEK", "loc": [ -122.133053, 37.149934 ], "pop": 9434, "state": "CA" }, { "_id": "95008", "city": "CAMPBELL", "loc": [ -121.95539, 37.280007 ], "pop": 41821, "state": "CA" }, { "_id": "95010", "city": "CAPITOLA", "loc": [ -121.952145, 36.977359 ], "pop": 9337, "state": "CA" }, { "_id": "95012", "city": "CASTROVILLE", "loc": [ -121.747368, 36.77142 ], "pop": 7168, "state": "CA" }, { "_id": "95013", "city": "COYOTE", "loc": [ -121.746021, 37.216721 ], "pop": 316, "state": "CA" }, { "_id": "95014", "city": "MONTE VISTA", "loc": [ -122.038604, 37.317363 ], "pop": 47598, "state": "CA" }, { "_id": "95017", "city": "DAVENPORT", "loc": [ -122.225735, 37.06306 ], "pop": 42, "state": "CA" }, { "_id": "95018", "city": "FELTON", "loc": [ -122.062162, 37.063124 ], "pop": 8194, "state": "CA" }, { "_id": "95019", "city": "FREEDOM", "loc": [ -121.776761, 36.936483 ], "pop": 5075, "state": "CA" }, { "_id": "95020", "city": "GILROY", "loc": [ -121.57825, 37.016005 ], "pop": 39878, "state": "CA" }, { "_id": "95023", "city": "HOLLISTER", "loc": [ -121.387101, 36.848404 ], "pop": 31243, "state": "CA" }, { "_id": "95030", "city": "MONTE SERENO", "loc": [ -121.978684, 37.211677 ], "pop": 25881, "state": "CA" }, { "_id": "95032", "city": "LOS GATOS", "loc": [ -121.950088, 37.231571 ], "pop": 18189, "state": "CA" }, { "_id": "95035", "city": "MILPITAS", "loc": [ -121.892885, 37.436491 ], "pop": 50907, "state": "CA" }, { "_id": "95037", "city": "MORGAN HILL", "loc": [ -121.64636, 37.129171 ], "pop": 31309, "state": "CA" }, { "_id": "95043", "city": "PAICINES", "loc": [ -121.032853, 36.49478 ], "pop": 636, "state": "CA" }, { "_id": "95045", "city": "SAN JUAN BAUTIST", "loc": [ -121.532721, 36.849856 ], "pop": 3657, "state": "CA" }, { "_id": "95046", "city": "SAN MARTIN", "loc": [ -121.599901, 37.091118 ], "pop": 5563, "state": "CA" }, { "_id": "95050", "city": "SANTA CLARA", "loc": [ -121.954079, 37.34732 ], "pop": 33310, "state": "CA" }, { "_id": "95051", "city": "SANTA CLARA", "loc": [ -121.983848, 37.346992 ], "pop": 49570, "state": "CA" }, { "_id": "95054", "city": "SANTA CLARA", "loc": [ -121.95394, 37.394673 ], "pop": 10370, "state": "CA" }, { "_id": "95060", "city": "SCOTTS VALLEY", "loc": [ -122.043612, 36.982946 ], "pop": 40334, "state": "CA" }, { "_id": "95062", "city": "SANTA CRUZ", "loc": [ -121.988055, 36.972101 ], "pop": 34287, "state": "CA" }, { "_id": "95064", "city": "SANTA CRUZ", "loc": [ -122.057803, 36.995851 ], "pop": 4658, "state": "CA" }, { "_id": "95065", "city": "SANTA CRUZ", "loc": [ -121.982557, 37.003319 ], "pop": 8130, "state": "CA" }, { "_id": "95066", "city": "SCOTTS VALLEY", "loc": [ -122.014961, 37.057841 ], "pop": 10636, "state": "CA" }, { "_id": "95070", "city": "SARATOGA", "loc": [ -122.018238, 37.272871 ], "pop": 28909, "state": "CA" }, { "_id": "95073", "city": "SOQUEL", "loc": [ -121.950255, 37.003525 ], "pop": 8143, "state": "CA" }, { "_id": "95076", "city": "LA SELVA BEACH", "loc": [ -121.763437, 36.920515 ], "pop": 68295, "state": "CA" }, { "_id": "95110", "city": "SAN JOSE", "loc": [ -121.890299, 37.32966 ], "pop": 17437, "state": "CA" }, { "_id": "95111", "city": "SAN JOSE", "loc": [ -121.824038, 37.282276 ], "pop": 48286, "state": "CA" }, { "_id": "95112", "city": "SAN JOSE", "loc": [ -121.880414, 37.341388 ], "pop": 46470, "state": "CA" }, { "_id": "95113", "city": "SAN JOSE", "loc": [ -121.887227, 37.335188 ], "pop": 1265, "state": "CA" }, { "_id": "95116", "city": "SAN JOSE", "loc": [ -121.850221, 37.351342 ], "pop": 46754, "state": "CA" }, { "_id": "95117", "city": "SAN JOSE", "loc": [ -121.962126, 37.308896 ], "pop": 27414, "state": "CA" }, { "_id": "95118", "city": "SAN JOSE", "loc": [ -121.889845, 37.256162 ], "pop": 30591, "state": "CA" }, { "_id": "95119", "city": "SAN JOSE", "loc": [ -121.790067, 37.230135 ], "pop": 9823, "state": "CA" }, { "_id": "95120", "city": "SAN JOSE", "loc": [ -121.861547, 37.217538 ], "pop": 34577, "state": "CA" }, { "_id": "95121", "city": "SAN JOSE", "loc": [ -121.811939, 37.30593 ], "pop": 32572, "state": "CA" }, { "_id": "95122", "city": "SAN JOSE", "loc": [ -121.833949, 37.329313 ], "pop": 52543, "state": "CA" }, { "_id": "95123", "city": "SAN JOSE", "loc": [ -121.830502, 37.244594 ], "pop": 55146, "state": "CA" }, { "_id": "95124", "city": "SAN JOSE", "loc": [ -121.920831, 37.256844 ], "pop": 44595, "state": "CA" }, { "_id": "95125", "city": "SAN JOSE", "loc": [ -121.895476, 37.296187 ], "pop": 42573, "state": "CA" }, { "_id": "95126", "city": "SAN JOSE", "loc": [ -121.917398, 37.322482 ], "pop": 24778, "state": "CA" }, { "_id": "95127", "city": "SAN JOSE", "loc": [ -121.819516, 37.3664 ], "pop": 50371, "state": "CA" }, { "_id": "95128", "city": "SAN JOSE", "loc": [ -121.934364, 37.314657 ], "pop": 28275, "state": "CA" }, { "_id": "95129", "city": "SAN JOSE", "loc": [ -122.000494, 37.306537 ], "pop": 33953, "state": "CA" }, { "_id": "95130", "city": "SAN JOSE", "loc": [ -121.979182, 37.288628 ], "pop": 13765, "state": "CA" }, { "_id": "95131", "city": "SAN JOSE", "loc": [ -121.879977, 37.386368 ], "pop": 18425, "state": "CA" }, { "_id": "95132", "city": "SAN JOSE", "loc": [ -121.860336, 37.40408 ], "pop": 37995, "state": "CA" }, { "_id": "95133", "city": "SAN JOSE", "loc": [ -121.855959, 37.372875 ], "pop": 24136, "state": "CA" }, { "_id": "95134", "city": "SAN JOSE", "loc": [ -121.943399, 37.413999 ], "pop": 4324, "state": "CA" }, { "_id": "95135", "city": "SAN JOSE", "loc": [ -121.757228, 37.297539 ], "pop": 9104, "state": "CA" }, { "_id": "95136", "city": "SAN JOSE", "loc": [ -121.847625, 37.268423 ], "pop": 31200, "state": "CA" }, { "_id": "95138", "city": "SAN JOSE", "loc": [ -121.778641, 37.246259 ], "pop": 5956, "state": "CA" }, { "_id": "95139", "city": "SAN JOSE", "loc": [ -121.766867, 37.225162 ], "pop": 6912, "state": "CA" }, { "_id": "95140", "city": "MOUNT HAMILTON", "loc": [ -121.639948, 37.316087 ], "pop": 37, "state": "CA" }, { "_id": "95141", "city": "SAN JOSE", "loc": [ -121.755808, 37.169912 ], "pop": 0, "state": "CA" }, { "_id": "95148", "city": "SAN JOSE", "loc": [ -121.792111, 37.329765 ], "pop": 37413, "state": "CA" }, { "_id": "95202", "city": "STOCKTON", "loc": [ -121.287087, 37.960632 ], "pop": 7753, "state": "CA" }, { "_id": "95203", "city": "STOCKTON", "loc": [ -121.307688, 37.956515 ], "pop": 17847, "state": "CA" }, { "_id": "95204", "city": "STOCKTON", "loc": [ -121.315364, 37.974302 ], "pop": 28860, "state": "CA" }, { "_id": "95205", "city": "STOCKTON", "loc": [ -121.259241, 37.960986 ], "pop": 31314, "state": "CA" }, { "_id": "95206", "city": "STOCKTON", "loc": [ -121.287169, 37.931643 ], "pop": 33154, "state": "CA" }, { "_id": "95207", "city": "STOCKTON", "loc": [ -121.32056, 38.002025 ], "pop": 50167, "state": "CA" }, { "_id": "95209", "city": "STOCKTON", "loc": [ -121.343292, 38.033105 ], "pop": 26289, "state": "CA" }, { "_id": "95210", "city": "STOCKTON", "loc": [ -121.297229, 38.024997 ], "pop": 33763, "state": "CA" }, { "_id": "95211", "city": "UNIV OF THE PACI", "loc": [ -121.310336, 37.980364 ], "pop": 1722, "state": "CA" }, { "_id": "95212", "city": "STOCKTON", "loc": [ -121.246018, 38.034428 ], "pop": 5584, "state": "CA" }, { "_id": "95215", "city": "STOCKTON", "loc": [ -121.215295, 37.968545 ], "pop": 18533, "state": "CA" }, { "_id": "95219", "city": "STOCKTON", "loc": [ -121.363712, 38.010233 ], "pop": 13994, "state": "CA" }, { "_id": "95220", "city": "ACAMPO", "loc": [ -121.218576, 38.200413 ], "pop": 7734, "state": "CA" }, { "_id": "95222", "city": "ANGELS CAMP", "loc": [ -120.55437, 38.064011 ], "pop": 3530, "state": "CA" }, { "_id": "95223", "city": "BEAR VALLEY", "loc": [ -120.342231, 38.24175 ], "pop": 6205, "state": "CA" }, { "_id": "95228", "city": "COPPEROPOLIS", "loc": [ -120.638374, 37.937246 ], "pop": 1336, "state": "CA" }, { "_id": "95230", "city": "FARMINGTON", "loc": [ -120.852343, 37.944771 ], "pop": 141, "state": "CA" }, { "_id": "95231", "city": "FRENCH CAMP", "loc": [ -121.282704, 37.877982 ], "pop": 3673, "state": "CA" }, { "_id": "95232", "city": "GLENCOE", "loc": [ -120.594546, 38.351557 ], "pop": 189, "state": "CA" }, { "_id": "95236", "city": "LINDEN", "loc": [ -121.074442, 38.021869 ], "pop": 3656, "state": "CA" }, { "_id": "95237", "city": "LOCKEFORD", "loc": [ -121.135611, 38.162436 ], "pop": 2847, "state": "CA" }, { "_id": "95240", "city": "LODI", "loc": [ -121.263034, 38.123579 ], "pop": 42726, "state": "CA" }, { "_id": "95242", "city": "LODI", "loc": [ -121.311814, 38.132989 ], "pop": 20669, "state": "CA" }, { "_id": "95245", "city": "MOKELUMNE HILL", "loc": [ -120.567705, 38.328918 ], "pop": 3507, "state": "CA" }, { "_id": "95246", "city": "MOUNTAIN RANCH", "loc": [ -120.548137, 38.220363 ], "pop": 2323, "state": "CA" }, { "_id": "95247", "city": "MURPHYS", "loc": [ -120.461772, 38.126896 ], "pop": 2691, "state": "CA" }, { "_id": "95249", "city": "SAN ANDREAS", "loc": [ -120.668703, 38.186732 ], "pop": 3081, "state": "CA" }, { "_id": "95251", "city": "VALLECITO", "loc": [ -120.467879, 38.101472 ], "pop": 200, "state": "CA" }, { "_id": "95252", "city": "VALLEY SPRINGS", "loc": [ -120.859742, 38.154355 ], "pop": 7592, "state": "CA" }, { "_id": "95255", "city": "WEST POINT", "loc": [ -120.515862, 38.406201 ], "pop": 1513, "state": "CA" }, { "_id": "95257", "city": "WILSEYVILLE", "loc": [ -120.442356, 38.384566 ], "pop": 32, "state": "CA" }, { "_id": "95258", "city": "WOODBRIDGE", "loc": [ -121.308632, 38.155124 ], "pop": 2241, "state": "CA" }, { "_id": "95301", "city": "ATWATER", "loc": [ -120.600837, 37.353154 ], "pop": 24928, "state": "CA" }, { "_id": "95303", "city": "BALLICO", "loc": [ -120.700152, 37.452455 ], "pop": 1296, "state": "CA" }, { "_id": "95306", "city": "CATHEYS VALLEY", "loc": [ -120.069017, 37.441409 ], "pop": 1033, "state": "CA" }, { "_id": "95307", "city": "CERES", "loc": [ -120.949936, 37.588097 ], "pop": 29037, "state": "CA" }, { "_id": "95309", "city": "CHINESE CAMP", "loc": [ -120.406673, 37.856829 ], "pop": 15, "state": "CA" }, { "_id": "95310", "city": "COLUMBIA", "loc": [ -120.405552, 38.03975 ], "pop": 1512, "state": "CA" }, { "_id": "95311", "city": "COULTERVILLE", "loc": [ -119.985813, 37.738642 ], "pop": 2384, "state": "CA" }, { "_id": "95313", "city": "CROWS LANDING", "loc": [ -121.019893, 37.438956 ], "pop": 1896, "state": "CA" }, { "_id": "95315", "city": "DELHI", "loc": [ -120.775489, 37.428629 ], "pop": 6151, "state": "CA" }, { "_id": "95316", "city": "DENAIR", "loc": [ -120.796474, 37.538419 ], "pop": 5878, "state": "CA" }, { "_id": "95317", "city": "EL NIDO", "loc": [ -120.483235, 37.13452 ], "pop": 1024, "state": "CA" }, { "_id": "95320", "city": "ESCALON", "loc": [ -120.990044, 37.804428 ], "pop": 9405, "state": "CA" }, { "_id": "95321", "city": "GROVELAND", "loc": [ -120.191809, 37.840899 ], "pop": 3616, "state": "CA" }, { "_id": "95322", "city": "GUSTINE", "loc": [ -121.003965, 37.242456 ], "pop": 6083, "state": "CA" }, { "_id": "95323", "city": "HICKMAN", "loc": [ -120.71722, 37.619989 ], "pop": 1405, "state": "CA" }, { "_id": "95324", "city": "HILMAR", "loc": [ -120.856144, 37.408377 ], "pop": 6676, "state": "CA" }, { "_id": "95325", "city": "HORNITOS", "loc": [ -120.226443, 37.492226 ], "pop": 49, "state": "CA" }, { "_id": "95326", "city": "HUGHSON", "loc": [ -120.865281, 37.594364 ], "pop": 6383, "state": "CA" }, { "_id": "95327", "city": "JAMESTOWN", "loc": [ -120.494567, 37.906544 ], "pop": 8359, "state": "CA" }, { "_id": "95329", "city": "LA GRANGE", "loc": [ -120.358131, 37.678915 ], "pop": 1305, "state": "CA" }, { "_id": "95330", "city": "LATHROP", "loc": [ -121.282652, 37.820897 ], "pop": 8426, "state": "CA" }, { "_id": "95333", "city": "LE GRAND", "loc": [ -120.251737, 37.234175 ], "pop": 1810, "state": "CA" }, { "_id": "95334", "city": "LIVINGSTON", "loc": [ -120.716156, 37.376168 ], "pop": 10994, "state": "CA" }, { "_id": "95335", "city": "COLD SPRINGS", "loc": [ -120.001159, 38.20336 ], "pop": 201, "state": "CA" }, { "_id": "95336", "city": "MANTECA", "loc": [ -121.21856, 37.80875 ], "pop": 51728, "state": "CA" }, { "_id": "95338", "city": "MARIPOSA", "loc": [ -119.892496, 37.503918 ], "pop": 9323, "state": "CA" }, { "_id": "95340", "city": "RED TOP", "loc": [ -120.461668, 37.300724 ], "pop": 59918, "state": "CA" }, { "_id": "95345", "city": "MIDPINES", "loc": [ -119.946548, 37.571009 ], "pop": 388, "state": "CA" }, { "_id": "95346", "city": "MI WUK VILLAGE", "loc": [ -120.131762, 38.105576 ], "pop": 701, "state": "CA" }, { "_id": "95348", "city": "MERCED", "loc": [ -120.500897, 37.326964 ], "pop": 19719, "state": "CA" }, { "_id": "95350", "city": "MODESTO", "loc": [ -121.011303, 37.674649 ], "pop": 50618, "state": "CA" }, { "_id": "95351", "city": "MODESTO", "loc": [ -121.006033, 37.625022 ], "pop": 69275, "state": "CA" }, { "_id": "95354", "city": "MODESTO", "loc": [ -120.968323, 37.644526 ], "pop": 26630, "state": "CA" }, { "_id": "95355", "city": "MODESTO", "loc": [ -120.954658, 37.673515 ], "pop": 43734, "state": "CA" }, { "_id": "95356", "city": "MODESTO", "loc": [ -121.027051, 37.699431 ], "pop": 26202, "state": "CA" }, { "_id": "95360", "city": "NEWMAN", "loc": [ -121.025943, 37.317591 ], "pop": 5313, "state": "CA" }, { "_id": "95361", "city": "KNIGHTS FERRY", "loc": [ -120.849474, 37.775323 ], "pop": 20919, "state": "CA" }, { "_id": "95363", "city": "PATTERSON", "loc": [ -121.140732, 37.490592 ], "pop": 13437, "state": "CA" }, { "_id": "95364", "city": "PINECREST", "loc": [ -119.865195, 38.341062 ], "pop": 13, "state": "CA" }, { "_id": "95366", "city": "RIPON", "loc": [ -121.122909, 37.753286 ], "pop": 10879, "state": "CA" }, { "_id": "95367", "city": "RIVERBANK", "loc": [ -120.943019, 37.732809 ], "pop": 9732, "state": "CA" }, { "_id": "95368", "city": "SALIDA", "loc": [ -121.090484, 37.70713 ], "pop": 3255, "state": "CA" }, { "_id": "95369", "city": "SNELLING", "loc": [ -120.481615, 37.514359 ], "pop": 1335, "state": "CA" }, { "_id": "95370", "city": "SONORA", "loc": [ -120.338498, 37.995692 ], "pop": 23398, "state": "CA" }, { "_id": "95372", "city": "SOULSBYVILLE", "loc": [ -120.259892, 37.992794 ], "pop": 1566, "state": "CA" }, { "_id": "95374", "city": "STEVINSON", "loc": [ -120.869856, 37.32575 ], "pop": 1564, "state": "CA" }, { "_id": "95376", "city": "TRACY", "loc": [ -121.419723, 37.742116 ], "pop": 47291, "state": "CA" }, { "_id": "95379", "city": "TUOLUMNE", "loc": [ -120.237496, 37.971339 ], "pop": 3402, "state": "CA" }, { "_id": "95380", "city": "TURLOCK", "loc": [ -120.850511, 37.503605 ], "pop": 50025, "state": "CA" }, { "_id": "95383", "city": "TWAIN HARTE", "loc": [ -120.2155, 38.044722 ], "pop": 5133, "state": "CA" }, { "_id": "95386", "city": "WATERFORD", "loc": [ -120.753862, 37.650988 ], "pop": 6505, "state": "CA" }, { "_id": "95388", "city": "WINTON", "loc": [ -120.6132, 37.39233 ], "pop": 10362, "state": "CA" }, { "_id": "95401", "city": "SANTA ROSA", "loc": [ -122.751722, 38.443123 ], "pop": 30549, "state": "CA" }, { "_id": "95403", "city": "SANTA ROSA", "loc": [ -122.748528, 38.477273 ], "pop": 30874, "state": "CA" }, { "_id": "95404", "city": "SANTA ROSA", "loc": [ -122.689524, 38.449556 ], "pop": 31216, "state": "CA" }, { "_id": "95405", "city": "SANTA ROSA", "loc": [ -122.66988, 38.438279 ], "pop": 20776, "state": "CA" }, { "_id": "95407", "city": "SANTA ROSA", "loc": [ -122.727896, 38.410462 ], "pop": 22086, "state": "CA" }, { "_id": "95409", "city": "SANTA ROSA", "loc": [ -122.642125, 38.461242 ], "pop": 22897, "state": "CA" }, { "_id": "95410", "city": "ALBION", "loc": [ -123.721366, 39.215934 ], "pop": 869, "state": "CA" }, { "_id": "95412", "city": "ANNAPOLIS", "loc": [ -123.314214, 38.714485 ], "pop": 24, "state": "CA" }, { "_id": "95415", "city": "BOONVILLE", "loc": [ -123.401954, 39.035007 ], "pop": 1744, "state": "CA" }, { "_id": "95417", "city": "BRANSCOMB", "loc": [ -123.554982, 39.700531 ], "pop": 708, "state": "CA" }, { "_id": "95420", "city": "CASPAR", "loc": [ -123.798489, 39.365102 ], "pop": 349, "state": "CA" }, { "_id": "95421", "city": "CAZADERO", "loc": [ -123.182896, 38.566335 ], "pop": 2367, "state": "CA" }, { "_id": "95422", "city": "CLEARLAKE", "loc": [ -122.636089, 38.957138 ], "pop": 12157, "state": "CA" }, { "_id": "95423", "city": "CLEARLAKE OAKS", "loc": [ -122.66873, 39.034838 ], "pop": 3400, "state": "CA" }, { "_id": "95425", "city": "CLOVERDALE", "loc": [ -123.011725, 38.799396 ], "pop": 7695, "state": "CA" }, { "_id": "95427", "city": "COMPTCHE", "loc": [ -123.585652, 39.249919 ], "pop": 538, "state": "CA" }, { "_id": "95428", "city": "COVELO", "loc": [ -123.215015, 39.801864 ], "pop": 2182, "state": "CA" }, { "_id": "95429", "city": "DOS RIOS", "loc": [ -123.298294, 39.709298 ], "pop": 14, "state": "CA" }, { "_id": "95432", "city": "ELK", "loc": [ -123.723961, 39.160402 ], "pop": 199, "state": "CA" }, { "_id": "95436", "city": "FORESTVILLE", "loc": [ -122.896683, 38.489442 ], "pop": 7252, "state": "CA" }, { "_id": "95437", "city": "FORT BRAGG", "loc": [ -123.78835, 39.437452 ], "pop": 13535, "state": "CA" }, { "_id": "95439", "city": "FULTON", "loc": [ -122.77608, 38.494732 ], "pop": 569, "state": "CA" }, { "_id": "95441", "city": "GEYSERVILLE", "loc": [ -122.888921, 38.700398 ], "pop": 2716, "state": "CA" }, { "_id": "95442", "city": "GLEN ELLEN", "loc": [ -122.521002, 38.362538 ], "pop": 5055, "state": "CA" }, { "_id": "95443", "city": "GLENHAVEN", "loc": [ -122.522035, 38.99008 ], "pop": 94, "state": "CA" }, { "_id": "95444", "city": "GRATON", "loc": [ -122.866766, 38.434971 ], "pop": 259, "state": "CA" }, { "_id": "95445", "city": "GUALALA", "loc": [ -123.553975, 38.803619 ], "pop": 1806, "state": "CA" }, { "_id": "95446", "city": "GUERNEVILLE", "loc": [ -122.994416, 38.509573 ], "pop": 5060, "state": "CA" }, { "_id": "95448", "city": "HEALDSBURG", "loc": [ -122.856529, 38.61553 ], "pop": 16884, "state": "CA" }, { "_id": "95449", "city": "HOPLAND", "loc": [ -123.116956, 38.972056 ], "pop": 1648, "state": "CA" }, { "_id": "95450", "city": "JENNER", "loc": [ -123.135379, 38.474093 ], "pop": 156, "state": "CA" }, { "_id": "95451", "city": "KELSEYVILLE", "loc": [ -122.781707, 38.946164 ], "pop": 10064, "state": "CA" }, { "_id": "95452", "city": "KENWOOD", "loc": [ -122.554679, 38.416794 ], "pop": 1411, "state": "CA" }, { "_id": "95453", "city": "LAKEPORT", "loc": [ -122.915082, 39.055147 ], "pop": 10351, "state": "CA" }, { "_id": "95454", "city": "LAYTONVILLE", "loc": [ -123.486862, 39.667811 ], "pop": 1815, "state": "CA" }, { "_id": "95456", "city": "LITTLERIVER", "loc": [ -123.753089, 39.271042 ], "pop": 1119, "state": "CA" }, { "_id": "95457", "city": "LOWER LAKE", "loc": [ -122.575426, 38.860682 ], "pop": 4880, "state": "CA" }, { "_id": "95458", "city": "LUCERNE", "loc": [ -122.785125, 39.083393 ], "pop": 2330, "state": "CA" }, { "_id": "95459", "city": "MANCHESTER", "loc": [ -123.670962, 38.992088 ], "pop": 453, "state": "CA" }, { "_id": "95460", "city": "MENDOCINO", "loc": [ -123.78846, 39.323212 ], "pop": 1876, "state": "CA" }, { "_id": "95461", "city": "MIDDLETOWN", "loc": [ -122.64352, 38.782504 ], "pop": 2863, "state": "CA" }, { "_id": "95462", "city": "RUSSIAN RIVER MD", "loc": [ -123.00447, 38.462668 ], "pop": 1999, "state": "CA" }, { "_id": "95464", "city": "NICE", "loc": [ -122.842409, 39.122341 ], "pop": 2374, "state": "CA" }, { "_id": "95465", "city": "OCCIDENTAL", "loc": [ -122.988194, 38.396911 ], "pop": 2094, "state": "CA" }, { "_id": "95466", "city": "PHILO", "loc": [ -123.538218, 39.120005 ], "pop": 498, "state": "CA" }, { "_id": "95468", "city": "POINT ARENA", "loc": [ -123.660756, 38.915264 ], "pop": 1129, "state": "CA" }, { "_id": "95469", "city": "POTTER VALLEY", "loc": [ -123.104181, 39.329639 ], "pop": 1970, "state": "CA" }, { "_id": "95470", "city": "REDWOOD VALLEY", "loc": [ -123.213289, 39.269446 ], "pop": 5328, "state": "CA" }, { "_id": "95472", "city": "FREESTONE", "loc": [ -122.838503, 38.391543 ], "pop": 27943, "state": "CA" }, { "_id": "95476", "city": "SONOMA", "loc": [ -122.472843, 38.295659 ], "pop": 30443, "state": "CA" }, { "_id": "95482", "city": "UKIAH", "loc": [ -123.200692, 39.151917 ], "pop": 28165, "state": "CA" }, { "_id": "95485", "city": "UPPER LAKE", "loc": [ -122.896114, 39.160829 ], "pop": 1771, "state": "CA" }, { "_id": "95488", "city": "WESTPORT", "loc": [ -123.76426, 39.644059 ], "pop": 369, "state": "CA" }, { "_id": "95490", "city": "WILLITS", "loc": [ -123.350271, 39.411426 ], "pop": 12864, "state": "CA" }, { "_id": "95492", "city": "WINDSOR", "loc": [ -122.804375, 38.543182 ], "pop": 13717, "state": "CA" }, { "_id": "95493", "city": "WITTER SPRINGS", "loc": [ -122.97105, 39.182118 ], "pop": 300, "state": "CA" }, { "_id": "95494", "city": "YORKVILLE", "loc": [ -123.233867, 38.908945 ], "pop": 173, "state": "CA" }, { "_id": "95497", "city": "THE SEA RANCH", "loc": [ -123.467486, 38.725627 ], "pop": 576, "state": "CA" }, { "_id": "95501", "city": "EUREKA", "loc": [ -124.155892, 40.776237 ], "pop": 45720, "state": "CA" }, { "_id": "95521", "city": "MC KINLEYVILLE", "loc": [ -124.081069, 40.904901 ], "pop": 32283, "state": "CA" }, { "_id": "95524", "city": "BAYSIDE", "loc": [ -124.027305, 40.822381 ], "pop": 1744, "state": "CA" }, { "_id": "95525", "city": "BLUE LAKE", "loc": [ -123.896696, 40.928701 ], "pop": 328, "state": "CA" }, { "_id": "95526", "city": "RUTH", "loc": [ -123.549351, 40.468566 ], "pop": 1076, "state": "CA" }, { "_id": "95527", "city": "BURNT RANCH", "loc": [ -123.461248, 40.772238 ], "pop": 478, "state": "CA" }, { "_id": "95528", "city": "CARLOTTA", "loc": [ -123.974287, 40.507027 ], "pop": 1054, "state": "CA" }, { "_id": "95531", "city": "CRESCENT CITY", "loc": [ -124.178448, 41.785402 ], "pop": 19400, "state": "CA" }, { "_id": "95536", "city": "FERNDALE", "loc": [ -124.252268, 40.574488 ], "pop": 2942, "state": "CA" }, { "_id": "95540", "city": "FORTUNA", "loc": [ -124.140654, 40.584931 ], "pop": 10727, "state": "CA" }, { "_id": "95543", "city": "GASQUET", "loc": [ -123.912467, 41.862768 ], "pop": 658, "state": "CA" }, { "_id": "95546", "city": "HOOPA", "loc": [ -123.692754, 41.105937 ], "pop": 2702, "state": "CA" }, { "_id": "95547", "city": "HYDESVILLE", "loc": [ -124.084489, 40.549576 ], "pop": 919, "state": "CA" }, { "_id": "95548", "city": "KLAMATH", "loc": [ -124.033907, 41.542075 ], "pop": 1390, "state": "CA" }, { "_id": "95549", "city": "KNEELAND", "loc": [ -123.946421, 40.71262 ], "pop": 265, "state": "CA" }, { "_id": "95550", "city": "KORBEL", "loc": [ -123.859413, 40.824369 ], "pop": 187, "state": "CA" }, { "_id": "95551", "city": "LOLETA", "loc": [ -124.228826, 40.6531 ], "pop": 1244, "state": "CA" }, { "_id": "95552", "city": "MAD RIVER", "loc": [ -123.413994, 40.352352 ], "pop": 6, "state": "CA" }, { "_id": "95554", "city": "MYERS FLAT", "loc": [ -123.822713, 40.194758 ], "pop": 3791, "state": "CA" }, { "_id": "95555", "city": "ORICK", "loc": [ -124.050319, 41.30724 ], "pop": 314, "state": "CA" }, { "_id": "95556", "city": "ORLEANS", "loc": [ -123.529564, 41.318092 ], "pop": 619, "state": "CA" }, { "_id": "95558", "city": "PETROLIA", "loc": [ -124.251236, 40.300558 ], "pop": 347, "state": "CA" }, { "_id": "95560", "city": "REDWAY", "loc": [ -123.844194, 40.110081 ], "pop": 148, "state": "CA" }, { "_id": "95562", "city": "RIO DELL", "loc": [ -124.104386, 40.495147 ], "pop": 4066, "state": "CA" }, { "_id": "95563", "city": "SALYER", "loc": [ -123.547833, 40.89095 ], "pop": 903, "state": "CA" }, { "_id": "95564", "city": "SAMOA", "loc": [ -124.193571, 40.803712 ], "pop": 527, "state": "CA" }, { "_id": "95565", "city": "SCOTIA", "loc": [ -124.039074, 40.454665 ], "pop": 321, "state": "CA" }, { "_id": "95567", "city": "SMITH RIVER", "loc": [ -124.166115, 41.936218 ], "pop": 2012, "state": "CA" }, { "_id": "95568", "city": "SOMES BAR", "loc": [ -123.475928, 41.43304 ], "pop": 195, "state": "CA" }, { "_id": "95569", "city": "REDCREST", "loc": [ -123.94205, 40.406458 ], "pop": 208, "state": "CA" }, { "_id": "95570", "city": "WESTHAVEN", "loc": [ -124.101253, 41.087949 ], "pop": 3143, "state": "CA" }, { "_id": "95573", "city": "WILLOW CREEK", "loc": [ -123.631062, 40.938894 ], "pop": 1503, "state": "CA" }, { "_id": "95603", "city": "AUBURN", "loc": [ -121.084347, 38.928311 ], "pop": 32535, "state": "CA" }, { "_id": "95605", "city": "BRYTE", "loc": [ -121.526377, 38.592424 ], "pop": 11611, "state": "CA" }, { "_id": "95606", "city": "BROOKS", "loc": [ -122.133391, 38.739277 ], "pop": 162, "state": "CA" }, { "_id": "95607", "city": "CAPAY", "loc": [ -122.100993, 38.696964 ], "pop": 175, "state": "CA" }, { "_id": "95608", "city": "CARMICHAEL", "loc": [ -121.328683, 38.628393 ], "pop": 55815, "state": "CA" }, { "_id": "95610", "city": "CITRUS HEIGHTS", "loc": [ -121.269211, 38.694571 ], "pop": 41476, "state": "CA" }, { "_id": "95612", "city": "CLARKSBURG", "loc": [ -121.556853, 38.395963 ], "pop": 1501, "state": "CA" }, { "_id": "95614", "city": "COOL", "loc": [ -120.972963, 38.903633 ], "pop": 2325, "state": "CA" }, { "_id": "95615", "city": "COURTLAND", "loc": [ -121.554297, 38.305756 ], "pop": 958, "state": "CA" }, { "_id": "95616", "city": "DAVIS", "loc": [ -121.748495, 38.554817 ], "pop": 52224, "state": "CA" }, { "_id": "95618", "city": "EL MACERO", "loc": [ -121.676722, 38.542151 ], "pop": 1126, "state": "CA" }, { "_id": "95619", "city": "DIAMOND SPRINGS", "loc": [ -120.836071, 38.66302 ], "pop": 6747, "state": "CA" }, { "_id": "95620", "city": "LIBERTY FARMS", "loc": [ -121.815825, 38.458691 ], "pop": 14536, "state": "CA" }, { "_id": "95621", "city": "CITRUS HEIGHTS", "loc": [ -121.307501, 38.695155 ], "pop": 40540, "state": "CA" }, { "_id": "95624", "city": "ELK GROVE", "loc": [ -121.359914, 38.412744 ], "pop": 23492, "state": "CA" }, { "_id": "95626", "city": "ELVERTA", "loc": [ -121.431038, 38.716424 ], "pop": 6154, "state": "CA" }, { "_id": "95627", "city": "ESPARTO", "loc": [ -122.021391, 38.694191 ], "pop": 2118, "state": "CA" }, { "_id": "95628", "city": "FAIR OAKS", "loc": [ -121.261065, 38.655408 ], "pop": 40502, "state": "CA" }, { "_id": "95629", "city": "FIDDLETOWN", "loc": [ -120.715926, 38.53141 ], "pop": 1147, "state": "CA" }, { "_id": "95630", "city": "EL DORADO HILLS", "loc": [ -121.140927, 38.687885 ], "pop": 38587, "state": "CA" }, { "_id": "95631", "city": "FORESTHILL", "loc": [ -120.861127, 39.00229 ], "pop": 4626, "state": "CA" }, { "_id": "95632", "city": "GALT", "loc": [ -121.29383, 38.269846 ], "pop": 14173, "state": "CA" }, { "_id": "95633", "city": "GARDEN VALLEY", "loc": [ -120.856672, 38.866495 ], "pop": 3628, "state": "CA" }, { "_id": "95634", "city": "GEORGETOWN", "loc": [ -120.793388, 38.919892 ], "pop": 1634, "state": "CA" }, { "_id": "95635", "city": "GREENWOOD", "loc": [ -120.916589, 38.936234 ], "pop": 226, "state": "CA" }, { "_id": "95636", "city": "GRIZZLY FLATS", "loc": [ -120.542508, 38.628665 ], "pop": 237, "state": "CA" }, { "_id": "95637", "city": "GUINDA", "loc": [ -122.189659, 38.816568 ], "pop": 198, "state": "CA" }, { "_id": "95638", "city": "HERALD", "loc": [ -121.158898, 38.31282 ], "pop": 1009, "state": "CA" }, { "_id": "95640", "city": "IONE", "loc": [ -120.943265, 38.351882 ], "pop": 8440, "state": "CA" }, { "_id": "95641", "city": "ISLETON", "loc": [ -121.604858, 38.155392 ], "pop": 2273, "state": "CA" }, { "_id": "95642", "city": "JACKSON", "loc": [ -120.754877, 38.357514 ], "pop": 5335, "state": "CA" }, { "_id": "95643", "city": "KELSEY", "loc": [ -120.824056, 38.797636 ], "pop": 531, "state": "CA" }, { "_id": "95645", "city": "KNIGHTS LANDING", "loc": [ -121.720003, 38.822032 ], "pop": 1907, "state": "CA" }, { "_id": "95648", "city": "LINCOLN", "loc": [ -121.295541, 38.904035 ], "pop": 11935, "state": "CA" }, { "_id": "95650", "city": "LOOMIS", "loc": [ -121.169826, 38.80711 ], "pop": 12973, "state": "CA" }, { "_id": "95651", "city": "LOTUS", "loc": [ -120.928864, 38.801712 ], "pop": 1832, "state": "CA" }, { "_id": "95652", "city": "MCCLELLAN AFB", "loc": [ -121.40311, 38.655416 ], "pop": 541, "state": "CA" }, { "_id": "95653", "city": "MADISON", "loc": [ -121.972129, 38.680164 ], "pop": 523, "state": "CA" }, { "_id": "95655", "city": "MATHER AFB", "loc": [ -121.282394, 38.549224 ], "pop": 4880, "state": "CA" }, { "_id": "95658", "city": "NEWCASTLE", "loc": [ -121.142616, 38.872467 ], "pop": 5998, "state": "CA" }, { "_id": "95659", "city": "TROWBRIDGE", "loc": [ -121.553043, 38.882726 ], "pop": 802, "state": "CA" }, { "_id": "95660", "city": "NORTH HIGHLANDS", "loc": [ -121.374913, 38.68855 ], "pop": 42271, "state": "CA" }, { "_id": "95661", "city": "ROSEVILLE", "loc": [ -121.233968, 38.734612 ], "pop": 29157, "state": "CA" }, { "_id": "95662", "city": "ORANGEVALE", "loc": [ -121.222902, 38.682384 ], "pop": 31361, "state": "CA" }, { "_id": "95663", "city": "PENRYN", "loc": [ -121.179149, 38.856654 ], "pop": 2048, "state": "CA" }, { "_id": "95664", "city": "PILOT HILL", "loc": [ -121.029765, 38.826312 ], "pop": 1152, "state": "CA" }, { "_id": "95665", "city": "PINE GROVE", "loc": [ -120.643713, 38.396783 ], "pop": 3066, "state": "CA" }, { "_id": "95666", "city": "PIONEER", "loc": [ -120.531815, 38.460271 ], "pop": 4797, "state": "CA" }, { "_id": "95667", "city": "PLACERVILLE", "loc": [ -120.804564, 38.719479 ], "pop": 30563, "state": "CA" }, { "_id": "95668", "city": "PLEASANT GROVE", "loc": [ -121.507967, 38.787773 ], "pop": 1034, "state": "CA" }, { "_id": "95669", "city": "PLYMOUTH", "loc": [ -120.870258, 38.48811 ], "pop": 969, "state": "CA" }, { "_id": "95670", "city": "GOLD RIVER", "loc": [ -121.289434, 38.601897 ], "pop": 42461, "state": "CA" }, { "_id": "95672", "city": "RESCUE", "loc": [ -120.994526, 38.719353 ], "pop": 2987, "state": "CA" }, { "_id": "95673", "city": "RIO LINDA", "loc": [ -121.445152, 38.689311 ], "pop": 12756, "state": "CA" }, { "_id": "95674", "city": "RIO OSO", "loc": [ -121.505305, 38.960998 ], "pop": 1102, "state": "CA" }, { "_id": "95677", "city": "ROCKLIN", "loc": [ -121.243406, 38.791898 ], "pop": 19125, "state": "CA" }, { "_id": "95678", "city": "ROSEVILLE", "loc": [ -121.302801, 38.750895 ], "pop": 28285, "state": "CA" }, { "_id": "95679", "city": "RUMSEY", "loc": [ -122.253738, 38.8762 ], "pop": 228, "state": "CA" }, { "_id": "95681", "city": "SHERIDAN", "loc": [ -121.362062, 38.99153 ], "pop": 1169, "state": "CA" }, { "_id": "95682", "city": "CAMERON PARK", "loc": [ -120.975925, 38.665616 ], "pop": 20139, "state": "CA" }, { "_id": "95683", "city": "RANCHO MURIETA", "loc": [ -121.094089, 38.507475 ], "pop": 3035, "state": "CA" }, { "_id": "95684", "city": "SOMERSET", "loc": [ -120.666306, 38.607414 ], "pop": 2892, "state": "CA" }, { "_id": "95685", "city": "SUTTER CREEK", "loc": [ -120.785454, 38.418569 ], "pop": 5677, "state": "CA" }, { "_id": "95687", "city": "VACAVILLE", "loc": [ -121.962285, 38.341915 ], "pop": 50280, "state": "CA" }, { "_id": "95688", "city": "VACAVILLE", "loc": [ -121.989912, 38.3812 ], "pop": 29052, "state": "CA" }, { "_id": "95689", "city": "VOLCANO", "loc": [ -120.617761, 38.477319 ], "pop": 1004, "state": "CA" }, { "_id": "95690", "city": "WALNUT GROVE", "loc": [ -121.524849, 38.236362 ], "pop": 1839, "state": "CA" }, { "_id": "95691", "city": "WEST SACRAMENTO", "loc": [ -121.539671, 38.567979 ], "pop": 17301, "state": "CA" }, { "_id": "95692", "city": "WHEATLAND", "loc": [ -121.422126, 39.019197 ], "pop": 2532, "state": "CA" }, { "_id": "95693", "city": "WILTON", "loc": [ -121.225656, 38.412069 ], "pop": 4082, "state": "CA" }, { "_id": "95694", "city": "WINTERS", "loc": [ -121.974544, 38.529462 ], "pop": 6253, "state": "CA" }, { "_id": "95695", "city": "WOODLAND", "loc": [ -121.77932, 38.674294 ], "pop": 44587, "state": "CA" }, { "_id": "95698", "city": "ZAMORA", "loc": [ -121.90654, 38.799896 ], "pop": 317, "state": "CA" }, { "_id": "95701", "city": "ALTA", "loc": [ -120.773165, 39.228032 ], "pop": 751, "state": "CA" }, { "_id": "95703", "city": "APPLEGATE", "loc": [ -120.990511, 38.995487 ], "pop": 1898, "state": "CA" }, { "_id": "95709", "city": "CAMINO", "loc": [ -120.671979, 38.744938 ], "pop": 4394, "state": "CA" }, { "_id": "95713", "city": "IOWA HILL", "loc": [ -120.960163, 39.076936 ], "pop": 7344, "state": "CA" }, { "_id": "95714", "city": "DUTCH FLAT", "loc": [ -120.826224, 39.197788 ], "pop": 533, "state": "CA" }, { "_id": "95715", "city": "EMIGRANT GAP", "loc": [ -120.662902, 39.286907 ], "pop": 36, "state": "CA" }, { "_id": "95717", "city": "GOLD RUN", "loc": [ -120.856909, 39.175102 ], "pop": 79, "state": "CA" }, { "_id": "95720", "city": "KYBURZ", "loc": [ -120.25529, 38.780036 ], "pop": 159, "state": "CA" }, { "_id": "95721", "city": "ECHO LAKE", "loc": [ -120.070498, 38.810254 ], "pop": 17, "state": "CA" }, { "_id": "95722", "city": "MEADOW VISTA", "loc": [ -121.029155, 39.003101 ], "pop": 3314, "state": "CA" }, { "_id": "95724", "city": "NORDEN", "loc": [ -120.400876, 39.319566 ], "pop": 316, "state": "CA" }, { "_id": "95726", "city": "PACIFIC HOUSE", "loc": [ -120.585114, 38.745581 ], "pop": 7722, "state": "CA" }, { "_id": "95728", "city": "SODA SPRINGS", "loc": [ -120.465493, 39.338467 ], "pop": 96, "state": "CA" }, { "_id": "95735", "city": "TWIN BRIDGES", "loc": [ -120.128851, 38.808615 ], "pop": 0, "state": "CA" }, { "_id": "95742", "city": "RANCHO CORDOVA", "loc": [ -121.204019, 38.604313 ], "pop": 186, "state": "CA" }, { "_id": "95758", "city": "ELK GROVE", "loc": [ -121.430706, 38.404238 ], "pop": 13455, "state": "CA" }, { "_id": "95814", "city": "SACRAMENTO", "loc": [ -121.489404, 38.579792 ], "pop": 16414, "state": "CA" }, { "_id": "95815", "city": "SACRAMENTO", "loc": [ -121.443543, 38.613303 ], "pop": 23491, "state": "CA" }, { "_id": "95816", "city": "SACRAMENTO", "loc": [ -121.46753, 38.572788 ], "pop": 16211, "state": "CA" }, { "_id": "95817", "city": "SACRAMENTO", "loc": [ -121.458324, 38.549785 ], "pop": 15767, "state": "CA" }, { "_id": "95818", "city": "SACRAMENTO", "loc": [ -121.492884, 38.556778 ], "pop": 22214, "state": "CA" }, { "_id": "95819", "city": "SACRAMENTO", "loc": [ -121.436634, 38.568293 ], "pop": 18333, "state": "CA" }, { "_id": "95820", "city": "SACRAMENTO", "loc": [ -121.445139, 38.534694 ], "pop": 35354, "state": "CA" }, { "_id": "95821", "city": "SACRAMENTO", "loc": [ -121.383807, 38.623889 ], "pop": 33040, "state": "CA" }, { "_id": "95822", "city": "SACRAMENTO", "loc": [ -121.493541, 38.509139 ], "pop": 43943, "state": "CA" }, { "_id": "95823", "city": "SACRAMENTO", "loc": [ -121.443846, 38.479711 ], "pop": 55103, "state": "CA" }, { "_id": "95824", "city": "SACRAMENTO", "loc": [ -121.441883, 38.517843 ], "pop": 26507, "state": "CA" }, { "_id": "95825", "city": "SACRAMENTO", "loc": [ -121.405677, 38.589226 ], "pop": 27116, "state": "CA" }, { "_id": "95826", "city": "SACRAMENTO", "loc": [ -121.369265, 38.553868 ], "pop": 38107, "state": "CA" }, { "_id": "95827", "city": "SACRAMENTO", "loc": [ -121.328593, 38.56623 ], "pop": 19471, "state": "CA" }, { "_id": "95828", "city": "SACRAMENTO", "loc": [ -121.401504, 38.483718 ], "pop": 43489, "state": "CA" }, { "_id": "95829", "city": "SACRAMENTO", "loc": [ -121.346631, 38.472564 ], "pop": 4610, "state": "CA" }, { "_id": "95830", "city": "SACRAMENTO", "loc": [ -121.281453, 38.476556 ], "pop": 420, "state": "CA" }, { "_id": "95831", "city": "SACRAMENTO", "loc": [ -121.529661, 38.496226 ], "pop": 39369, "state": "CA" }, { "_id": "95832", "city": "SACRAMENTO", "loc": [ -121.482967, 38.475387 ], "pop": 7724, "state": "CA" }, { "_id": "95833", "city": "SACRAMENTO", "loc": [ -121.494487, 38.616993 ], "pop": 29150, "state": "CA" }, { "_id": "95834", "city": "SACRAMENTO", "loc": [ -121.492052, 38.633418 ], "pop": 6375, "state": "CA" }, { "_id": "95835", "city": "SACRAMENTO", "loc": [ -121.483444, 38.662595 ], "pop": 373, "state": "CA" }, { "_id": "95836", "city": "SACRAMENTO", "loc": [ -121.532259, 38.707346 ], "pop": 8, "state": "CA" }, { "_id": "95837", "city": "SACRAMENTO", "loc": [ -121.60297, 38.681726 ], "pop": 259, "state": "CA" }, { "_id": "95838", "city": "SACRAMENTO", "loc": [ -121.44396, 38.640566 ], "pop": 26996, "state": "CA" }, { "_id": "95841", "city": "SACRAMENTO", "loc": [ -121.340608, 38.662699 ], "pop": 21161, "state": "CA" }, { "_id": "95842", "city": "SACRAMENTO", "loc": [ -121.35046, 38.687385 ], "pop": 32169, "state": "CA" }, { "_id": "95864", "city": "SACRAMENTO", "loc": [ -121.376889, 38.587768 ], "pop": 25105, "state": "CA" }, { "_id": "95901", "city": "MARYSVILLE", "loc": [ -121.522467, 39.141653 ], "pop": 43785, "state": "CA" }, { "_id": "95910", "city": "ALLEGHANY", "loc": [ -120.727176, 39.512698 ], "pop": 0, "state": "CA" }, { "_id": "95912", "city": "ARBUCKLE", "loc": [ -122.027405, 39.013787 ], "pop": 3851, "state": "CA" }, { "_id": "95914", "city": "BANGOR", "loc": [ -121.350499, 39.424862 ], "pop": 110, "state": "CA" }, { "_id": "95915", "city": "BELDEN", "loc": [ -121.325924, 39.921746 ], "pop": 32, "state": "CA" }, { "_id": "95916", "city": "BERRY CREEK", "loc": [ -121.385467, 39.638394 ], "pop": 1285, "state": "CA" }, { "_id": "95917", "city": "BIGGS", "loc": [ -121.695873, 39.414918 ], "pop": 2784, "state": "CA" }, { "_id": "95918", "city": "BROWNS VALLEY", "loc": [ -121.346482, 39.284428 ], "pop": 1297, "state": "CA" }, { "_id": "95919", "city": "BROWNSVILLE", "loc": [ -121.261179, 39.452534 ], "pop": 1013, "state": "CA" }, { "_id": "95920", "city": "BUTTE CITY", "loc": [ -121.978046, 39.456348 ], "pop": 548, "state": "CA" }, { "_id": "95922", "city": "CAMPTONVILLE", "loc": [ -121.023066, 39.450784 ], "pop": 1090, "state": "CA" }, { "_id": "95923", "city": "CANYONDAM", "loc": [ -121.156324, 40.207958 ], "pop": 39, "state": "CA" }, { "_id": "95926", "city": "COHASSET", "loc": [ -121.851806, 39.756466 ], "pop": 55269, "state": "CA" }, { "_id": "95928", "city": "CHICO", "loc": [ -121.81555, 39.729523 ], "pop": 27452, "state": "CA" }, { "_id": "95932", "city": "COLUSA", "loc": [ -122.011563, 39.21311 ], "pop": 7042, "state": "CA" }, { "_id": "95934", "city": "CRESCENT MILLS", "loc": [ -120.881993, 40.081915 ], "pop": 189, "state": "CA" }, { "_id": "95935", "city": "DOBBINS", "loc": [ -121.234386, 39.371469 ], "pop": 1502, "state": "CA" }, { "_id": "95936", "city": "DOWNIEVILLE", "loc": [ -120.677767, 39.570265 ], "pop": 46, "state": "CA" }, { "_id": "95937", "city": "DUNNIGAN", "loc": [ -121.996577, 38.893671 ], "pop": 850, "state": "CA" }, { "_id": "95938", "city": "DURHAM", "loc": [ -121.791983, 39.641599 ], "pop": 3327, "state": "CA" }, { "_id": "95939", "city": "ELK CREEK", "loc": [ -122.557244, 39.598914 ], "pop": 497, "state": "CA" }, { "_id": "95941", "city": "FORBESTOWN", "loc": [ -121.213443, 39.541712 ], "pop": 517, "state": "CA" }, { "_id": "95942", "city": "BUTTE MEADOWS", "loc": [ -121.500205, 40.129931 ], "pop": 91, "state": "CA" }, { "_id": "95943", "city": "GLENN", "loc": [ -122.038443, 39.606871 ], "pop": 1090, "state": "CA" }, { "_id": "95944", "city": "GOODYEARS BAR", "loc": [ -120.820698, 39.572891 ], "pop": 377, "state": "CA" }, { "_id": "95945", "city": "GRASS VALLEY", "loc": [ -121.037401, 39.207617 ], "pop": 21263, "state": "CA" }, { "_id": "95946", "city": "PENN VALLEY", "loc": [ -121.193519, 39.218778 ], "pop": 7603, "state": "CA" }, { "_id": "95947", "city": "GREENVILLE", "loc": [ -120.927299, 40.142404 ], "pop": 2690, "state": "CA" }, { "_id": "95948", "city": "GRIDLEY", "loc": [ -121.689777, 39.358855 ], "pop": 9499, "state": "CA" }, { "_id": "95949", "city": "GRASS VALLEY", "loc": [ -121.069357, 39.1029 ], "pop": 20973, "state": "CA" }, { "_id": "95953", "city": "LIVE OAK", "loc": [ -121.66393, 39.266904 ], "pop": 6800, "state": "CA" }, { "_id": "95954", "city": "MAGALIA", "loc": [ -121.597455, 39.831728 ], "pop": 10009, "state": "CA" }, { "_id": "95955", "city": "MAXWELL", "loc": [ -122.195161, 39.292494 ], "pop": 1410, "state": "CA" }, { "_id": "95956", "city": "MEADOW VALLEY", "loc": [ -121.05629, 39.918488 ], "pop": 91, "state": "CA" }, { "_id": "95957", "city": "MERIDIAN", "loc": [ -121.88138, 39.116812 ], "pop": 907, "state": "CA" }, { "_id": "95959", "city": "NEVADA CITY", "loc": [ -121.019634, 39.275395 ], "pop": 16670, "state": "CA" }, { "_id": "95960", "city": "NORTH SAN JUAN", "loc": [ -121.13498, 39.354037 ], "pop": 228, "state": "CA" }, { "_id": "95961", "city": "OLIVEHURST", "loc": [ -121.550059, 39.089483 ], "pop": 6418, "state": "CA" }, { "_id": "95962", "city": "OREGON HOUSE", "loc": [ -121.209229, 39.314388 ], "pop": 0, "state": "CA" }, { "_id": "95963", "city": "ORLAND", "loc": [ -122.157885, 39.744578 ], "pop": 14720, "state": "CA" }, { "_id": "95965", "city": "PULGA", "loc": [ -121.578396, 39.532967 ], "pop": 16712, "state": "CA" }, { "_id": "95966", "city": "OROVILLE", "loc": [ -121.502029, 39.491448 ], "pop": 27286, "state": "CA" }, { "_id": "95968", "city": "PALERMO", "loc": [ -121.545389, 39.436148 ], "pop": 1843, "state": "CA" }, { "_id": "95969", "city": "PARADISE", "loc": [ -121.603097, 39.759804 ], "pop": 26327, "state": "CA" }, { "_id": "95970", "city": "PRINCETON", "loc": [ -122.030181, 39.428313 ], "pop": 563, "state": "CA" }, { "_id": "95971", "city": "QUINCY", "loc": [ -120.928493, 39.940504 ], "pop": 6303, "state": "CA" }, { "_id": "95972", "city": "RACKERBY", "loc": [ -121.336192, 39.4059 ], "pop": 260, "state": "CA" }, { "_id": "95975", "city": "ROUGH AND READY", "loc": [ -121.150856, 39.228585 ], "pop": 1811, "state": "CA" }, { "_id": "95977", "city": "SMARTVILLE", "loc": [ -121.266716, 39.204305 ], "pop": 807, "state": "CA" }, { "_id": "95979", "city": "STONYFORD", "loc": [ -122.517811, 39.333652 ], "pop": 683, "state": "CA" }, { "_id": "95981", "city": "LA PORTE", "loc": [ -121.074566, 39.604136 ], "pop": 242, "state": "CA" }, { "_id": "95982", "city": "SUTTER", "loc": [ -121.756527, 39.168114 ], "pop": 3090, "state": "CA" }, { "_id": "95983", "city": "TAYLORSVILLE", "loc": [ -120.801797, 40.064911 ], "pop": 177, "state": "CA" }, { "_id": "95984", "city": "TWAIN", "loc": [ -121.150729, 40.002769 ], "pop": 211, "state": "CA" }, { "_id": "95987", "city": "WILLIAMS", "loc": [ -122.162375, 39.148855 ], "pop": 3094, "state": "CA" }, { "_id": "95988", "city": "WILLOWS", "loc": [ -122.199204, 39.523751 ], "pop": 8034, "state": "CA" }, { "_id": "95991", "city": "YUBA CITY", "loc": [ -121.621599, 39.128619 ], "pop": 30201, "state": "CA" }, { "_id": "95993", "city": "YUBA CITY", "loc": [ -121.655168, 39.128193 ], "pop": 19635, "state": "CA" }, { "_id": "96001", "city": "REDDING", "loc": [ -122.411627, 40.560493 ], "pop": 30690, "state": "CA" }, { "_id": "96002", "city": "REDDING", "loc": [ -122.333932, 40.548586 ], "pop": 29008, "state": "CA" }, { "_id": "96003", "city": "REDDING", "loc": [ -122.352962, 40.627751 ], "pop": 30889, "state": "CA" }, { "_id": "96006", "city": "ADIN", "loc": [ -120.943193, 41.21751 ], "pop": 355, "state": "CA" }, { "_id": "96007", "city": "ANDERSON", "loc": [ -122.328218, 40.457432 ], "pop": 20309, "state": "CA" }, { "_id": "96008", "city": "BELLA VISTA", "loc": [ -122.07245, 40.740945 ], "pop": 1218, "state": "CA" }, { "_id": "96010", "city": "BIG BAR", "loc": [ -123.229006, 40.74796 ], "pop": 344, "state": "CA" }, { "_id": "96013", "city": "BURNEY", "loc": [ -121.655036, 40.894927 ], "pop": 4666, "state": "CA" }, { "_id": "96014", "city": "CALLAHAN", "loc": [ -122.764046, 41.383257 ], "pop": 196, "state": "CA" }, { "_id": "96015", "city": "CANBY", "loc": [ -120.921769, 41.466358 ], "pop": 424, "state": "CA" }, { "_id": "96016", "city": "CASSEL", "loc": [ -121.524497, 40.907832 ], "pop": 566, "state": "CA" }, { "_id": "96019", "city": "SHASTA LAKE", "loc": [ -122.365395, 40.680262 ], "pop": 6405, "state": "CA" }, { "_id": "96020", "city": "CHESTER", "loc": [ -121.227338, 40.297457 ], "pop": 2361, "state": "CA" }, { "_id": "96021", "city": "CORNING", "loc": [ -122.195991, 39.929566 ], "pop": 12436, "state": "CA" }, { "_id": "96022", "city": "COTTONWOOD", "loc": [ -122.337463, 40.369072 ], "pop": 9579, "state": "CA" }, { "_id": "96024", "city": "DOUGLAS CITY", "loc": [ -122.923867, 40.634151 ], "pop": 727, "state": "CA" }, { "_id": "96025", "city": "DUNSMUIR", "loc": [ -122.273397, 41.212439 ], "pop": 2683, "state": "CA" }, { "_id": "96027", "city": "SAWYERS BAR", "loc": [ -122.914189, 41.468303 ], "pop": 2326, "state": "CA" }, { "_id": "96028", "city": "FALL RIVER MILLS", "loc": [ -121.460562, 41.03931 ], "pop": 1843, "state": "CA" }, { "_id": "96031", "city": "FORKS OF SALMON", "loc": [ -123.09781, 41.256978 ], "pop": 469, "state": "CA" }, { "_id": "96032", "city": "FORT JONES", "loc": [ -122.883207, 41.617027 ], "pop": 2363, "state": "CA" }, { "_id": "96033", "city": "FRENCH GULCH", "loc": [ -122.622868, 40.703517 ], "pop": 640, "state": "CA" }, { "_id": "96034", "city": "GAZELLE", "loc": [ -122.537122, 41.510485 ], "pop": 162, "state": "CA" }, { "_id": "96035", "city": "GERBER", "loc": [ -122.164937, 40.042997 ], "pop": 3337, "state": "CA" }, { "_id": "96038", "city": "GRENADA", "loc": [ -122.525829, 41.612512 ], "pop": 703, "state": "CA" }, { "_id": "96039", "city": "HAPPY CAMP", "loc": [ -123.388045, 41.801802 ], "pop": 1885, "state": "CA" }, { "_id": "96040", "city": "HAT CREEK", "loc": [ -121.463687, 40.767673 ], "pop": 150, "state": "CA" }, { "_id": "96041", "city": "HAYFORK", "loc": [ -123.163416, 40.550431 ], "pop": 2671, "state": "CA" }, { "_id": "96044", "city": "HORNBROOK", "loc": [ -122.526528, 41.907738 ], "pop": 905, "state": "CA" }, { "_id": "96045", "city": "HORSE CREEK", "loc": [ -123.013919, 41.833732 ], "pop": 379, "state": "CA" }, { "_id": "96047", "city": "IGO", "loc": [ -122.654023, 40.431795 ], "pop": 205, "state": "CA" }, { "_id": "96048", "city": "HELENA", "loc": [ -123.062671, 40.768187 ], "pop": 606, "state": "CA" }, { "_id": "96050", "city": "KLAMATH RIVER", "loc": [ -122.819693, 41.863699 ], "pop": 174, "state": "CA" }, { "_id": "96051", "city": "LAKEHEAD", "loc": [ -122.359281, 40.958775 ], "pop": 1709, "state": "CA" }, { "_id": "96052", "city": "LEWISTON", "loc": [ -122.842591, 40.745986 ], "pop": 2461, "state": "CA" }, { "_id": "96055", "city": "LOS MOLINOS", "loc": [ -122.099175, 40.049735 ], "pop": 3363, "state": "CA" }, { "_id": "96056", "city": "MCARTHUR", "loc": [ -121.214896, 41.111407 ], "pop": 2797, "state": "CA" }, { "_id": "96057", "city": "MCCLOUD", "loc": [ -122.13562, 41.252108 ], "pop": 1743, "state": "CA" }, { "_id": "96058", "city": "MACDOEL", "loc": [ -121.944472, 41.883028 ], "pop": 1945, "state": "CA" }, { "_id": "96059", "city": "MANTON", "loc": [ -121.836521, 40.433125 ], "pop": 344, "state": "CA" }, { "_id": "96062", "city": "MILLVILLE", "loc": [ -122.111088, 40.565316 ], "pop": 1281, "state": "CA" }, { "_id": "96063", "city": "MINERAL", "loc": [ -121.524807, 40.328826 ], "pop": 172, "state": "CA" }, { "_id": "96064", "city": "MONTAGUE", "loc": [ -122.463799, 41.724294 ], "pop": 4246, "state": "CA" }, { "_id": "96065", "city": "MONTGOMERY CREEK", "loc": [ -121.923313, 40.912378 ], "pop": 823, "state": "CA" }, { "_id": "96067", "city": "MOUNT SHASTA", "loc": [ -122.324017, 41.317435 ], "pop": 6719, "state": "CA" }, { "_id": "96069", "city": "OAK RUN", "loc": [ -122.040932, 40.68631 ], "pop": 1160, "state": "CA" }, { "_id": "96071", "city": "OLD STATION", "loc": [ -121.458476, 40.62557 ], "pop": 213, "state": "CA" }, { "_id": "96073", "city": "PALO CEDRO", "loc": [ -122.239805, 40.576661 ], "pop": 3905, "state": "CA" }, { "_id": "96075", "city": "PAYNES CREEK", "loc": [ -121.764952, 40.351415 ], "pop": 773, "state": "CA" }, { "_id": "96076", "city": "WILDWOOD", "loc": [ -122.918013, 40.316528 ], "pop": 119, "state": "CA" }, { "_id": "96080", "city": "RED BLUFF", "loc": [ -122.238281, 40.179535 ], "pop": 25180, "state": "CA" }, { "_id": "96085", "city": "SCOTT BAR", "loc": [ -122.988183, 41.77364 ], "pop": 21, "state": "CA" }, { "_id": "96086", "city": "SEIAD VALLEY", "loc": [ -123.243762, 41.886589 ], "pop": 311, "state": "CA" }, { "_id": "96087", "city": "SHASTA", "loc": [ -122.49685, 40.610896 ], "pop": 294, "state": "CA" }, { "_id": "96088", "city": "SHINGLETOWN", "loc": [ -121.885668, 40.504959 ], "pop": 3681, "state": "CA" }, { "_id": "96091", "city": "TRINITY CENTER", "loc": [ -122.723919, 41.061548 ], "pop": 362, "state": "CA" }, { "_id": "96093", "city": "WEAVERVILLE", "loc": [ -122.935303, 40.731701 ], "pop": 3188, "state": "CA" }, { "_id": "96094", "city": "EDGEWOOD", "loc": [ -122.384803, 41.439466 ], "pop": 5506, "state": "CA" }, { "_id": "96096", "city": "WHITMORE", "loc": [ -121.877076, 40.65255 ], "pop": 593, "state": "CA" }, { "_id": "96097", "city": "YREKA", "loc": [ -122.637604, 41.720558 ], "pop": 9151, "state": "CA" }, { "_id": "96101", "city": "ALTURAS", "loc": [ -120.545584, 41.476742 ], "pop": 5566, "state": "CA" }, { "_id": "96103", "city": "CROMBERG", "loc": [ -120.627397, 39.784745 ], "pop": 1774, "state": "CA" }, { "_id": "96104", "city": "CEDARVILLE", "loc": [ -120.151551, 41.475871 ], "pop": 991, "state": "CA" }, { "_id": "96105", "city": "CHILCOOT", "loc": [ -120.175212, 39.805683 ], "pop": 470, "state": "CA" }, { "_id": "96106", "city": "CLIO", "loc": [ -120.560458, 39.74326 ], "pop": 84, "state": "CA" }, { "_id": "96107", "city": "COLEVILLE", "loc": [ -119.482784, 38.502903 ], "pop": 1370, "state": "CA" }, { "_id": "96108", "city": "DAVIS CREEK", "loc": [ -120.323549, 41.862555 ], "pop": 285, "state": "CA" }, { "_id": "96109", "city": "DOYLE", "loc": [ -120.107693, 40.000799 ], "pop": 985, "state": "CA" }, { "_id": "96111", "city": "FLORISTON", "loc": [ -120.025421, 39.445746 ], "pop": 169, "state": "CA" }, { "_id": "96112", "city": "FORT BIDWELL", "loc": [ -120.161983, 41.864441 ], "pop": 226, "state": "CA" }, { "_id": "96113", "city": "HERLONG", "loc": [ -120.171271, 40.148492 ], "pop": 1518, "state": "CA" }, { "_id": "96114", "city": "JANESVILLE", "loc": [ -120.50982, 40.296325 ], "pop": 2655, "state": "CA" }, { "_id": "96115", "city": "LAKE CITY", "loc": [ -120.181424, 41.668208 ], "pop": 234, "state": "CA" }, { "_id": "96117", "city": "LITCHFIELD", "loc": [ -120.253975, 40.362788 ], "pop": 23, "state": "CA" }, { "_id": "96118", "city": "LOYALTON", "loc": [ -120.229662, 39.662974 ], "pop": 1500, "state": "CA" }, { "_id": "96120", "city": "HOPE VALLEY", "loc": [ -119.807275, 38.76473 ], "pop": 850, "state": "CA" }, { "_id": "96121", "city": "MILFORD", "loc": [ -120.389508, 40.182763 ], "pop": 376, "state": "CA" }, { "_id": "96122", "city": "PORTOLA", "loc": [ -120.466858, 39.810883 ], "pop": 3685, "state": "CA" }, { "_id": "96123", "city": "RAVENDALE", "loc": [ -120.16001, 40.831705 ], "pop": 89, "state": "CA" }, { "_id": "96124", "city": "CALPINE", "loc": [ -120.4442, 39.651699 ], "pop": 286, "state": "CA" }, { "_id": "96125", "city": "SIERRA CITY", "loc": [ -120.624135, 39.559248 ], "pop": 311, "state": "CA" }, { "_id": "96126", "city": "SIERRAVILLE", "loc": [ -120.347789, 39.594294 ], "pop": 355, "state": "CA" }, { "_id": "96128", "city": "STANDISH", "loc": [ -120.406847, 40.350863 ], "pop": 340, "state": "CA" }, { "_id": "96130", "city": "SUSANVILLE", "loc": [ -120.646442, 40.398282 ], "pop": 19347, "state": "CA" }, { "_id": "96132", "city": "TERMO", "loc": [ -120.517378, 40.946667 ], "pop": 199, "state": "CA" }, { "_id": "96133", "city": "TOPAZ", "loc": [ -119.512164, 38.64151 ], "pop": 87, "state": "CA" }, { "_id": "96134", "city": "TULELAKE", "loc": [ -121.434688, 41.931621 ], "pop": 2613, "state": "CA" }, { "_id": "96135", "city": "VINTON", "loc": [ -120.204994, 39.720719 ], "pop": 0, "state": "CA" }, { "_id": "96136", "city": "WENDEL", "loc": [ -120.352156, 40.346233 ], "pop": 148, "state": "CA" }, { "_id": "96137", "city": "PENINSULA VILLAG", "loc": [ -121.109224, 40.270359 ], "pop": 1843, "state": "CA" }, { "_id": "96140", "city": "CARNELIAN BAY", "loc": [ -120.075328, 39.231937 ], "pop": 620, "state": "CA" }, { "_id": "96141", "city": "HOMEWOOD", "loc": [ -120.179035, 39.078157 ], "pop": 283, "state": "CA" }, { "_id": "96142", "city": "TAHOMA", "loc": [ -120.135747, 39.064406 ], "pop": 1029, "state": "CA" }, { "_id": "96143", "city": "KINGS BEACH", "loc": [ -120.023287, 39.240119 ], "pop": 3247, "state": "CA" }, { "_id": "96145", "city": "TAHOE CITY", "loc": [ -120.144532, 39.180618 ], "pop": 4944, "state": "CA" }, { "_id": "96148", "city": "TAHOE VISTA", "loc": [ -120.052128, 39.24475 ], "pop": 717, "state": "CA" }, { "_id": "96150", "city": "SOUTH LAKE TAHOE", "loc": [ -119.986469, 38.916976 ], "pop": 28975, "state": "CA" }, { "_id": "96161", "city": "TRUCKEE", "loc": [ -120.172942, 39.338546 ], "pop": 9544, "state": "CA" }, { "_id": "96162", "city": "TRUCKEE", "loc": [ -120.295031, 39.319321 ], "pop": 199, "state": "CA" }, { "_id": "96701", "city": "AIEA", "loc": [ -157.933237, 21.390795 ], "pop": 43273, "state": "HI" }, { "_id": "96704", "city": "CAPTAIN COOK", "loc": [ -155.887463, 19.438604 ], "pop": 5338, "state": "HI" }, { "_id": "96705", "city": "ELEELE", "loc": [ -159.538115, 21.923017 ], "pop": 6466, "state": "HI" }, { "_id": "96706", "city": "EWA BEACH", "loc": [ -158.010307, 21.327418 ], "pop": 26089, "state": "HI" }, { "_id": "96707", "city": "KAPOLEI", "loc": [ -158.087007, 21.345284 ], "pop": 15891, "state": "HI" }, { "_id": "96708", "city": "HAIKU", "loc": [ -156.299983, 20.907097 ], "pop": 5695, "state": "HI" }, { "_id": "96710", "city": "HAKALAU", "loc": [ -155.133335, 19.888217 ], "pop": 198, "state": "HI" }, { "_id": "96712", "city": "HALEIWA", "loc": [ -158.069315, 21.631151 ], "pop": 7870, "state": "HI" }, { "_id": "96713", "city": "HANA", "loc": [ -156.039659, 20.761635 ], "pop": 1895, "state": "HI" }, { "_id": "96716", "city": "HANAPEPE", "loc": [ -159.592022, 21.915644 ], "pop": 1523, "state": "HI" }, { "_id": "96717", "city": "HAUULA", "loc": [ -157.915704, 21.61395 ], "pop": 3477, "state": "HI" }, { "_id": "96718", "city": "HAWAII NATIONAL", "loc": [ -155.284015, 19.431103 ], "pop": 91, "state": "HI" }, { "_id": "96719", "city": "HAWI", "loc": [ -155.838007, 20.238021 ], "pop": 1741, "state": "HI" }, { "_id": "96720", "city": "HILO", "loc": [ -155.093921, 19.702522 ], "pop": 40158, "state": "HI" }, { "_id": "96722", "city": "PRINCEVILLE", "loc": [ -159.462587, 22.215948 ], "pop": 4631, "state": "HI" }, { "_id": "96725", "city": "HOLUALOA", "loc": [ -155.917639, 19.610316 ], "pop": 2096, "state": "HI" }, { "_id": "96726", "city": "HONAUNAU", "loc": [ -155.893356, 19.44845 ], "pop": 1583, "state": "HI" }, { "_id": "96727", "city": "HONOKAA", "loc": [ -155.488026, 20.08266 ], "pop": 3681, "state": "HI" }, { "_id": "96728", "city": "HONOMU", "loc": [ -155.11766, 19.872767 ], "pop": 548, "state": "HI" }, { "_id": "96729", "city": "HOOLEHUA", "loc": [ -157.079138, 21.173025 ], "pop": 853, "state": "HI" }, { "_id": "96730", "city": "KAAAWA", "loc": [ -157.873734, 21.56737 ], "pop": 2305, "state": "HI" }, { "_id": "96732", "city": "KAHULUI", "loc": [ -156.478327, 20.881388 ], "pop": 17289, "state": "HI" }, { "_id": "96734", "city": "KAILUA", "loc": [ -157.744781, 21.406262 ], "pop": 53403, "state": "HI" }, { "_id": "96740", "city": "KAILUA KONA", "loc": [ -155.979809, 19.653053 ], "pop": 19616, "state": "HI" }, { "_id": "96742", "city": "KALAUPAPA", "loc": [ -156.983453, 21.19289 ], "pop": 130, "state": "HI" }, { "_id": "96743", "city": "KAMUELA", "loc": [ -155.705189, 20.008128 ], "pop": 9140, "state": "HI" }, { "_id": "96744", "city": "KANEOHE", "loc": [ -157.811543, 21.422819 ], "pop": 55236, "state": "HI" }, { "_id": "96746", "city": "KAPAA", "loc": [ -159.344842, 22.086798 ], "pop": 15627, "state": "HI" }, { "_id": "96747", "city": "KAUMAKANI", "loc": [ -159.62413, 21.921329 ], "pop": 819, "state": "HI" }, { "_id": "96748", "city": "KAUNAKAKAI", "loc": [ -156.969015, 21.090504 ], "pop": 4419, "state": "HI" }, { "_id": "96749", "city": "KEAAU", "loc": [ -154.992644, 19.589277 ], "pop": 4297, "state": "HI" }, { "_id": "96750", "city": "KEALAKEKUA", "loc": [ -155.930025, 19.526149 ], "pop": 1309, "state": "HI" }, { "_id": "96752", "city": "KEKAHA", "loc": [ -159.71988, 21.973509 ], "pop": 3785, "state": "HI" }, { "_id": "96753", "city": "KIHEI", "loc": [ -156.447543, 20.744124 ], "pop": 14759, "state": "HI" }, { "_id": "96755", "city": "KAPAAU", "loc": [ -155.798981, 20.218323 ], "pop": 2550, "state": "HI" }, { "_id": "96756", "city": "KOLOA", "loc": [ -159.474927, 21.908293 ], "pop": 4906, "state": "HI" }, { "_id": "96757", "city": "KUALAPUU", "loc": [ -157.027669, 21.160097 ], "pop": 818, "state": "HI" }, { "_id": "96760", "city": "KURTISTOWN", "loc": [ -155.020659, 19.570637 ], "pop": 3975, "state": "HI" }, { "_id": "96761", "city": "LAHAINA", "loc": [ -156.677162, 20.917432 ], "pop": 14508, "state": "HI" }, { "_id": "96762", "city": "LAIE", "loc": [ -157.939377, 21.659513 ], "pop": 8481, "state": "HI" }, { "_id": "96763", "city": "LANAI CITY", "loc": [ -156.921027, 20.829323 ], "pop": 2426, "state": "HI" }, { "_id": "96764", "city": "LAUPAHOEHOE", "loc": [ -155.232263, 19.980194 ], "pop": 1015, "state": "HI" }, { "_id": "96766", "city": "LIHUE", "loc": [ -159.368258, 21.981618 ], "pop": 10663, "state": "HI" }, { "_id": "96768", "city": "MAKAWAO", "loc": [ -156.332735, 20.846932 ], "pop": 13389, "state": "HI" }, { "_id": "96769", "city": "MAKAWELI", "loc": [ -159.790721, 21.927639 ], "pop": 797, "state": "HI" }, { "_id": "96770", "city": "MAUNALOA", "loc": [ -157.219277, 21.142202 ], "pop": 497, "state": "HI" }, { "_id": "96771", "city": "MOUNTAIN VIEW", "loc": [ -155.086436, 19.550587 ], "pop": 3170, "state": "HI" }, { "_id": "96772", "city": "NAALEHU", "loc": [ -155.657474, 19.066844 ], "pop": 2729, "state": "HI" }, { "_id": "96773", "city": "NINOLE", "loc": [ -155.159923, 19.904436 ], "pop": 0, "state": "HI" }, { "_id": "96774", "city": "OOKALA", "loc": [ -155.274666, 20.011887 ], "pop": 315, "state": "HI" }, { "_id": "96775", "city": "PAAUHAU", "loc": [ -155.449088, 20.027748 ], "pop": 917, "state": "HI" }, { "_id": "96776", "city": "PAAUILO", "loc": [ -155.369728, 20.027119 ], "pop": 947, "state": "HI" }, { "_id": "96777", "city": "PAHALA", "loc": [ -155.481506, 19.207898 ], "pop": 1616, "state": "HI" }, { "_id": "96778", "city": "PAHOA", "loc": [ -154.923135, 19.508901 ], "pop": 6702, "state": "HI" }, { "_id": "96779", "city": "PAIA", "loc": [ -156.38017, 20.91539 ], "pop": 2311, "state": "HI" }, { "_id": "96780", "city": "PAPAALOA", "loc": [ -155.218402, 19.904835 ], "pop": 208, "state": "HI" }, { "_id": "96781", "city": "PAPAIKOU", "loc": [ -155.098442, 19.791643 ], "pop": 1700, "state": "HI" }, { "_id": "96782", "city": "PEARL CITY", "loc": [ -157.965164, 21.408393 ], "pop": 38207, "state": "HI" }, { "_id": "96783", "city": "PEPEEKEO", "loc": [ -155.112994, 19.835283 ], "pop": 2038, "state": "HI" }, { "_id": "96785", "city": "VOLCANO", "loc": [ -155.19743, 19.480066 ], "pop": 2639, "state": "HI" }, { "_id": "96786", "city": "WAHIAWA", "loc": [ -158.043527, 21.500596 ], "pop": 43663, "state": "HI" }, { "_id": "96789", "city": "MILILANI", "loc": [ -158.017379, 21.45311 ], "pop": 34734, "state": "HI" }, { "_id": "96790", "city": "KULA", "loc": [ -156.326026, 20.753353 ], "pop": 5697, "state": "HI" }, { "_id": "96791", "city": "WAIALUA", "loc": [ -158.126673, 21.576623 ], "pop": 7975, "state": "HI" }, { "_id": "96792", "city": "WAIANAE", "loc": [ -158.178071, 21.435192 ], "pop": 37518, "state": "HI" }, { "_id": "96793", "city": "WAILUKU", "loc": [ -156.503612, 20.896586 ], "pop": 15818, "state": "HI" }, { "_id": "96795", "city": "WAIMANALO", "loc": [ -157.713094, 21.341786 ], "pop": 9055, "state": "HI" }, { "_id": "96796", "city": "WAIMEA", "loc": [ -159.669429, 21.968487 ], "pop": 1960, "state": "HI" }, { "_id": "96797", "city": "WAIPAHU", "loc": [ -158.012418, 21.398203 ], "pop": 52411, "state": "HI" }, { "_id": "96813", "city": "HONOLULU", "loc": [ -157.852072, 21.317905 ], "pop": 23082, "state": "HI" }, { "_id": "96814", "city": "HONOLULU", "loc": [ -157.843876, 21.299846 ], "pop": 14182, "state": "HI" }, { "_id": "96815", "city": "HONOLULU", "loc": [ -157.826616, 21.281084 ], "pop": 28650, "state": "HI" }, { "_id": "96816", "city": "HONOLULU", "loc": [ -157.800626, 21.288677 ], "pop": 49208, "state": "HI" }, { "_id": "96817", "city": "HONOLULU", "loc": [ -157.861469, 21.329452 ], "pop": 48920, "state": "HI" }, { "_id": "96818", "city": "HONOLULU", "loc": [ -157.926925, 21.353173 ], "pop": 62915, "state": "HI" }, { "_id": "96819", "city": "HONOLULU", "loc": [ -157.875947, 21.34877 ], "pop": 50584, "state": "HI" }, { "_id": "96821", "city": "HONOLULU", "loc": [ -157.755242, 21.292811 ], "pop": 18366, "state": "HI" }, { "_id": "96822", "city": "HONOLULU", "loc": [ -157.829819, 21.311704 ], "pop": 39632, "state": "HI" }, { "_id": "96825", "city": "HONOLULU", "loc": [ -157.698523, 21.298684 ], "pop": 27432, "state": "HI" }, { "_id": "96826", "city": "HONOLULU", "loc": [ -157.828388, 21.294139 ], "pop": 33672, "state": "HI" }, { "_id": "97001", "city": "ANTELOPE", "loc": [ -120.791384, 44.889196 ], "pop": 129, "state": "OR" }, { "_id": "97002", "city": "AURORA", "loc": [ -122.803881, 45.228432 ], "pop": 4638, "state": "OR" }, { "_id": "97004", "city": "BEAVERCREEK", "loc": [ -122.475122, 45.259723 ], "pop": 4253, "state": "OR" }, { "_id": "97005", "city": "BEAVERTON", "loc": [ -122.805395, 45.475035 ], "pop": 46660, "state": "OR" }, { "_id": "97006", "city": "ALOHA", "loc": [ -122.859209, 45.517675 ], "pop": 31650, "state": "OR" }, { "_id": "97007", "city": "ALOHA", "loc": [ -122.859473, 45.472985 ], "pop": 35583, "state": "OR" }, { "_id": "97009", "city": "BORING", "loc": [ -122.380713, 45.429704 ], "pop": 11406, "state": "OR" }, { "_id": "97010", "city": "BRIDAL VEIL", "loc": [ -122.176587, 45.557904 ], "pop": 8, "state": "OR" }, { "_id": "97011", "city": "BRIGHTWOOD", "loc": [ -122.003621, 45.365218 ], "pop": 788, "state": "OR" }, { "_id": "97013", "city": "CANBY", "loc": [ -122.68322, 45.251425 ], "pop": 15801, "state": "OR" }, { "_id": "97014", "city": "BONNEVILLE", "loc": [ -121.882411, 45.671447 ], "pop": 951, "state": "OR" }, { "_id": "97015", "city": "CLACKAMAS", "loc": [ -122.52005, 45.414992 ], "pop": 12352, "state": "OR" }, { "_id": "97016", "city": "WESTPORT", "loc": [ -123.2124, 46.09978 ], "pop": 6361, "state": "OR" }, { "_id": "97017", "city": "COLTON", "loc": [ -122.424753, 45.157291 ], "pop": 4223, "state": "OR" }, { "_id": "97018", "city": "COLUMBIA CITY", "loc": [ -122.812174, 45.892474 ], "pop": 1003, "state": "OR" }, { "_id": "97019", "city": "CORBETT", "loc": [ -122.241746, 45.522116 ], "pop": 2355, "state": "OR" }, { "_id": "97021", "city": "FRIEND", "loc": [ -121.146797, 45.429099 ], "pop": 1111, "state": "OR" }, { "_id": "97022", "city": "EAGLE CREEK", "loc": [ -122.338053, 45.358205 ], "pop": 3285, "state": "OR" }, { "_id": "97023", "city": "ESTACADA", "loc": [ -122.325858, 45.287177 ], "pop": 8703, "state": "OR" }, { "_id": "97026", "city": "GERVAIS", "loc": [ -122.896185, 45.108645 ], "pop": 992, "state": "OR" }, { "_id": "97027", "city": "GLADSTONE", "loc": [ -122.590197, 45.389882 ], "pop": 10148, "state": "OR" }, { "_id": "97028", "city": "TIMBERLINE LODGE", "loc": [ -121.785426, 45.318366 ], "pop": 268, "state": "OR" }, { "_id": "97029", "city": "GRASS VALLEY", "loc": [ -120.747795, 45.301333 ], "pop": 415, "state": "OR" }, { "_id": "97030", "city": "GRESHAM", "loc": [ -122.420258, 45.515397 ], "pop": 35728, "state": "OR" }, { "_id": "97031", "city": "HOOD RIVER", "loc": [ -121.539104, 45.671058 ], "pop": 13718, "state": "OR" }, { "_id": "97032", "city": "HUBBARD", "loc": [ -122.754115, 45.160422 ], "pop": 6393, "state": "OR" }, { "_id": "97033", "city": "KENT", "loc": [ -120.664895, 45.083789 ], "pop": 0, "state": "OR" }, { "_id": "97034", "city": "LAKE OSWEGO", "loc": [ -122.684721, 45.409263 ], "pop": 18063, "state": "OR" }, { "_id": "97035", "city": "LAKE OSWEGO", "loc": [ -122.722709, 45.414666 ], "pop": 19305, "state": "OR" }, { "_id": "97037", "city": "MAUPIN", "loc": [ -121.228164, 45.074247 ], "pop": 1758, "state": "OR" }, { "_id": "97038", "city": "MOLALLA", "loc": [ -122.575574, 45.122256 ], "pop": 7829, "state": "OR" }, { "_id": "97039", "city": "MORO", "loc": [ -120.695666, 45.485332 ], "pop": 550, "state": "OR" }, { "_id": "97040", "city": "MOSIER", "loc": [ -121.324532, 45.66167 ], "pop": 1573, "state": "OR" }, { "_id": "97041", "city": "MOUNT HOOD PARKD", "loc": [ -121.588485, 45.521584 ], "pop": 2236, "state": "OR" }, { "_id": "97042", "city": "MULINO", "loc": [ -122.535068, 45.212973 ], "pop": 2935, "state": "OR" }, { "_id": "97044", "city": "ODELL", "loc": [ -121.440131, 45.623245 ], "pop": 0, "state": "OR" }, { "_id": "97045", "city": "OREGON CITY", "loc": [ -122.569991, 45.337718 ], "pop": 36753, "state": "OR" }, { "_id": "97048", "city": "RAINIER", "loc": [ -122.967067, 46.064552 ], "pop": 6357, "state": "OR" }, { "_id": "97049", "city": "ZIGZAG", "loc": [ -121.953691, 45.355201 ], "pop": 1325, "state": "OR" }, { "_id": "97050", "city": "RUFUS", "loc": [ -120.726777, 45.68515 ], "pop": 389, "state": "OR" }, { "_id": "97051", "city": "SAINT HELENS", "loc": [ -122.828177, 45.860825 ], "pop": 10355, "state": "OR" }, { "_id": "97053", "city": "WARREN", "loc": [ -122.863445, 45.826043 ], "pop": 2378, "state": "OR" }, { "_id": "97054", "city": "DEER ISLAND", "loc": [ -122.898458, 45.935553 ], "pop": 1317, "state": "OR" }, { "_id": "97055", "city": "SANDY", "loc": [ -122.223049, 45.378954 ], "pop": 12936, "state": "OR" }, { "_id": "97056", "city": "SCAPPOOSE", "loc": [ -122.892771, 45.765451 ], "pop": 7812, "state": "OR" }, { "_id": "97057", "city": "SHANIKO", "loc": [ -120.806953, 45.047231 ], "pop": 81, "state": "OR" }, { "_id": "97058", "city": "THE DALLES", "loc": [ -121.190493, 45.599504 ], "pop": 16319, "state": "OR" }, { "_id": "97060", "city": "TROUTDALE", "loc": [ -122.373866, 45.525398 ], "pop": 4849, "state": "OR" }, { "_id": "97062", "city": "TUALATIN", "loc": [ -122.763132, 45.372688 ], "pop": 16371, "state": "OR" }, { "_id": "97063", "city": "WAMIC", "loc": [ -121.296517, 45.231789 ], "pop": 712, "state": "OR" }, { "_id": "97064", "city": "VERNONIA", "loc": [ -123.196662, 45.857298 ], "pop": 2931, "state": "OR" }, { "_id": "97065", "city": "WASCO", "loc": [ -120.730356, 45.597447 ], "pop": 564, "state": "OR" }, { "_id": "97067", "city": "WELCHES", "loc": [ -121.959826, 45.339862 ], "pop": 802, "state": "OR" }, { "_id": "97068", "city": "WEST LINN", "loc": [ -122.647952, 45.366874 ], "pop": 19962, "state": "OR" }, { "_id": "97070", "city": "WILSONVILLE", "loc": [ -122.769886, 45.298646 ], "pop": 9397, "state": "OR" }, { "_id": "97071", "city": "WOODBURN", "loc": [ -122.858342, 45.144617 ], "pop": 17482, "state": "OR" }, { "_id": "97080", "city": "GRESHAM", "loc": [ -122.415645, 45.481699 ], "pop": 25232, "state": "OR" }, { "_id": "97101", "city": "AMITY", "loc": [ -123.174402, 45.115704 ], "pop": 2810, "state": "OR" }, { "_id": "97103", "city": "ASTORIA", "loc": [ -123.79798, 46.155802 ], "pop": 19140, "state": "OR" }, { "_id": "97106", "city": "BANKS", "loc": [ -123.120982, 45.653476 ], "pop": 3316, "state": "OR" }, { "_id": "97107", "city": "BAY CITY", "loc": [ -123.876075, 45.519658 ], "pop": 1483, "state": "OR" }, { "_id": "97108", "city": "BEAVER", "loc": [ -123.823417, 45.276746 ], "pop": 133, "state": "OR" }, { "_id": "97109", "city": "BUXTON", "loc": [ -123.214555, 45.736983 ], "pop": 420, "state": "OR" }, { "_id": "97111", "city": "CARLTON", "loc": [ -123.152346, 45.28593 ], "pop": 1555, "state": "OR" }, { "_id": "97112", "city": "CLOVERDALE", "loc": [ -123.835628, 45.285821 ], "pop": 1269, "state": "OR" }, { "_id": "97113", "city": "CORNELIUS", "loc": [ -123.041536, 45.529034 ], "pop": 13173, "state": "OR" }, { "_id": "97114", "city": "DAYTON", "loc": [ -123.075332, 45.197722 ], "pop": 3640, "state": "OR" }, { "_id": "97115", "city": "DUNDEE", "loc": [ -123.01523, 45.27761 ], "pop": 2382, "state": "OR" }, { "_id": "97116", "city": "GLENWOOD", "loc": [ -123.115152, 45.532835 ], "pop": 17626, "state": "OR" }, { "_id": "97117", "city": "GALES CREEK", "loc": [ -123.233967, 45.595747 ], "pop": 374, "state": "OR" }, { "_id": "97119", "city": "GASTON", "loc": [ -123.16657, 45.442738 ], "pop": 3844, "state": "OR" }, { "_id": "97121", "city": "HAMMOND", "loc": [ -123.952726, 46.198028 ], "pop": 627, "state": "OR" }, { "_id": "97122", "city": "HEBO", "loc": [ -123.871433, 45.212016 ], "pop": 366, "state": "OR" }, { "_id": "97123", "city": "HILLSBORO", "loc": [ -122.956998, 45.498401 ], "pop": 24201, "state": "OR" }, { "_id": "97124", "city": "HILLSBORO", "loc": [ -122.963608, 45.53868 ], "pop": 20503, "state": "OR" }, { "_id": "97125", "city": "MANNING", "loc": [ -123.186113, 45.652468 ], "pop": 549, "state": "OR" }, { "_id": "97127", "city": "LAFAYETTE", "loc": [ -123.111362, 45.246638 ], "pop": 1315, "state": "OR" }, { "_id": "97128", "city": "MCMINNVILLE", "loc": [ -123.204342, 45.209677 ], "pop": 21848, "state": "OR" }, { "_id": "97131", "city": "NEHALEM", "loc": [ -123.904943, 45.72159 ], "pop": 2118, "state": "OR" }, { "_id": "97132", "city": "NEWBERG", "loc": [ -122.968503, 45.309901 ], "pop": 18911, "state": "OR" }, { "_id": "97136", "city": "ROCKAWAY", "loc": [ -123.907834, 45.608511 ], "pop": 3164, "state": "OR" }, { "_id": "97137", "city": "SAINT PAUL", "loc": [ -122.96737, 45.195996 ], "pop": 1623, "state": "OR" }, { "_id": "97138", "city": "GEARHART", "loc": [ -123.878837, 45.969506 ], "pop": 7239, "state": "OR" }, { "_id": "97140", "city": "SHERWOOD", "loc": [ -122.856724, 45.351419 ], "pop": 7623, "state": "OR" }, { "_id": "97141", "city": "TILLAMOOK", "loc": [ -123.818851, 45.449185 ], "pop": 11010, "state": "OR" }, { "_id": "97144", "city": "TIMBER", "loc": [ -123.311852, 45.727033 ], "pop": 124, "state": "OR" }, { "_id": "97145", "city": "TOLOVANA PARK", "loc": [ -123.95887, 45.886172 ], "pop": 1114, "state": "OR" }, { "_id": "97146", "city": "WARRENTON", "loc": [ -123.925366, 46.145017 ], "pop": 4224, "state": "OR" }, { "_id": "97148", "city": "YAMHILL", "loc": [ -123.203639, 45.335049 ], "pop": 4276, "state": "OR" }, { "_id": "97149", "city": "NESKOWIN", "loc": [ -123.926344, 45.178165 ], "pop": 2027, "state": "OR" }, { "_id": "97201", "city": "PORTLAND", "loc": [ -122.690258, 45.498819 ], "pop": 22763, "state": "OR" }, { "_id": "97202", "city": "PORTLAND", "loc": [ -122.636534, 45.484007 ], "pop": 37147, "state": "OR" }, { "_id": "97203", "city": "PORTLAND", "loc": [ -122.734699, 45.588872 ], "pop": 24789, "state": "OR" }, { "_id": "97204", "city": "PORTLAND", "loc": [ -122.674498, 45.51807 ], "pop": 1094, "state": "OR" }, { "_id": "97205", "city": "PORTLAND", "loc": [ -122.688846, 45.52072 ], "pop": 5804, "state": "OR" }, { "_id": "97206", "city": "PORTLAND", "loc": [ -122.59727, 45.483995 ], "pop": 43134, "state": "OR" }, { "_id": "97209", "city": "PORTLAND", "loc": [ -122.685447, 45.526962 ], "pop": 5810, "state": "OR" }, { "_id": "97210", "city": "PORTLAND", "loc": [ -122.703348, 45.530318 ], "pop": 9284, "state": "OR" }, { "_id": "97211", "city": "PORTLAND", "loc": [ -122.644815, 45.565259 ], "pop": 28736, "state": "OR" }, { "_id": "97212", "city": "PORTLAND", "loc": [ -122.642319, 45.544127 ], "pop": 23898, "state": "OR" }, { "_id": "97213", "city": "PORTLAND", "loc": [ -122.59867, 45.537292 ], "pop": 29400, "state": "OR" }, { "_id": "97214", "city": "PORTLAND", "loc": [ -122.636397, 45.514207 ], "pop": 23413, "state": "OR" }, { "_id": "97215", "city": "PORTLAND", "loc": [ -122.599001, 45.514282 ], "pop": 16563, "state": "OR" }, { "_id": "97216", "city": "PORTLAND", "loc": [ -122.55688, 45.513746 ], "pop": 11436, "state": "OR" }, { "_id": "97217", "city": "PORTLAND", "loc": [ -122.684196, 45.57424 ], "pop": 29086, "state": "OR" }, { "_id": "97218", "city": "PORTLAND", "loc": [ -122.600131, 45.560032 ], "pop": 12305, "state": "OR" }, { "_id": "97219", "city": "PORTLAND", "loc": [ -122.70738, 45.457956 ], "pop": 34992, "state": "OR" }, { "_id": "97220", "city": "PORTLAND", "loc": [ -122.556586, 45.541109 ], "pop": 25679, "state": "OR" }, { "_id": "97221", "city": "PORTLAND", "loc": [ -122.726723, 45.491829 ], "pop": 10834, "state": "OR" }, { "_id": "97222", "city": "MILWAUKIE", "loc": [ -122.615092, 45.442919 ], "pop": 30905, "state": "OR" }, { "_id": "97223", "city": "GARDEN HOME", "loc": [ -122.775974, 45.443343 ], "pop": 33529, "state": "OR" }, { "_id": "97224", "city": "TIGARD", "loc": [ -122.788379, 45.407292 ], "pop": 17149, "state": "OR" }, { "_id": "97225", "city": "CEDAR HILLS", "loc": [ -122.768344, 45.500449 ], "pop": 20934, "state": "OR" }, { "_id": "97227", "city": "PORTLAND", "loc": [ -122.674257, 45.549564 ], "pop": 3171, "state": "OR" }, { "_id": "97229", "city": "PORTLAND", "loc": [ -122.829924, 45.541087 ], "pop": 23490, "state": "OR" }, { "_id": "97230", "city": "ROCKWOOD CORNERS", "loc": [ -122.500343, 45.535753 ], "pop": 30643, "state": "OR" }, { "_id": "97231", "city": "PORTLAND", "loc": [ -122.838032, 45.640124 ], "pop": 3760, "state": "OR" }, { "_id": "97232", "city": "PORTLAND", "loc": [ -122.63631, 45.528712 ], "pop": 10323, "state": "OR" }, { "_id": "97233", "city": "PORTLAND", "loc": [ -122.498493, 45.514206 ], "pop": 27274, "state": "OR" }, { "_id": "97236", "city": "PORTLAND", "loc": [ -122.509091, 45.488748 ], "pop": 24710, "state": "OR" }, { "_id": "97266", "city": "PORTLAND", "loc": [ -122.559607, 45.476207 ], "pop": 29648, "state": "OR" }, { "_id": "97267", "city": "OAK GROVE", "loc": [ -122.610631, 45.407494 ], "pop": 29597, "state": "OR" }, { "_id": "97301", "city": "SALEM", "loc": [ -122.979692, 44.926039 ], "pop": 48007, "state": "OR" }, { "_id": "97302", "city": "SALEM", "loc": [ -123.044514, 44.903899 ], "pop": 34814, "state": "OR" }, { "_id": "97303", "city": "KEIZER", "loc": [ -123.019015, 44.985794 ], "pop": 35826, "state": "OR" }, { "_id": "97304", "city": "SALEM", "loc": [ -123.075323, 44.958846 ], "pop": 16986, "state": "OR" }, { "_id": "97305", "city": "BROOKS", "loc": [ -122.966892, 44.982502 ], "pop": 28239, "state": "OR" }, { "_id": "97306", "city": "SALEM", "loc": [ -123.043789, 44.8685 ], "pop": 14770, "state": "OR" }, { "_id": "97321", "city": "ALBANY", "loc": [ -123.094409, 44.627722 ], "pop": 42908, "state": "OR" }, { "_id": "97324", "city": "ALSEA", "loc": [ -123.60892, 44.369068 ], "pop": 1008, "state": "OR" }, { "_id": "97325", "city": "WEST STAYTON", "loc": [ -122.878575, 44.817817 ], "pop": 4185, "state": "OR" }, { "_id": "97326", "city": "BLODGETT", "loc": [ -123.606715, 44.628141 ], "pop": 657, "state": "OR" }, { "_id": "97327", "city": "BROWNSVILLE", "loc": [ -122.948491, 44.376974 ], "pop": 3249, "state": "OR" }, { "_id": "97329", "city": "CASCADIA", "loc": [ -122.464214, 44.392239 ], "pop": 163, "state": "OR" }, { "_id": "97330", "city": "CORVALLIS", "loc": [ -123.272171, 44.590411 ], "pop": 38801, "state": "OR" }, { "_id": "97331", "city": "CORVALLIS", "loc": [ -123.277889, 44.563783 ], "pop": 2528, "state": "OR" }, { "_id": "97333", "city": "CORVALLIS", "loc": [ -123.279908, 44.539281 ], "pop": 13009, "state": "OR" }, { "_id": "97338", "city": "DALLAS", "loc": [ -123.319991, 44.922534 ], "pop": 14447, "state": "OR" }, { "_id": "97341", "city": "DEPOE BAY", "loc": [ -124.03234, 44.851445 ], "pop": 3022, "state": "OR" }, { "_id": "97342", "city": "DETROIT", "loc": [ -122.18447, 44.776619 ], "pop": 589, "state": "OR" }, { "_id": "97343", "city": "EDDYVILLE", "loc": [ -123.753096, 44.637139 ], "pop": 599, "state": "OR" }, { "_id": "97344", "city": "FALLS CITY", "loc": [ -123.446149, 44.870597 ], "pop": 957, "state": "OR" }, { "_id": "97345", "city": "FOSTER", "loc": [ -122.544898, 44.383556 ], "pop": 192, "state": "OR" }, { "_id": "97346", "city": "GATES", "loc": [ -122.399498, 44.752716 ], "pop": 697, "state": "OR" }, { "_id": "97347", "city": "GRAND RONDE", "loc": [ -123.633518, 45.074973 ], "pop": 1151, "state": "OR" }, { "_id": "97348", "city": "HALSEY", "loc": [ -123.125103, 44.386151 ], "pop": 1159, "state": "OR" }, { "_id": "97350", "city": "IDANHA", "loc": [ -122.047574, 44.701484 ], "pop": 340, "state": "OR" }, { "_id": "97351", "city": "INDEPENDENCE", "loc": [ -123.187913, 44.848098 ], "pop": 5955, "state": "OR" }, { "_id": "97352", "city": "JEFFERSON", "loc": [ -123.00596, 44.749452 ], "pop": 5829, "state": "OR" }, { "_id": "97355", "city": "LEBANON", "loc": [ -122.882064, 44.531558 ], "pop": 23147, "state": "OR" }, { "_id": "97357", "city": "LOGSDEN", "loc": [ -123.773645, 44.747514 ], "pop": 234, "state": "OR" }, { "_id": "97358", "city": "LYONS", "loc": [ -122.820083, 44.776792 ], "pop": 0, "state": "OR" }, { "_id": "97360", "city": "MILL CITY", "loc": [ -122.476825, 44.751566 ], "pop": 2340, "state": "OR" }, { "_id": "97361", "city": "MONMOUTH", "loc": [ -123.251233, 44.837706 ], "pop": 8071, "state": "OR" }, { "_id": "97362", "city": "MOUNT ANGEL", "loc": [ -122.785611, 45.073727 ], "pop": 4747, "state": "OR" }, { "_id": "97364", "city": "NEOTSU", "loc": [ -123.984337, 44.998801 ], "pop": 347, "state": "OR" }, { "_id": "97365", "city": "NEWPORT", "loc": [ -124.050903, 44.648653 ], "pop": 9239, "state": "OR" }, { "_id": "97366", "city": "SOUTH BEACH", "loc": [ -124.059968, 44.57122 ], "pop": 1423, "state": "OR" }, { "_id": "97367", "city": "LINCOLN CITY", "loc": [ -123.99556, 44.968139 ], "pop": 6786, "state": "OR" }, { "_id": "97368", "city": "OTIS", "loc": [ -123.933244, 45.013755 ], "pop": 2506, "state": "OR" }, { "_id": "97370", "city": "PHILOMATH", "loc": [ -123.392271, 44.548817 ], "pop": 6879, "state": "OR" }, { "_id": "97371", "city": "RICKREALL", "loc": [ -123.206424, 45.020032 ], "pop": 266, "state": "OR" }, { "_id": "97374", "city": "SCIO", "loc": [ -122.768356, 44.716792 ], "pop": 7170, "state": "OR" }, { "_id": "97375", "city": "SCOTTS MILLS", "loc": [ -122.665418, 45.022 ], "pop": 1326, "state": "OR" }, { "_id": "97376", "city": "SEAL ROCK", "loc": [ -124.060708, 44.477749 ], "pop": 1845, "state": "OR" }, { "_id": "97377", "city": "SHEDD", "loc": [ -123.106462, 44.452951 ], "pop": 1067, "state": "OR" }, { "_id": "97378", "city": "SHERIDAN", "loc": [ -123.400335, 45.089703 ], "pop": 6591, "state": "OR" }, { "_id": "97380", "city": "SILETZ", "loc": [ -123.906239, 44.731333 ], "pop": 1869, "state": "OR" }, { "_id": "97381", "city": "SILVERTON", "loc": [ -122.762724, 44.991041 ], "pop": 10399, "state": "OR" }, { "_id": "97383", "city": "STAYTON", "loc": [ -122.76241, 44.80211 ], "pop": 6808, "state": "OR" }, { "_id": "97385", "city": "SUBLIMITY", "loc": [ -122.800718, 44.842523 ], "pop": 2881, "state": "OR" }, { "_id": "97386", "city": "SWEET HOME", "loc": [ -122.728561, 44.398111 ], "pop": 11237, "state": "OR" }, { "_id": "97389", "city": "TANGENT", "loc": [ -123.110815, 44.54973 ], "pop": 1257, "state": "OR" }, { "_id": "97390", "city": "TIDEWATER", "loc": [ -123.914861, 44.405538 ], "pop": 523, "state": "OR" }, { "_id": "97391", "city": "TOLEDO", "loc": [ -123.930119, 44.627082 ], "pop": 5609, "state": "OR" }, { "_id": "97392", "city": "TURNER", "loc": [ -122.950117, 44.847607 ], "pop": 1243, "state": "OR" }, { "_id": "97394", "city": "WALDPORT", "loc": [ -124.035053, 44.408497 ], "pop": 3302, "state": "OR" }, { "_id": "97396", "city": "WILLAMINA", "loc": [ -123.504708, 45.082605 ], "pop": 2697, "state": "OR" }, { "_id": "97401", "city": "COBURG", "loc": [ -123.078757, 44.073677 ], "pop": 36277, "state": "OR" }, { "_id": "97402", "city": "EUGENE", "loc": [ -123.155525, 44.061243 ], "pop": 37830, "state": "OR" }, { "_id": "97403", "city": "EUGENE", "loc": [ -123.061422, 44.038534 ], "pop": 11073, "state": "OR" }, { "_id": "97404", "city": "EUGENE", "loc": [ -123.13336, 44.100536 ], "pop": 23778, "state": "OR" }, { "_id": "97405", "city": "EUGENE", "loc": [ -123.099769, 44.018497 ], "pop": 40921, "state": "OR" }, { "_id": "97406", "city": "AGNESS", "loc": [ -124.064769, 42.574788 ], "pop": 126, "state": "OR" }, { "_id": "97410", "city": "AZALEA", "loc": [ -123.155017, 42.844992 ], "pop": 1111, "state": "OR" }, { "_id": "97411", "city": "BANDON", "loc": [ -124.40367, 43.096806 ], "pop": 4852, "state": "OR" }, { "_id": "97412", "city": "BLACHLY", "loc": [ -123.534816, 44.196597 ], "pop": 495, "state": "OR" }, { "_id": "97413", "city": "MC KENZIE BRIDGE", "loc": [ -122.222951, 44.177809 ], "pop": 1139, "state": "OR" }, { "_id": "97414", "city": "BROADBENT", "loc": [ -124.118924, 42.985048 ], "pop": 121, "state": "OR" }, { "_id": "97415", "city": "HARBOR", "loc": [ -124.267811, 42.064004 ], "pop": 11673, "state": "OR" }, { "_id": "97416", "city": "CAMAS VALLEY", "loc": [ -123.665465, 43.05566 ], "pop": 972, "state": "OR" }, { "_id": "97417", "city": "CANYONVILLE", "loc": [ -123.278015, 42.930683 ], "pop": 1670, "state": "OR" }, { "_id": "97419", "city": "CHESHIRE", "loc": [ -123.371516, 44.178206 ], "pop": 1050, "state": "OR" }, { "_id": "97420", "city": "CHARLESTON", "loc": [ -124.233101, 43.362812 ], "pop": 24343, "state": "OR" }, { "_id": "97423", "city": "COQUILLE", "loc": [ -124.201386, 43.188413 ], "pop": 8374, "state": "OR" }, { "_id": "97424", "city": "COTTAGE GROVE", "loc": [ -123.05291, 43.783934 ], "pop": 15067, "state": "OR" }, { "_id": "97426", "city": "CRESWELL", "loc": [ -123.02838, 43.90583 ], "pop": 6332, "state": "OR" }, { "_id": "97427", "city": "CULP CREEK", "loc": [ -122.752417, 43.684534 ], "pop": 317, "state": "OR" }, { "_id": "97429", "city": "DAYS CREEK", "loc": [ -123.14387, 42.981946 ], "pop": 392, "state": "OR" }, { "_id": "97430", "city": "GREENLEAF", "loc": [ -123.688328, 44.145131 ], "pop": 492, "state": "OR" }, { "_id": "97431", "city": "DEXTER", "loc": [ -122.842351, 43.921691 ], "pop": 2980, "state": "OR" }, { "_id": "97434", "city": "DORENA", "loc": [ -122.885796, 43.758655 ], "pop": 225, "state": "OR" }, { "_id": "97435", "city": "DRAIN", "loc": [ -123.292922, 43.687659 ], "pop": 2331, "state": "OR" }, { "_id": "97436", "city": "ELKTON", "loc": [ -123.590014, 43.637761 ], "pop": 878, "state": "OR" }, { "_id": "97437", "city": "ELMIRA", "loc": [ -123.367051, 44.08726 ], "pop": 2424, "state": "OR" }, { "_id": "97438", "city": "FALL CREEK", "loc": [ -122.785904, 43.95616 ], "pop": 1581, "state": "OR" }, { "_id": "97439", "city": "FLORENCE", "loc": [ -124.099303, 43.988099 ], "pop": 10063, "state": "OR" }, { "_id": "97441", "city": "GARDINER", "loc": [ -124.143695, 43.785736 ], "pop": 14, "state": "OR" }, { "_id": "97442", "city": "GLENDALE", "loc": [ -123.394302, 42.751751 ], "pop": 2050, "state": "OR" }, { "_id": "97443", "city": "GLIDE", "loc": [ -122.963846, 43.277395 ], "pop": 2905, "state": "OR" }, { "_id": "97444", "city": "PISTOL RIVER", "loc": [ -124.396072, 42.434818 ], "pop": 4760, "state": "OR" }, { "_id": "97446", "city": "HARRISBURG", "loc": [ -123.143165, 44.271656 ], "pop": 3272, "state": "OR" }, { "_id": "97447", "city": "IDLEYLD PARK", "loc": [ -122.901789, 43.371571 ], "pop": 222, "state": "OR" }, { "_id": "97448", "city": "JUNCTION CITY", "loc": [ -123.230014, 44.198792 ], "pop": 10456, "state": "OR" }, { "_id": "97449", "city": "LAKESIDE", "loc": [ -124.162364, 43.583306 ], "pop": 994, "state": "OR" }, { "_id": "97450", "city": "LANGLOIS", "loc": [ -124.441322, 42.915386 ], "pop": 557, "state": "OR" }, { "_id": "97451", "city": "LORANE", "loc": [ -123.247679, 43.829044 ], "pop": 499, "state": "OR" }, { "_id": "97452", "city": "LOWELL", "loc": [ -122.780627, 43.920993 ], "pop": 792, "state": "OR" }, { "_id": "97453", "city": "MAPLETON", "loc": [ -123.865735, 44.031189 ], "pop": 1104, "state": "OR" }, { "_id": "97454", "city": "MARCOLA", "loc": [ -122.82464, 44.206439 ], "pop": 1442, "state": "OR" }, { "_id": "97455", "city": "PLEASANT HILL", "loc": [ -122.928487, 43.945816 ], "pop": 2218, "state": "OR" }, { "_id": "97456", "city": "MONROE", "loc": [ -123.32033, 44.32446 ], "pop": 2478, "state": "OR" }, { "_id": "97457", "city": "MYRTLE CREEK", "loc": [ -123.285054, 43.016161 ], "pop": 9453, "state": "OR" }, { "_id": "97458", "city": "MYRTLE POINT", "loc": [ -124.121327, 43.066694 ], "pop": 5246, "state": "OR" }, { "_id": "97459", "city": "NORTH BEND", "loc": [ -124.213103, 43.432665 ], "pop": 15269, "state": "OR" }, { "_id": "97461", "city": "NOTI", "loc": [ -123.456962, 44.119509 ], "pop": 1189, "state": "OR" }, { "_id": "97462", "city": "OAKLAND", "loc": [ -123.355774, 43.452968 ], "pop": 3315, "state": "OR" }, { "_id": "97463", "city": "OAKRIDGE", "loc": [ -122.457711, 43.749767 ], "pop": 4058, "state": "OR" }, { "_id": "97465", "city": "PORT ORFORD", "loc": [ -124.491283, 42.757194 ], "pop": 1799, "state": "OR" }, { "_id": "97466", "city": "POWERS", "loc": [ -124.066441, 42.891006 ], "pop": 953, "state": "OR" }, { "_id": "97467", "city": "WINCHESTER BAY", "loc": [ -124.105476, 43.695701 ], "pop": 6723, "state": "OR" }, { "_id": "97468", "city": "REMOTE", "loc": [ -123.89149, 43.007909 ], "pop": 121, "state": "OR" }, { "_id": "97469", "city": "RIDDLE", "loc": [ -123.361247, 42.938867 ], "pop": 2698, "state": "OR" }, { "_id": "97470", "city": "ROSEBURG", "loc": [ -123.366437, 43.222726 ], "pop": 41697, "state": "OR" }, { "_id": "97473", "city": "SCOTTSBURG", "loc": [ -123.804065, 43.676481 ], "pop": 329, "state": "OR" }, { "_id": "97476", "city": "SIXES", "loc": [ -124.44093, 42.824984 ], "pop": 412, "state": "OR" }, { "_id": "97477", "city": "SPRINGFIELD", "loc": [ -123.015259, 44.06106 ], "pop": 32384, "state": "OR" }, { "_id": "97478", "city": "SPRINGFIELD", "loc": [ -122.917108, 44.056056 ], "pop": 27521, "state": "OR" }, { "_id": "97479", "city": "SUTHERLIN", "loc": [ -123.297425, 43.390404 ], "pop": 7304, "state": "OR" }, { "_id": "97480", "city": "SWISSHOME", "loc": [ -123.827899, 44.089903 ], "pop": 641, "state": "OR" }, { "_id": "97481", "city": "TENMILE", "loc": [ -123.530104, 43.137116 ], "pop": 1231, "state": "OR" }, { "_id": "97484", "city": "TILLER", "loc": [ -122.908088, 42.985896 ], "pop": 534, "state": "OR" }, { "_id": "97486", "city": "UMPQUA", "loc": [ -123.535771, 43.374537 ], "pop": 587, "state": "OR" }, { "_id": "97487", "city": "VENETA", "loc": [ -123.35159, 44.038235 ], "pop": 6004, "state": "OR" }, { "_id": "97488", "city": "VIDA", "loc": [ -122.504429, 44.130041 ], "pop": 1040, "state": "OR" }, { "_id": "97489", "city": "LEABURG", "loc": [ -122.629064, 44.135163 ], "pop": 432, "state": "OR" }, { "_id": "97490", "city": "WALTON", "loc": [ -123.589304, 44.028194 ], "pop": 298, "state": "OR" }, { "_id": "97492", "city": "WESTFIR", "loc": [ -122.514095, 43.756636 ], "pop": 514, "state": "OR" }, { "_id": "97493", "city": "WESTLAKE", "loc": [ -124.033364, 43.914017 ], "pop": 272, "state": "OR" }, { "_id": "97496", "city": "WINSTON", "loc": [ -123.432481, 43.104855 ], "pop": 5971, "state": "OR" }, { "_id": "97497", "city": "SUNNY VALLEY", "loc": [ -123.351538, 42.655128 ], "pop": 1253, "state": "OR" }, { "_id": "97498", "city": "YACHATS", "loc": [ -124.086262, 44.325563 ], "pop": 1235, "state": "OR" }, { "_id": "97499", "city": "YONCALLA", "loc": [ -123.292562, 43.60434 ], "pop": 2261, "state": "OR" }, { "_id": "97501", "city": "WEST MAIN", "loc": [ -122.887011, 42.319293 ], "pop": 28708, "state": "OR" }, { "_id": "97502", "city": "CENTRAL POINT", "loc": [ -122.922235, 42.389914 ], "pop": 17293, "state": "OR" }, { "_id": "97503", "city": "WHITE CITY", "loc": [ -122.82962, 42.431919 ], "pop": 7024, "state": "OR" }, { "_id": "97504", "city": "MEDFORD", "loc": [ -122.839801, 42.336251 ], "pop": 30933, "state": "OR" }, { "_id": "97520", "city": "ASHLAND", "loc": [ -122.693033, 42.188509 ], "pop": 19579, "state": "OR" }, { "_id": "97522", "city": "BUTTE FALLS", "loc": [ -122.563801, 42.549243 ], "pop": 1115, "state": "OR" }, { "_id": "97523", "city": "CAVE JUNCTION", "loc": [ -123.627199, 42.134789 ], "pop": 5500, "state": "OR" }, { "_id": "97524", "city": "EAGLE POINT", "loc": [ -122.808802, 42.493467 ], "pop": 7468, "state": "OR" }, { "_id": "97525", "city": "GOLD HILL", "loc": [ -123.08543, 42.424436 ], "pop": 6650, "state": "OR" }, { "_id": "97526", "city": "GRANTS PASS", "loc": [ -123.345727, 42.463758 ], "pop": 27145, "state": "OR" }, { "_id": "97527", "city": "GRANTS PASS", "loc": [ -123.353799, 42.398913 ], "pop": 21774, "state": "OR" }, { "_id": "97530", "city": "APPLEGATE", "loc": [ -123.028098, 42.254894 ], "pop": 5723, "state": "OR" }, { "_id": "97531", "city": "KERBY", "loc": [ -123.657302, 42.209343 ], "pop": 78, "state": "OR" }, { "_id": "97532", "city": "MERLIN", "loc": [ -123.439256, 42.529654 ], "pop": 1806, "state": "OR" }, { "_id": "97534", "city": "O BRIEN", "loc": [ -123.720898, 42.068816 ], "pop": 247, "state": "OR" }, { "_id": "97535", "city": "PHOENIX", "loc": [ -122.822694, 42.276555 ], "pop": 6054, "state": "OR" }, { "_id": "97536", "city": "PROSPECT", "loc": [ -122.50898, 42.754394 ], "pop": 869, "state": "OR" }, { "_id": "97537", "city": "ROGUE RIVER", "loc": [ -123.158726, 42.488889 ], "pop": 6131, "state": "OR" }, { "_id": "97538", "city": "SELMA", "loc": [ -123.568394, 42.296358 ], "pop": 2065, "state": "OR" }, { "_id": "97539", "city": "SHADY COVE", "loc": [ -122.812191, 42.607575 ], "pop": 2364, "state": "OR" }, { "_id": "97540", "city": "TALENT", "loc": [ -122.78605, 42.236252 ], "pop": 5288, "state": "OR" }, { "_id": "97541", "city": "TRAIL", "loc": [ -122.816029, 42.686358 ], "pop": 1028, "state": "OR" }, { "_id": "97543", "city": "WILDERVILLE", "loc": [ -123.513861, 42.392483 ], "pop": 927, "state": "OR" }, { "_id": "97544", "city": "WILLIAMS", "loc": [ -123.282877, 42.223049 ], "pop": 1854, "state": "OR" }, { "_id": "97601", "city": "ORETECH", "loc": [ -121.786969, 42.229601 ], "pop": 18626, "state": "OR" }, { "_id": "97603", "city": "KLAMATH FALLS", "loc": [ -121.724124, 42.191915 ], "pop": 24894, "state": "OR" }, { "_id": "97620", "city": "ADEL", "loc": [ -119.883291, 42.148697 ], "pop": 190, "state": "OR" }, { "_id": "97621", "city": "BEATTY", "loc": [ -121.219962, 42.436942 ], "pop": 95, "state": "OR" }, { "_id": "97623", "city": "BONANZA", "loc": [ -121.333558, 42.246268 ], "pop": 2753, "state": "OR" }, { "_id": "97624", "city": "CHILOQUIN", "loc": [ -121.744959, 42.546293 ], "pop": 3608, "state": "OR" }, { "_id": "97625", "city": "DAIRY", "loc": [ -121.642453, 42.258141 ], "pop": 8, "state": "OR" }, { "_id": "97627", "city": "KENO", "loc": [ -121.972427, 42.175472 ], "pop": 2696, "state": "OR" }, { "_id": "97630", "city": "LAKEVIEW", "loc": [ -120.377533, 42.185443 ], "pop": 4890, "state": "OR" }, { "_id": "97632", "city": "MALIN", "loc": [ -121.422121, 42.019502 ], "pop": 1456, "state": "OR" }, { "_id": "97633", "city": "MERRILL", "loc": [ -121.598545, 42.029516 ], "pop": 1344, "state": "OR" }, { "_id": "97635", "city": "NEW PINE CREEK", "loc": [ -120.28939, 42.027759 ], "pop": 198, "state": "OR" }, { "_id": "97636", "city": "PAISLEY", "loc": [ -120.553208, 42.703089 ], "pop": 619, "state": "OR" }, { "_id": "97637", "city": "PLUSH", "loc": [ -119.894722, 42.503493 ], "pop": 126, "state": "OR" }, { "_id": "97638", "city": "SILVER LAKE", "loc": [ -120.780109, 43.258164 ], "pop": 1127, "state": "OR" }, { "_id": "97640", "city": "SUMMER LAKE", "loc": [ -121.063254, 42.831302 ], "pop": 1, "state": "OR" }, { "_id": "97701", "city": "BEND", "loc": [ -121.293632, 44.092788 ], "pop": 29432, "state": "OR" }, { "_id": "97702", "city": "BEND", "loc": [ -121.298543, 44.022332 ], "pop": 20214, "state": "OR" }, { "_id": "97707", "city": "SUNRIVER", "loc": [ -121.457871, 43.850336 ], "pop": 2881, "state": "OR" }, { "_id": "97711", "city": "ASHWOOD", "loc": [ -120.719161, 44.719479 ], "pop": 114, "state": "OR" }, { "_id": "97712", "city": "BROTHERS", "loc": [ -120.477035, 43.778877 ], "pop": 41, "state": "OR" }, { "_id": "97720", "city": "BURNS", "loc": [ -119.050398, 43.51451 ], "pop": 5844, "state": "OR" }, { "_id": "97730", "city": "CAMP SHERMAN", "loc": [ -121.639363, 44.454997 ], "pop": 378, "state": "OR" }, { "_id": "97731", "city": "DIAMOND LAKE", "loc": [ -121.8447, 43.124669 ], "pop": 388, "state": "OR" }, { "_id": "97732", "city": "CRANE", "loc": [ -118.4642, 43.426219 ], "pop": 280, "state": "OR" }, { "_id": "97733", "city": "CRESCENT", "loc": [ -121.664813, 43.497226 ], "pop": 1848, "state": "OR" }, { "_id": "97734", "city": "CULVER", "loc": [ -121.234353, 44.481796 ], "pop": 2517, "state": "OR" }, { "_id": "97735", "city": "FORT ROCK", "loc": [ -121.08243, 43.44615 ], "pop": 35, "state": "OR" }, { "_id": "97737", "city": "GILCHRIST", "loc": [ -121.886596, 43.30759 ], "pop": 148, "state": "OR" }, { "_id": "97739", "city": "LA PINE", "loc": [ -121.519445, 43.709125 ], "pop": 4815, "state": "OR" }, { "_id": "97740", "city": "LAWEN", "loc": [ -118.8418, 43.561816 ], "pop": 708, "state": "OR" }, { "_id": "97741", "city": "MADRAS", "loc": [ -121.134924, 44.637579 ], "pop": 8294, "state": "OR" }, { "_id": "97750", "city": "MITCHELL", "loc": [ -120.145579, 44.565734 ], "pop": 394, "state": "OR" }, { "_id": "97751", "city": "PAULINA", "loc": [ -119.782768, 44.210243 ], "pop": 98, "state": "OR" }, { "_id": "97752", "city": "POST", "loc": [ -120.299781, 44.079273 ], "pop": 252, "state": "OR" }, { "_id": "97753", "city": "POWELL BUTTE", "loc": [ -121.011326, 44.241512 ], "pop": 1056, "state": "OR" }, { "_id": "97754", "city": "PRINEVILLE", "loc": [ -120.833616, 44.30445 ], "pop": 12484, "state": "OR" }, { "_id": "97756", "city": "REDMOND", "loc": [ -121.189604, 44.27669 ], "pop": 12161, "state": "OR" }, { "_id": "97758", "city": "RILEY", "loc": [ -116.900621, 44.930529 ], "pop": 157, "state": "OR" }, { "_id": "97759", "city": "BLACK BUTTE RANC", "loc": [ -121.524133, 44.307329 ], "pop": 3534, "state": "OR" }, { "_id": "97760", "city": "CROOKED RIVER RA", "loc": [ -121.167565, 44.355505 ], "pop": 2101, "state": "OR" }, { "_id": "97761", "city": "WARM SPRINGS", "loc": [ -121.290941, 44.746826 ], "pop": 2400, "state": "OR" }, { "_id": "97801", "city": "PENDLETON", "loc": [ -118.783104, 45.660535 ], "pop": 20225, "state": "OR" }, { "_id": "97810", "city": "ADAMS", "loc": [ -118.617582, 45.749678 ], "pop": 609, "state": "OR" }, { "_id": "97812", "city": "ARLINGTON", "loc": [ -120.197148, 45.666417 ], "pop": 708, "state": "OR" }, { "_id": "97813", "city": "ATHENA", "loc": [ -118.497147, 45.828893 ], "pop": 1334, "state": "OR" }, { "_id": "97814", "city": "MEDICAL SPRINGS", "loc": [ -117.828631, 44.780102 ], "pop": 10024, "state": "OR" }, { "_id": "97818", "city": "BOARDMAN", "loc": [ -119.72057, 45.827165 ], "pop": 2143, "state": "OR" }, { "_id": "97820", "city": "CANYON CITY", "loc": [ -118.950155, 44.410005 ], "pop": 2806, "state": "OR" }, { "_id": "97823", "city": "CONDON", "loc": [ -120.189834, 45.230587 ], "pop": 1009, "state": "OR" }, { "_id": "97824", "city": "COVE", "loc": [ -117.814741, 45.319902 ], "pop": 1280, "state": "OR" }, { "_id": "97825", "city": "DAYVILLE", "loc": [ -119.531178, 44.466307 ], "pop": 144, "state": "OR" }, { "_id": "97826", "city": "ECHO", "loc": [ -119.194904, 45.74109 ], "pop": 648, "state": "OR" }, { "_id": "97827", "city": "ELGIN", "loc": [ -117.91119, 45.594101 ], "pop": 2549, "state": "OR" }, { "_id": "97828", "city": "ENTERPRISE", "loc": [ -117.288808, 45.437037 ], "pop": 3201, "state": "OR" }, { "_id": "97830", "city": "KINZUA", "loc": [ -120.206699, 44.985289 ], "pop": 564, "state": "OR" }, { "_id": "97831", "city": "FOX", "loc": [ -119.291646, 44.660681 ], "pop": 47, "state": "OR" }, { "_id": "97833", "city": "HAINES", "loc": [ -117.97556, 44.877622 ], "pop": 1642, "state": "OR" }, { "_id": "97834", "city": "HALFWAY", "loc": [ -117.113152, 44.895272 ], "pop": 1020, "state": "OR" }, { "_id": "97835", "city": "HELIX", "loc": [ -118.722219, 45.866541 ], "pop": 383, "state": "OR" }, { "_id": "97836", "city": "HEPPNER", "loc": [ -119.536897, 45.348577 ], "pop": 2127, "state": "OR" }, { "_id": "97837", "city": "HEREFORD", "loc": [ -117.98896, 44.641048 ], "pop": 287, "state": "OR" }, { "_id": "97838", "city": "HERMISTON", "loc": [ -119.284876, 45.844992 ], "pop": 16982, "state": "OR" }, { "_id": "97839", "city": "LEXINGTON", "loc": [ -119.74636, 45.426362 ], "pop": 519, "state": "OR" }, { "_id": "97841", "city": "IMBLER", "loc": [ -117.954377, 45.459908 ], "pop": 561, "state": "OR" }, { "_id": "97842", "city": "IMNAHA", "loc": [ -116.825741, 45.513733 ], "pop": 255, "state": "OR" }, { "_id": "97843", "city": "IONE", "loc": [ -119.769034, 45.54033 ], "pop": 535, "state": "OR" }, { "_id": "97844", "city": "IRRIGON", "loc": [ -119.507016, 45.88768 ], "pop": 2301, "state": "OR" }, { "_id": "97845", "city": "JOHN DAY", "loc": [ -119.105157, 44.409977 ], "pop": 1367, "state": "OR" }, { "_id": "97846", "city": "JOSEPH", "loc": [ -117.212805, 45.349432 ], "pop": 1749, "state": "OR" }, { "_id": "97848", "city": "KIMBERLY", "loc": [ -119.596497, 44.72263 ], "pop": 62, "state": "OR" }, { "_id": "97850", "city": "LA GRANDE", "loc": [ -118.085228, 45.330435 ], "pop": 15401, "state": "OR" }, { "_id": "97856", "city": "LONG CREEK", "loc": [ -119.09702, 44.755416 ], "pop": 442, "state": "OR" }, { "_id": "97857", "city": "LOSTINE", "loc": [ -117.435909, 45.493861 ], "pop": 456, "state": "OR" }, { "_id": "97862", "city": "MILTON FREEWATER", "loc": [ -118.391172, 45.948581 ], "pop": 9723, "state": "OR" }, { "_id": "97864", "city": "MONUMENT", "loc": [ -119.430164, 44.818451 ], "pop": 410, "state": "OR" }, { "_id": "97865", "city": "MOUNT VERNON", "loc": [ -119.112142, 44.417095 ], "pop": 538, "state": "OR" }, { "_id": "97867", "city": "NORTH POWDER", "loc": [ -117.933666, 45.031667 ], "pop": 571, "state": "OR" }, { "_id": "97868", "city": "PILOT ROCK", "loc": [ -118.848331, 45.422724 ], "pop": 2298, "state": "OR" }, { "_id": "97869", "city": "PRAIRIE CITY", "loc": [ -118.695199, 44.456977 ], "pop": 1614, "state": "OR" }, { "_id": "97870", "city": "RICHLAND", "loc": [ -117.301825, 44.797013 ], "pop": 927, "state": "OR" }, { "_id": "97872", "city": "RITTER", "loc": [ -118.941818, 44.95404 ], "pop": 71, "state": "OR" }, { "_id": "97873", "city": "SENECA", "loc": [ -119.057797, 44.127704 ], "pop": 352, "state": "OR" }, { "_id": "97874", "city": "SPRAY", "loc": [ -119.830318, 44.824186 ], "pop": 438, "state": "OR" }, { "_id": "97875", "city": "STANFIELD", "loc": [ -119.211602, 45.785988 ], "pop": 2031, "state": "OR" }, { "_id": "97876", "city": "SUMMERVILLE", "loc": [ -118.026978, 45.507687 ], "pop": 773, "state": "OR" }, { "_id": "97877", "city": "SUMPTER", "loc": [ -118.190604, 44.73164 ], "pop": 251, "state": "OR" }, { "_id": "97882", "city": "MCNARY", "loc": [ -119.313715, 45.915725 ], "pop": 4009, "state": "OR" }, { "_id": "97883", "city": "UNION", "loc": [ -117.853554, 45.201939 ], "pop": 2463, "state": "OR" }, { "_id": "97884", "city": "UNITY", "loc": [ -118.16273, 44.449063 ], "pop": 315, "state": "OR" }, { "_id": "97885", "city": "WALLOWA", "loc": [ -117.535727, 45.571722 ], "pop": 1250, "state": "OR" }, { "_id": "97886", "city": "WESTON", "loc": [ -118.373279, 45.807365 ], "pop": 1007, "state": "OR" }, { "_id": "97901", "city": "ADRIAN", "loc": [ -117.060193, 43.653712 ], "pop": 568, "state": "OR" }, { "_id": "97902", "city": "AROCK", "loc": [ -117.034189, 43.970896 ], "pop": 846, "state": "OR" }, { "_id": "97903", "city": "BROGAN", "loc": [ -117.590371, 44.199396 ], "pop": 205, "state": "OR" }, { "_id": "97904", "city": "DREWSEY", "loc": [ -118.47066, 43.864277 ], "pop": 228, "state": "OR" }, { "_id": "97906", "city": "HARPER", "loc": [ -117.528433, 43.873363 ], "pop": 326, "state": "OR" }, { "_id": "97907", "city": "HUNTINGTON", "loc": [ -117.309691, 44.381113 ], "pop": 694, "state": "OR" }, { "_id": "97908", "city": "IRONSIDE", "loc": [ -117.944435, 44.300913 ], "pop": 79, "state": "OR" }, { "_id": "97909", "city": "JAMIESON", "loc": [ -117.437269, 44.181873 ], "pop": 53, "state": "OR" }, { "_id": "97910", "city": "JORDAN VALLEY", "loc": [ -117.280984, 42.880139 ], "pop": 879, "state": "OR" }, { "_id": "97911", "city": "JUNTURA", "loc": [ -118.092118, 43.825277 ], "pop": 83, "state": "OR" }, { "_id": "97913", "city": "NYSSA", "loc": [ -117.025113, 43.860386 ], "pop": 5288, "state": "OR" }, { "_id": "97914", "city": "ONTARIO", "loc": [ -116.978268, 44.04156 ], "pop": 13665, "state": "OR" }, { "_id": "97917", "city": "RIVERSIDE", "loc": [ -118.095769, 43.467415 ], "pop": 65, "state": "OR" }, { "_id": "97918", "city": "VALE", "loc": [ -117.267412, 44.003902 ], "pop": 3940, "state": "OR" }, { "_id": "97920", "city": "WESTFALL", "loc": [ -117.687673, 43.992246 ], "pop": 41, "state": "OR" }, { "_id": "98001", "city": "ALGONA", "loc": [ -122.270057, 47.316339 ], "pop": 22846, "state": "WA" }, { "_id": "98002", "city": "AUBURN", "loc": [ -122.206741, 47.30503 ], "pop": 38163, "state": "WA" }, { "_id": "98003", "city": "FEDERAL WAY", "loc": [ -122.311726, 47.3203 ], "pop": 34573, "state": "WA" }, { "_id": "98004", "city": "BEAUX ARTS", "loc": [ -122.207371, 47.619899 ], "pop": 23724, "state": "WA" }, { "_id": "98005", "city": "BELLEVUE", "loc": [ -122.166288, 47.614961 ], "pop": 14297, "state": "WA" }, { "_id": "98006", "city": "BELLEVUE", "loc": [ -122.155179, 47.561425 ], "pop": 26775, "state": "WA" }, { "_id": "98007", "city": "BELLEVUE", "loc": [ -122.142572, 47.617443 ], "pop": 21887, "state": "WA" }, { "_id": "98008", "city": "BELLEVUE", "loc": [ -122.116173, 47.611468 ], "pop": 24046, "state": "WA" }, { "_id": "98010", "city": "BLACK DIAMOND", "loc": [ -122.005265, 47.311372 ], "pop": 1817, "state": "WA" }, { "_id": "98011", "city": "BOTHELL", "loc": [ -122.2159, 47.749692 ], "pop": 32985, "state": "WA" }, { "_id": "98012", "city": "MILL CREEK", "loc": [ -122.206981, 47.848941 ], "pop": 19247, "state": "WA" }, { "_id": "98014", "city": "CARNATION", "loc": [ -121.911095, 47.638007 ], "pop": 2808, "state": "WA" }, { "_id": "98019", "city": "DUVALL", "loc": [ -121.936906, 47.724987 ], "pop": 7866, "state": "WA" }, { "_id": "98020", "city": "WOODWAY", "loc": [ -122.366949, 47.800693 ], "pop": 17396, "state": "WA" }, { "_id": "98021", "city": "BOTHELL", "loc": [ -122.224339, 47.791806 ], "pop": 18013, "state": "WA" }, { "_id": "98022", "city": "ENUMCLAW", "loc": [ -122.031429, 47.266545 ], "pop": 34850, "state": "WA" }, { "_id": "98023", "city": "FEDERAL WAY", "loc": [ -122.36123, 47.310358 ], "pop": 38292, "state": "WA" }, { "_id": "98024", "city": "FALL CITY", "loc": [ -121.889646, 47.568233 ], "pop": 3213, "state": "WA" }, { "_id": "98026", "city": "EDMONDS", "loc": [ -122.334463, 47.823324 ], "pop": 33385, "state": "WA" }, { "_id": "98027", "city": "ISSAQUAH", "loc": [ -122.033517, 47.550911 ], "pop": 37255, "state": "WA" }, { "_id": "98031", "city": "KENT", "loc": [ -122.193184, 47.388004 ], "pop": 50515, "state": "WA" }, { "_id": "98032", "city": "KENT", "loc": [ -122.285362, 47.377633 ], "pop": 31379, "state": "WA" }, { "_id": "98033", "city": "KIRKLAND", "loc": [ -122.189442, 47.678597 ], "pop": 28211, "state": "WA" }, { "_id": "98034", "city": "KIRKLAND", "loc": [ -122.196571, 47.718777 ], "pop": 38266, "state": "WA" }, { "_id": "98036", "city": "BRIER", "loc": [ -122.287789, 47.811825 ], "pop": 28602, "state": "WA" }, { "_id": "98037", "city": "LYNNWOOD", "loc": [ -122.282139, 47.850532 ], "pop": 36995, "state": "WA" }, { "_id": "98038", "city": "MAPLE VALLEY", "loc": [ -122.057413, 47.384526 ], "pop": 13768, "state": "WA" }, { "_id": "98040", "city": "MERCER ISLAND", "loc": [ -122.226562, 47.563149 ], "pop": 20816, "state": "WA" }, { "_id": "98042", "city": "KENT", "loc": [ -122.120615, 47.368044 ], "pop": 22576, "state": "WA" }, { "_id": "98043", "city": "MOUNTLAKE TERRAC", "loc": [ -122.304036, 47.793061 ], "pop": 20059, "state": "WA" }, { "_id": "98045", "city": "NORTH BEND", "loc": [ -121.757142, 47.475546 ], "pop": 10083, "state": "WA" }, { "_id": "98047", "city": "PACIFIC", "loc": [ -122.243481, 47.266605 ], "pop": 3902, "state": "WA" }, { "_id": "98051", "city": "RAVENSDALE", "loc": [ -121.987897, 47.415476 ], "pop": 3778, "state": "WA" }, { "_id": "98052", "city": "REDMOND", "loc": [ -122.123242, 47.671796 ], "pop": 37639, "state": "WA" }, { "_id": "98053", "city": "REDMOND", "loc": [ -122.038578, 47.646238 ], "pop": 22112, "state": "WA" }, { "_id": "98055", "city": "RENTON", "loc": [ -122.207484, 47.464759 ], "pop": 17902, "state": "WA" }, { "_id": "98056", "city": "RENTON", "loc": [ -122.181942, 47.507336 ], "pop": 23790, "state": "WA" }, { "_id": "98058", "city": "RENTON", "loc": [ -122.121586, 47.446507 ], "pop": 10153, "state": "WA" }, { "_id": "98059", "city": "RENTON", "loc": [ -122.151178, 47.467383 ], "pop": 48197, "state": "WA" }, { "_id": "98065", "city": "SNOQUALMIE", "loc": [ -121.822533, 47.529286 ], "pop": 3913, "state": "WA" }, { "_id": "98070", "city": "VASHON", "loc": [ -122.464415, 47.425949 ], "pop": 9309, "state": "WA" }, { "_id": "98072", "city": "WOODINVILLE", "loc": [ -122.127087, 47.768384 ], "pop": 40666, "state": "WA" }, { "_id": "98101", "city": "SEATTLE", "loc": [ -122.330456, 47.611435 ], "pop": 5801, "state": "WA" }, { "_id": "98102", "city": "SEATTLE", "loc": [ -122.320993, 47.63025 ], "pop": 19000, "state": "WA" }, { "_id": "98103", "city": "SEATTLE", "loc": [ -122.342621, 47.67335 ], "pop": 39491, "state": "WA" }, { "_id": "98104", "city": "SEATTLE", "loc": [ -122.325644, 47.603631 ], "pop": 9680, "state": "WA" }, { "_id": "98105", "city": "SEATTLE", "loc": [ -122.302236, 47.663266 ], "pop": 37120, "state": "WA" }, { "_id": "98106", "city": "SEATTLE", "loc": [ -122.354688, 47.534362 ], "pop": 17510, "state": "WA" }, { "_id": "98107", "city": "SEATTLE", "loc": [ -122.37626, 47.67012 ], "pop": 18288, "state": "WA" }, { "_id": "98108", "city": "TUKWILA", "loc": [ -122.306823, 47.547448 ], "pop": 18776, "state": "WA" }, { "_id": "98109", "city": "SEATTLE", "loc": [ -122.347615, 47.633875 ], "pop": 13401, "state": "WA" }, { "_id": "98110", "city": "BAINBRIDGE ISLAN", "loc": [ -122.531297, 47.645048 ], "pop": 15846, "state": "WA" }, { "_id": "98112", "city": "SEATTLE", "loc": [ -122.297157, 47.630115 ], "pop": 19760, "state": "WA" }, { "_id": "98115", "city": "SEATTLE", "loc": [ -122.296828, 47.684918 ], "pop": 40454, "state": "WA" }, { "_id": "98116", "city": "SEATTLE", "loc": [ -122.393445, 47.574591 ], "pop": 20408, "state": "WA" }, { "_id": "98117", "city": "SEATTLE", "loc": [ -122.377223, 47.687263 ], "pop": 28572, "state": "WA" }, { "_id": "98118", "city": "SEATTLE", "loc": [ -122.275021, 47.541234 ], "pop": 36684, "state": "WA" }, { "_id": "98119", "city": "SEATTLE", "loc": [ -122.364272, 47.637917 ], "pop": 19064, "state": "WA" }, { "_id": "98121", "city": "SEATTLE", "loc": [ -122.344696, 47.615135 ], "pop": 4091, "state": "WA" }, { "_id": "98122", "city": "SEATTLE", "loc": [ -122.305608, 47.611633 ], "pop": 25105, "state": "WA" }, { "_id": "98125", "city": "SEATTLE", "loc": [ -122.301546, 47.717002 ], "pop": 31928, "state": "WA" }, { "_id": "98126", "city": "SEATTLE", "loc": [ -122.373458, 47.544361 ], "pop": 18627, "state": "WA" }, { "_id": "98133", "city": "SEATTLE", "loc": [ -122.343132, 47.737717 ], "pop": 39634, "state": "WA" }, { "_id": "98134", "city": "SEATTLE", "loc": [ -122.326346, 47.590276 ], "pop": 1437, "state": "WA" }, { "_id": "98136", "city": "SEATTLE", "loc": [ -122.387768, 47.539769 ], "pop": 13816, "state": "WA" }, { "_id": "98144", "city": "SEATTLE", "loc": [ -122.300457, 47.584624 ], "pop": 23333, "state": "WA" }, { "_id": "98146", "city": "BURIEN", "loc": [ -122.353989, 47.501069 ], "pop": 25963, "state": "WA" }, { "_id": "98148", "city": "NORMANDY PARK", "loc": [ -122.326112, 47.450209 ], "pop": 8818, "state": "WA" }, { "_id": "98155", "city": "LK FOREST PARK", "loc": [ -122.296305, 47.758161 ], "pop": 38296, "state": "WA" }, { "_id": "98158", "city": "SEATAC", "loc": [ -122.318454, 47.442739 ], "pop": 97, "state": "WA" }, { "_id": "98166", "city": "NORMANDY PARK", "loc": [ -122.347392, 47.455052 ], "pop": 19331, "state": "WA" }, { "_id": "98168", "city": "TUKWILA", "loc": [ -122.302376, 47.48851 ], "pop": 27990, "state": "WA" }, { "_id": "98177", "city": "SEATTLE", "loc": [ -122.368585, 47.746678 ], "pop": 18532, "state": "WA" }, { "_id": "98178", "city": "TUKWILA", "loc": [ -122.247366, 47.499489 ], "pop": 19522, "state": "WA" }, { "_id": "98188", "city": "TUKWILA", "loc": [ -122.281159, 47.449808 ], "pop": 18001, "state": "WA" }, { "_id": "98198", "city": "DES MOINES", "loc": [ -122.309559, 47.407286 ], "pop": 20550, "state": "WA" }, { "_id": "98199", "city": "SEATTLE", "loc": [ -122.396357, 47.648845 ], "pop": 18360, "state": "WA" }, { "_id": "98201", "city": "EVERETT", "loc": [ -122.200571, 47.988431 ], "pop": 26440, "state": "WA" }, { "_id": "98203", "city": "EVERETT", "loc": [ -122.221846, 47.941937 ], "pop": 26506, "state": "WA" }, { "_id": "98204", "city": "EVERETT", "loc": [ -122.247217, 47.901659 ], "pop": 20496, "state": "WA" }, { "_id": "98205", "city": "EVERETT", "loc": [ -122.115759, 47.990065 ], "pop": 10083, "state": "WA" }, { "_id": "98208", "city": "EVERETT", "loc": [ -122.198722, 47.894822 ], "pop": 32818, "state": "WA" }, { "_id": "98220", "city": "ACME", "loc": [ -122.191391, 48.675248 ], "pop": 471, "state": "WA" }, { "_id": "98221", "city": "ANACORTES", "loc": [ -122.630873, 48.500438 ], "pop": 12986, "state": "WA" }, { "_id": "98223", "city": "ARLINGTON", "loc": [ -122.112126, 48.18293 ], "pop": 24435, "state": "WA" }, { "_id": "98224", "city": "BARING", "loc": [ -121.44757, 47.757787 ], "pop": 210, "state": "WA" }, { "_id": "98225", "city": "BELLINGHAM", "loc": [ -122.488676, 48.748957 ], "pop": 38415, "state": "WA" }, { "_id": "98226", "city": "BELLINGHAM", "loc": [ -122.441457, 48.762763 ], "pop": 38518, "state": "WA" }, { "_id": "98230", "city": "BLAINE", "loc": [ -122.732327, 48.963572 ], "pop": 7057, "state": "WA" }, { "_id": "98232", "city": "BOW", "loc": [ -122.413438, 48.562037 ], "pop": 3245, "state": "WA" }, { "_id": "98233", "city": "BURLINGTON", "loc": [ -122.33449, 48.478577 ], "pop": 9113, "state": "WA" }, { "_id": "98236", "city": "CLINTON", "loc": [ -122.391588, 47.950845 ], "pop": 3242, "state": "WA" }, { "_id": "98237", "city": "CONCRETE", "loc": [ -121.664294, 48.530962 ], "pop": 3217, "state": "WA" }, { "_id": "98239", "city": "COUPEVILLE", "loc": [ -122.682346, 48.218911 ], "pop": 5753, "state": "WA" }, { "_id": "98240", "city": "CUSTER", "loc": [ -122.622571, 48.937412 ], "pop": 2791, "state": "WA" }, { "_id": "98241", "city": "DARRINGTON", "loc": [ -121.591807, 48.249285 ], "pop": 1761, "state": "WA" }, { "_id": "98244", "city": "GLACIER", "loc": [ -122.153957, 48.803366 ], "pop": 2110, "state": "WA" }, { "_id": "98245", "city": "EASTSOUND", "loc": [ -122.937045, 48.665554 ], "pop": 2259, "state": "WA" }, { "_id": "98247", "city": "EVERSON", "loc": [ -122.332474, 48.90447 ], "pop": 6986, "state": "WA" }, { "_id": "98248", "city": "FERNDALE", "loc": [ -122.595293, 48.862531 ], "pop": 13697, "state": "WA" }, { "_id": "98249", "city": "FREELAND", "loc": [ -122.564086, 48.03417 ], "pop": 2321, "state": "WA" }, { "_id": "98250", "city": "FRIDAY HARBOR", "loc": [ -123.094717, 48.545416 ], "pop": 2508, "state": "WA" }, { "_id": "98252", "city": "GRANITE FALLS", "loc": [ -121.942752, 48.078977 ], "pop": 3634, "state": "WA" }, { "_id": "98253", "city": "GREENBANK", "loc": [ -122.587086, 48.124432 ], "pop": 926, "state": "WA" }, { "_id": "98257", "city": "LA CONNER", "loc": [ -122.53134, 48.409306 ], "pop": 3154, "state": "WA" }, { "_id": "98258", "city": "LAKE STEVENS", "loc": [ -122.067153, 48.017103 ], "pop": 12728, "state": "WA" }, { "_id": "98260", "city": "LANGLEY", "loc": [ -122.452992, 48.018672 ], "pop": 6036, "state": "WA" }, { "_id": "98261", "city": "LOPEZ", "loc": [ -122.967434, 48.520804 ], "pop": 4147, "state": "WA" }, { "_id": "98262", "city": "LUMMI ISLAND", "loc": [ -122.682285, 48.712765 ], "pop": 628, "state": "WA" }, { "_id": "98263", "city": "LYMAN", "loc": [ -122.016183, 48.525744 ], "pop": 1887, "state": "WA" }, { "_id": "98264", "city": "LYNDEN", "loc": [ -122.459153, 48.937225 ], "pop": 12896, "state": "WA" }, { "_id": "98270", "city": "MARYSVILLE", "loc": [ -122.156168, 48.065639 ], "pop": 19966, "state": "WA" }, { "_id": "98271", "city": "MARYSVILLE", "loc": [ -122.197956, 48.096572 ], "pop": 19743, "state": "WA" }, { "_id": "98272", "city": "MONROE", "loc": [ -121.947376, 47.85853 ], "pop": 14143, "state": "WA" }, { "_id": "98273", "city": "MOUNT VERNON", "loc": [ -122.326548, 48.416427 ], "pop": 30295, "state": "WA" }, { "_id": "98275", "city": "MUKILTEO", "loc": [ -122.301906, 47.919896 ], "pop": 10373, "state": "WA" }, { "_id": "98277", "city": "OAK HARBOR", "loc": [ -122.637439, 48.315096 ], "pop": 32450, "state": "WA" }, { "_id": "98278", "city": "WHIDBEY ISLAND N", "loc": [ -122.69005, 48.295271 ], "pop": 3434, "state": "WA" }, { "_id": "98279", "city": "OLGA", "loc": [ -122.836224, 48.655526 ], "pop": 1029, "state": "WA" }, { "_id": "98281", "city": "POINT ROBERTS", "loc": [ -123.055474, 48.987876 ], "pop": 923, "state": "WA" }, { "_id": "98283", "city": "ROCKPORT", "loc": [ -121.555352, 48.470388 ], "pop": 157, "state": "WA" }, { "_id": "98284", "city": "SEDRO WOOLLEY", "loc": [ -122.232943, 48.527405 ], "pop": 14902, "state": "WA" }, { "_id": "98288", "city": "SKYKOMISH", "loc": [ -121.371297, 47.692158 ], "pop": 388, "state": "WA" }, { "_id": "98290", "city": "SNOHOMISH", "loc": [ -122.071562, 47.895381 ], "pop": 37327, "state": "WA" }, { "_id": "98292", "city": "STANWOOD", "loc": [ -122.377978, 48.201067 ], "pop": 19288, "state": "WA" }, { "_id": "98294", "city": "SULTAN", "loc": [ -121.736869, 47.858942 ], "pop": 7010, "state": "WA" }, { "_id": "98295", "city": "SUMAS", "loc": [ -122.207425, 48.970763 ], "pop": 2537, "state": "WA" }, { "_id": "98303", "city": "ANDERSON ISLAND", "loc": [ -122.696025, 47.15872 ], "pop": 548, "state": "WA" }, { "_id": "98304", "city": "ASHFORD", "loc": [ -121.989791, 46.753121 ], "pop": 339, "state": "WA" }, { "_id": "98305", "city": "BEAVER", "loc": [ -124.305424, 48.067263 ], "pop": 695, "state": "WA" }, { "_id": "98310", "city": "BREMERTON", "loc": [ -122.629913, 47.601916 ], "pop": 49057, "state": "WA" }, { "_id": "98312", "city": "BREMERTON", "loc": [ -122.695786, 47.575424 ], "pop": 28858, "state": "WA" }, { "_id": "98314", "city": "PUGET SOUND NAVA", "loc": [ -122.724354, 47.746255 ], "pop": 708, "state": "WA" }, { "_id": "98315", "city": "SILVERDALE", "loc": [ -122.716106, 47.692017 ], "pop": 3702, "state": "WA" }, { "_id": "98320", "city": "BRINNON", "loc": [ -122.937509, 47.677596 ], "pop": 1049, "state": "WA" }, { "_id": "98321", "city": "BUCKLEY", "loc": [ -122.062098, 47.152449 ], "pop": 10153, "state": "WA" }, { "_id": "98323", "city": "CARBONADO", "loc": [ -122.051339, 47.080242 ], "pop": 495, "state": "WA" }, { "_id": "98325", "city": "CHIMACUM", "loc": [ -122.788323, 47.98607 ], "pop": 1191, "state": "WA" }, { "_id": "98326", "city": "CLALLAM BAY", "loc": [ -124.201512, 48.225486 ], "pop": 384, "state": "WA" }, { "_id": "98328", "city": "EATONVILLE", "loc": [ -122.269626, 46.870778 ], "pop": 3972, "state": "WA" }, { "_id": "98329", "city": "GIG HARBOR", "loc": [ -122.7, 47.378579 ], "pop": 6678, "state": "WA" }, { "_id": "98330", "city": "ELBE", "loc": [ -122.150344, 46.766607 ], "pop": 103, "state": "WA" }, { "_id": "98331", "city": "FORKS", "loc": [ -124.398949, 47.928732 ], "pop": 6657, "state": "WA" }, { "_id": "98332", "city": "GIG HARBOR", "loc": [ -122.600144, 47.3607 ], "pop": 9138, "state": "WA" }, { "_id": "98333", "city": "FOX ISLAND", "loc": [ -122.628579, 47.25238 ], "pop": 2017, "state": "WA" }, { "_id": "98335", "city": "GIG HARBOR", "loc": [ -122.608377, 47.300154 ], "pop": 17299, "state": "WA" }, { "_id": "98336", "city": "GLENOMA", "loc": [ -122.099014, 46.528266 ], "pop": 657, "state": "WA" }, { "_id": "98338", "city": "GRAHAM", "loc": [ -122.293648, 47.024575 ], "pop": 11136, "state": "WA" }, { "_id": "98339", "city": "PORT HADLOCK", "loc": [ -122.768151, 48.034531 ], "pop": 2574, "state": "WA" }, { "_id": "98340", "city": "HANSVILLE", "loc": [ -122.565509, 47.906143 ], "pop": 1256, "state": "WA" }, { "_id": "98346", "city": "KINGSTON", "loc": [ -122.525503, 47.810844 ], "pop": 5507, "state": "WA" }, { "_id": "98349", "city": "HOME", "loc": [ -122.74273, 47.247366 ], "pop": 3373, "state": "WA" }, { "_id": "98351", "city": "LONGBRANCH", "loc": [ -122.756126, 47.200737 ], "pop": 733, "state": "WA" }, { "_id": "98354", "city": "MILTON", "loc": [ -122.315514, 47.24827 ], "pop": 3562, "state": "WA" }, { "_id": "98355", "city": "MINERAL", "loc": [ -122.186056, 46.709635 ], "pop": 814, "state": "WA" }, { "_id": "98356", "city": "MORTON", "loc": [ -122.249573, 46.558056 ], "pop": 2530, "state": "WA" }, { "_id": "98358", "city": "NORDLAND", "loc": [ -122.692553, 48.04321 ], "pop": 738, "state": "WA" }, { "_id": "98359", "city": "OLALLA", "loc": [ -122.574512, 47.424088 ], "pop": 3173, "state": "WA" }, { "_id": "98360", "city": "ORTING", "loc": [ -122.185978, 47.082206 ], "pop": 4493, "state": "WA" }, { "_id": "98361", "city": "PACKWOOD", "loc": [ -121.655254, 46.650038 ], "pop": 495, "state": "WA" }, { "_id": "98362", "city": "PORT ANGELES", "loc": [ -123.438442, 48.106489 ], "pop": 30373, "state": "WA" }, { "_id": "98365", "city": "PORT LUDLOW", "loc": [ -122.689615, 47.922192 ], "pop": 2229, "state": "WA" }, { "_id": "98366", "city": "SOUTH PARK VILLA", "loc": [ -122.615276, 47.504838 ], "pop": 44359, "state": "WA" }, { "_id": "98368", "city": "PORT TOWNSEND", "loc": [ -122.794457, 48.104012 ], "pop": 9870, "state": "WA" }, { "_id": "98370", "city": "POULSBO", "loc": [ -122.627721, 47.742278 ], "pop": 20554, "state": "WA" }, { "_id": "98371", "city": "PUYALLUP", "loc": [ -122.315097, 47.199123 ], "pop": 18207, "state": "WA" }, { "_id": "98372", "city": "PUYALLUP", "loc": [ -122.273415, 47.204202 ], "pop": 17053, "state": "WA" }, { "_id": "98373", "city": "PUYALLUP", "loc": [ -122.321868, 47.128363 ], "pop": 23219, "state": "WA" }, { "_id": "98374", "city": "PUYALLUP", "loc": [ -122.265248, 47.142427 ], "pop": 21982, "state": "WA" }, { "_id": "98376", "city": "QUILCENE", "loc": [ -122.858304, 47.832429 ], "pop": 1592, "state": "WA" }, { "_id": "98377", "city": "RANDLE", "loc": [ -121.855533, 46.549195 ], "pop": 2620, "state": "WA" }, { "_id": "98380", "city": "SEABECK", "loc": [ -122.822685, 47.625497 ], "pop": 2555, "state": "WA" }, { "_id": "98381", "city": "SEKIU", "loc": [ -124.468467, 48.303166 ], "pop": 2582, "state": "WA" }, { "_id": "98382", "city": "SEQUIM", "loc": [ -123.119814, 48.088136 ], "pop": 16523, "state": "WA" }, { "_id": "98383", "city": "SILVERDALE", "loc": [ -122.698054, 47.662139 ], "pop": 12276, "state": "WA" }, { "_id": "98387", "city": "SPANAWAY", "loc": [ -122.394336, 47.073218 ], "pop": 24035, "state": "WA" }, { "_id": "98388", "city": "STEILACOOM", "loc": [ -122.588837, 47.170369 ], "pop": 6099, "state": "WA" }, { "_id": "98390", "city": "BONNEY LAKE", "loc": [ -122.180275, 47.188801 ], "pop": 35436, "state": "WA" }, { "_id": "98392", "city": "SUQUAMISH", "loc": [ -122.557295, 47.734303 ], "pop": 1880, "state": "WA" }, { "_id": "98394", "city": "VAUGHN", "loc": [ -122.773598, 47.330921 ], "pop": 804, "state": "WA" }, { "_id": "98402", "city": "TACOMA", "loc": [ -122.440536, 47.254508 ], "pop": 2994, "state": "WA" }, { "_id": "98403", "city": "TACOMA", "loc": [ -122.457538, 47.26428 ], "pop": 7493, "state": "WA" }, { "_id": "98404", "city": "TACOMA", "loc": [ -122.412625, 47.211312 ], "pop": 27135, "state": "WA" }, { "_id": "98405", "city": "TACOMA", "loc": [ -122.46435, 47.248351 ], "pop": 23918, "state": "WA" }, { "_id": "98406", "city": "TACOMA", "loc": [ -122.499349, 47.26325 ], "pop": 22971, "state": "WA" }, { "_id": "98407", "city": "TACOMA", "loc": [ -122.503881, 47.282479 ], "pop": 19881, "state": "WA" }, { "_id": "98408", "city": "TACOMA", "loc": [ -122.444381, 47.207267 ], "pop": 28753, "state": "WA" }, { "_id": "98409", "city": "TACOMA", "loc": [ -122.482503, 47.20381 ], "pop": 25045, "state": "WA" }, { "_id": "98421", "city": "TACOMA", "loc": [ -122.401457, 47.266373 ], "pop": 508, "state": "WA" }, { "_id": "98422", "city": "TACOMA", "loc": [ -122.398349, 47.294805 ], "pop": 10385, "state": "WA" }, { "_id": "98424", "city": "FIFE", "loc": [ -122.350962, 47.243632 ], "pop": 5626, "state": "WA" }, { "_id": "98433", "city": "FORT LEWIS", "loc": [ -122.583486, 47.100864 ], "pop": 27463, "state": "WA" }, { "_id": "98439", "city": "LAKEWOOD CENTER", "loc": [ -122.529326, 47.122905 ], "pop": 3064, "state": "WA" }, { "_id": "98443", "city": "TACOMA", "loc": [ -122.372815, 47.204369 ], "pop": 5457, "state": "WA" }, { "_id": "98444", "city": "PARKLAND", "loc": [ -122.448842, 47.156553 ], "pop": 27406, "state": "WA" }, { "_id": "98445", "city": "PARKLAND", "loc": [ -122.411614, 47.133967 ], "pop": 20298, "state": "WA" }, { "_id": "98446", "city": "PARKLAND", "loc": [ -122.37189, 47.14041 ], "pop": 7156, "state": "WA" }, { "_id": "98465", "city": "TACOMA", "loc": [ -122.527272, 47.249139 ], "pop": 6919, "state": "WA" }, { "_id": "98466", "city": "FIRCREST", "loc": [ -122.53503, 47.22788 ], "pop": 22719, "state": "WA" }, { "_id": "98467", "city": "TACOMA", "loc": [ -122.533562, 47.205395 ], "pop": 12823, "state": "WA" }, { "_id": "98498", "city": "LAKEWOOD CENTER", "loc": [ -122.555357, 47.164269 ], "pop": 28193, "state": "WA" }, { "_id": "98499", "city": "LAKEWOOD CENTER", "loc": [ -122.509074, 47.160786 ], "pop": 20970, "state": "WA" }, { "_id": "98501", "city": "OLYMPIA", "loc": [ -122.876311, 47.012906 ], "pop": 25979, "state": "WA" }, { "_id": "98502", "city": "OLYMPIA", "loc": [ -122.95214, 47.029828 ], "pop": 40246, "state": "WA" }, { "_id": "98503", "city": "LACEY", "loc": [ -122.782665, 47.023967 ], "pop": 43492, "state": "WA" }, { "_id": "98506", "city": "LACEY", "loc": [ -122.832844, 47.076259 ], "pop": 24889, "state": "WA" }, { "_id": "98520", "city": "ABERDEEN", "loc": [ -123.79629, 46.984293 ], "pop": 22346, "state": "WA" }, { "_id": "98524", "city": "ALLYN", "loc": [ -122.853571, 47.385004 ], "pop": 2049, "state": "WA" }, { "_id": "98526", "city": "AMANDA PARK", "loc": [ -123.907375, 47.470579 ], "pop": 470, "state": "WA" }, { "_id": "98528", "city": "BEAR CREEK", "loc": [ -122.822381, 47.454956 ], "pop": 2351, "state": "WA" }, { "_id": "98531", "city": "CENTRALIA", "loc": [ -122.967068, 46.724635 ], "pop": 17633, "state": "WA" }, { "_id": "98532", "city": "CHEHALIS", "loc": [ -122.965764, 46.638193 ], "pop": 18065, "state": "WA" }, { "_id": "98533", "city": "CINEBAR", "loc": [ -122.566005, 46.567131 ], "pop": 796, "state": "WA" }, { "_id": "98535", "city": "COPALIS BEACH", "loc": [ -124.135881, 47.065044 ], "pop": 703, "state": "WA" }, { "_id": "98536", "city": "COPALIS CROSSING", "loc": [ -124.13471, 47.12535 ], "pop": 685, "state": "WA" }, { "_id": "98537", "city": "COSMOPOLIS", "loc": [ -123.77394, 46.953789 ], "pop": 1424, "state": "WA" }, { "_id": "98538", "city": "CURTIS", "loc": [ -123.156974, 46.558372 ], "pop": 449, "state": "WA" }, { "_id": "98541", "city": "ELMA", "loc": [ -123.39969, 47.005813 ], "pop": 7356, "state": "WA" }, { "_id": "98542", "city": "ETHEL", "loc": [ -122.776009, 46.53581 ], "pop": 320, "state": "WA" }, { "_id": "98546", "city": "GRAPEVIEW", "loc": [ -122.949742, 47.305783 ], "pop": 3234, "state": "WA" }, { "_id": "98547", "city": "GRAYLAND", "loc": [ -124.056194, 46.853201 ], "pop": 1677, "state": "WA" }, { "_id": "98548", "city": "HOODSPORT", "loc": [ -123.173932, 47.423526 ], "pop": 1165, "state": "WA" }, { "_id": "98550", "city": "HOQUIAM", "loc": [ -123.884169, 46.982269 ], "pop": 9597, "state": "WA" }, { "_id": "98552", "city": "HUMPTULIPS", "loc": [ -123.971695, 47.135632 ], "pop": 1301, "state": "WA" }, { "_id": "98555", "city": "LILLIWAUP", "loc": [ -123.063119, 47.512773 ], "pop": 635, "state": "WA" }, { "_id": "98557", "city": "MC CLEARY", "loc": [ -123.273301, 47.053987 ], "pop": 2644, "state": "WA" }, { "_id": "98560", "city": "MATLOCK", "loc": [ -123.337638, 47.177545 ], "pop": 1716, "state": "WA" }, { "_id": "98562", "city": "MOCLIPS", "loc": [ -124.20438, 47.222619 ], "pop": 574, "state": "WA" }, { "_id": "98563", "city": "MONTESANO", "loc": [ -123.500584, 47.09013 ], "pop": 10079, "state": "WA" }, { "_id": "98564", "city": "MOSSYROCK", "loc": [ -122.478935, 46.513136 ], "pop": 1390, "state": "WA" }, { "_id": "98568", "city": "OAKVILLE", "loc": [ -123.249329, 46.843366 ], "pop": 1915, "state": "WA" }, { "_id": "98569", "city": "OCEAN CITY", "loc": [ -124.15323, 46.982905 ], "pop": 2307, "state": "WA" }, { "_id": "98570", "city": "ONALASKA", "loc": [ -122.707503, 46.573016 ], "pop": 3077, "state": "WA" }, { "_id": "98571", "city": "PACIFIC BEACH", "loc": [ -124.158833, 47.198144 ], "pop": 122, "state": "WA" }, { "_id": "98572", "city": "PE ELL", "loc": [ -123.285244, 46.56558 ], "pop": 921, "state": "WA" }, { "_id": "98575", "city": "QUINAULT", "loc": [ -123.803744, 47.448505 ], "pop": 545, "state": "WA" }, { "_id": "98576", "city": "RAINIER", "loc": [ -122.679468, 46.882942 ], "pop": 2397, "state": "WA" }, { "_id": "98577", "city": "RAYMOND", "loc": [ -123.692889, 46.671046 ], "pop": 6144, "state": "WA" }, { "_id": "98579", "city": "ROCHESTER", "loc": [ -123.040634, 46.819295 ], "pop": 8231, "state": "WA" }, { "_id": "98580", "city": "ROY", "loc": [ -122.448271, 46.956048 ], "pop": 7730, "state": "WA" }, { "_id": "98581", "city": "RYDERWOOD", "loc": [ -123.043134, 46.375176 ], "pop": 330, "state": "WA" }, { "_id": "98582", "city": "SALKUM", "loc": [ -122.645364, 46.515059 ], "pop": 336, "state": "WA" }, { "_id": "98584", "city": "SHELTON", "loc": [ -123.072862, 47.20863 ], "pop": 19074, "state": "WA" }, { "_id": "98585", "city": "SILVER CREEK", "loc": [ -122.475716, 46.549077 ], "pop": 697, "state": "WA" }, { "_id": "98586", "city": "SOUTH BEND", "loc": [ -123.820315, 46.6544 ], "pop": 2575, "state": "WA" }, { "_id": "98587", "city": "TAHOLAH", "loc": [ -124.2827, 47.340711 ], "pop": 851, "state": "WA" }, { "_id": "98588", "city": "TAHUYA", "loc": [ -122.921126, 47.435618 ], "pop": 3794, "state": "WA" }, { "_id": "98589", "city": "TENINO", "loc": [ -122.849269, 46.864119 ], "pop": 6451, "state": "WA" }, { "_id": "98590", "city": "TOKELAND", "loc": [ -124.046008, 46.746874 ], "pop": 891, "state": "WA" }, { "_id": "98591", "city": "TOLEDO", "loc": [ -122.826559, 46.439552 ], "pop": 2829, "state": "WA" }, { "_id": "98592", "city": "UNION", "loc": [ -123.034364, 47.351305 ], "pop": 1592, "state": "WA" }, { "_id": "98593", "city": "VADER", "loc": [ -122.958493, 46.398505 ], "pop": 523, "state": "WA" }, { "_id": "98595", "city": "WESTPORT", "loc": [ -124.106055, 46.883619 ], "pop": 2463, "state": "WA" }, { "_id": "98596", "city": "WINLOCK", "loc": [ -122.915806, 46.494014 ], "pop": 5206, "state": "WA" }, { "_id": "98597", "city": "YELM", "loc": [ -122.588049, 46.920589 ], "pop": 9553, "state": "WA" }, { "_id": "98601", "city": "AMBOY", "loc": [ -122.457418, 45.9195 ], "pop": 1910, "state": "WA" }, { "_id": "98602", "city": "APPLETON", "loc": [ -121.148618, 45.909041 ], "pop": 13, "state": "WA" }, { "_id": "98603", "city": "ARIEL", "loc": [ -122.46769, 45.995154 ], "pop": 735, "state": "WA" }, { "_id": "98604", "city": "BATTLE GROUND", "loc": [ -122.531845, 45.790667 ], "pop": 16072, "state": "WA" }, { "_id": "98605", "city": "COOK", "loc": [ -121.175778, 45.6341 ], "pop": 954, "state": "WA" }, { "_id": "98606", "city": "BRUSH PRAIRIE", "loc": [ -122.484342, 45.730432 ], "pop": 6663, "state": "WA" }, { "_id": "98607", "city": "CAMAS", "loc": [ -122.414231, 45.605772 ], "pop": 12058, "state": "WA" }, { "_id": "98610", "city": "CARSON", "loc": [ -121.835138, 45.749332 ], "pop": 2009, "state": "WA" }, { "_id": "98611", "city": "CASTLE ROCK", "loc": [ -122.9139, 46.278291 ], "pop": 8455, "state": "WA" }, { "_id": "98612", "city": "CATHLAMET", "loc": [ -123.362716, 46.195383 ], "pop": 2114, "state": "WA" }, { "_id": "98613", "city": "CENTERVILLE", "loc": [ -120.945973, 45.703183 ], "pop": 681, "state": "WA" }, { "_id": "98616", "city": "COUGAR", "loc": [ -122.294186, 46.069012 ], "pop": 122, "state": "WA" }, { "_id": "98619", "city": "GLENWOOD", "loc": [ -121.28849, 46.007104 ], "pop": 549, "state": "WA" }, { "_id": "98620", "city": "GOLDENDALE", "loc": [ -120.812981, 45.832021 ], "pop": 5761, "state": "WA" }, { "_id": "98621", "city": "GRAYS RIVER", "loc": [ -123.588845, 46.353481 ], "pop": 209, "state": "WA" }, { "_id": "98624", "city": "ILWACO", "loc": [ -124.02822, 46.314214 ], "pop": 1210, "state": "WA" }, { "_id": "98625", "city": "KALAMA", "loc": [ -122.816588, 46.011229 ], "pop": 3627, "state": "WA" }, { "_id": "98626", "city": "KELSO", "loc": [ -122.886994, 46.148491 ], "pop": 20593, "state": "WA" }, { "_id": "98628", "city": "KLICKITAT", "loc": [ -121.229231, 45.751534 ], "pop": 23, "state": "WA" }, { "_id": "98629", "city": "LA CENTER", "loc": [ -122.623972, 45.880587 ], "pop": 3969, "state": "WA" }, { "_id": "98631", "city": "LONG BEACH", "loc": [ -124.047041, 46.377369 ], "pop": 3648, "state": "WA" }, { "_id": "98632", "city": "LONGVIEW", "loc": [ -122.963421, 46.151354 ], "pop": 42028, "state": "WA" }, { "_id": "98635", "city": "LYLE", "loc": [ -121.250112, 45.74495 ], "pop": 1583, "state": "WA" }, { "_id": "98638", "city": "NASELLE", "loc": [ -123.804381, 46.352758 ], "pop": 2177, "state": "WA" }, { "_id": "98640", "city": "OCEAN PARK", "loc": [ -124.043582, 46.502867 ], "pop": 2601, "state": "WA" }, { "_id": "98642", "city": "RIDGEFIELD", "loc": [ -122.693354, 45.784634 ], "pop": 7845, "state": "WA" }, { "_id": "98643", "city": "ROSBURG", "loc": [ -123.657105, 46.307076 ], "pop": 279, "state": "WA" }, { "_id": "98645", "city": "SILVERLAKE", "loc": [ -122.764886, 46.316322 ], "pop": 927, "state": "WA" }, { "_id": "98647", "city": "SKAMOKAWA", "loc": [ -123.43316, 46.295186 ], "pop": 361, "state": "WA" }, { "_id": "98648", "city": "STEVENSON", "loc": [ -121.909346, 45.688173 ], "pop": 3203, "state": "WA" }, { "_id": "98649", "city": "TOUTLE", "loc": [ -122.647696, 46.295605 ], "pop": 599, "state": "WA" }, { "_id": "98650", "city": "TROUT LAKE", "loc": [ -121.516272, 45.982789 ], "pop": 766, "state": "WA" }, { "_id": "98651", "city": "UNDERWOOD", "loc": [ -121.597408, 45.740872 ], "pop": 1161, "state": "WA" }, { "_id": "98660", "city": "VANCOUVER", "loc": [ -122.68014, 45.64183 ], "pop": 10432, "state": "WA" }, { "_id": "98661", "city": "VANCOUVER", "loc": [ -122.625146, 45.641807 ], "pop": 28837, "state": "WA" }, { "_id": "98662", "city": "ORCHARDS", "loc": [ -122.576182, 45.674519 ], "pop": 17842, "state": "WA" }, { "_id": "98663", "city": "VANCOUVER", "loc": [ -122.660385, 45.6514 ], "pop": 13198, "state": "WA" }, { "_id": "98664", "city": "VANCOUVER", "loc": [ -122.576741, 45.623086 ], "pop": 17179, "state": "WA" }, { "_id": "98665", "city": "HAZEL DELL", "loc": [ -122.664223, 45.68217 ], "pop": 16488, "state": "WA" }, { "_id": "98670", "city": "WAHKIACUS", "loc": [ -121.148586, 45.815567 ], "pop": 442, "state": "WA" }, { "_id": "98671", "city": "WASHOUGAL", "loc": [ -122.310396, 45.595921 ], "pop": 10873, "state": "WA" }, { "_id": "98672", "city": "WHITE SALMON", "loc": [ -121.479459, 45.755142 ], "pop": 5396, "state": "WA" }, { "_id": "98674", "city": "WOODLAND", "loc": [ -122.71256, 45.921859 ], "pop": 6266, "state": "WA" }, { "_id": "98675", "city": "YACOLT", "loc": [ -122.427545, 45.862247 ], "pop": 3295, "state": "WA" }, { "_id": "98682", "city": "VANCOUVER", "loc": [ -122.521224, 45.664399 ], "pop": 21359, "state": "WA" }, { "_id": "98684", "city": "CASCADE PARK", "loc": [ -122.524969, 45.617522 ], "pop": 26400, "state": "WA" }, { "_id": "98685", "city": "FELIDA", "loc": [ -122.682474, 45.707313 ], "pop": 13972, "state": "WA" }, { "_id": "98686", "city": "VANCOUVER", "loc": [ -122.632226, 45.712017 ], "pop": 9966, "state": "WA" }, { "_id": "98801", "city": "WENATCHEE", "loc": [ -120.327345, 47.425269 ], "pop": 28906, "state": "WA" }, { "_id": "98802", "city": "EAST WENATCHEE", "loc": [ -120.273136, 47.418596 ], "pop": 17975, "state": "WA" }, { "_id": "98812", "city": "BREWSTER", "loc": [ -119.771999, 48.120641 ], "pop": 3177, "state": "WA" }, { "_id": "98813", "city": "BRIDGEPORT", "loc": [ -119.702772, 48.016083 ], "pop": 2757, "state": "WA" }, { "_id": "98814", "city": "CARLTON", "loc": [ -120.10551, 48.252615 ], "pop": 332, "state": "WA" }, { "_id": "98815", "city": "CASHMERE", "loc": [ -120.503274, 47.517293 ], "pop": 7504, "state": "WA" }, { "_id": "98816", "city": "CHELAN", "loc": [ -120.027306, 47.848263 ], "pop": 4949, "state": "WA" }, { "_id": "98822", "city": "ENTIAT", "loc": [ -120.276031, 47.705653 ], "pop": 1507, "state": "WA" }, { "_id": "98823", "city": "EPHRATA", "loc": [ -119.533582, 47.277051 ], "pop": 8779, "state": "WA" }, { "_id": "98826", "city": "LEAVENWORTH", "loc": [ -120.674792, 47.6438 ], "pop": 4288, "state": "WA" }, { "_id": "98827", "city": "LOOMIS", "loc": [ -119.642675, 48.869627 ], "pop": 329, "state": "WA" }, { "_id": "98828", "city": "MALAGA", "loc": [ -120.208562, 47.355306 ], "pop": 1633, "state": "WA" }, { "_id": "98830", "city": "MANSFIELD", "loc": [ -119.405315, 47.902136 ], "pop": 960, "state": "WA" }, { "_id": "98831", "city": "MANSON", "loc": [ -120.148963, 47.895764 ], "pop": 2309, "state": "WA" }, { "_id": "98832", "city": "MARLIN", "loc": [ -119.090897, 47.320929 ], "pop": 856, "state": "WA" }, { "_id": "98833", "city": "MAZAMA", "loc": [ -120.38796, 48.597728 ], "pop": 115, "state": "WA" }, { "_id": "98834", "city": "METHOW", "loc": [ -120.0059, 48.09001 ], "pop": 623, "state": "WA" }, { "_id": "98837", "city": "MOSES LAKE", "loc": [ -119.289149, 47.137363 ], "pop": 22935, "state": "WA" }, { "_id": "98840", "city": "OKANOGAN", "loc": [ -119.604563, 48.351328 ], "pop": 3782, "state": "WA" }, { "_id": "98841", "city": "OMAK", "loc": [ -119.527156, 48.414347 ], "pop": 6059, "state": "WA" }, { "_id": "98843", "city": "ORONDO", "loc": [ -120.172143, 47.696928 ], "pop": 1424, "state": "WA" }, { "_id": "98844", "city": "OROVILLE", "loc": [ -119.403236, 48.939681 ], "pop": 3283, "state": "WA" }, { "_id": "98845", "city": "PALISADES", "loc": [ -119.802264, 47.469367 ], "pop": 36, "state": "WA" }, { "_id": "98846", "city": "PATEROS", "loc": [ -119.913322, 48.059147 ], "pop": 696, "state": "WA" }, { "_id": "98847", "city": "PESHASTIN", "loc": [ -120.613928, 47.581294 ], "pop": 1030, "state": "WA" }, { "_id": "98848", "city": "QUINCY", "loc": [ -119.845922, 47.197574 ], "pop": 7429, "state": "WA" }, { "_id": "98849", "city": "RIVERSIDE", "loc": [ -119.580316, 48.487567 ], "pop": 1871, "state": "WA" }, { "_id": "98850", "city": "ROCK ISLAND", "loc": [ -120.137794, 47.370558 ], "pop": 1336, "state": "WA" }, { "_id": "98851", "city": "SOAP LAKE", "loc": [ -119.485962, 47.383034 ], "pop": 2482, "state": "WA" }, { "_id": "98852", "city": "STEHEKIN", "loc": [ -120.755185, 48.298034 ], "pop": 124, "state": "WA" }, { "_id": "98855", "city": "TONASKET", "loc": [ -119.394252, 48.71944 ], "pop": 4921, "state": "WA" }, { "_id": "98856", "city": "TWISP", "loc": [ -120.135035, 48.363231 ], "pop": 1938, "state": "WA" }, { "_id": "98857", "city": "WARDEN", "loc": [ -119.053932, 46.97697 ], "pop": 2678, "state": "WA" }, { "_id": "98858", "city": "WATERVILLE", "loc": [ -119.988743, 47.62951 ], "pop": 1717, "state": "WA" }, { "_id": "98859", "city": "WAUCONDA", "loc": [ -118.946947, 48.822449 ], "pop": 325, "state": "WA" }, { "_id": "98862", "city": "WINTHROP", "loc": [ -120.180468, 48.475607 ], "pop": 1263, "state": "WA" }, { "_id": "98901", "city": "TERRACE HEIGHTS", "loc": [ -120.477336, 46.606991 ], "pop": 22057, "state": "WA" }, { "_id": "98902", "city": "YAKIMA", "loc": [ -120.531084, 46.593393 ], "pop": 39091, "state": "WA" }, { "_id": "98903", "city": "UNION GAP", "loc": [ -120.556587, 46.5572 ], "pop": 10498, "state": "WA" }, { "_id": "98908", "city": "WIDE HOLLOW", "loc": [ -120.605175, 46.605865 ], "pop": 27078, "state": "WA" }, { "_id": "98922", "city": "CLE ELUM", "loc": [ -120.968505, 47.206319 ], "pop": 5299, "state": "WA" }, { "_id": "98923", "city": "COWICHE", "loc": [ -120.714893, 46.66611 ], "pop": 920, "state": "WA" }, { "_id": "98926", "city": "ELLENSBURG", "loc": [ -120.516274, 46.999632 ], "pop": 20344, "state": "WA" }, { "_id": "98930", "city": "GRANDVIEW", "loc": [ -119.915734, 46.253846 ], "pop": 10558, "state": "WA" }, { "_id": "98932", "city": "GRANGER", "loc": [ -120.181848, 46.348045 ], "pop": 3562, "state": "WA" }, { "_id": "98933", "city": "HARRAH", "loc": [ -120.573606, 46.410383 ], "pop": 2643, "state": "WA" }, { "_id": "98935", "city": "MABTON", "loc": [ -120.015141, 46.212082 ], "pop": 3586, "state": "WA" }, { "_id": "98936", "city": "MOXEE", "loc": [ -120.368463, 46.554205 ], "pop": 4194, "state": "WA" }, { "_id": "98937", "city": "WHITE PASS", "loc": [ -120.826699, 46.735335 ], "pop": 2996, "state": "WA" }, { "_id": "98938", "city": "OUTLOOK", "loc": [ -120.097005, 46.352497 ], "pop": 1705, "state": "WA" }, { "_id": "98942", "city": "SELAH", "loc": [ -120.540813, 46.67671 ], "pop": 12507, "state": "WA" }, { "_id": "98944", "city": "SUNNYSIDE", "loc": [ -120.012631, 46.321273 ], "pop": 16774, "state": "WA" }, { "_id": "98946", "city": "THORP", "loc": [ -120.678557, 47.017785 ], "pop": 1082, "state": "WA" }, { "_id": "98947", "city": "TIETON", "loc": [ -120.747275, 46.706331 ], "pop": 2079, "state": "WA" }, { "_id": "98948", "city": "TOPPENISH", "loc": [ -120.330534, 46.375123 ], "pop": 11101, "state": "WA" }, { "_id": "98951", "city": "WAPATO", "loc": [ -120.426484, 46.45066 ], "pop": 10262, "state": "WA" }, { "_id": "98952", "city": "WHITE SWAN", "loc": [ -120.745317, 46.371558 ], "pop": 1941, "state": "WA" }, { "_id": "98953", "city": "ZILLAH", "loc": [ -120.266161, 46.415777 ], "pop": 5266, "state": "WA" }, { "_id": "99003", "city": "CHATTAROY", "loc": [ -117.29209, 47.919178 ], "pop": 1991, "state": "WA" }, { "_id": "99004", "city": "CHENEY", "loc": [ -117.583372, 47.494257 ], "pop": 12257, "state": "WA" }, { "_id": "99005", "city": "COLBERT", "loc": [ -117.375895, 47.841093 ], "pop": 3926, "state": "WA" }, { "_id": "99006", "city": "DEER PARK", "loc": [ -117.443559, 47.948615 ], "pop": 7287, "state": "WA" }, { "_id": "99008", "city": "EDWALL", "loc": [ -117.907095, 47.537896 ], "pop": 379, "state": "WA" }, { "_id": "99009", "city": "ELK", "loc": [ -117.296253, 48.020523 ], "pop": 2386, "state": "WA" }, { "_id": "99011", "city": "FAIRCHILD AIR FO", "loc": [ -117.643746, 47.613068 ], "pop": 4854, "state": "WA" }, { "_id": "99012", "city": "FAIRFIELD", "loc": [ -117.192054, 47.398726 ], "pop": 641, "state": "WA" }, { "_id": "99013", "city": "FORD", "loc": [ -117.811858, 47.916873 ], "pop": 790, "state": "WA" }, { "_id": "99016", "city": "GREENACRES", "loc": [ -117.156801, 47.658357 ], "pop": 5312, "state": "WA" }, { "_id": "99017", "city": "LAMONT", "loc": [ -117.830239, 47.17304 ], "pop": 317, "state": "WA" }, { "_id": "99018", "city": "LATAH", "loc": [ -117.16884, 47.303815 ], "pop": 477, "state": "WA" }, { "_id": "99019", "city": "LIBERTY LAKE", "loc": [ -117.083808, 47.651672 ], "pop": 2372, "state": "WA" }, { "_id": "99021", "city": "MEAD", "loc": [ -117.311716, 47.793268 ], "pop": 5903, "state": "WA" }, { "_id": "99022", "city": "ESPANOLA", "loc": [ -117.679351, 47.583696 ], "pop": 6436, "state": "WA" }, { "_id": "99023", "city": "MICA", "loc": [ -117.163711, 47.553814 ], "pop": 921, "state": "WA" }, { "_id": "99025", "city": "NEWMAN LAKE", "loc": [ -117.064041, 47.727371 ], "pop": 3092, "state": "WA" }, { "_id": "99026", "city": "NINE MILE FALLS", "loc": [ -117.589359, 47.801945 ], "pop": 4872, "state": "WA" }, { "_id": "99027", "city": "OTIS ORCHARDS", "loc": [ -117.11209, 47.70273 ], "pop": 5922, "state": "WA" }, { "_id": "99029", "city": "REARDAN", "loc": [ -117.866264, 47.705407 ], "pop": 1072, "state": "WA" }, { "_id": "99030", "city": "ROCKFORD", "loc": [ -117.131842, 47.452804 ], "pop": 844, "state": "WA" }, { "_id": "99031", "city": "SPANGLE", "loc": [ -117.382696, 47.4338 ], "pop": 1434, "state": "WA" }, { "_id": "99032", "city": "SPRAGUE", "loc": [ -117.989684, 47.324725 ], "pop": 672, "state": "WA" }, { "_id": "99033", "city": "TEKOA", "loc": [ -117.081919, 47.227081 ], "pop": 950, "state": "WA" }, { "_id": "99034", "city": "TUMTUM", "loc": [ -117.698996, 47.898173 ], "pop": 312, "state": "WA" }, { "_id": "99036", "city": "VALLEYFORD", "loc": [ -117.268601, 47.529176 ], "pop": 698, "state": "WA" }, { "_id": "99037", "city": "VERADALE", "loc": [ -117.197706, 47.642103 ], "pop": 8397, "state": "WA" }, { "_id": "99039", "city": "WAVERLY", "loc": [ -117.233108, 47.335393 ], "pop": 166, "state": "WA" }, { "_id": "99040", "city": "WELLPINIT", "loc": [ -117.985646, 47.86974 ], "pop": 488, "state": "WA" }, { "_id": "99101", "city": "ADDY", "loc": [ -117.892383, 48.44769 ], "pop": 1226, "state": "WA" }, { "_id": "99103", "city": "ALMIRA", "loc": [ -118.91225, 47.763175 ], "pop": 646, "state": "WA" }, { "_id": "99105", "city": "BENGE", "loc": [ -117.969895, 46.867636 ], "pop": 2, "state": "WA" }, { "_id": "99107", "city": "BOYDS", "loc": [ -118.19906, 48.691919 ], "pop": 782, "state": "WA" }, { "_id": "99109", "city": "CHEWELAH", "loc": [ -117.77539, 48.287585 ], "pop": 5239, "state": "WA" }, { "_id": "99110", "city": "CLAYTON", "loc": [ -117.574021, 47.955206 ], "pop": 1621, "state": "WA" }, { "_id": "99111", "city": "COLFAX", "loc": [ -117.366975, 46.879996 ], "pop": 3592, "state": "WA" }, { "_id": "99113", "city": "COLTON", "loc": [ -117.169243, 46.590098 ], "pop": 650, "state": "WA" }, { "_id": "99114", "city": "COLVILLE", "loc": [ -117.864463, 48.57799 ], "pop": 8805, "state": "WA" }, { "_id": "99115", "city": "COULEE CITY", "loc": [ -119.27582, 47.596571 ], "pop": 1013, "state": "WA" }, { "_id": "99116", "city": "COULEE DAM", "loc": [ -119.180907, 48.173861 ], "pop": 4636, "state": "WA" }, { "_id": "99117", "city": "CRESTON", "loc": [ -118.530656, 47.797681 ], "pop": 527, "state": "WA" }, { "_id": "99118", "city": "CURLEW", "loc": [ -118.645182, 48.910775 ], "pop": 986, "state": "WA" }, { "_id": "99119", "city": "CUSICK", "loc": [ -117.329464, 48.391513 ], "pop": 439, "state": "WA" }, { "_id": "99121", "city": "DANVILLE", "loc": [ -118.488408, 48.972524 ], "pop": 48, "state": "WA" }, { "_id": "99122", "city": "DAVENPORT", "loc": [ -118.166657, 47.680855 ], "pop": 2383, "state": "WA" }, { "_id": "99123", "city": "ELECTRIC CITY", "loc": [ -119.036728, 47.926446 ], "pop": 1152, "state": "WA" }, { "_id": "99125", "city": "ENDICOTT", "loc": [ -117.723005, 46.936407 ], "pop": 673, "state": "WA" }, { "_id": "99126", "city": "EVANS", "loc": [ -118.00012, 48.745787 ], "pop": 350, "state": "WA" }, { "_id": "99128", "city": "FARMINGTON", "loc": [ -117.076327, 47.084742 ], "pop": 355, "state": "WA" }, { "_id": "99129", "city": "FRUITLAND", "loc": [ -118.215906, 47.979746 ], "pop": 515, "state": "WA" }, { "_id": "99130", "city": "GARFIELD", "loc": [ -117.152293, 46.994639 ], "pop": 795, "state": "WA" }, { "_id": "99131", "city": "GIFFORD", "loc": [ -118.12989, 48.22287 ], "pop": 60, "state": "WA" }, { "_id": "99133", "city": "GRAND COULEE", "loc": [ -118.997835, 47.938511 ], "pop": 1073, "state": "WA" }, { "_id": "99134", "city": "HARRINGTON", "loc": [ -118.277793, 47.4555 ], "pop": 786, "state": "WA" }, { "_id": "99135", "city": "HARTLINE", "loc": [ -119.104467, 47.725631 ], "pop": 315, "state": "WA" }, { "_id": "99137", "city": "HUNTERS", "loc": [ -118.152491, 48.133261 ], "pop": 349, "state": "WA" }, { "_id": "99138", "city": "INCHELIUM", "loc": [ -118.355166, 48.292411 ], "pop": 1297, "state": "WA" }, { "_id": "99139", "city": "IONE", "loc": [ -117.404859, 48.713023 ], "pop": 1204, "state": "WA" }, { "_id": "99140", "city": "KELLER", "loc": [ -118.654731, 48.023594 ], "pop": 255, "state": "WA" }, { "_id": "99141", "city": "KETTLE FALLS", "loc": [ -118.054801, 48.636375 ], "pop": 3668, "state": "WA" }, { "_id": "99143", "city": "LACROSSE", "loc": [ -117.770277, 46.771684 ], "pop": 1066, "state": "WA" }, { "_id": "99147", "city": "LINCOLN", "loc": [ -118.481012, 47.78204 ], "pop": 31, "state": "WA" }, { "_id": "99148", "city": "LOON LAKE", "loc": [ -117.632496, 48.078393 ], "pop": 1885, "state": "WA" }, { "_id": "99150", "city": "MALO", "loc": [ -118.623712, 48.81862 ], "pop": 396, "state": "WA" }, { "_id": "99153", "city": "METALINE FALLS", "loc": [ -117.36332, 48.859747 ], "pop": 729, "state": "WA" }, { "_id": "99156", "city": "NEWPORT", "loc": [ -117.150784, 48.169465 ], "pop": 5881, "state": "WA" }, { "_id": "99157", "city": "NORTHPORT", "loc": [ -117.793052, 48.924663 ], "pop": 462, "state": "WA" }, { "_id": "99158", "city": "OAKESDALE", "loc": [ -117.280326, 47.080556 ], "pop": 764, "state": "WA" }, { "_id": "99159", "city": "ODESSA", "loc": [ -118.698316, 47.339491 ], "pop": 1324, "state": "WA" }, { "_id": "99161", "city": "PALOUSE", "loc": [ -117.085475, 46.907555 ], "pop": 1270, "state": "WA" }, { "_id": "99163", "city": "PULLMAN", "loc": [ -117.172936, 46.735247 ], "pop": 25909, "state": "WA" }, { "_id": "99166", "city": "REPUBLIC", "loc": [ -118.699942, 48.670366 ], "pop": 2531, "state": "WA" }, { "_id": "99167", "city": "RICE", "loc": [ -118.124865, 48.406169 ], "pop": 615, "state": "WA" }, { "_id": "99169", "city": "RITZVILLE", "loc": [ -118.395812, 47.131528 ], "pop": 2472, "state": "WA" }, { "_id": "99170", "city": "ROSALIA", "loc": [ -117.41468, 47.221777 ], "pop": 1081, "state": "WA" }, { "_id": "99171", "city": "SAINT JOHN", "loc": [ -117.573002, 47.075539 ], "pop": 765, "state": "WA" }, { "_id": "99173", "city": "SPRINGDALE", "loc": [ -117.873273, 47.992737 ], "pop": 361, "state": "WA" }, { "_id": "99176", "city": "THORNTON", "loc": [ -117.386416, 47.12525 ], "pop": 186, "state": "WA" }, { "_id": "99179", "city": "UNIONTOWN", "loc": [ -117.090756, 46.525818 ], "pop": 433, "state": "WA" }, { "_id": "99180", "city": "USK", "loc": [ -117.318947, 48.295969 ], "pop": 501, "state": "WA" }, { "_id": "99181", "city": "VALLEY", "loc": [ -117.760967, 48.135114 ], "pop": 1328, "state": "WA" }, { "_id": "99185", "city": "WILBUR", "loc": [ -118.706271, 47.741012 ], "pop": 1238, "state": "WA" }, { "_id": "99201", "city": "SPOKANE", "loc": [ -117.436527, 47.666485 ], "pop": 9599, "state": "WA" }, { "_id": "99202", "city": "SPOKANE", "loc": [ -117.380972, 47.654741 ], "pop": 17424, "state": "WA" }, { "_id": "99203", "city": "SPOKANE", "loc": [ -117.404121, 47.629443 ], "pop": 20454, "state": "WA" }, { "_id": "99204", "city": "SPOKANE", "loc": [ -117.471896, 47.640682 ], "pop": 24611, "state": "WA" }, { "_id": "99205", "city": "SPOKANE", "loc": [ -117.439912, 47.69641 ], "pop": 42032, "state": "WA" }, { "_id": "99206", "city": "SPOKANE", "loc": [ -117.258126, 47.649588 ], "pop": 29077, "state": "WA" }, { "_id": "99207", "city": "SPOKANE", "loc": [ -117.374565, 47.697712 ], "pop": 46237, "state": "WA" }, { "_id": "99208", "city": "SPOKANE", "loc": [ -117.435207, 47.737434 ], "pop": 27989, "state": "WA" }, { "_id": "99212", "city": "SPOKANE", "loc": [ -117.304853, 47.668598 ], "pop": 16771, "state": "WA" }, { "_id": "99216", "city": "SPOKANE", "loc": [ -117.219307, 47.663389 ], "pop": 18834, "state": "WA" }, { "_id": "99218", "city": "SPOKANE", "loc": [ -117.4146, 47.755648 ], "pop": 11902, "state": "WA" }, { "_id": "99223", "city": "SPOKANE", "loc": [ -117.362215, 47.61558 ], "pop": 19056, "state": "WA" }, { "_id": "99301", "city": "PASCO", "loc": [ -119.104387, 46.249183 ], "pop": 33988, "state": "WA" }, { "_id": "99320", "city": "BENTON CITY", "loc": [ -119.491349, 46.280624 ], "pop": 5047, "state": "WA" }, { "_id": "99321", "city": "BEVERLY", "loc": [ -119.912074, 46.848429 ], "pop": 315, "state": "WA" }, { "_id": "99322", "city": "BICKLETON", "loc": [ -120.104223, 45.959687 ], "pop": 329, "state": "WA" }, { "_id": "99324", "city": "COLLEGE PLACE", "loc": [ -118.385338, 46.045723 ], "pop": 6904, "state": "WA" }, { "_id": "99326", "city": "CONNELL", "loc": [ -118.85454, 46.66426 ], "pop": 2699, "state": "WA" }, { "_id": "99327", "city": "CUNNINGHAM", "loc": [ -119.107604, 46.757333 ], "pop": 511, "state": "WA" }, { "_id": "99328", "city": "DAYTON", "loc": [ -117.973791, 46.307459 ], "pop": 3373, "state": "WA" }, { "_id": "99330", "city": "ELTOPIA", "loc": [ -119.101333, 46.474996 ], "pop": 758, "state": "WA" }, { "_id": "99336", "city": "KENNEWICK", "loc": [ -119.167951, 46.210913 ], "pop": 33860, "state": "WA" }, { "_id": "99337", "city": "KENNEWICK", "loc": [ -119.138289, 46.181387 ], "pop": 25962, "state": "WA" }, { "_id": "99341", "city": "LIND", "loc": [ -118.706057, 46.955954 ], "pop": 1134, "state": "WA" }, { "_id": "99343", "city": "MESA", "loc": [ -119.137324, 46.578223 ], "pop": 2382, "state": "WA" }, { "_id": "99344", "city": "MATTAWA", "loc": [ -119.316405, 46.792518 ], "pop": 11812, "state": "WA" }, { "_id": "99345", "city": "PATERSON", "loc": [ -119.755873, 45.991139 ], "pop": 94, "state": "WA" }, { "_id": "99346", "city": "PLYMOUTH", "loc": [ -119.502998, 46.038184 ], "pop": 219, "state": "WA" }, { "_id": "99347", "city": "POMEROY", "loc": [ -117.599282, 46.469838 ], "pop": 2467, "state": "WA" }, { "_id": "99348", "city": "PRESCOTT", "loc": [ -118.409663, 46.353879 ], "pop": 638, "state": "WA" }, { "_id": "99350", "city": "PROSSER", "loc": [ -119.771014, 46.223183 ], "pop": 9714, "state": "WA" }, { "_id": "99352", "city": "RICHLAND", "loc": [ -119.289201, 46.283265 ], "pop": 37664, "state": "WA" }, { "_id": "99356", "city": "ROOSEVELT", "loc": [ -120.356611, 45.82962 ], "pop": 172, "state": "WA" }, { "_id": "99357", "city": "ROYAL CITY", "loc": [ -119.581473, 46.91557 ], "pop": 3388, "state": "WA" }, { "_id": "99360", "city": "LOWDEN", "loc": [ -118.655411, 46.04851 ], "pop": 1234, "state": "WA" }, { "_id": "99361", "city": "WAITSBURG", "loc": [ -118.144734, 46.269092 ], "pop": 2138, "state": "WA" }, { "_id": "99362", "city": "WALLA WALLA", "loc": [ -118.331544, 46.061373 ], "pop": 34993, "state": "WA" }, { "_id": "99371", "city": "WASHTUCNA", "loc": [ -118.286203, 46.820912 ], "pop": 625, "state": "WA" }, { "_id": "99401", "city": "ANATONE", "loc": [ -117.088316, 46.128466 ], "pop": 141, "state": "WA" }, { "_id": "99402", "city": "ASOTIN", "loc": [ -117.001548, 46.134318 ], "pop": 89, "state": "WA" }, { "_id": "99403", "city": "CLARKSTON", "loc": [ -117.064457, 46.394622 ], "pop": 17375, "state": "WA" }, { "_id": "99501", "city": "ANCHORAGE", "loc": [ -149.876077, 61.211571 ], "pop": 14436, "state": "AK" }, { "_id": "99502", "city": "ANCHORAGE", "loc": [ -150.093943, 61.096163 ], "pop": 15891, "state": "AK" }, { "_id": "99503", "city": "ANCHORAGE", "loc": [ -149.893844, 61.189953 ], "pop": 12534, "state": "AK" }, { "_id": "99504", "city": "ANCHORAGE", "loc": [ -149.74467, 61.203696 ], "pop": 32383, "state": "AK" }, { "_id": "99505", "city": "FORT RICHARDSON", "loc": [ -149.675454, 61.275256 ], "pop": 7979, "state": "AK" }, { "_id": "99506", "city": "ELMENDORF AFB", "loc": [ -149.812667, 61.251531 ], "pop": 7907, "state": "AK" }, { "_id": "99507", "city": "ANCHORAGE", "loc": [ -149.828912, 61.153543 ], "pop": 20128, "state": "AK" }, { "_id": "99508", "city": "ANCHORAGE", "loc": [ -149.810085, 61.205959 ], "pop": 29857, "state": "AK" }, { "_id": "99515", "city": "ANCHORAGE", "loc": [ -149.897401, 61.119381 ], "pop": 17094, "state": "AK" }, { "_id": "99516", "city": "ANCHORAGE", "loc": [ -149.779998, 61.10541 ], "pop": 18356, "state": "AK" }, { "_id": "99517", "city": "ANCHORAGE", "loc": [ -149.936111, 61.190136 ], "pop": 15192, "state": "AK" }, { "_id": "99518", "city": "ANCHORAGE", "loc": [ -149.886571, 61.154862 ], "pop": 8116, "state": "AK" }, { "_id": "99549", "city": "PORT HEIDEN", "loc": [ -158.566367, 56.964333 ], "pop": 119, "state": "AK" }, { "_id": "99551", "city": "AKIACHAK", "loc": [ -161.39233, 60.891854 ], "pop": 481, "state": "AK" }, { "_id": "99552", "city": "AKIAK", "loc": [ -161.199325, 60.890632 ], "pop": 285, "state": "AK" }, { "_id": "99553", "city": "AKUTAN", "loc": [ -165.785368, 54.143012 ], "pop": 589, "state": "AK" }, { "_id": "99554", "city": "ALAKANUK", "loc": [ -164.60228, 62.746967 ], "pop": 1186, "state": "AK" }, { "_id": "99555", "city": "ALEKNAGIK", "loc": [ -158.619882, 59.269688 ], "pop": 185, "state": "AK" }, { "_id": "99556", "city": "NIKOLAEVSK", "loc": [ -151.732933, 59.788818 ], "pop": 1698, "state": "AK" }, { "_id": "99557", "city": "CHUATHBALUK", "loc": [ -157.758502, 61.691648 ], "pop": 352, "state": "AK" }, { "_id": "99558", "city": "ANVIK", "loc": [ -160.130441, 62.830913 ], "pop": 296, "state": "AK" }, { "_id": "99559", "city": "ATMAUTLUAK", "loc": [ -161.824053, 60.832389 ], "pop": 7188, "state": "AK" }, { "_id": "99561", "city": "CHEFORNAK", "loc": [ -164.210294, 60.153746 ], "pop": 320, "state": "AK" }, { "_id": "99563", "city": "CHEVAK", "loc": [ -164.776457, 61.583982 ], "pop": 0, "state": "AK" }, { "_id": "99564", "city": "CHIGNIK", "loc": [ -158.415696, 56.301639 ], "pop": 188, "state": "AK" }, { "_id": "99565", "city": "CHIGNIK LAGOON", "loc": [ -158.673528, 56.251277 ], "pop": 186, "state": "AK" }, { "_id": "99567", "city": "CHUGIAK", "loc": [ -149.453736, 61.409802 ], "pop": 6910, "state": "AK" }, { "_id": "99568", "city": "CLAM GULCH", "loc": [ -151.422628, 60.201603 ], "pop": 133, "state": "AK" }, { "_id": "99569", "city": "CLARKS POINT", "loc": [ -158.451241, 58.84921 ], "pop": 68, "state": "AK" }, { "_id": "99571", "city": "NELSON LAGOON", "loc": [ -161.942941, 55.610952 ], "pop": 475, "state": "AK" }, { "_id": "99572", "city": "COOPER LANDING", "loc": [ -149.823514, 60.476692 ], "pop": 252, "state": "AK" }, { "_id": "99573", "city": "COPPER CENTER", "loc": [ -144.97793, 61.91581 ], "pop": 1389, "state": "AK" }, { "_id": "99574", "city": "CHENEGA BAY", "loc": [ -147.943316, 60.102558 ], "pop": 96, "state": "AK" }, { "_id": "99575", "city": "CROOKED CREEK", "loc": [ -158.002483, 61.818072 ], "pop": 1, "state": "AK" }, { "_id": "99576", "city": "KOLIGANEK", "loc": [ -158.973533, 59.059279 ], "pop": 2711, "state": "AK" }, { "_id": "99577", "city": "EAGLE RIVER", "loc": [ -149.508515, 61.311357 ], "pop": 18429, "state": "AK" }, { "_id": "99578", "city": "EEK", "loc": [ -162.032341, 60.215058 ], "pop": 254, "state": "AK" }, { "_id": "99579", "city": "EGEGIK", "loc": [ -157.342202, 58.206174 ], "pop": 122, "state": "AK" }, { "_id": "99580", "city": "EKWOK", "loc": [ -157.478211, 59.362792 ], "pop": 77, "state": "AK" }, { "_id": "99581", "city": "EMMONAK", "loc": [ -164.131298, 62.827404 ], "pop": 0, "state": "AK" }, { "_id": "99583", "city": "FALSE PASS", "loc": [ -163.436845, 54.841028 ], "pop": 68, "state": "AK" }, { "_id": "99585", "city": "MARSHALL", "loc": [ -161.7394, 61.837087 ], "pop": 530, "state": "AK" }, { "_id": "99586", "city": "SLANA", "loc": [ -143.568393, 62.654744 ], "pop": 394, "state": "AK" }, { "_id": "99588", "city": "GLENNALLEN", "loc": [ -145.661684, 62.103895 ], "pop": 1024, "state": "AK" }, { "_id": "99589", "city": "GOODNEWS BAY", "loc": [ -161.587146, 59.085008 ], "pop": 305, "state": "AK" }, { "_id": "99590", "city": "GRAYLING", "loc": [ -159.404907, 63.372013 ], "pop": 0, "state": "AK" }, { "_id": "99591", "city": "SAINT GEORGE ISL", "loc": [ -169.547257, 56.60324 ], "pop": 138, "state": "AK" }, { "_id": "99602", "city": "HOLY CROSS", "loc": [ -159.825092, 62.192584 ], "pop": 277, "state": "AK" }, { "_id": "99603", "city": "PORT GRAHAM", "loc": [ -151.462644, 59.665495 ], "pop": 8186, "state": "AK" }, { "_id": "99604", "city": "HOOPER BAY", "loc": [ -165.891045, 61.537157 ], "pop": 1443, "state": "AK" }, { "_id": "99606", "city": "KOKHANOK", "loc": [ -155.462556, 59.564836 ], "pop": 362, "state": "AK" }, { "_id": "99607", "city": "KALSKAG", "loc": [ -160.3261, 61.541006 ], "pop": 172, "state": "AK" }, { "_id": "99610", "city": "KASILOF", "loc": [ -151.28958, 60.316365 ], "pop": 963, "state": "AK" }, { "_id": "99611", "city": "KENAI", "loc": [ -151.254556, 60.614467 ], "pop": 10508, "state": "AK" }, { "_id": "99612", "city": "KING COVE", "loc": [ -162.305561, 55.062848 ], "pop": 451, "state": "AK" }, { "_id": "99613", "city": "IGIUGIG", "loc": [ -156.641603, 58.724264 ], "pop": 480, "state": "AK" }, { "_id": "99614", "city": "KIPNUK", "loc": [ -164.101013, 59.923204 ], "pop": 470, "state": "AK" }, { "_id": "99615", "city": "AKHIOK", "loc": [ -152.500169, 57.781967 ], "pop": 13309, "state": "AK" }, { "_id": "99620", "city": "KOTLIK", "loc": [ -163.554153, 63.029471 ], "pop": 462, "state": "AK" }, { "_id": "99621", "city": "KWETHLUK", "loc": [ -161.38849, 60.771814 ], "pop": 558, "state": "AK" }, { "_id": "99622", "city": "KWIGILLINGOK", "loc": [ -162.984938, 59.881022 ], "pop": 572, "state": "AK" }, { "_id": "99625", "city": "LEVELOCK", "loc": [ -154.976815, 59.371395 ], "pop": 204, "state": "AK" }, { "_id": "99626", "city": "LOWER KALSKAG", "loc": [ -160.359966, 61.51377 ], "pop": 291, "state": "AK" }, { "_id": "99627", "city": "MC GRATH", "loc": [ -155.585153, 62.967153 ], "pop": 618, "state": "AK" }, { "_id": "99628", "city": "MANOKOTAK", "loc": [ -158.989699, 59.009559 ], "pop": 385, "state": "AK" }, { "_id": "99630", "city": "MEKORYUK", "loc": [ -166.283583, 60.365679 ], "pop": 177, "state": "AK" }, { "_id": "99631", "city": "MOOSE PASS", "loc": [ -149.255911, 60.85852 ], "pop": 1649, "state": "AK" }, { "_id": "99632", "city": "MOUNTAIN VILLAGE", "loc": [ -163.883822, 62.158913 ], "pop": 788, "state": "AK" }, { "_id": "99633", "city": "NAKNEK", "loc": [ -156.705405, 58.885699 ], "pop": 0, "state": "AK" }, { "_id": "99634", "city": "NAPAKIAK", "loc": [ -161.738144, 60.663758 ], "pop": 328, "state": "AK" }, { "_id": "99636", "city": "NEW STUYAHOK", "loc": [ -157.297205, 59.593533 ], "pop": 586, "state": "AK" }, { "_id": "99638", "city": "NIKOLSKI", "loc": [ -168.788427, 52.988337 ], "pop": 42, "state": "AK" }, { "_id": "99639", "city": "NINILCHIK", "loc": [ -151.639604, 60.010833 ], "pop": 767, "state": "AK" }, { "_id": "99640", "city": "NONDALTON", "loc": [ -154.731675, 60.030837 ], "pop": 233, "state": "AK" }, { "_id": "99645", "city": "BUTTE", "loc": [ -149.065323, 61.613814 ], "pop": 12358, "state": "AK" }, { "_id": "99647", "city": "PEDRO BAY", "loc": [ -153.821856, 59.92238 ], "pop": 59, "state": "AK" }, { "_id": "99648", "city": "PERRYVILLE", "loc": [ -159.259333, 55.945289 ], "pop": 143, "state": "AK" }, { "_id": "99649", "city": "PILOT POINT", "loc": [ -157.449272, 57.595193 ], "pop": 63, "state": "AK" }, { "_id": "99650", "city": "PILOT STATION", "loc": [ -162.874716, 61.946159 ], "pop": 463, "state": "AK" }, { "_id": "99651", "city": "PLATINUM", "loc": [ -162.043201, 58.63364 ], "pop": 4, "state": "AK" }, { "_id": "99653", "city": "PORT ALSWORTH", "loc": [ -154.433803, 60.636416 ], "pop": 7, "state": "AK" }, { "_id": "99654", "city": "WASILLA", "loc": [ -149.395875, 61.592349 ], "pop": 10404, "state": "AK" }, { "_id": "99655", "city": "QUINHAGAK", "loc": [ -161.874938, 59.738057 ], "pop": 501, "state": "AK" }, { "_id": "99656", "city": "RED DEVIL", "loc": [ -157.195969, 61.735389 ], "pop": 159, "state": "AK" }, { "_id": "99657", "city": "RUSSIAN MISSION", "loc": [ -161.558413, 61.591302 ], "pop": 0, "state": "AK" }, { "_id": "99658", "city": "SAINT MARYS", "loc": [ -163.205263, 62.054106 ], "pop": 576, "state": "AK" }, { "_id": "99659", "city": "SAINT MICHAEL", "loc": [ -162.109141, 63.47759 ], "pop": 295, "state": "AK" }, { "_id": "99660", "city": "SAINT PAUL ISLAN", "loc": [ -170.293408, 57.178697 ], "pop": 763, "state": "AK" }, { "_id": "99661", "city": "SAND POINT", "loc": [ -160.491435, 55.319236 ], "pop": 881, "state": "AK" }, { "_id": "99662", "city": "SCAMMON BAY", "loc": [ -165.581945, 61.845019 ], "pop": 343, "state": "AK" }, { "_id": "99664", "city": "SEWARD", "loc": [ -149.39849, 60.132874 ], "pop": 3937, "state": "AK" }, { "_id": "99665", "city": "SHAGELUK", "loc": [ -159.52816, 62.661092 ], "pop": 139, "state": "AK" }, { "_id": "99668", "city": "SLEETMUTE", "loc": [ -157.118284, 61.634555 ], "pop": 0, "state": "AK" }, { "_id": "99669", "city": "SOLDOTNA", "loc": [ -151.13582, 60.481778 ], "pop": 9825, "state": "AK" }, { "_id": "99670", "city": "SOUTH NAKNEK", "loc": [ -156.850289, 58.736221 ], "pop": 929, "state": "AK" }, { "_id": "99671", "city": "STEBBINS", "loc": [ -162.227355, 63.478468 ], "pop": 400, "state": "AK" }, { "_id": "99672", "city": "STERLING", "loc": [ -150.849792, 60.520373 ], "pop": 3814, "state": "AK" }, { "_id": "99676", "city": "TALKEETNA", "loc": [ -150.110097, 62.260516 ], "pop": 1420, "state": "AK" }, { "_id": "99679", "city": "TULUKSAK", "loc": [ -160.938924, 61.108848 ], "pop": 358, "state": "AK" }, { "_id": "99681", "city": "TUNUNAK", "loc": [ -165.097464, 60.539322 ], "pop": 889, "state": "AK" }, { "_id": "99682", "city": "TYONEK", "loc": [ -151.348495, 61.117929 ], "pop": 277, "state": "AK" }, { "_id": "99683", "city": "TRAPPER CREEK", "loc": [ -150.284455, 61.441361 ], "pop": 20, "state": "AK" }, { "_id": "99684", "city": "UNALAKLEET", "loc": [ -160.788365, 63.883478 ], "pop": 716, "state": "AK" }, { "_id": "99685", "city": "UNALASKA", "loc": [ -166.519855, 53.887114 ], "pop": 3089, "state": "AK" }, { "_id": "99686", "city": "VALDEZ", "loc": [ -146.195628, 60.895044 ], "pop": 7049, "state": "AK" }, { "_id": "99687", "city": "WASILLA", "loc": [ -149.533003, 61.578032 ], "pop": 14215, "state": "AK" }, { "_id": "99688", "city": "WILLOW", "loc": [ -150.188891, 61.771511 ], "pop": 1237, "state": "AK" }, { "_id": "99689", "city": "YAKUTAT", "loc": [ -139.778858, 59.620211 ], "pop": 705, "state": "AK" }, { "_id": "99691", "city": "NIKOLAI", "loc": [ -154.381247, 63.001603 ], "pop": 109, "state": "AK" }, { "_id": "99692", "city": "DUTCH HARBOR", "loc": [ -167.510656, 53.362757 ], "pop": 3, "state": "AK" }, { "_id": "99701", "city": "COLDFOOT", "loc": [ -147.710431, 64.840238 ], "pop": 19316, "state": "AK" }, { "_id": "99702", "city": "EIELSON AFB", "loc": [ -147.08051, 64.67352 ], "pop": 5266, "state": "AK" }, { "_id": "99703", "city": "FORT WAINWRIGHT", "loc": [ -147.655673, 64.82830300000001 ], "pop": 6238, "state": "AK" }, { "_id": "99704", "city": "CLEAR", "loc": [ -149.139885, 64.418121 ], "pop": 440, "state": "AK" }, { "_id": "99705", "city": "NORTH POLE", "loc": [ -147.369353, 64.78049 ], "pop": 14672, "state": "AK" }, { "_id": "99709", "city": "FAIRBANKS", "loc": [ -147.846917, 64.85437 ], "pop": 23238, "state": "AK" }, { "_id": "99712", "city": "FAIRBANKS", "loc": [ -147.510479, 64.91087899999999 ], "pop": 8141, "state": "AK" }, { "_id": "99714", "city": "SALCHA", "loc": [ -146.952974, 64.50905 ], "pop": 890, "state": "AK" }, { "_id": "99720", "city": "ALLAKAKET", "loc": [ -152.712155, 66.54319700000001 ], "pop": 170, "state": "AK" }, { "_id": "99721", "city": "ANAKTUVUK PASS", "loc": [ -151.679005, 68.11878 ], "pop": 260, "state": "AK" }, { "_id": "99722", "city": "ARCTIC VILLAGE", "loc": [ -145.423115, 68.077395 ], "pop": 107, "state": "AK" }, { "_id": "99723", "city": "BARROW", "loc": [ -156.817409, 71.23463700000001 ], "pop": 3696, "state": "AK" }, { "_id": "99724", "city": "BEAVER", "loc": [ -147.279803, 66.33883 ], "pop": 103, "state": "AK" }, { "_id": "99726", "city": "BETTLES FIELD", "loc": [ -151.062414, 67.100495 ], "pop": 156, "state": "AK" }, { "_id": "99727", "city": "BUCKLAND", "loc": [ -161.131676, 65.98105200000001 ], "pop": 318, "state": "AK" }, { "_id": "99729", "city": "CANTWELL", "loc": [ -148.89735, 63.395458 ], "pop": 210, "state": "AK" }, { "_id": "99730", "city": "CENTRAL", "loc": [ -144.74886, 65.468058 ], "pop": 107, "state": "AK" }, { "_id": "99733", "city": "CIRCLE", "loc": [ -144.08262, 65.82454199999999 ], "pop": 73, "state": "AK" }, { "_id": "99734", "city": "PRUDHOE BAY", "loc": [ -148.559636, 70.07005700000001 ], "pop": 153, "state": "AK" }, { "_id": "99736", "city": "DEERING", "loc": [ -162.711951, 66.062265 ], "pop": 167, "state": "AK" }, { "_id": "99737", "city": "DOT LAKE", "loc": [ -145.613611, 64.005426 ], "pop": 4111, "state": "AK" }, { "_id": "99739", "city": "ELIM", "loc": [ -162.260371, 64.621662 ], "pop": 264, "state": "AK" }, { "_id": "99740", "city": "FORT YUKON", "loc": [ -145.306439, 66.52074399999999 ], "pop": 662, "state": "AK" }, { "_id": "99741", "city": "GALENA", "loc": [ -156.797701, 64.760784 ], "pop": 847, "state": "AK" }, { "_id": "99742", "city": "GAMBELL", "loc": [ -171.701685, 63.776555 ], "pop": 525, "state": "AK" }, { "_id": "99743", "city": "HEALY", "loc": [ -149.011128, 63.917123 ], "pop": 1057, "state": "AK" }, { "_id": "99744", "city": "ANDERSON", "loc": [ -149.1718, 64.300693 ], "pop": 300, "state": "AK" }, { "_id": "99745", "city": "HUGHES", "loc": [ -154.26443, 66.038246 ], "pop": 64, "state": "AK" }, { "_id": "99746", "city": "HUSLIA", "loc": [ -156.291976, 65.68991800000001 ], "pop": 207, "state": "AK" }, { "_id": "99747", "city": "KAKTOVIK", "loc": [ -143.631329, 70.042889 ], "pop": 245, "state": "AK" }, { "_id": "99748", "city": "KALTAG", "loc": [ -158.724251, 64.33045199999999 ], "pop": 240, "state": "AK" }, { "_id": "99749", "city": "KIANA", "loc": [ -158.152204, 67.18026 ], "pop": 349, "state": "AK" }, { "_id": "99750", "city": "KIVALINA", "loc": [ -163.733617, 67.665859 ], "pop": 689, "state": "AK" }, { "_id": "99751", "city": "KOBUK", "loc": [ -157.066864, 66.91225300000001 ], "pop": 306, "state": "AK" }, { "_id": "99752", "city": "KOTZEBUE", "loc": [ -162.126493, 66.846459 ], "pop": 3347, "state": "AK" }, { "_id": "99753", "city": "KOYUK", "loc": [ -161.149957, 64.931668 ], "pop": 231, "state": "AK" }, { "_id": "99755", "city": "DENALI NATIONAL", "loc": [ -149.539532, 63.516075 ], "pop": 27, "state": "AK" }, { "_id": "99756", "city": "MANLEY HOT SPRIN", "loc": [ -150.573267, 65.02058 ], "pop": 122, "state": "AK" }, { "_id": "99757", "city": "LAKE MINCHUMINA", "loc": [ -152.430081, 63.903884 ], "pop": 32, "state": "AK" }, { "_id": "99758", "city": "MINTO", "loc": [ -149.691186, 65.05839899999999 ], "pop": 228, "state": "AK" }, { "_id": "99759", "city": "POINT LAY", "loc": [ -162.906148, 69.705626 ], "pop": 139, "state": "AK" }, { "_id": "99760", "city": "NENANA", "loc": [ -149.086744, 64.55765599999999 ], "pop": 393, "state": "AK" }, { "_id": "99761", "city": "NOATAK", "loc": [ -160.509453, 66.97553000000001 ], "pop": 395, "state": "AK" }, { "_id": "99762", "city": "GOLOVIN", "loc": [ -165.310667, 64.505775 ], "pop": 3706, "state": "AK" }, { "_id": "99763", "city": "NOORVIK", "loc": [ -161.044132, 66.836353 ], "pop": 534, "state": "AK" }, { "_id": "99765", "city": "NULATO", "loc": [ -157.991353, 64.778024 ], "pop": 492, "state": "AK" }, { "_id": "99766", "city": "POINT HOPE", "loc": [ -166.72618, 68.31205799999999 ], "pop": 640, "state": "AK" }, { "_id": "99767", "city": "RAMPART", "loc": [ -150.011201, 65.383627 ], "pop": 68, "state": "AK" }, { "_id": "99768", "city": "RUBY", "loc": [ -155.503872, 64.720062 ], "pop": 172, "state": "AK" }, { "_id": "99769", "city": "SAVOONGA", "loc": [ -170.470908, 63.679737 ], "pop": 519, "state": "AK" }, { "_id": "99770", "city": "SELAWIK", "loc": [ -158.534287, 65.713537 ], "pop": 0, "state": "AK" }, { "_id": "99771", "city": "SHAKTOOLIK", "loc": [ -161.174589, 64.37549799999999 ], "pop": 183, "state": "AK" }, { "_id": "99772", "city": "SHISHMAREF", "loc": [ -166.137276, 66.23056200000001 ], "pop": 456, "state": "AK" }, { "_id": "99773", "city": "SHUNGNAK", "loc": [ -157.613496, 66.958141 ], "pop": 0, "state": "AK" }, { "_id": "99774", "city": "STEVENS VILLAGE", "loc": [ -149.118286, 65.99589400000001 ], "pop": 110, "state": "AK" }, { "_id": "99777", "city": "TANANA", "loc": [ -152.103747, 65.15648299999999 ], "pop": 345, "state": "AK" }, { "_id": "99778", "city": "TELLER", "loc": [ -166.3833, 65.24016399999999 ], "pop": 260, "state": "AK" }, { "_id": "99780", "city": "BORDER", "loc": [ -142.523046, 63.435022 ], "pop": 1805, "state": "AK" }, { "_id": "99781", "city": "VENETIE", "loc": [ -146.413723, 67.010446 ], "pop": 184, "state": "AK" }, { "_id": "99782", "city": "WAINWRIGHT", "loc": [ -160.012532, 70.620064 ], "pop": 492, "state": "AK" }, { "_id": "99783", "city": "WALES", "loc": [ -168.520521, 65.68821199999999 ], "pop": 341, "state": "AK" }, { "_id": "99784", "city": "WHITE MOUNTAIN", "loc": [ -163.42185, 64.702791 ], "pop": 194, "state": "AK" }, { "_id": "99785", "city": "BREVIG MISSION", "loc": [ -166.478578, 65.334187 ], "pop": 198, "state": "AK" }, { "_id": "99786", "city": "AMBLER", "loc": [ -156.455652, 67.46951 ], "pop": 8, "state": "AK" }, { "_id": "99788", "city": "CHALKYITSIK", "loc": [ -143.638121, 66.71899999999999 ], "pop": 99, "state": "AK" }, { "_id": "99789", "city": "NUIQSUT", "loc": [ -150.997119, 70.19273699999999 ], "pop": 354, "state": "AK" }, { "_id": "99801", "city": "JUNEAU", "loc": [ -134.529429, 58.362767 ], "pop": 24947, "state": "AK" }, { "_id": "99820", "city": "ANGOON", "loc": [ -134.371052, 57.569832 ], "pop": 1002, "state": "AK" }, { "_id": "99824", "city": "DOUGLAS", "loc": [ -134.395041, 58.275597 ], "pop": 1802, "state": "AK" }, { "_id": "99826", "city": "GUSTAVUS", "loc": [ -135.761542, 58.42835 ], "pop": 258, "state": "AK" }, { "_id": "99827", "city": "HAINES", "loc": [ -135.542032, 59.251886 ], "pop": 2246, "state": "AK" }, { "_id": "99829", "city": "HOONAH", "loc": [ -135.558435, 58.032237 ], "pop": 1670, "state": "AK" }, { "_id": "99833", "city": "PETERSBURG", "loc": [ -133.160683, 56.827134 ], "pop": 4253, "state": "AK" }, { "_id": "99835", "city": "SITKA", "loc": [ -135.316569, 57.051436 ], "pop": 8638, "state": "AK" }, { "_id": "99840", "city": "SKAGWAY", "loc": [ -135.301794, 59.468471 ], "pop": 692, "state": "AK" }, { "_id": "99901", "city": "KETCHIKAN", "loc": [ -131.683175, 55.372028 ], "pop": 13886, "state": "AK" }, { "_id": "99919", "city": "THORNE BAY", "loc": [ -132.513815, 55.66086 ], "pop": 744, "state": "AK" }, { "_id": "99921", "city": "CRAIG", "loc": [ -133.117081, 55.47317 ], "pop": 1398, "state": "AK" }, { "_id": "99922", "city": "HYDABURG", "loc": [ -132.633175, 55.137406 ], "pop": 891, "state": "AK" }, { "_id": "99923", "city": "HYDER", "loc": [ -130.124915, 55.925867 ], "pop": 116, "state": "AK" }, { "_id": "99925", "city": "KLAWOCK", "loc": [ -133.055503, 55.552611 ], "pop": 851, "state": "AK" }, { "_id": "99926", "city": "METLAKATLA", "loc": [ -131.579001, 55.121491 ], "pop": 1469, "state": "AK" }, { "_id": "99927", "city": "POINT BAKER", "loc": [ -133.376372, 56.307858 ], "pop": 426, "state": "AK" }, { "_id": "99929", "city": "WRANGELL", "loc": [ -132.352918, 56.433524 ], "pop": 2573, "state": "AK" }, { "_id": "99950", "city": "KETCHIKAN", "loc": [ -133.18479, 55.942471 ], "pop": 422, "state": "AK" } ] ================================================ FILE: LiteDB.Tests/Utils/AssertEx.cs ================================================ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using FluentAssertions; namespace LiteDB.Tests { /// /// Extension and additional methods for debug /// public static class AssertEx { [DebuggerHidden] public static void ArrayEqual(T[] first, T[] second, bool sort) where T : IEqualityComparer { first.Length.Should().Be(second.Length, "because arrays with diferent item count"); if (sort) { first = first.OrderBy(x => x).ToArray(); second = second.OrderBy(x => x).ToArray(); } var index = 0; foreach (var zip in first.Zip(second, (First, Second) => new {First, Second})) { var r = zip.First.Equals(zip.First, zip.Second); r.Should().BeTrue($"Index [{index}]: values are not same: `{zip.First}` != `{zip.Second}`"); index++; } } //[DebuggerHidden] public static void ExpectValue(this BsonValue value, BsonValue expect) { value.Should().Be(expect); } //[DebuggerHidden] public static void ExpectValue(this T value, T expect) { value.Should().Be(expect); } //[DebuggerHidden] public static void ExpectArray(this BsonValue value, params BsonValue[] args) { value.Should().Be(new BsonArray(args)); } //[DebuggerHidden] public static void ExpectJson(this BsonValue value, string expectJson) { value.Should().Be((JsonSerializer.Deserialize(expectJson))); } //[DebuggerHidden] public static void ExpectValues(this IEnumerable values, params BsonValue[] expectValues) { values.ToArray().Should().Equal(expectValues); } [DebuggerHidden] public static void ExpectValues(this IEnumerable values, params T[] expectValues) { values.ToArray().Should().Equal(expectValues); } [DebuggerHidden] public static void ExpectCount(this IEnumerable values, int count) { count.Should().Be(count); } } } ================================================ FILE: LiteDB.Tests/Utils/DataGen.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; namespace LiteDB.Tests { public class DataGen { /// /// Return fixed 1000 Person instances /// public static IEnumerable Person() { using (var stream = typeof(DataGen).Assembly.GetManifestResourceStream("LiteDB.Tests.Resources.person.json")) { var reader = new StreamReader(stream); var docs = JsonSerializer.DeserializeArray(reader).Select(x => x.AsDocument); var id = 0; foreach (var doc in docs) { yield return new Person { Id = ++id, Name = doc["name"], Age = doc["age"], Phones = doc["phone"].AsString.Split('-'), Email = doc["email"], Date = doc["date"], Active = doc["active"], Address = new Address { Street = doc["street"], City = doc["city"], State = doc["state"] } }; } } } /// /// Return Person instances /// public static IEnumerable Person(int start, int end) { foreach (var p in Person().Skip(start - 1).Take(end - start + 1)) { yield return p; } } /// /// Return fixed 29353 Zips instances /// public static IEnumerable Zip() { using (var stream = typeof(DataGen).Assembly.GetManifestResourceStream("LiteDB.Tests.Resources.zip.json")) { var reader = new StreamReader(stream); var s = reader.ReadToEnd(); return JsonSerializer.DeserializeArray(s) .Select(x => x.AsDocument) .Select(x => BsonMapper.Global.ToObject(x)); } } } } ================================================ FILE: LiteDB.Tests/Utils/Faker.Names.cs ================================================ internal static partial class Faker { private static string[] _maleNames = { "Adeildo", "Adailton", "Abel", "Adelar", "Adelino", "Abilio", "Adilson", "Adenildo", "Adenir", "Adenilson", "Adenilton", "Adevaldo", "Abner", "Adir", "Adair", "Abimael", "Abraao", "Adrian", "Adson", "Acacio", "Adelso", "Adalto", "Adalberto", "Adolfo", "Adelmo", "Adao", "Adauto", "Ademar", "Ademilson", "Ademilton", "Ademir", "Admilson", "Adonias", "Adriano", "Adriel", "Aecio", "Eder", "Edio", "Edson", "Elcio", "Aldo", "Euler", "Eli", "Helio", "Luiz", "Alison", "Alisson", "Eliton", "Elmo", "Elso", "Elson", "Ailton", "Eron", "Ezio", "Everton", "Afonso", "Afranio", "Agenor", "Aguinaldo", "Agnaldo", "Agostinho", "Iago", "Alan", "Elder", "Airton", "Laecio", "Eliel", "Elielson", "Laercio", "Laerte", "Elielton", "Elian", "Elias", "Alaor", "Aldair", "Aldeci", "Aldir", "Aldemar", "Aldemir", "Aldenir", "Alberi", "Alberico", "Albert", "Albertino", "Alberto", "Albino", "Alcir", "Alceu", "Alcides", "Alcimar", "Alcindo", "Alcino", "Leandro", "Alexandre", "Alessandro", "Alecsandro", "Alef", "Elimar", "Elenildo", "Alencar", "Lenilson", "Elenilton", "Heleno", "Leomar", "Leonidas", "Leoni", "Alesandro", "Alexander", "Alexsandro", "Levi", "Alex", "Alexsander", "Alfredo", "Algusto", "Eliandro", "Lidio", "Alicio", "Eliezer", "Alife", "Olimpio", "Elinaldo", "Lindomar", "Lino", "Eliomar", "Alipio", "Alirio", "Elisandro", "Aluisio", "Elismar", "Elivaldo", "Elivan", "Elivelton", "Eliseu", "Allan", "Allison", "Almir", "Almiro", "Eloi", "Aloisio", "Alonso", "Altair", "Altamir", "Altamiro", "Altino", "Luan", "Luciano", "Lucio", "Alvaro", "Elves", "Alvino", "Elvio", "Elvis", "Amadeu", "Amado", "Amilton", "Amarildo", "Amaro", "Amauri", "Americo", "Anilson", "Anilton", "Anildo", "Ananias", "Anastacio", "Ancelmo", "Anderson", "Andeson", "Andre", "Andrei", "Andrew", "Anesio", "Angelo", "Anibal", "Anisio", "Antoni", "Anselmo", "Antenor", "Antonio", "Antoniel", "Antonino", "Aparecido", "Aquiles", "Ariel", "Aroldo", "Arilson", "Arlei", "Argemiro", "Ari", "Ariovaldo", "Aristeu", "Aristides", "Arivaldo", "Arlindo", "Armando", "Armindo", "Arnaldo", "Arno", "Artur", "Assis", "Ataide", "Atila", "Augusto", "Augustinho", "Aurelio", "Avelino", "Baltazar", "Bartolomeu", "Dejair", "Dalton", "Dalmir", "Belmiro", "Dilson", "Denilson", "Dener", "Benedito", "Denir", "Benicio", "Denis", "Denison", "Denivaldo", "Benjamin", "Bento", "Derli", "Bernado", "Bernardo", "Braian", "Breno", "Diomar", "Dione", "Bryan", "Braulio", "Braz", "Brendo", "Bruno", "Cesar", "Caetano", "Kaue", "Kaik", "Kaike", "Kayky", "Celson", "Caio", "Caique", "Cairo", "Cleber", "Celio", "Cleison", "Cleiton", "Kelvin", "Camilo", "Candido", "Carlito", "Carlo", "Carlos", "Cassiano", "Cassio", "Caua", "Kauan", "Clesio", "Cleito", "Celso", "Charles", "Christian", "Cicero", "Ciro", "Clebson", "Cleilton", "Cleilson", "Clayton", "Claudir", "Claudio", "Claudecir", "Claudemir", "Claudenir", "Claudinei", "Claudino", "Claudiomar", "Claudiomiro", "Claudionor", "Cleberson", "Clecio", "Cleidson", "Clemente", "Cleomar", "Cleverson", "Cleverton", "Clodoaldo", "Cloves", "Clovis", "Cosme", "Cosmo", "Cristian", "Cristiano", "Crispim", "Cristofer", "Cristovao", "Custodio", "Decio", "Delcio", "Delio", "Dalmo", "Damiao", "Daniel", "Danilo", "Darci", "Darlei", "Dario", "Darlan", "Davi", "David", "Davison", "Dijalma", "Deivid", "Deivide", "Deivison", "Demetrio", "Deusdete", "Deusimar", "Devair", "Devanir", "Devid", "Diego", "Diogo", "Dionata", "Dionatan", "Diones", "Dionei", "Douglas", "Dimas", "Diogenes", "Dionisio", "Dirceu", "Dirlei", "Divino", "Djalma", "Doglas", "Domingo", "Domingos", "Donato", "Donizete", "Dorival", "Durval", "Edenilson", "Ederson", "Hebert", "Edison", "Hector", "Edilson", "Edilton", "Edcarlos", "Edemar", "Edesio", "Edevaldo", "Edgar", "Edicarlos", "Edigar", "Edimar", "Edimilson", "Edinilson", "Edinaldo", "Edinei", "Edivaldo", "Edivan", "Edmar", "Edmilson", "Edmundo", "Ednilson", "Ednaldo", "Ednei", "Edno", "Eduardo", "Edvaldo", "Edvan", "Egidio", "Igor", "Inaldo", "Heitor", "Hilario", "Leo", "Leonildo", "Leonardo", "Leonel", "Olivio", "Emanuel", "Emerson", "Emidio", "Emilio", "Enilson", "Enio", "Enivaldo", "Enzo", "Enoque", "Henry", "Henrique", "Eraldo", "Erasmo", "Herbert", "Ercilio", "Hercules", "Eric", "Erike", "Erick", "Erico", "Ericson", "Erli", "Erinaldo", "Erique", "Erison", "Erisvaldo", "Erivaldo", "Erivelton", "Erivan", "Hermes", "Herminio", "Ernandes", "Ernando", "Ernane", "Ernani", "Ernesto", "Eronildo", "Esdras", "Ezequias", "Ezequiel", "Esmael", "Esmeraldo", "Espedito", "Estevan", "Estevao", "Eudes", "Euclides", "Eugenio", "Ulisses", "Eurico", "Euripedes", "Euzebio", "Evaldo", "Evanildo", "Evandro", "Evangelista", "Evaristo", "Evilasio", "Everaldo", "Everson", "Ewerton", "Expedito", "Fabiano", "Fabio", "Fabricio", "Fagner", "Fausto", "Fco", "Feliciano", "Felipe", "Filipi", "Felix", "Fellipe", "Fernando", "Francisco", "Firmino", "Flaviano", "Flavio", "Floriano", "Florisvaldo", "Fracisco", "Frank", "Franciel", "Franklin", "Francico", "Francimar", "Francinaldo", "Francinei", "Francis", "Franciso", "Francivaldo", "Franisco", "Franscisco", "Fransisco", "Fred", "Frederico", "Fredson", "Jadir", "Gabriel", "Jader", "Jadiel", "Joel", "Jair", "Jairo", "Jaison", "Gilberto", "Gileno", "Juliano", "Julho", "Gilvan", "Jamil", "Jandir", "Jarbas", "Jardel", "Gaspar", "Gleison", "Gleisson", "Jean", "Jeanderson", "Jedson", "Jeferson", "Jefersson", "Jefeson", "Gildo", "Gilmar", "Gilso", "Gilson", "Jailton", "Geison", "Julio", "Genildo", "Genilson", "Genesio", "Genival", "Genivaldo", "Gentil", "George", "Jeova", "Geovan", "Geovane", "Geovani", "Geraldo", "Jeremias", "Jerferson", "Jerfeson", "Jerry", "Germano", "Geronimo", "Gerson", "Gervasio", "Jesiel", "Jesse", "Jesuino", "Jesus", "Getulio", "Guilherme", "Gustavo", "Gian", "Guido", "Gildasio", "Julian", "Giovane", "Giovani", "Givaldo", "Givanildo", "Gledson", "Glauber", "Glaucio", "Glauco", "Gleidson", "Julimar", "Jobson", "Goncalo", "Jorge", "Gregori", "Gregorio", "Gutemberg", "Ian", "Icaro", "Iran", "Iranildo", "Ismael", "Israel", "Italo", "Itamar", "Iure", "Yuri", "Ivaldo", "Ivan", "Ivair", "Ivo", "Odilon", "Omar", "Homero", "Onofre", "Horacio", "Orivaldo", "Orlando", "Orlei", "Oseias", "Osmar", "Otavio", "Oziel", "Osorio", "Uanderson", "Ubirajara", "Ubiratan", "Hudson", "Ueslei", "Hugo", "Humberto", "Lauro", "Inacio", "Irineu", "Isac", "Isael", "Isaias", "Isaque", "Izaquiel", "Ismar", "Ivanildo", "Ivanilson", "Ivonaldo", "Jadson", "Jaci", "Jacinto", "Jackson", "Jaco", "Jacson", "Jadilson", "Jaime", "Jamerson", "James", "Janiel", "Janilson", "Janderson", "Janio", "Januario", "Jason", "Joao", "John", "Jonas", "Jonata", "Jonatan", "Jonatas", "Jhone", "Jones", "Jhony", "Jonilson", "Jordan", "Jose", "Juan", "Junior", "Joab", "Joabe", "Joacir", "Joaquim", "Joares", "Jocelio", "Jocimar", "Josiel", "Josafa", "Joseildo", "Joseilton", "Josimar", "Joselio", "Joselito", "Josemar", "Josemir", "Josenildo", "Josenilson", "Josenilton", "Josevaldo", "Josias", "Josinaldo", "Josival", "Josivaldo", "Josivan", "Josue", "Juarez", "Jucelino", "Jucelio", "Jucimar", "Jurandir", "Juscelino", "Justino", "Juvenal", "Kennedy", "Kevin", "Keven", "Lazaro", "Laudelino", "Lauri", "Laurindo", "Leonan", "Leopoldo", "Lincon", "Lorran", "Lorenco", "Lorenzo", "Lorival", "Lorivaldo", "Lourenco", "Lourival", "Luca", "Lucas", "Lucca", "Lucinei", "Lucivaldo", "Madson", "Maciel", "Macelo", "Maxuel", "Macio", "Mailson", "Milton", "Magno", "Maik", "Maike", "Maico", "Maicon", "Manoel", "Marciel", "Marcelino", "Marcelo", "Marcilio", "Marciano", "Marcio", "Marco", "Marcondes", "Marcone", "Marconi", "Marcos", "Marcus", "Mariano", "Marlon", "Marinaldo", "Marino", "Mario", "Marivaldo", "Martin", "Martinho", "Martins", "Mateus", "Matias", "Maurilio", "Mauri", "Mauricio", "Mauro", "Max", "Maxsuel", "Maxwell", "Messias", "Micael", "Michel", "Miguel", "Miqueias", "Misael", "Moacir", "Moiseis", "Moises", "Murilo", "Nadson", "Noel", "Nildo", "Nelio", "Nelson", "Nilton", "Nilo", "Nelso", "Narciso", "Nazareno", "Natal", "Natalicio", "Natalino", "Natan", "Natanael", "Nei", "Nivaldo", "Neri", "Nestor", "Newton", "Nicolas", "Nicolau", "Noe", "Nonato", "Norberto", "Odair", "Olavo", "Oliveira", "Oscar", "Oseas", "Osias", "Osni", "Osvaldo", "Oswaldo", "Otacilio", "Otaviano", "Otoniel", "Pablo", "Paulino", "Paulo", "Patrik", "Patricio", "Patrick", "Pedro", "Peterson", "Pierre", "Pietro", "Plinio", "Raul", "Railson", "Railton", "Rene", "Rafael", "Rai", "Raian", "Railan", "Rildo", "Rian", "Raimundo", "Ralf", "Ramiro", "Ramon", "Rangel", "Reginaldo", "Regis", "Rui", "Reinaldo", "Reinan", "Rivaldo", "Renildo", "Renilson", "Renan", "Renato", "Robson", "Rodnei", "Rodolfo", "Rodrigo", "Roger", "Romulo", "Ronan", "Roni", "Ruan", "Ribamar", "Ricardo", "Richard", "Riquelme", "Roberio", "Robert", "Roberto", "Roberval", "Robison", "Rodinei", "Rogerio", "Romildo", "Romilson", "Romario", "Romero", "Romeu", "Roniel", "Ronaldo", "Ronilson", "Ronald", "Rone", "Ronivon", "Ronivaldo", "Roque", "Rosalino", "Rosalvo", "Rosenildo", "Rosinaldo", "Rosivaldo", "Rubem", "Rubens", "Rudimar", "Rudinei", "Sabino", "Sadi", "Saul", "Saulo", "Saimon", "Salatiel", "Selio", "Salomao", "Salvador", "Silvino", "Silvio", "Samuel", "Samir", "Sandoval", "Sandro", "Santiago", "Santo", "Santos", "Savio", "Sebastiao", "Zenildo", "Sergio", "Severino", "Sidinei", "Sidnei", "Silas", "Silvano", "Silverio", "Silvestre", "Simao", "Sinesio", "Sinval", "Sivaldo", "Tadeu", "Tiago", "Tales", "Talis", "Talisson", "Taylor", "Tainan", "Tulio", "Talison", "Talles", "Telmo", "Tarcisio", "Tauan", "Theo", "Teodoro", "Tomas", "Toni", "Vilson", "Vagner", "Valber", "Valdo", "Valdemir", "Valdenir", "Valderi", "Valdir", "Valcir", "Valdeci", "Valdeli", "Valdemar", "Valdemiro", "Valdenor", "Valdevino", "Valdinei", "Valdivino", "Valdomiro", "Valentim", "Valerio", "Valmir", "Valmor", "Volnei", "Valter", "Vanilson", "Vanildo", "Vander", "Vandir", "Vanderlan", "Vanderlei", "Vanderson", "Vando", "Venancio", "Vicente", "Victor", "Vinicio", "Vinicios", "Vinicius", "Virgilio", "Vital", "Vitor", "Vitorio", "Vivaldo", "Vladimir", "Washington", "Wagner", "Wilson", "Wilton", "Walace", "Wilhan", "Welder", "Waldir", "Waldemar", "Welington", "Welinton", "Walison", "Walisson", "Weliton", "Wilker", "Wallace", "Willan", "Willy", "Wellington", "Wallison", "Welliton", "Walmir", "Walter", "Wander", "Wanderlei", "Wanderson", "Warley", "Weber", "Wederson", "Wedson", "Weligton", "Willian", "Welligton", "Wellinton", "Wemerson", "Wendel", "Wender", "Wendell", "Wenderson", "Wesley", "Weslen", "Weslley", "Weverton", "Wilian", "Willians", "Zacarias", "Zaqueu" }; private static string[] _femaleNames = { "Aline", "Adelia", "Adelina", "Adelma", "Abigail", "Adalgisa", "Adelaide", "Adria", "Adriana", "Adriane", "Adriele", "Adrieli", "Edi", "Edna", "Eliane", "Elen", "Lia", "Eliana", "Elida", "Elita", "Ilma", "Erica", "Agata", "Agda", "Agnes", "Aida", "Aide", "Aila", "Alana", "Iolanda", "Elane", "Alani", "Ilka", "Ilda", "Ildete", "Leda", "Lene", "Leila", "Lili", "Elza", "Iana", "Iane", "Iara", "Laci", "Ladir", "Laiane", "Alaide", "Eliani", "Laisa", "Laise", "Lara", "Lauane", "Albertina", "Albina", "Alcilene", "Alcione", "Aldenora", "Lea", "Leandra", "Alessandra", "Leci", "Leia", "Leide", "Lidiana", "Lidiane", "Lina", "Luiza", "Luize", "Lilia", "Liliane", "Helena", "Leni", "Elenice", "Lenilda", "Lenira", "Lenise", "Elenita", "Alesandra", "Alexandrina", "Alexia", "Leticia", "Alexsandra", "Olga", "Liandra", "Laira", "Lidia", "Alice", "Alicia", "Eliene", "Eliete", "Ligia", "Lilian", "Olinda", "Alini", "Elisandra", "Elizane", "Elisangela", "Elizete", "Elisia", "Elissandra", "Elizabete", "Lisiane", "Leilane", "Ellen", "Almira", "Almerinda", "Eloa", "Heloisa", "Eloise", "Lorrane", "Alzenir", "Alzira", "Luana", "Luane", "Lucelia", "Luci", "Lucilene", "Lucimar", "Luma", "Luzia", "Luzinete", "Alvina", "Elvira", "Amelia", "Amanda", "Amara", "Ana", "Ane", "Anieli", "Analia", "Anelise", "Anair", "Analice", "Ananda", "Andrelina", "Andrea", "Andrieli", "Andreia", "Andriele", "Andreza", "Andressa", "Anny", "Anesia", "Angela", "Angelica", "Angelina", "Angelita", "Anisia", "Anita", "Antonia", "Antonieta", "Aparecida", "Araci", "Ariana", "Ariane", "Ariele", "Arlene", "Arlete", "Arlinda", "Arminda", "Augusta", "Aurea", "Aurilene", "Aurelina", "Aurora", "Avani", "Barbara", "Beatriz", "Delia", "Deli", "Deliane", "Deolinda", "Dalila", "Dilma", "Delmira", "Dilza", "Benedita", "Denise", "Berenice", "Bernadete", "Betania", "Bianca", "Brenda", "Diana", "Diane", "Dina", "Diva", "Brena", "Bruna", "Cacilda", "Keila", "Kelen", "Kaline", "Kailane", "Kele", "Cilene", "Kiara", "Cleide", "Keli", "Keliane", "Kelly", "Celina", "Celita", "Celma", "Camila", "Camile", "Camili", "Camilla", "Camille", "Camilly", "Candida", "Karen", "Carol", "Carla", "Karina", "Karine", "Carolaine", "Carolina", "Caroline", "Carmelita", "Carmem", "Cassia", "Cassiana", "Cassiane", "Catarina", "Katia", "Katiane", "Katiana", "Kauana", "Kauane", "Kauany", "Cecilia", "Celia", "Cleane", "Cleci", "Cleia", "Celeste", "Cleusa", "Clelia", "Kenia", "Kesia", "Kessia", "Chaiane", "Sheila", "Charlene", "Shirley", "Shirlene", "Cibele", "Cicera", "Clea", "Cintia", "Cirlei", "Cirlene", "Clara", "Clarice", "Clarissa", "Clarisse", "Claudete", "Claudia", "Claudenice", "Claudiana", "Claudiane", "Claudineia", "Cleidiane", "Clemilda", "Cleonice", "Cleunice", "Clotilde", "Conceicao", "Corina", "Cosma", "Cremilda", "Creuza", "Cristiane", "Crislaine", "Crislane", "Cristiana", "Cristina", "Cristine", "Dagmar", "Daiana", "Daiane", "Dara", "Daiani", "Dulce", "Dalva", "Dayse", "Delci", "Dulcineia", "Dalvina", "Damaris", "Damiana", "Daniela", "Dandara", "Danielle", "Danielly", "Daniele", "Danieli", "Daniella", "Danubia", "Darlene", "Debora", "Deise", "Deisiane", "Dejanira", "Deusa", "Dienifer", "Dinalva", "Dirce", "Divina", "Dolores", "Domingas", "Dora", "Doraci", "Doralice", "Durvalina", "Ediane", "Edilma", "Edilza", "Edila", "Edilaine", "Edilane", "Edilene", "Edileuza", "Edite", "Edina", "Edinalva", "Edineia", "Edineide", "Edith", "Edivania", "Edjane", "Ednalva", "Edneia", "Eduarda", "Edvania", "Efigenia", "Ida", "Ide", "Isa", "Iva", "Leonice", "Leonilda", "Leonor", "Leonora", "Eleuza", "Liduina", "Liliana", "Lindalva", "Lindinalva", "Elizabeth", "Elizabeti", "Elisama", "Elivania", "Livia", "Lorraine", "Luara", "Lucia", "Luciana", "Luciane", "Luciene", "Luziane", "Luzimar", "Emanuela", "Emanuele", "Emanuelle", "Emanuelly", "Emanueli", "Emile", "Emily", "Emilly", "Emilia", "Enilda", "Enedina", "Eni", "Ercilia", "Erminia", "Ernestina", "Erondina", "Esmeralda", "Estefane", "Estefani", "Estefania", "Estela", "Estelita", "Ester", "Etelvina", "Eugenia", "Eunice", "Eurides", "Eva", "Eveline", "Evanir", "Evanilda", "Evely", "Evelin", "Evellyn", "Expedita", "Fabia", "Fabiana", "Fabiane", "Fabiola", "Fabricia", "Fatima", "Filomena", "Fernanda", "Flavia", "Flaviana", "Flaviane", "Flora", "Florinda", "Franciele", "Francilene", "Francieli", "Franciane", "Francine", "Francineide", "Francinete", "Francisca", "Gabriela", "Gabriele", "Gabrieli", "Gabriella", "Gabrielle", "Gabrielly", "Jaiane", "Gilda", "Juliana", "Gilvania", "Janete", "Gardenia", "Jeane", "Juli", "Julha", "Juliane", "Gilza", "Geisa", "Geise", "Gisela", "Gislaine", "Gislane", "Gisele", "Gislene", "Giseli", "Geisiane", "Giselle", "Julia", "Gleice", "Juliene", "Genilda", "Geneci", "Jenefer", "Geni", "Jenifer", "Georgia", "Georgina", "Geovana", "Geralda", "Geraldina", "Gerlane", "Gerusa", "Jesica", "Jesuina", "Gessi", "Jessica", "Giovana", "Jaine", "Gildete", "Gleide", "Guilhermina", "Gilmara", "Gilvanete", "Guiomar", "Girlene", "Giselda", "Giselia", "Glaucia", "Gleiciane", "Glenda", "Gloria", "Jordana", "Gorete", "Graca", "Graciele", "Gracilene", "Graciela", "Graziela", "Graziele", "Grazieli", "Greice", "Ianca", "Yasmin", "Ieda", "Ingred", "Ingrid", "Ingride", "Ingridi", "Ione", "Irene", "Iris", "Irma", "Isabela", "Isadora", "Isis", "Ivana", "Ivone", "Odete", "Ondina", "Hortencia", "Hosana", "Osmarina", "Otilia", "Idalina", "Laura", "Inacia", "Ines", "Iracema", "Iraci", "Iracilda", "Iria", "Irani", "Iraneide", "Ireni", "Isabel", "Isabele", "Isabeli", "Isabella", "Isabelle", "Isabelly", "Izilda", "Isolina", "Isamara", "Isaura", "Ivete", "Ivanilda", "Ivani", "Ivanice", "Ivaneide", "Ivanilde", "Ivanete", "Ivania", "Ivoni", "Ivoneide", "Ivonete", "Jakeline", "Jaciane", "Jaciara", "Jacilene", "Jacinta", "Jacira", "Jackeline", "Jacqueline", "Jamile", "Jamili", "Jane", "Janiele", "Janaina", "Jandira", "Jani", "Janine", "Janice", "Jaqueline", "Joana", "Joice", "Josi", "Joaquina", "Joceli", "Jocilene", "Jocelia", "Joise", "Juliete", "Jordania", "Jorgina", "Josilda", "Josiane", "Joselia", "Joseane", "Joselma", "Josefa", "Josefina", "Josina", "Joselaine", "Josiele", "Joseli", "Josilene", "Joselina", "Joselita", "Josenilda", "Josenir", "Josiene", "Josimara", "Josineide", "Josinete", "Jovelina", "Juceli", "Jucileide", "Jucilene", "Jucelia", "Juciara", "Jucimara", "Judite", "Julieta", "Junia", "Juraci", "Jurema", "Jussara", "Justina", "Kellen", "Kemili", "Ketlen", "Ketley", "Ketlin", "Larisa", "Larissa", "Lazara", "Laudiceia", "Laurinda", "Laurita", "Lavinia", "Leontina", "Lorrana", "Lindaura", "Lorrany", "Lorena", "Lurdes", "Luciele", "Lucileide", "Lucila", "Lucicleide", "Lucidalva", "Lucileia", "Lucimara", "Lucimeire", "Lucinda", "Lucineia", "Lucineide", "Lucinete", "Lucivania", "Ludimila", "Ludmila", "Luna", "Luzineide", "Maria", "Madalena", "Maila", "Milene", "Mercia", "Magali", "Magda", "Magna", "Magnolia", "Mara", "Maiara", "Maira", "Maiana", "Maiane", "Milena", "Maisa", "Malvina", "Manuela", "Manuele", "Marilda", "Marilza", "Mariana", "Mariane", "Marli", "Marlise", "Marluce", "Marlucia", "Marcelina", "Marcela", "Marcele", "Marceli", "Marcilene", "Marcilia", "Marcia", "Marciana", "Marlene", "Marluci", "Mari", "Margareth", "Margarete", "Margarida", "Mariangela", "Maricelia", "Marla", "Mariele", "Marilena", "Marilia", "Marieta", "Marina", "Marileia", "Marileide", "Marlete", "Marinalva", "Marineide", "Marines", "Marinete", "Marisa", "Marise", "Marizete", "Maristela", "Marivalda", "Marta", "Martinha", "Matilde", "Maura", "Maurina", "Meire", "Mirele", "Miria", "Mirian", "Mireli", "Melissa", "Mercedes", "Micaela", "Micaele", "Micaeli", "Michele", "Michelle", "Michelli", "Micheli", "Mirela", "Mirella", "Mirtes", "Monalisa", "Monica", "Monique", "Morgana", "Nara", "Nadir", "Nadia", "Nadja", "Neila", "Neli", "Noelia", "Nelma", "Nilza", "Nagila", "Naiara", "Nair", "Naiana", "Naiane", "Nilce", "Nilda", "Nilde", "Nilva", "Naira", "Nelci", "Nelsi", "Nanci", "Nazare", "Natasha", "Natiele", "Natali", "Natalia", "Natalie", "Natalina", "Neide", "Nina", "Neiva", "Nivia", "Nilzete", "Neusa", "Nicole", "Nicoli", "Nicolly", "Nilceia", "Nivea", "Noemi", "Noemia", "Norma", "Nubia", "Odilia", "Odila", "Osvaldina", "Paula", "Poliane", "Palmira", "Paloma", "Pamela", "Patricia", "Poliana", "Paulina", "Pedrina", "Perla", "Pietra", "Pricila", "Priscila", "Priscilla", "Queila", "Quesia", "Quiteria", "Rachel", "Rafaela", "Rafaele", "Rafaella", "Raiane", "Raissa", "Raiana", "Raiani", "Raila", "Railane", "Railda", "Raimunda", "Riana", "Rainara", "Raine", "Raisa", "Raniele", "Raquel", "Rebeca", "Rejane", "Regiane", "Regina", "Renilda", "Renata", "Reni", "Rubia", "Rute", "Rita", "Roberta", "Rogeria", "Romilda", "Rosa", "Roseli", "Rosilda", "Rosiane", "Rosilane", "Rosileide", "Rosilene", "Rosalia", "Rosalina", "Rosana", "Rosane", "Rosani", "Rosangela", "Rosania", "Rosaria", "Rose", "Roseane", "Rosimeire", "Roselaine", "Rosemar", "Rosemary", "Rosemeire", "Rosemere", "Rosemeri", "Rosenilda", "Roseni", "Rosi", "Rosicleia", "Rosicleide", "Rosimar", "Rosimari", "Rosimere", "Rosimeri", "Rosinei", "Rosineia", "Rosineide", "Rosinete", "Ruth", "Ruti", "Sara", "Sabrina", "Suelen", "Sueli", "Zila", "Suiane", "Zaira", "Zuleide", "Silene", "Salete", "Zelia", "Suelaine", "Zelina", "Zelita", "Selma", "Zulmira", "Silva", "Silvana", "Silvani", "Silvania", "Silvia", "Silvina", "Samia", "Samila", "Samanta", "Samara", "Samira", "Sandy", "Sandra", "Santa", "Santina", "Sebastiana", "Zilda", "Suellen", "Silmara", "Zenaide", "Zeneide", "Zeni", "Zenilda", "Severina", "Sibele", "Sidneia", "Sulamita", "Solange", "Silvane", "Simone", "Simoni", "Sinara", "Sintia", "Sirlei", "Sirlene", "Socorro", "Sofia", "Sonia", "Soraia", "Zoraide", "Stefane", "Stefani", "Stephanie", "Stela", "Zuleica", "Suzana", "Suzane", "Suzete", "Suzi", "Tabata", "Taciana", "Taciane", "Taiana", "Taiane", "Taila", "Taina", "Tainara", "Tais", "Taisa", "Taise", "Tailane", "Talia", "Taline", "Telma", "Taine", "Taissa", "Talita", "Tamara", "Tamires", "Tamiris", "Tania", "Tassia", "Tatiana", "Tatiane", "Tatiele", "Tauane", "Tauani", "Tereza", "Terezinha", "Tifani", "Tuane", "Tuani", "Vilma", "Valda", "Valdenice", "Valdilene", "Valdina", "Valdira", "Valdelice", "Valdete", "Valdineia", "Valdirene", "Valentina", "Valeria", "Valesca", "Valmira", "Valquiria", "Vanilda", "Vania", "Vanda", "Vanderleia", "Vani", "Vaneide", "Vanesa", "Vanessa", "Vanusa", "Vanuzia", "Vera", "Veridiana", "Veronica", "Vicentina", "Victoria", "Virginia", "Vitalina", "Vitoria", "Vivian", "Viviane", "Wilma", "Wanda", "Wanessa", "Zumira" }; private static string[] _surNames = { "Smith", "Johnson", "Jones", "Williams", "Brown", "Lee", "Khan", "Singh", "Kumar", "Miller", "Davis", "Wilson", "Taylor", "Thomas", "Garcia", "Anderson", "Sharma", "Martin", "Rodriguez", "Ali", "White", "Jackson", "Thompson", "Moore", "Ahmed", "Martinez", "Lopez", "Harris", "Patel", "King", "Walker", "Hernandez", "Clark", "Lewis", "Robinson", "Young", "Gonzalez", "Hall", "Wright", "Scott", "Perez", "Green", "Allen", "Tan", "Shah", "Roberts", "Adams", "Nguyen", "James", "Hill", "Baker", "Campbell", "Wong", "Sanchez", "Evans", "Cruz", "Gupta", "Chan", "Mitchell", "Carter", "Reyes", "Nelson", "Edwards", "Rivera", "Parker", "Turner", "Phillips", "Lim", "Murphy", "Stewart", "Collins", "Jain", "Torres", "Morris", "Santos", "Kelly", "Morgan", "Cooper", "Ramirez", "Flores", "Bell", "Cook", "Wood", "Rogers", "Ramos", "Watson", "Ward", "Diaz", "Bailey", "Rose", "Ahmad", "Hughes", "Bennett", "Love", "Kim", "Mohamed", "Gomez", "Mendoza", "Gray", "Richardson", "Ross", "Cox", "Chen", "Reed", "Brooks", "Peterson", "Howard", "Price", "Gonzales", "Ng", "Fernandez", "Russell", "Foster", "Murray", "Long", "Black", "Graham", "Jenkins", "Harrison", "Alexander", "Fisher", "Morales", "Ryan", "Henderson", "Stevens", "Powell", "Butler", "Hamilton", "Marshall", "Perry", "Jordan", "George", "Barnes", "Cole", "Kennedy", "West", "Simpson", "Mcdonald", "Sullivan", "Reynolds", "Ortiz", "Shaw", "Hassan", "Castillo", "Ellis", "Myers", "Wallace", "Sanders", "Gibson", "Rahman", "Marie", "Hunter", "Fox", "Joseph", "Wang", "Gutierrez", "Li", "Hayes", "Clarke", "Tran", "Patterson", "Henry", "Ford", "Coleman", "Mason", "Richards", "Simmons", "Castro", "Robertson", "Gordon", "Woods", "Grant", "Griffin", "Paul", "Silva", "Roy", "Stone", "John", "Hunt", "Webb", "Wells", "Knight", "Johnston", "Palmer", "Mills", "Alvarez", "Burns", "Holmes", "Davies", "Andrews", "Reid", "Hussain", "Matthews", "Peters", "David", "Porter", "Bryant", "Dixon", "Santiago", "Ferguson", "Freeman", "Lawrence", "Ruiz", "Reddy", "Agarwal", "Crawford", "Jimenez", "Ray", "Malik", "Obrien", "Armstrong", "Verma", "Spencer", "Raj", "Walsh", "Elliott", "Hart", "Kaur", "Tucker", "Ho", "Daniels", "Ibrahim", "Owens", "Meyer", "Morrison", "Warren", "Dunn", "Payne", "Hansen", "Lane", "Chapman", "Romero", "Jacobs", "May", "Chavez", "Francis", "Bradley", "Liu", "Boyd", "Man", "Berry", "Duncan", "Stephens", "Gill", "Mohammed", "Medina", "Harvey", "Daniel", "Lam", "Burke", "Arora", "Cunningham", "Das", "Hicks", "Schmidt", "Gardner", "Hudson", "Yang", "Riley", "Yadav", "Olson", "Davidson", "Dean", "Day", "Hawkins", "Bautista", "Cohen", "Park", "Wagner", "Arnold", "Rice", "Lin", "Mishra", "Carroll", "Lynch", "Mehta", "Joshi", "Vargas", "Lynn", "Washington", "Moreno", "Harper", "Oliver", "Carr", "Shrestha", "Aguilar", "Zhang", "Nichols", "Williamson", "Austin", "Ong", "Snyder", "Villanueva", "Vasquez", "Willis", "Wheeler", "Jensen", "Islam", "Herrera", "Lucas", "Bishop", "Douglas", "Lawson", "Macdonald", "Hasan", "Newman", "Le", "Gilbert", "Greene", "Pierce", "Yu", "Salazar", "Chang", "Pearson", "Burton", "Kelley", "Mendez", "Watkins", "Lau", "Mann", "Barrett", "Wu", "Perkins", "Walters", "Carpenter", "Dawson", "Banks", "Franklin", "Barker", "Little", "Curtis", "Hanson", "Weaver", "Hoffman", "Miranda", "Ismail", "Holland", "Angel", "Fuller", "Montgomery", "Page", "Valdez", "Hossain", "Mccarthy", "Fletcher", "Guzman", "Doyle", "Lambert", "Saunders", "Oconnor", "Larson", "Nair", "Carlson", "Lowe", "Stanley", "Shaikh", "Simon", "Howell", "Fowler", "Chambers", "Watts", "Huang", "Quinn", "Patil", "Chua", "Craig", "Munoz", "Anthony", "Rana", "Weber", "Charles", "Cheng", "Michael", "Bates", "Sims", "Rao", "Hopkins", "Marquez", "Gregory", "Cross", "Pandey", "Tang", "Ball", "Stevenson", "Blake", "Rai", "Fleming", "Sutton", "Mercado", "Navarro", "Cameron", "Wade", "Schneider", "Pena", "Soto", "Welch", "Mccoy", "Hardy", "Jennings", "Alam", "Steele", "Delgado", "Benson", "Leung", "Abdullah", "Lloyd", "Mckenzie", "Chong", "Miles", "Beck", "Bowman", "Vega", "Webster", "Parsons", "Ortega", "Schultz", "Leonard", "Higgins", "Owen", "Garrett", "Brewer", "Newton", "Kapoor", "Fitzgerald", "Cortez", "Ann", "Norris", "Wilkinson", "Barnett", "Chauhan", "Nunez", "Potter", "Padilla", "Agrawal", "Aquino", "Gallagher", "Pham", "Burgess", "Lyons", "Moss", "Sharp", "Warner", "Cheung", "Srivastava", "Iqbal", "Prasad", "Fernandes", "Fields", "Garza", "Dennis", "Holt", "Oneill", "Luna", "Rhodes", "Keller", "Vazquez", "Moon", "Estrada", "Reeves", "Acosta", "Prince", "Lai", "Rowe", "Farmer", "Guerrero", "Blair", "Wolf", "Garg", "Moran", "Becker", "Brady", "Caldwell", "Law", "Terry", "Barber", "Rios", "Powers", "Marsh", "Hale", "Baldwin", "Molina", "Todd", "Manning", "Neal", "Patrick", "Logan", "Maxwell", "Klein", "Yap", "Hammond", "Haynes", "Francisco", "Walton", "Vincent", "Mclaughlin", "Bowen", "Richard", "Thornton", "Waters", "Bush", "Aziz", "Goodwin", "Mclean", "Cabrera", "Parks", "Nicole", "Atkinson", "Chin", "Chung", "Sandoval", "Frank", "Barton", "Omar", "Osborne", "Bond", "Shepherd", "Chandler", "Lang", "Figueroa", "Kay", "Rodgers", "Alvarado", "Norman", "Fernando", "Flynn", "Desai", "Thomson", "Horton", "Nicholson", "Fraser", "Casey", "Maldonado", "Cummings", "Nash", "Wolfe", "Serrano", "Kerr", "Thakur", "French", "Amin", "Rojas", "Christensen", "Shop", "Tyler", "Mack", "Malone", "Ang", "Townsend", "Abbas", "Pereira", "Samuel", "Sweet", "Farrell", "Tiwari", "Robbins", "Dominguez", "Gibbs", "Contreras", "Hogan", "Graves", "Solomon", "Shelton", "Sam", "Buchanan", "Brennan", "Bruce", "Chowdhury", "Fischer", "Ma", "Griffith", "Mcgee", "Suarez", "Lo", "Erickson", "Cool", "Goodman", "Yates", "Christian", "Choi", "Butt", "Byrne", "Swanson", "Schwartz", "Bird", "Byrd", "Frazier", "Morton", "Vaughn", "Low", "Olsen", "Summers", "Goh", "Petersen", "Soni", "Sinha", "Perera", "Booth", "Anand", "Garner", "Pineda", "Campos", "Baxter", "Bryan", "Mckay", "Harrington", "Jay", "Mcdaniel", "Wall", "Ramsey", "Chow", "Barry", "Lamb", "Robles", "Fuentes", "Valencia", "Lu", "Leblanc", "Stokes", "Drake", "Mckinney", "Kamal", "Briggs", "Curry", "Muhammad", "Glover", "Cannon", "Mejia", "Carey", "Grace", "Duran", "Ghosh", "Colon", "Roman", "Ingram", "Guy", "Avila", "Mahmoud", "Thapa", "Kane", "Hodges", "Leon", "Adam", "Pratt", "Raza", "Pearce", "Khalid", "Gabriel", "Saad", "Chu", "Rosales", "Kent", "Mcguire", "Nolan", "Clayton", "Wise", "Costa", "Savage", "Tate", "Manuel", "Chandra", "Jacob", "Abraham", "Mcbride", "Adel", "Mccormick", "Chaudhary", "Frost", "Sherman", "Harding", "Sparks", "Abbott", "Mullins", "Larsen", "Zimmerman", "Dee", "Norton", "Franco", "Skinner", "Hanna", "Carson", "Rodrigues", "Gurung", "Stephenson", "Griffiths", "Wilkins", "Bauer", "Shetty", "Goyal", "Dsouza", "Malhotra", "Bansal", "Hubbard", "Kemp", "Pope", "Saini", "Jose", "Reese", "Kirk", "Hampton", "Hines", "Soriano", "Preston", "Ferreira", "Aggarwal", "Poole", "Hutchinson", "Johns", "Burnett", "Bowers", "Short", "Snow", "Moody", "Randall", "Power", "Choudhary", "Joy", "Noble", "Foley", "Sinclair", "Harmon", "Mathews", "Solis", "House", "Rock", "Aja", "Rich", "Babu", "Mueller", "Jack", "Buckley", "Gross", "Tolentino", "Benjamin", "Rosario", "Small", "Ayala", "Pacheco", "Monroe", "Best", "Shukla", "Houston", "Espinoza", "Maria", "Bhatia", "Enriquez", "Schroeder", "Mcintyre", "Heath", "Kramer", "Kirby", "Levy", "Mohan", "Lara", "Saeed", "Dalton", "Han", "Chase", "Mathew", "Ling", "Cain", "Gates", "Holloway", "Gee", "Muller", "Adkins", "Calderon", "Sheikh", "Bartlett", "Joe", "Patton", "Hood", "Strickland", "Collier", "Santana", "Odonnell", "Atkins", "Marks", "Duffy", "Allison", "Velez", "Mcintosh", "Hancock", "Krishna", "Ocampo", "Sun", "Dillon", "Saleh", "Cooke", "Fitzpatrick", "Saxena", "Conway", "Hong", "Maher", "Khanna", "Wijaya", "Mcleod", "Sweeney", "Conner", "Valentine", "Andrade", "Floyd", "Moses", "Kulkarni", "Wilcox", "Camacho", "Krishnan", "Underwood", "Berg", "Dyer", "Prakash", "Elizabeth", "Mcmahon", "Velasquez", "Blue", "Cullen", "Bass", "Velasco", "Roth", "Koh", "Sutherland", "Flowers", "Morrow", "Hartman", "Tanner", "Boyle", "Brock", "Aguirre", "Ballard", "Dizon", "Cobb", "Domingo", "Siddiqui", "Shields", "Nielsen", "Stuart", "Peter", "Bear", "Massey", "Bernard", "Raymond", "Sawyer", "Samson", "Howe", "Dickson", "Cat", "Wyatt", "Leong", "Salinas", "Ashraf", "Antonio", "Zamora", "Bradford", "English", "Forbes", "York", "Middleton", "Meyers", "Joyce", "Reilly", "Davenport", "B", "Mohammad", "Bradshaw", "Walter", "Gomes", "Bee", "Hodge", "Smart", "Ashley", "Jean", "Valenzuela", "Mcmillan", "Javier", "Xu", "Greer", "Said", "Uddin", "Anwar", "Spence", "Donovan", "Horn", "Hobbs", "Barr", "Lindsey", "Whitehead", "Montoya", "Russo", "Jefferson", "Guerra", "Alex", "Villa", "Weiss", "Ansari", "Rivas", "Raja", "Andersen", "Mohd", "Copeland", "M", "Rehman", "Bridges", "Go", "Teo", "Mittal", "Vaughan", "Ram", "Kang", "Browne", "Shannon", "Carrillo", "Hess", "Jane", "Huynh", "Rashid", "Sheppard", "Saha", "Sampson", "S", "Mark", "Decker", "Goel", "Osman", "Haddad", "Slater", "Anne", "Gould", "Mcgrath", "Bentley", "Giles", "Keith", "Ferrer", "Donnelly", "Salas", "Knox", "Mostafa", "Whitaker", "Strong", "Pascual", "Peralta", "Eaton", "Starr", "Jarvis", "Singleton", "Daly", "Khoury", "Lindsay", "Mac", "Doherty", "Cervantes", "Gandhi", "Koch", "Mackenzie", "Yee", "Stark", "Archer", "Winter", "Dale", "Stafford", "Hurst", "Phelps", "Leach", "Winters", "Bhardwaj", "Humphrey", "Felix", "Gillespie", "Jha", "Hewitt", "Salah", "Khalil", "Salvador", "Connolly", "Cochran", "Qureshi", "Oconnell", "Woodward", "Shaffer", "Bhatt", "Church", "Donaldson", "Tam", "Albert", "Espinosa", "Oliveira", "Castaneda", "Nixon", "Jo", "Lozano", "Sim", "Grimes", "Clements", "Mccann", "Cardenas", "Landry", "Mustafa", "Delacruz", "Juarez", "Roach", "Mcdowell", "Hurley" }; private static string[] _lorem = { "Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "Suspendisse", "tempus", "sapien", "maximus", "dictum", "pretium", "tellus", "dui", "tincidunt", "massa", "lobortis", "pellentesque", "dolor", "ligula", "et", "nulla" }; private static string[] _departments = { "Legal", "Marketing", "Business Development", "Services", "Support", "Human Resources", "Sales", "Product Management", "Engineering", "Training", "Accounting", "Research and Development" }; private static string[] _jobTitles = { "Sales Representative", "Structural Engineer", "Payment Adjustment Coordinator", "Senior Editor", "Nurse Practicioner", "Occupational Therapist", "Director of Sales", "Safety Technician", "Account Executive", "Marketing Manager", "Food Chemist", "Civil Engineer", "Associate Professor", "Statistician", "Research Nurse", "Data Coordinator", "Chief Design Engineer", "Computer Systems Analyst", "Environmental Tech", "Administrative Officer", "Social Worker", "Executive Secretary", "Help Desk", "Analyst Programmer", "Developer", "Programmer Analyst", "Software Test Engineer", "Biostatistician", "Office Assistant", "Systems Administrator", "Automation Specialist", "Analog Circuit Design manager", "Structural Analysis Engineer", "Technical Writer", "Software Engineer", "Budget/Accounting Analyst IV", "GIS Technical Architect", "Speech Pathologist", "Research Assistant", "Nuclear Power Engineer", "Quality Control Specialist", "General Manager", "Accountant", "Account Coordinator", "Operator", "Junior Executive", "Geological Engineer", "Recruiting Manager", "Financial Analyst", "Marketing Assistant", "Electrical Engineer", "Internal Auditor", "Paralegal", "Senior Developer", "VP Quality Control", "Media Manager", "Senior Sales Associate", "Product Engineer", "Quality Engineer", "VP Marketing", "Health Coach", "Legal Assistant", "Dental Hygienist", "Information Systems Manager", "Pharmacist", "Desktop Support Technician", "Staff Scientist", "Project Manager", "Technician", "Mechanical Systems Engineer", "Assistant Manager", "Assistant Media Planner", "Teacher", "Registered Nurse", "Sales Associate", "Geologist", "Physical Therapy Assistant" }; private static string[] _countries = { "Afghanistan", "land Islands", "Albania", "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", "Bahrain", "Bahamas", "Bangladesh", "Barbados", "Belarus", "Belgium", "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia, Plurinational State of", "Bonaire, Sint Eustatius and Saba", "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory", "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo", "Congo, the Democratic Republic of the", "Cook Islands", "Costa Rica", "Cte d'Ivoire", "Croatia", "Cuba", "Curaao", "Cyprus", "Czech Republic", "Denmark", "Djibouti", "Dominica", "Dominican Republic", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", "Falkland Islands (Malvinas)", "Faroe Islands", "Fiji", "Finland", "France", "French Guiana", "French Polynesia", "French Southern Territories", "Gabon", "Gambia", "Georgia", "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guernsey", "Guinea", "Guinea-Bissau", "Guyana", "Haiti", "Heard Island and McDonald Islands", "Holy See (Vatican City State)", "Honduras", "Hong Kong", "Hungary", "Iceland", "India", "Indonesia", "Iran, Islamic Republic of", "Iraq", "Ireland", "Isle of Man", "Israel", "Italy", "Jamaica", "Japan", "Jersey", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea", "Kuwait", "Kyrgyzstan", "Lao People's Democratic Republic", "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", "Macao", "Macedonia", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova, Republic of", "Monaco", "Mongolia", "Montenegro", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", "Netherlands", "New Caledonia", "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "Northern Mariana Islands", "Norway", "Oman", "Pakistan", "Palau", "Palestine, State of", "Panama", "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn", "Poland", "Portugal", "Puerto Rico", "Qatar", "Runion", "Romania", "Russian Federation", "Rwanda", "Saint Barthlemy", "Saint Helena", "Saint Kitts and Nevis", "Saint Lucia", "Saint Martin (French part)", "Saint Pierre and Miquelon", "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Sao Tome and Principe", "Saudi Arabia", "Senegal", "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Sint Maarten (Dutch part)", "Slovakia", "Slovenia", "Solomon Islands", "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Sudan", "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "Timor-Leste", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", "Vanuatu", "Venezuela, Bolivarian Republic of", "Viet Nam", "Virgin Islands, British", "Virgin Islands, U.S.", "Wallis and Futuna", "Western Sahara", "Yemen", "Zambia", "Zimbabwe" }; private static string[] _languages = { "English", "Mandarin Chinese", "Hindi", "Spanish", "French", "Standard Arabic", "Bengali", "Russian", "Portuguese", "Indonesian", "Urdu", "Standard German", "Japanese", "Swahili", "Marathi", "Telugu", "Western Punjabi", "Wu Chinese", "Tamil", "Turkish", "Korean", "Vietnamese", "Yue Chinese", "Javanese", "Italian", "Egyptian Spoken Arabic", "Hausa", "Thai", "Gujarati", "Kannada", "Iranian Persian", "Bhojpuri", "Southern Min Chinese", "Hakka Chinese", "Jinyu Chinese", "Filipino", "Burmese", "Polish", "Yoruba", "Odia", "Malayalam ", "Xiang Chinese", "Maithili", "Ukrainian", "Moroccan Spoken Arabic", "Eastern Punjabi", "Sunda", "Algerian Spoken Arabic", "Sundanese Spoken Arabic", "Nigerian Pidgin", "Zulu", "Igbo", "Amharic", "Northern Uzbek", "Sindhi", "North Levantine Spoken Arabic", "Nepali", "Romanian", "Tagalog", "Dutch", "Sa'idi Spoken Arabic", "Gan Chinese", "Northern Pashto", "Magahi", "Saraiki", "Xhosa", "Malay", "Khmer", "Afrikaans", "Sinhala", "Somali", "Chhattisgarhi", "Cebuano", "Mesopotamian Spoken Arabic", "Assamese", "Northeastern Thai", "Northern Kurdish", "Hijazi Spoken Arabic", "Nigerian Fulfulde", "Bavarian", "Bamanankan", "South Azerbaijani", "Northern Sotho", "Setswana", "Souther Sotho", "Czech", "Greek", "Chittagonian", "Kazakh", "Swedish", "Deccan", "Hungarian", "Jula", "Sadri", "Kinyarwanda", "Cameroonian Pidgin", "Sylheti", "South Levantine Spoken Arabic", "Tunisian Spoken Arabic", "Sanaani Spoken Arabic" }; private static string[] _skuDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "R", "S", "T", "U", "W", "X", "Y", "Z" }; } ================================================ FILE: LiteDB.Tests/Utils/Faker.cs ================================================ using LiteDB; using System; using System.Linq; internal static partial class Faker { private static Random _random = new Random(420); public static string Fullname() { var names = _random.NextBool() ? _maleNames : _femaleNames; return names[_random.Next(names.Length - 1)] + " " + _surNames[_random.Next(_surNames.Length - 1)]; } public static int Age() { return _random.Next(18, 96); } public static DateTime Birthday() { var oldest = DateTime.Today.AddYears(-110).Ticks; var now = DateTime.Now.Ticks; var range = now - oldest; var date = new DateTime(oldest + _random.NextLong(0, range)); return date; } public static string Lorem(int size, int end = -1) { return string.Join(" ", Enumerable.Range(1, end == -1 ? size : _random.Next(size, end)) .Select(x => _lorem[_random.Next(_lorem.Length - 1)])); } public static int Next(int start, int end) { return _random.Next(start, end); } public static double NextDouble(double start, double end) { return start + (_random.NextDouble() * (end - start)); } // https://stackoverflow.com/a/13095144/3286260 public static long NextLong(this Random random, long min, long max) { if (max <= min) throw new ArgumentOutOfRangeException("max", "max must be > min!"); //Working with ulong so that modulo works correctly with values > long.MaxValue ulong uRange = (ulong)(max - min); //Prevent a modolo bias; see https://stackoverflow.com/a/10984975/238419 //for more information. //In the worst case, the expected number of calls is 2 (though usually it's //much closer to 1) so this loop doesn't really hurt performance at all. ulong ulongRand; do { byte[] buf = new byte[8]; random.NextBytes(buf); ulongRand = (ulong)BitConverter.ToInt64(buf, 0); } while (ulongRand > ulong.MaxValue - ((ulong.MaxValue % uRange) + 1) % uRange); return (long)(ulongRand % uRange) + min; } public static bool NextBool(this Random random) { return random.NextSingle() >= 0.5; } public static string Departments() => _departments[_random.Next(0, _departments.Length - 1)]; internal static BsonValue Created() { var oldest = DateTime.Today.AddYears(-5).Ticks; var now = DateTime.Now.Ticks; var range = now - oldest; var date = new DateTime(oldest + _random.NextLong(0, range)); return date; } public static string Language() => _departments[_random.Next(0, _departments.Length - 1)]; public static string Department() => _departments[_random.Next(0, _departments.Length - 1)]; public static string Country() => _countries[_random.Next(0, _countries.Length - 1)]; public static string Job() => _jobTitles[_random.Next(0, _jobTitles.Length - 1)]; internal static string SkuNumber() => string.Join("", Enumerable.Range(1, 8).Select(x => _skuDigits[_random.Next(0, _skuDigits.Length - 1)])); } ================================================ FILE: LiteDB.Tests/Utils/LiteEngineExtensions.cs ================================================ using LiteDB.Engine; using System.Collections.Generic; using System.Linq; namespace LiteDB.Tests { public static class LiteEngineExtensions { public static int Insert(this LiteEngine engine, string collection, BsonDocument doc, BsonAutoId autoId = BsonAutoId.ObjectId) { return engine.Insert(collection, new BsonDocument[] {doc}, autoId); } public static int Update(this LiteEngine engine, string collection, BsonDocument doc) { return engine.Update(collection, new BsonDocument[] {doc}); } public static List Find(this LiteEngine engine, string collection, BsonExpression where) { var q = new LiteDB.Query(); if (where != null) { q.Where.Add(where); } var docs = new List(); using (var r = engine.Query(collection, q)) { while (r.Read()) { docs.Add(r.Current.AsDocument); } } return docs; } public static BsonDocument GetPageLog(this LiteEngine engine, int pageID) { return engine.Find($"$dump({pageID})", "1=1").Last(); } } } ================================================ FILE: LiteDB.Tests/Utils/Models/Person.cs ================================================ using System; using System.Collections.Generic; namespace LiteDB.Tests { public class Person : IEqualityComparer, IComparable { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string[] Phones { get; set; } public string Email { get; set; } public Address Address { get; set; } public DateTime Date { get; set; } public bool Active { get; set; } public int CompareTo(Person other) { return this.Id.CompareTo(other.Id); } public bool Equals(Person x, Person y) { return x.Id == y.Id; } public int GetHashCode(Person obj) { return obj.Id.GetHashCode(); } public override string ToString() { return new BsonMapper().Serialize(this).ToString(); } } public class Address { public string Street { get; set; } public string City { get; set; } public string State { get; set; } } } ================================================ FILE: LiteDB.Tests/Utils/Models/Zip.cs ================================================ using System; using System.Collections.Generic; namespace LiteDB.Tests { // { // "_id": "01001", // "city": "AGAWAM", // "loc": [ -72.622739, 42.070206 ], // "pop": 15338, // "state": "MA" // } public class Zip : IEqualityComparer, IComparable { public string Id { get; set; } public string City { get; set; } public double[] Loc { get; set; } public string State { get; set; } public int CompareTo(Zip other) { return this.Id.CompareTo(other.Id); } public bool Equals(Zip x, Zip y) { return x.Id == y.Id && x.City == y.City && x.Loc == y.Loc && x.State == y.State; } public int GetHashCode(Zip obj) { return this.Id.GetHashCode(); } public override string ToString() { return new BsonMapper().Serialize(this).ToString(); } } } ================================================ FILE: LiteDB.Tests/Utils/TempFile.cs ================================================ using System; using System.IO; namespace LiteDB.Tests { public class TempFile : IDisposable { public string Filename { get; private set; } public TempFile() { var path = Path.GetTempPath(); var name = "litedb-" + Guid.NewGuid().ToString("d").Substring(0, 5) + ".db"; this.Filename = Path.Combine(path, name); } public TempFile(string original) { var rnd = Guid.NewGuid().ToString("d").Substring(0, 5); var path = Path.GetTempPath(); var name = $"litedb-{rnd}.db"; var filename = Path.Combine(path, name); File.Copy(original, filename, true); this.Filename = filename; } #region Dispose public static implicit operator String(TempFile value) { return value.Filename; } private bool _disposed; public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } ~TempFile() { Dispose(false); } protected virtual void Dispose(bool disposing) { if (_disposed) return; if (disposing) { // free other managed objects that implement // IDisposable only } // check file integrity File.Delete(this.Filename); _disposed = true; } #endregion public long Size => new FileInfo(this.Filename).Length; public string ReadAsText() => File.ReadAllText(this.Filename); public override string ToString() => this.Filename; } } ================================================ FILE: LiteDB.Tests/xunit.runner.json ================================================ { "parallelizeAssembly": false, "parallelizeTestCollections": false } ================================================ FILE: LiteDB.sln ================================================  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.1.32328.378 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiteDB", "LiteDB\LiteDB.csproj", "{9497DA19-1FCA-4C2E-A1AB-8DFAACBC76E1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiteDB.Tests", "LiteDB.Tests\LiteDB.Tests.csproj", "{74E32E43-2A57-4A38-BD8C-9108B0DCAEAA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiteDB.Shell", "LiteDB.Shell\LiteDB.Shell.csproj", "{99887C89-CAE4-4A8D-AC4B-87E28B9B1F87}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiteDB.Benchmarks", "LiteDB.Benchmarks\LiteDB.Benchmarks.csproj", "{DF9C82C1-446F-458A-AA50-78E58BA17273}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LiteDB.Stress", "LiteDB.Stress\LiteDB.Stress.csproj", "{FFBC5669-DA32-4907-8793-7B414279DA3B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9497DA19-1FCA-4C2E-A1AB-8DFAACBC76E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9497DA19-1FCA-4C2E-A1AB-8DFAACBC76E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {9497DA19-1FCA-4C2E-A1AB-8DFAACBC76E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {9497DA19-1FCA-4C2E-A1AB-8DFAACBC76E1}.Release|Any CPU.Build.0 = Release|Any CPU {74E32E43-2A57-4A38-BD8C-9108B0DCAEAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {74E32E43-2A57-4A38-BD8C-9108B0DCAEAA}.Debug|Any CPU.Build.0 = Debug|Any CPU {74E32E43-2A57-4A38-BD8C-9108B0DCAEAA}.Release|Any CPU.ActiveCfg = Release|Any CPU {74E32E43-2A57-4A38-BD8C-9108B0DCAEAA}.Release|Any CPU.Build.0 = Release|Any CPU {99887C89-CAE4-4A8D-AC4B-87E28B9B1F87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {99887C89-CAE4-4A8D-AC4B-87E28B9B1F87}.Debug|Any CPU.Build.0 = Debug|Any CPU {99887C89-CAE4-4A8D-AC4B-87E28B9B1F87}.Release|Any CPU.ActiveCfg = Release|Any CPU {99887C89-CAE4-4A8D-AC4B-87E28B9B1F87}.Release|Any CPU.Build.0 = Release|Any CPU {DF9C82C1-446F-458A-AA50-78E58BA17273}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DF9C82C1-446F-458A-AA50-78E58BA17273}.Debug|Any CPU.Build.0 = Debug|Any CPU {DF9C82C1-446F-458A-AA50-78E58BA17273}.Release|Any CPU.ActiveCfg = Release|Any CPU {DF9C82C1-446F-458A-AA50-78E58BA17273}.Release|Any CPU.Build.0 = Release|Any CPU {FFBC5669-DA32-4907-8793-7B414279DA3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FFBC5669-DA32-4907-8793-7B414279DA3B}.Debug|Any CPU.Build.0 = Debug|Any CPU {FFBC5669-DA32-4907-8793-7B414279DA3B}.Release|Any CPU.ActiveCfg = Release|Any CPU {FFBC5669-DA32-4907-8793-7B414279DA3B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {45099B85-2AE1-434B-913A-6AD14FD3AF4A} EndGlobalSection GlobalSection(Performance) = preSolution HasPerformanceSessions = true EndGlobalSection EndGlobal ================================================ FILE: README.md ================================================ # LiteDB - A .NET NoSQL Document Store in a single data file [![NuGet Version](https://img.shields.io/nuget/v/LiteDB)](https://www.nuget.org/packages/LiteDB/) [![NuGet Downloads](https://img.shields.io/nuget/dt/LiteDB)](https://www.nuget.org/packages/LiteDB/) [![](https://dcbadge.limes.pink/api/server/u8seFBH9Zu?style=flat-square)](https://discord.gg/u8seFBH9Zu) [![NuGet Version](https://img.shields.io/nuget/vpre/LiteDB)](https://www.nuget.org/packages/LiteDB/absoluteLatest) [![Build status](https://img.shields.io/github/actions/workflow/status/litedb-org/LiteDB/publish-prerelease.yml)](https://github.com/litedb-org/LiteDB/actions/workflows/publish-prerelease.yml) LiteDB is a small, fast and lightweight .NET NoSQL embedded database. - Serverless NoSQL Document Store - Simple API, similar to MongoDB - 100% C# code for .NET 4.5 / NETStandard 1.3/2.0 in a single DLL (less than 450kb) - Thread-safe - ACID with full transaction support - Data recovery after write failure (WAL log file) - Datafile encryption using DES (AES) cryptography - Map your POCO classes to `BsonDocument` using attributes or fluent mapper API - Store files and stream data (like GridFS in MongoDB) - Single data file storage (like SQLite) - Index document fields for fast search - LINQ support for queries - SQL-Like commands to access/transform data - [LiteDB Studio](https://github.com/mbdavid/LiteDB.Studio) - Nice UI for data access - Open source and free for everyone - including commercial use - Install from NuGet: `Install-Package LiteDB` ## New v5 - New storage engine - No locks for `read` operations (multiple readers) - `Write` locks per collection (multiple writers) - Internal/System collections - New `SQL-Like Syntax` - New query engine (support projection, sort, filter, query) - Partial document load (root level) - and much, much more! ## Lite.Studio New UI to manage and visualize your database: ![LiteDB.Studio](https://www.litedb.org/images/banner.gif) ## Documentation Visit [the Wiki](https://github.com/mbdavid/LiteDB/wiki) for full documentation. For simplified chinese version, [check here](https://github.com/lidanger/LiteDB.wiki_Translation_zh-cn). ## LiteDB Community Help LiteDB grow its user community by answering this [simple survey](https://docs.google.com/forms/d/e/1FAIpQLSc4cNG7wyLKXXcOLIt7Ea4TlXCG6s-51_EfHPu2p5WZ2dIx7A/viewform?usp=sf_link) ## How to use LiteDB A quick example for storing and searching documents: ```C# // Create your POCO class public class Customer { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string[] Phones { get; set; } public bool IsActive { get; set; } } // Open database (or create if doesn't exist) using(var db = new LiteDatabase(@"MyData.db")) { // Get customer collection var col = db.GetCollection("customers"); // Create your new customer instance var customer = new Customer { Name = "John Doe", Phones = new string[] { "8000-0000", "9000-0000" }, Age = 39, IsActive = true }; // Create unique index in Name field col.EnsureIndex(x => x.Name, true); // Insert new customer document (Id will be auto-incremented) col.Insert(customer); // Update a document inside a collection customer.Name = "Joana Doe"; col.Update(customer); // Use LINQ to query documents (with no index) var results = col.Find(x => x.Age > 20); } ``` Using fluent mapper and cross document reference for more complex data models ```C# // DbRef to cross references public class Order { public ObjectId Id { get; set; } public DateTime OrderDate { get; set; } public Address ShippingAddress { get; set; } public Customer Customer { get; set; } public List Products { get; set; } } // Re-use mapper from global instance var mapper = BsonMapper.Global; // "Products" and "Customer" are from other collections (not embedded document) mapper.Entity() .DbRef(x => x.Customer, "customers") // 1 to 1/0 reference .DbRef(x => x.Products, "products") // 1 to Many reference .Field(x => x.ShippingAddress, "addr"); // Embedded sub document using(var db = new LiteDatabase("MyOrderDatafile.db")) { var orders = db.GetCollection("orders"); // When query Order, includes references var query = orders .Include(x => x.Customer) .Include(x => x.Products) // 1 to many reference .Find(x => x.OrderDate <= DateTime.Now); // Each instance of Order will load Customer/Products references foreach(var order in query) { var name = order.Customer.Name; ... } } ``` ## Where to use? - Desktop/local small applications - Application file format - Small web sites/applications - One database **per account/user** data store ## Plugins - A GUI viewer tool: https://github.com/falahati/LiteDBViewer (v4) - A GUI editor tool: https://github.com/JosefNemec/LiteDbExplorer (v4) - Lucene.NET directory: https://github.com/sheryever/LiteDBDirectory - LINQPad support: https://github.com/adospace/litedbpad - F# Support: https://github.com/Zaid-Ajaj/LiteDB.FSharp (v4) - UltraLiteDB (for Unity or IOT): https://github.com/rejemy/UltraLiteDB - OneBella - cross platform (windows, macos, linux) GUI tool : https://github.com/namigop/OneBella - LiteDB.Migration: Framework that makes schema migrations easier: https://github.com/JKamsker/LiteDB.Migration/ ## Changelog Change details for each release are documented in the [release notes](https://github.com/mbdavid/LiteDB/releases). ## Code Signing LiteDB is digitally signed courtesy of [SignPath](https://www.signpath.io) ## License [MIT](http://opensource.org/licenses/MIT) ================================================ FILE: appveyor.yml ================================================ version: 5.0.{build} branches: only: - master image: Visual Studio 2022 configuration: - Debug - Release before_build: - cmd: nuget restore LiteDB.sln build: project: LiteDB.sln publish_nuget: true verbosity: minimal for: - matrix: only: - configuration: Release artifacts: - path: LiteDB\bin\Release\LiteDB*.nupkg deploy: - provider: Webhook url: https://app.signpath.io/API/v1/f5b329b8-705f-4d6c-928a-19465b83716b/Integrations/AppVeyor?ProjectKey=LiteDB.git&SigningPolicyKey=release-signing authorization: secure: 3eLjGkpQC1wg1s5GIEqs7yk/V8OZNnpKmpwdsaloGExc5jMspM4nA7u/UlG5ugraEyXRC05ZxLU4FIfH2V2BEg==