[{"data":1,"prerenderedAt":5787},["ShallowReactive",2],{"doc-\u002Ffoundation\u002Fpython-for-gis-introduction":3,"nav-foundation":1280},{"id":4,"title":5,"body":6,"description":1273,"extension":1274,"meta":1275,"navigation":298,"path":1276,"seo":1277,"stem":1278,"__hash__":1279},"content\u002Ffoundation\u002Fpython-for-gis-introduction.md","Python for GIS: What It Is and When to Use It",{"type":7,"value":8,"toc":1234},"minimark",[9,14,18,21,37,40,43,47,50,53,76,79,83,88,91,94,112,115,119,122,136,139,143,146,163,166,170,173,200,203,207,210,213,230,233,237,240,243,257,261,265,395,398,402,494,497,501,627,630,634,890,893,897,901,904,909,912,929,932,936,939,942,962,965,969,972,986,989,993,996,1000,1003,1007,1010,1014,1017,1021,1024,1028,1031,1035,1038,1042,1045,1062,1066,1069,1072,1086,1089,1093,1096,1099,1102,1105,1108,1111,1114,1117,1121,1125,1128,1132,1139,1143,1146,1150,1153,1157,1160,1164,1172,1184,1191,1198,1202,1206,1209,1213,1216,1220,1223,1227,1230],[10,11,13],"h2",{"id":12},"problem-statement","Problem statement",[15,16,17],"p",{},"Many GIS users hear about Python for GIS but are not sure what it means in daily work.",[15,19,20],{},"The usual questions are:",[22,23,24,28,31,34],"ul",{},[25,26,27],"li",{},"Is Python only for developers?",[25,29,30],{},"Is it useful if you already use QGIS or ArcGIS?",[25,32,33],{},"When is scripting better than clicking through tools manually?",[25,35,36],{},"Which GIS tasks are worth automating?",[15,38,39],{},"The practical problem is not Python syntax. It is deciding whether Python fits your GIS workflow at all.",[15,41,42],{},"This page explains what Python for GIS means, which problems it solves well, and when it is a better choice than doing everything manually in desktop GIS.",[10,44,46],{"id":45},"quick-answer","Quick answer",[15,48,49],{},"Python for GIS means using Python to read, clean, transform, analyze, and export spatial data.",[15,51,52],{},"In practice, Python is most useful for:",[22,54,55,58,61,64,67,70,73],{},[25,56,57],{},"automating repetitive GIS tasks",[25,59,60],{},"batch processing many files",[25,62,63],{},"cleaning attribute data",[25,65,66],{},"reprojecting and standardizing layers",[25,68,69],{},"running repeatable spatial analysis",[25,71,72],{},"converting between formats such as Shapefile and GeoJSON",[25,74,75],{},"combining spatial data with CSV, Excel, APIs, or databases",[15,77,78],{},"Use Python when a task repeats often, needs consistent documented steps, or becomes slow and error-prone in a manual GIS workflow. For one-off visual tasks, QGIS or ArcGIS may still be faster.",[10,80,82],{"id":81},"step-by-step-solution","Step-by-step solution",[84,85,87],"h3",{"id":86},"step-1-define-the-exact-gis-task","Step 1: Define the exact GIS task",[15,89,90],{},"Start with one specific problem.",[15,92,93],{},"Good examples:",[22,95,96,99,102,109],{},[25,97,98],{},"convert 200 shapefiles to GeoJSON",[25,100,101],{},"reproject all parcel layers to a single CRS",[25,103,104,105],{},"filter road features where ",[106,107,108],"code",{},"status = 'active'",[25,110,111],{},"join inspection results from CSV to a parcel layer",[15,113,114],{},"Avoid vague goals like “automate GIS.” Python is easier to evaluate when the task is clear.",[84,116,118],{"id":117},"step-2-check-whether-the-task-repeats","Step 2: Check whether the task repeats",[15,120,121],{},"Python is most valuable when the same workflow happens:",[22,123,124,127,130,133],{},[25,125,126],{},"across many files",[25,128,129],{},"every week or month",[25,131,132],{},"for multiple clients or projects",[25,134,135],{},"as part of a standard reporting process",[15,137,138],{},"If you only need to fix one file once, desktop GIS may be faster.",[84,140,142],{"id":141},"step-3-check-whether-the-inputs-are-structured","Step 3: Check whether the inputs are structured",[15,144,145],{},"Automation works best when the input data is predictable. Look for:",[22,147,148,151,154,157,160],{},[25,149,150],{},"consistent file names",[25,152,153],{},"expected columns",[25,155,156],{},"known geometry types",[25,158,159],{},"a valid and known CRS",[25,161,162],{},"stable folder structure",[15,164,165],{},"If every dataset arrives in a different format with different field names, you may need some manual cleanup before automation works reliably.",[84,167,169],{"id":168},"step-4-choose-the-right-python-tool","Step 4: Choose the right Python tool",[15,171,172],{},"Use the library that matches the data and task:",[22,174,175,182,188,194],{},[25,176,177,181],{},[178,179,180],"strong",{},"GeoPandas",": vector data reading, writing, filtering, joins, reprojection",[25,183,184,187],{},[178,185,186],{},"Shapely",": geometry objects and geometry-based operations",[25,189,190,193],{},[178,191,192],{},"Rasterio",": raster reading, writing, masking, transformations",[25,195,196,199],{},[178,197,198],{},"PyQGIS",": automation inside QGIS",[15,201,202],{},"For most beginner vector workflows, GeoPandas is the best starting point.",[84,204,206],{"id":205},"step-5-test-the-workflow-on-a-small-sample","Step 5: Test the workflow on a small sample",[15,208,209],{},"Before processing a full folder, test your script on a few files.",[15,211,212],{},"This helps you catch:",[22,214,215,218,221,224,227],{},[25,216,217],{},"missing fields",[25,219,220],{},"CRS problems",[25,222,223],{},"invalid geometries",[25,225,226],{},"export issues",[25,228,229],{},"unexpected file naming patterns",[15,231,232],{},"A small test run is much safer than finding problems after processing 500 files.",[84,234,236],{"id":235},"step-6-automate-the-stable-version-of-the-workflow","Step 6: Automate the stable version of the workflow",[15,238,239],{},"Once the manual steps are clear and the sample works, turn the workflow into a script.",[15,241,242],{},"This is where Python helps most:",[22,244,245,248,251,254],{},[25,246,247],{},"the same logic runs every time",[25,249,250],{},"the process is documented in code",[25,252,253],{},"new files can be processed with minimal manual work",[25,255,256],{},"the workflow is easier to review and reuse",[10,258,260],{"id":259},"code-examples","Code examples",[84,262,264],{"id":263},"example-1-read-a-shapefile-with-geopandas","Example 1: Read a shapefile with GeoPandas",[266,267,272],"pre",{"className":268,"code":269,"language":270,"meta":271,"style":271},"language-python shiki shiki-themes material-theme-lighter github-light github-dark","import geopandas as gpd\n\ngdf = gpd.read_file(\"data\u002Fparcels.shp\")\n\nprint(gdf.head())\nprint(gdf.crs)\nprint(gdf.columns)\n","python","",[106,273,274,293,300,337,342,362,379],{"__ignoreMap":271},[275,276,279,283,287,290],"span",{"class":277,"line":278},"line",1,[275,280,282],{"class":281},"sVHd0","import",[275,284,286],{"class":285},"su5hD"," geopandas ",[275,288,289],{"class":281},"as",[275,291,292],{"class":285}," gpd\n",[275,294,296],{"class":277,"line":295},2,[275,297,299],{"emptyLinePlaceholder":298},true,"\n",[275,301,303,306,310,313,317,321,324,328,332,334],{"class":277,"line":302},3,[275,304,305],{"class":285},"gdf ",[275,307,309],{"class":308},"smGrS","=",[275,311,312],{"class":285}," gpd",[275,314,316],{"class":315},"sP7_E",".",[275,318,320],{"class":319},"slqww","read_file",[275,322,323],{"class":315},"(",[275,325,327],{"class":326},"sjJ54","\"",[275,329,331],{"class":330},"s_sjI","data\u002Fparcels.shp",[275,333,327],{"class":326},[275,335,336],{"class":315},")\n",[275,338,340],{"class":277,"line":339},4,[275,341,299],{"emptyLinePlaceholder":298},[275,343,345,349,351,354,356,359],{"class":277,"line":344},5,[275,346,348],{"class":347},"sptTA","print",[275,350,323],{"class":315},[275,352,353],{"class":319},"gdf",[275,355,316],{"class":315},[275,357,358],{"class":319},"head",[275,360,361],{"class":315},"())\n",[275,363,365,367,369,371,373,377],{"class":277,"line":364},6,[275,366,348],{"class":347},[275,368,323],{"class":315},[275,370,353],{"class":319},[275,372,316],{"class":315},[275,374,376],{"class":375},"skxfh","crs",[275,378,336],{"class":315},[275,380,382,384,386,388,390,393],{"class":277,"line":381},7,[275,383,348],{"class":347},[275,385,323],{"class":315},[275,387,353],{"class":319},[275,389,316],{"class":315},[275,391,392],{"class":375},"columns",[275,394,336],{"class":315},[15,396,397],{},"This is a basic example of working with spatial data directly in Python. You can inspect attributes, geometry, and CRS without opening a desktop GIS project.",[84,399,401],{"id":400},"example-2-reproject-vector-data","Example 2: Reproject vector data",[266,403,405],{"className":268,"code":404,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\ngdf = gpd.read_file(\"data\u002Fparcels.shp\")\ngdf_projected = gdf.to_crs(\"EPSG:4326\")\n\ngdf_projected.to_file(\"output\u002Fparcels_4326.shp\")\n",[106,406,407,417,421,443,469,473],{"__ignoreMap":271},[275,408,409,411,413,415],{"class":277,"line":278},[275,410,282],{"class":281},[275,412,286],{"class":285},[275,414,289],{"class":281},[275,416,292],{"class":285},[275,418,419],{"class":277,"line":295},[275,420,299],{"emptyLinePlaceholder":298},[275,422,423,425,427,429,431,433,435,437,439,441],{"class":277,"line":302},[275,424,305],{"class":285},[275,426,309],{"class":308},[275,428,312],{"class":285},[275,430,316],{"class":315},[275,432,320],{"class":319},[275,434,323],{"class":315},[275,436,327],{"class":326},[275,438,331],{"class":330},[275,440,327],{"class":326},[275,442,336],{"class":315},[275,444,445,448,450,453,455,458,460,462,465,467],{"class":277,"line":339},[275,446,447],{"class":285},"gdf_projected ",[275,449,309],{"class":308},[275,451,452],{"class":285}," gdf",[275,454,316],{"class":315},[275,456,457],{"class":319},"to_crs",[275,459,323],{"class":315},[275,461,327],{"class":326},[275,463,464],{"class":330},"EPSG:4326",[275,466,327],{"class":326},[275,468,336],{"class":315},[275,470,471],{"class":277,"line":344},[275,472,299],{"emptyLinePlaceholder":298},[275,474,475,478,480,483,485,487,490,492],{"class":277,"line":364},[275,476,477],{"class":285},"gdf_projected",[275,479,316],{"class":315},[275,481,482],{"class":319},"to_file",[275,484,323],{"class":315},[275,486,327],{"class":326},[275,488,489],{"class":330},"output\u002Fparcels_4326.shp",[275,491,327],{"class":326},[275,493,336],{"class":315},[15,495,496],{},"This shows a common workflow: read data, transform it, and write a new output.",[84,498,500],{"id":499},"example-3-filter-features-by-attribute","Example 3: Filter features by attribute",[266,502,504],{"className":268,"code":503,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\ngdf = gpd.read_file(\"data\u002Froads.shp\")\n\nfiltered = gdf[gdf[\"status\"] == \"active\"]\n\nfiltered.to_file(\"output\u002Factive_roads.geojson\", driver=\"GeoJSON\")\n",[106,505,506,516,520,543,547,587,591],{"__ignoreMap":271},[275,507,508,510,512,514],{"class":277,"line":278},[275,509,282],{"class":281},[275,511,286],{"class":285},[275,513,289],{"class":281},[275,515,292],{"class":285},[275,517,518],{"class":277,"line":295},[275,519,299],{"emptyLinePlaceholder":298},[275,521,522,524,526,528,530,532,534,536,539,541],{"class":277,"line":302},[275,523,305],{"class":285},[275,525,309],{"class":308},[275,527,312],{"class":285},[275,529,316],{"class":315},[275,531,320],{"class":319},[275,533,323],{"class":315},[275,535,327],{"class":326},[275,537,538],{"class":330},"data\u002Froads.shp",[275,540,327],{"class":326},[275,542,336],{"class":315},[275,544,545],{"class":277,"line":339},[275,546,299],{"emptyLinePlaceholder":298},[275,548,549,552,554,556,559,561,563,565,568,570,573,576,579,582,584],{"class":277,"line":344},[275,550,551],{"class":285},"filtered ",[275,553,309],{"class":308},[275,555,452],{"class":285},[275,557,558],{"class":315},"[",[275,560,353],{"class":285},[275,562,558],{"class":315},[275,564,327],{"class":326},[275,566,567],{"class":330},"status",[275,569,327],{"class":326},[275,571,572],{"class":315},"]",[275,574,575],{"class":308}," ==",[275,577,578],{"class":326}," \"",[275,580,581],{"class":330},"active",[275,583,327],{"class":326},[275,585,586],{"class":315},"]\n",[275,588,589],{"class":277,"line":364},[275,590,299],{"emptyLinePlaceholder":298},[275,592,593,596,598,600,602,604,607,609,612,616,618,620,623,625],{"class":277,"line":381},[275,594,595],{"class":285},"filtered",[275,597,316],{"class":315},[275,599,482],{"class":319},[275,601,323],{"class":315},[275,603,327],{"class":326},[275,605,606],{"class":330},"output\u002Factive_roads.geojson",[275,608,327],{"class":326},[275,610,611],{"class":315},",",[275,613,615],{"class":614},"s99_P"," driver",[275,617,309],{"class":308},[275,619,327],{"class":326},[275,621,622],{"class":330},"GeoJSON",[275,624,327],{"class":326},[275,626,336],{"class":315},[15,628,629],{},"This replaces a manual select-and-export step in desktop GIS.",[84,631,633],{"id":632},"example-4-batch-process-multiple-shapefiles-in-a-folder","Example 4: Batch process multiple shapefiles in a folder",[266,635,637],{"className":268,"code":636,"language":270,"meta":271,"style":271},"from pathlib import Path\nimport geopandas as gpd\n\ninput_folder = Path(\"data\u002Finput_layers\")\noutput_folder = Path(\"output\u002Freprojected_geojson\")\noutput_folder.mkdir(parents=True, exist_ok=True)\n\nfor shp_file in input_folder.glob(\"*.shp\"):\n    gdf = gpd.read_file(shp_file)\n    gdf = gdf.to_crs(\"EPSG:4326\")\n\n    output_file = output_folder \u002F f\"{shp_file.stem}.geojson\"\n    gdf.to_file(output_file, driver=\"GeoJSON\")\n",[106,638,639,652,662,666,687,707,739,743,775,796,819,824,861],{"__ignoreMap":271},[275,640,641,644,647,649],{"class":277,"line":278},[275,642,643],{"class":281},"from",[275,645,646],{"class":285}," pathlib ",[275,648,282],{"class":281},[275,650,651],{"class":285}," Path\n",[275,653,654,656,658,660],{"class":277,"line":295},[275,655,282],{"class":281},[275,657,286],{"class":285},[275,659,289],{"class":281},[275,661,292],{"class":285},[275,663,664],{"class":277,"line":302},[275,665,299],{"emptyLinePlaceholder":298},[275,667,668,671,673,676,678,680,683,685],{"class":277,"line":339},[275,669,670],{"class":285},"input_folder ",[275,672,309],{"class":308},[275,674,675],{"class":319}," Path",[275,677,323],{"class":315},[275,679,327],{"class":326},[275,681,682],{"class":330},"data\u002Finput_layers",[275,684,327],{"class":326},[275,686,336],{"class":315},[275,688,689,692,694,696,698,700,703,705],{"class":277,"line":344},[275,690,691],{"class":285},"output_folder ",[275,693,309],{"class":308},[275,695,675],{"class":319},[275,697,323],{"class":315},[275,699,327],{"class":326},[275,701,702],{"class":330},"output\u002Freprojected_geojson",[275,704,327],{"class":326},[275,706,336],{"class":315},[275,708,709,712,714,717,719,722,724,728,730,733,735,737],{"class":277,"line":364},[275,710,711],{"class":285},"output_folder",[275,713,316],{"class":315},[275,715,716],{"class":319},"mkdir",[275,718,323],{"class":315},[275,720,721],{"class":614},"parents",[275,723,309],{"class":308},[275,725,727],{"class":726},"s39Yj","True",[275,729,611],{"class":315},[275,731,732],{"class":614}," exist_ok",[275,734,309],{"class":308},[275,736,727],{"class":726},[275,738,336],{"class":315},[275,740,741],{"class":277,"line":381},[275,742,299],{"emptyLinePlaceholder":298},[275,744,746,749,752,755,758,760,763,765,767,770,772],{"class":277,"line":745},8,[275,747,748],{"class":281},"for",[275,750,751],{"class":285}," shp_file ",[275,753,754],{"class":281},"in",[275,756,757],{"class":285}," input_folder",[275,759,316],{"class":315},[275,761,762],{"class":319},"glob",[275,764,323],{"class":315},[275,766,327],{"class":326},[275,768,769],{"class":330},"*.shp",[275,771,327],{"class":326},[275,773,774],{"class":315},"):\n",[275,776,778,781,783,785,787,789,791,794],{"class":277,"line":777},9,[275,779,780],{"class":285},"    gdf ",[275,782,309],{"class":308},[275,784,312],{"class":285},[275,786,316],{"class":315},[275,788,320],{"class":319},[275,790,323],{"class":315},[275,792,793],{"class":319},"shp_file",[275,795,336],{"class":315},[275,797,799,801,803,805,807,809,811,813,815,817],{"class":277,"line":798},10,[275,800,780],{"class":285},[275,802,309],{"class":308},[275,804,452],{"class":285},[275,806,316],{"class":315},[275,808,457],{"class":319},[275,810,323],{"class":315},[275,812,327],{"class":326},[275,814,464],{"class":330},[275,816,327],{"class":326},[275,818,336],{"class":315},[275,820,822],{"class":277,"line":821},11,[275,823,299],{"emptyLinePlaceholder":298},[275,825,827,830,832,835,838,842,844,848,850,852,855,858],{"class":277,"line":826},12,[275,828,829],{"class":285},"    output_file ",[275,831,309],{"class":308},[275,833,834],{"class":285}," output_folder ",[275,836,837],{"class":308},"\u002F",[275,839,841],{"class":840},"sbsja"," f",[275,843,327],{"class":330},[275,845,847],{"class":846},"srdBf","{",[275,849,793],{"class":285},[275,851,316],{"class":315},[275,853,854],{"class":375},"stem",[275,856,857],{"class":846},"}",[275,859,860],{"class":330},".geojson\"\n",[275,862,864,867,869,871,873,876,878,880,882,884,886,888],{"class":277,"line":863},13,[275,865,866],{"class":285},"    gdf",[275,868,316],{"class":315},[275,870,482],{"class":319},[275,872,323],{"class":315},[275,874,875],{"class":319},"output_file",[275,877,611],{"class":315},[275,879,615],{"class":614},[275,881,309],{"class":308},[275,883,327],{"class":326},[275,885,622],{"class":330},[275,887,327],{"class":326},[275,889,336],{"class":315},[15,891,892],{},"This is a typical case where Python is clearly better than repeating the same steps by hand for many files.",[10,894,896],{"id":895},"explanation","Explanation",[84,898,900],{"id":899},"what-python-for-gis-means-in-practice","What Python for GIS means in practice",[15,902,903],{},"In GIS work, Python usually means one of three things:",[905,906,908],"h4",{"id":907},"automating-repetitive-gis-tasks","Automating repetitive GIS tasks",[15,910,911],{},"Common examples include:",[22,913,914,917,920,923,926],{},[25,915,916],{},"renaming fields across many layers",[25,918,919],{},"clipping many files to the same boundary",[25,921,922],{},"reprojecting datasets to one CRS",[25,924,925],{},"converting shapefiles to GeoJSON",[25,927,928],{},"exporting cleaned outputs to a standard folder structure",[15,930,931],{},"If you repeat the same process often, scripting usually saves time and reduces mistakes.",[905,933,935],{"id":934},"working-with-spatial-data-directly","Working with spatial data directly",[15,937,938],{},"Python can read and manipulate many common spatial data formats without opening a desktop GIS project.",[15,940,941],{},"With tools like GeoPandas and Shapely, you can:",[22,943,944,947,950,953,956,959],{},[25,945,946],{},"load shapefiles and GeoJSON",[25,948,949],{},"inspect columns and CRS",[25,951,952],{},"filter records",[25,954,955],{},"edit attributes",[25,957,958],{},"calculate geometry-based results",[25,960,961],{},"write outputs to new files",[15,963,964],{},"This is useful when you want a reproducible data workflow instead of a manual GUI process.",[905,966,968],{"id":967},"building-repeatable-workflows","Building repeatable workflows",[15,970,971],{},"A script gives you repeatable steps. If a workflow runs regularly, Python makes it easier to:",[22,973,974,977,980,983],{},[25,975,976],{},"keep the process consistent",[25,978,979],{},"document what was done",[25,981,982],{},"rerun the same logic on new data",[25,984,985],{},"scale from a few files to hundreds",[15,987,988],{},"That is the main reason many GIS users start using Python.",[84,990,992],{"id":991},"common-gis-problems-python-is-good-at-solving","Common GIS problems Python is good at solving",[15,994,995],{},"Python is a good fit for tasks such as:",[905,997,999],{"id":998},"batch-processing-many-files","Batch processing many files",[15,1001,1002],{},"Instead of opening each file manually, you can loop through a folder and apply the same operation to all of them.",[905,1004,1006],{"id":1005},"cleaning-attribute-tables","Cleaning attribute tables",[15,1008,1009],{},"You can standardize column names, fix missing values, trim text, and convert field types before spatial analysis.",[905,1011,1013],{"id":1012},"reprojecting-and-standardizing-data","Reprojecting and standardizing data",[15,1015,1016],{},"If incoming layers arrive in mixed coordinate systems, Python can convert them to one target CRS.",[905,1018,1020],{"id":1019},"joining-tabular-data-to-spatial-layers","Joining tabular data to spatial layers",[15,1022,1023],{},"Python works well when you need to combine a spatial layer with CSV, Excel, API results, or database tables.",[905,1025,1027],{"id":1026},"repeating-the-same-analysis","Repeating the same analysis",[15,1029,1030],{},"If you run the same buffer, overlay, filter, or dissolve process often, Python removes much of the manual repetition.",[905,1032,1034],{"id":1033},"exporting-outputs-for-other-systems","Exporting outputs for other systems",[15,1036,1037],{},"You can write results to Shapefile, GeoJSON, GeoPackage, or CSV as part of one script.",[84,1039,1041],{"id":1040},"when-to-use-python-for-gis","When to use Python for GIS",[15,1043,1044],{},"Use Python when:",[22,1046,1047,1050,1053,1056,1059],{},[25,1048,1049],{},"the task is repetitive",[25,1051,1052],{},"the workflow needs to be documented",[25,1054,1055],{},"the same logic must run on many files",[25,1057,1058],{},"the process needs to connect with non-GIS data sources",[25,1060,1061],{},"manual desktop work is becoming slow or inconsistent",[84,1063,1065],{"id":1064},"when-not-to-use-python-first","When not to use Python first",[15,1067,1068],{},"Python is not always the best first choice.",[15,1070,1071],{},"Desktop GIS is often better when:",[22,1073,1074,1077,1080,1083],{},[25,1075,1076],{},"the task is a one-off operation",[25,1078,1079],{},"you need visual inspection and manual editing",[25,1081,1082],{},"the workflow is still being explored and is not stable enough to automate",[25,1084,1085],{},"the work is mainly cartographic layout or visual QA",[15,1087,1088],{},"A practical approach is to test a workflow manually first, then automate it once the steps are clear.",[84,1090,1092],{"id":1091},"core-python-gis-tools-to-know","Core Python GIS tools to know",[905,1094,180],{"id":1095},"geopandas",[15,1097,1098],{},"GeoPandas is the most practical entry point for vector workflows. It handles shapefiles, GeoJSON, CRS conversion, filtering, joins, and exports.",[905,1100,186],{"id":1101},"shapely",[15,1103,1104],{},"Shapely focuses on geometry objects and operations such as intersections, buffers, and other geometry-based operations.",[905,1106,192],{"id":1107},"rasterio",[15,1109,1110],{},"Rasterio is used for raster reading, writing, masking, and transformations.",[905,1112,198],{"id":1113},"pyqgis",[15,1115,1116],{},"PyQGIS is useful when you want to automate work inside QGIS itself.",[10,1118,1120],{"id":1119},"edge-cases-or-notes","Edge cases or notes",[84,1122,1124],{"id":1123},"python-does-not-replace-gis-knowledge","Python does not replace GIS knowledge",[15,1126,1127],{},"You still need to understand layers, attributes, geometry types, and coordinate reference systems. Python automates GIS work, but it does not remove the need for GIS basics.",[84,1129,1131],{"id":1130},"crs-problems-still-matter","CRS problems still matter",[15,1133,1134,1135,1138],{},"A script will not fix an incorrectly assigned CRS automatically. Always check ",[106,1136,1137],{},"gdf.crs"," before reprojecting data.",[84,1140,1142],{"id":1141},"invalid-geometries-can-break-workflows","Invalid geometries can break workflows",[15,1144,1145],{},"Some spatial operations fail when geometries are invalid. If overlays, buffers, or exports behave unexpectedly, inspect geometry validity before assuming the code is wrong.",[84,1147,1149],{"id":1148},"dirty-input-data-can-break-automation","Dirty input data can break automation",[15,1151,1152],{},"Missing fields, inconsistent column names, mixed formats, and unexpected null values can cause scripts to fail. Predictable input data makes automation much easier.",[84,1154,1156],{"id":1155},"small-scripts-are-often-enough","Small scripts are often enough",[15,1158,1159],{},"You do not need a large application. Many useful GIS workflows are solved with short scripts that handle one repetitive task well.",[10,1161,1163],{"id":1162},"internal-links","Internal links",[15,1165,1166,1167,316],{},"For a broader introduction to vector data in Python, see ",[1168,1169,1171],"a",{"href":1170},"\u002Ffoundation\u002Fgeopandas-basics\u002F","GeoPandas Basics: Working with Spatial Data in Python",[15,1173,1174,1175,1179,1180,316],{},"For related task guides, start with ",[1168,1176,1178],{"href":1177},"\u002Ftasks\u002Fread-shapefile-geopandas\u002F","how to read a shapefile with GeoPandas"," and ",[1168,1181,1183],{"href":1182},"\u002Ftasks\u002Freproject-geodataframe-python\u002F","how to reproject vector data with GeoPandas",[15,1185,1186,1187,316],{},"If you need more background on coordinate systems, see ",[1168,1188,1190],{"href":1189},"\u002Ffoundation\u002Fcrs-coordinate-systems-explained\u002F","Coordinate Reference Systems (CRS) Explained for Python GIS",[15,1192,1193,1194,316],{},"If your layers are not lining up correctly, check ",[1168,1195,1197],{"href":1196},"\u002Ftroubleshooting\u002Ffix-crs-mismatch-geopandas\u002F","how to fix CRS mismatch issues in GeoPandas",[10,1199,1201],{"id":1200},"faq","FAQ",[84,1203,1205],{"id":1204},"what-does-python-for-gis-actually-mean","What does Python for GIS actually mean?",[15,1207,1208],{},"It means using Python to automate GIS tasks and work directly with spatial data. That includes reading files, cleaning attributes, reprojecting layers, filtering features, running analysis, and exporting results.",[84,1210,1212],{"id":1211},"when-should-i-use-python-instead-of-qgis-tools","When should I use Python instead of QGIS tools?",[15,1214,1215],{},"Use Python when the task is repetitive, needs consistent documented steps, or must run on many files. For one-off visual tasks, QGIS may be faster.",[84,1217,1219],{"id":1218},"do-i-need-to-be-a-developer-to-use-python-for-gis","Do I need to be a developer to use Python for GIS?",[15,1221,1222],{},"No. Many GIS users start with small scripts for tasks like reprojection, file conversion, or filtering records. Beginner to intermediate Python is enough for many real workflows.",[84,1224,1226],{"id":1225},"what-python-libraries-are-most-useful-for-gis-beginners","What Python libraries are most useful for GIS beginners?",[15,1228,1229],{},"For vector data, start with GeoPandas and Shapely. For raster data, use Rasterio. If you want to automate QGIS directly, use PyQGIS.",[1231,1232,1233],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":271,"searchDepth":295,"depth":295,"links":1235},[1236,1237,1238,1246,1252,1259,1266,1267],{"id":12,"depth":295,"text":13},{"id":45,"depth":295,"text":46},{"id":81,"depth":295,"text":82,"children":1239},[1240,1241,1242,1243,1244,1245],{"id":86,"depth":302,"text":87},{"id":117,"depth":302,"text":118},{"id":141,"depth":302,"text":142},{"id":168,"depth":302,"text":169},{"id":205,"depth":302,"text":206},{"id":235,"depth":302,"text":236},{"id":259,"depth":295,"text":260,"children":1247},[1248,1249,1250,1251],{"id":263,"depth":302,"text":264},{"id":400,"depth":302,"text":401},{"id":499,"depth":302,"text":500},{"id":632,"depth":302,"text":633},{"id":895,"depth":295,"text":896,"children":1253},[1254,1255,1256,1257,1258],{"id":899,"depth":302,"text":900},{"id":991,"depth":302,"text":992},{"id":1040,"depth":302,"text":1041},{"id":1064,"depth":302,"text":1065},{"id":1091,"depth":302,"text":1092},{"id":1119,"depth":295,"text":1120,"children":1260},[1261,1262,1263,1264,1265],{"id":1123,"depth":302,"text":1124},{"id":1130,"depth":302,"text":1131},{"id":1141,"depth":302,"text":1142},{"id":1148,"depth":302,"text":1149},{"id":1155,"depth":302,"text":1156},{"id":1162,"depth":295,"text":1163},{"id":1200,"depth":295,"text":1201,"children":1268},[1269,1270,1271,1272],{"id":1204,"depth":302,"text":1205},{"id":1211,"depth":302,"text":1212},{"id":1218,"depth":302,"text":1219},{"id":1225,"depth":302,"text":1226},"Learn what Python for GIS means, when to use it, and which tools to start with for automating spatial workflows.","md",{},"\u002Ffoundation\u002Fpython-for-gis-introduction",{"title":5,"description":1273},"foundation\u002Fpython-for-gis-introduction","foXYa8BrZ-6FKPfmLq4AvqtcYS32v-uLrba4_YbCFBY",[1281,3040,4865],{"id":1282,"title":1190,"body":1283,"description":3034,"extension":1274,"meta":3035,"navigation":298,"path":3036,"seo":3037,"stem":3038,"__hash__":3039},"content\u002Ffoundation\u002Fcrs-coordinate-systems-explained.md",{"type":7,"value":1284,"toc":2996},[1285,1287,1290,1293,1310,1313,1315,1318,1321,1348,1351,1372,1374,1378,1381,1384,1404,1407,1415,1418,1422,1429,1432,1439,1442,1456,1462,1464,1472,1474,1488,1491,1495,1498,1501,1519,1522,1526,1533,1589,1592,1609,1612,1615,1642,1645,1654,1658,1661,1673,1679,1684,1687,1691,1694,1705,1708,1720,1723,1727,1730,1752,1755,1758,1812,1815,1817,1821,1925,1928,1932,2144,2147,2151,2324,2327,2331,2533,2536,2540,2818,2821,2823,2826,2850,2853,2855,2859,2862,2866,2869,2880,2884,2887,2891,2897,2901,2904,2908,2914,2916,2922,2925,2937,2943,2945,2949,2952,2956,2961,2971,2979,2983,2986,2990,2993],[10,1286,13],{"id":12},[15,1288,1289],{},"Many Python GIS errors are really CRS problems.",[15,1291,1292],{},"A layer can load without errors and still give wrong results because its coordinate reference system is missing, incorrect, or different from the other layers in your workflow. This often causes:",[22,1294,1295,1298,1301,1304,1307],{},[25,1296,1297],{},"overlays that do not line up",[25,1299,1300],{},"spatial joins that return no matches",[25,1302,1303],{},"buffers with unrealistic sizes",[25,1305,1306],{},"distance and area calculations that are wrong",[25,1308,1309],{},"maps that display data in the wrong place",[15,1311,1312],{},"If you have ever asked what CRS means in GIS, the practical answer is simple: CRS controls what your coordinate values mean. This page explains CRS well enough to help you inspect, assign, and transform spatial data correctly in Python.",[10,1314,46],{"id":45},[15,1316,1317],{},"A CRS tells GIS software how coordinate numbers relate to real locations on the earth.",[15,1319,1320],{},"In practice, there are two separate questions:",[1322,1323,1324,1340],"ol",{},[25,1325,1326,1329,1332,1333,1336,1337],{},[178,1327,1328],{},"What numbers are stored in the geometry?",[1330,1331],"br",{},"\nExample: ",[106,1334,1335],{},"(-73.98, 40.75)"," or ",[106,1338,1339],{},"(583240, 4501120)",[25,1341,1342,1345,1347],{},[178,1343,1344],{},"What do those numbers mean?",[1330,1346],{},"\nAre they longitude\u002Flatitude in degrees, or projected coordinates in meters?",[15,1349,1350],{},"The practical rule for Python GIS workflows is:",[22,1352,1353,1356,1363,1369],{},[25,1354,1355],{},"always check CRS before analysis",[25,1357,1358,1359,1362],{},"use ",[106,1360,1361],{},"set_crs()"," only when the CRS is missing but you already know the correct one",[25,1364,1358,1365,1368],{},[106,1366,1367],{},"to_crs()"," when you need to transform data into a different CRS",[25,1370,1371],{},"reproject layers to a common CRS before overlay, join, clip, buffer, or measurement",[10,1373,82],{"id":81},[84,1375,1377],{"id":1376},"_1-understand-what-a-crs-does","1. Understand what a CRS does",[15,1379,1380],{},"A CRS defines how coordinates map to real-world locations. The same geometry values can represent completely different places depending on the CRS.",[15,1382,1383],{},"For example, these numbers:",[266,1385,1387],{"className":268,"code":1386,"language":270,"meta":271,"style":271},"POINT (12 55)\n",[106,1388,1389],{"__ignoreMap":271},[275,1390,1391,1394,1396,1399,1402],{"class":277,"line":278},[275,1392,1393],{"class":319},"POINT ",[275,1395,323],{"class":315},[275,1397,1398],{"class":846},"12",[275,1400,1401],{"class":846}," 55",[275,1403,336],{"class":315},[15,1405,1406],{},"could mean:",[22,1408,1409,1412],{},[25,1410,1411],{},"longitude 12°, latitude 55° in a geographic CRS",[25,1413,1414],{},"x=12 meters, y=55 meters in a projected CRS",[15,1416,1417],{},"Without CRS information, the coordinates are just numbers.",[84,1419,1421],{"id":1420},"_2-know-the-difference-between-geographic-and-projected-crs","2. Know the difference between geographic and projected CRS",[15,1423,1424,1425,1428],{},"A ",[178,1426,1427],{},"geographic CRS"," stores angular coordinates, usually longitude and latitude in degrees.",[15,1430,1431],{},"Common example:",[22,1433,1434],{},[25,1435,1436,1438],{},[106,1437,464],{}," — WGS 84",[15,1440,1441],{},"This is useful for:",[22,1443,1444,1447,1450,1453],{},[25,1445,1446],{},"storing global data",[25,1448,1449],{},"exchanging data",[25,1451,1452],{},"web APIs and GeoJSON",[25,1454,1455],{},"basic mapping",[15,1457,1424,1458,1461],{},[178,1459,1460],{},"projected CRS"," converts the curved earth to a flat coordinate system with planar units such as meters or feet.",[15,1463,1431],{},[22,1465,1466],{},[25,1467,1468,1471],{},[106,1469,1470],{},"EPSG:32633"," — WGS 84 \u002F UTM zone 33N",[15,1473,1441],{},[22,1475,1476,1479,1482,1485],{},[25,1477,1478],{},"distance calculations",[25,1480,1481],{},"area calculations",[25,1483,1484],{},"buffering",[25,1486,1487],{},"local or regional analysis",[15,1489,1490],{},"In practice, geographic CRS is good for storing and sharing locations, while projected CRS is usually better for measurement.",[84,1492,1494],{"id":1493},"_3-use-epsg-codes-to-identify-crs-definitions","3. Use EPSG codes to identify CRS definitions",[15,1496,1497],{},"An EPSG code is a standard identifier for a CRS definition.",[15,1499,1500],{},"Examples:",[22,1502,1503,1508,1514],{},[25,1504,1505,1507],{},[106,1506,464],{}," — WGS 84 geographic coordinates",[25,1509,1510,1513],{},[106,1511,1512],{},"EPSG:3857"," — Web Mercator, common in web maps",[25,1515,1516,1518],{},[106,1517,1470],{}," — UTM zone 33N, projected in meters",[15,1520,1521],{},"For most day-to-day Python GIS work, the EPSG code is enough. GeoPandas and pyproj use it to look up the full CRS definition.",[84,1523,1525],{"id":1524},"_4-inspect-crs-before-doing-any-analysis","4. Inspect CRS before doing any analysis",[15,1527,1528,1529,1532],{},"Use the ",[106,1530,1531],{},".crs"," attribute on a GeoDataFrame.",[266,1534,1536],{"className":268,"code":1535,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\ngdf = gpd.read_file(\"data\u002Fcities.geojson\")\nprint(gdf.crs)\n",[106,1537,1538,1548,1552,1575],{"__ignoreMap":271},[275,1539,1540,1542,1544,1546],{"class":277,"line":278},[275,1541,282],{"class":281},[275,1543,286],{"class":285},[275,1545,289],{"class":281},[275,1547,292],{"class":285},[275,1549,1550],{"class":277,"line":295},[275,1551,299],{"emptyLinePlaceholder":298},[275,1553,1554,1556,1558,1560,1562,1564,1566,1568,1571,1573],{"class":277,"line":302},[275,1555,305],{"class":285},[275,1557,309],{"class":308},[275,1559,312],{"class":285},[275,1561,316],{"class":315},[275,1563,320],{"class":319},[275,1565,323],{"class":315},[275,1567,327],{"class":326},[275,1569,1570],{"class":330},"data\u002Fcities.geojson",[275,1572,327],{"class":326},[275,1574,336],{"class":315},[275,1576,1577,1579,1581,1583,1585,1587],{"class":277,"line":339},[275,1578,348],{"class":347},[275,1580,323],{"class":315},[275,1582,353],{"class":319},[275,1584,316],{"class":315},[275,1586,376],{"class":375},[275,1588,336],{"class":315},[15,1590,1591],{},"Possible output:",[266,1593,1595],{"className":268,"code":1594,"language":270,"meta":271,"style":271},"EPSG:4326\n",[106,1596,1597],{"__ignoreMap":271},[275,1598,1599,1603,1606],{"class":277,"line":278},[275,1600,1602],{"class":1601},"s_hVV","EPSG",[275,1604,1605],{"class":315},":",[275,1607,1608],{"class":846},"4326\n",[15,1610,1611],{},"or a longer WKT definition.",[15,1613,1614],{},"You can also compare CRS values directly:",[266,1616,1618],{"className":268,"code":1617,"language":270,"meta":271,"style":271},"print(gdf.crs == \"EPSG:4326\")\n",[106,1619,1620],{"__ignoreMap":271},[275,1621,1622,1624,1626,1628,1630,1632,1634,1636,1638,1640],{"class":277,"line":278},[275,1623,348],{"class":347},[275,1625,323],{"class":315},[275,1627,353],{"class":319},[275,1629,316],{"class":315},[275,1631,376],{"class":375},[275,1633,575],{"class":308},[275,1635,578],{"class":326},[275,1637,464],{"class":330},[275,1639,327],{"class":326},[275,1641,336],{"class":315},[15,1643,1644],{},"A missing CRS appears as:",[266,1646,1648],{"className":268,"code":1647,"language":270,"meta":271,"style":271},"None\n",[106,1649,1650],{"__ignoreMap":271},[275,1651,1652],{"class":277,"line":278},[275,1653,1647],{"class":726},[84,1655,1657],{"id":1656},"_5-distinguish-between-assigning-crs-and-reprojecting-data","5. Distinguish between assigning CRS and reprojecting data",[15,1659,1660],{},"This is the most important CRS distinction in Python GIS work.",[22,1662,1663,1668],{},[25,1664,1665,1667],{},[106,1666,1361],{}," assigns CRS metadata to existing coordinates",[25,1669,1670,1672],{},[106,1671,1367],{}," transforms coordinates into a new CRS",[15,1674,1675,1676,1678],{},"Use ",[106,1677,1361],{}," only if the coordinates are already in that CRS but the file is unlabeled.",[15,1680,1675,1681,1683],{},[106,1682,1367],{}," when you want to change coordinates from one CRS to another.",[15,1685,1686],{},"If you confuse these two operations, the data may look valid but produce wrong results.",[84,1688,1690],{"id":1689},"_6-choose-a-projected-crs-for-measurement-tasks","6. Choose a projected CRS for measurement tasks",[15,1692,1693],{},"Use a geographic CRS when you need:",[22,1695,1696,1699,1702],{},[25,1697,1698],{},"standard storage format",[25,1700,1701],{},"longitude\u002Flatitude output",[25,1703,1704],{},"web service compatibility",[15,1706,1707],{},"Use a projected CRS when you need:",[22,1709,1710,1713,1715,1717],{},[25,1711,1712],{},"distance in meters or feet",[25,1714,1481],{},[25,1716,1484],{},[25,1718,1719],{},"better local accuracy",[15,1721,1722],{},"For analysis, choose a projected CRS that matches your study area. In practice, this is often a local UTM zone or a national or regional projected CRS used by the data provider.",[84,1724,1726],{"id":1725},"_7-reproject-layers-to-a-common-crs-before-combining-them","7. Reproject layers to a common CRS before combining them",[15,1728,1729],{},"Before running:",[22,1731,1732,1737,1742,1747,1749],{},[25,1733,1734],{},[106,1735,1736],{},"overlay()",[25,1738,1739],{},[106,1740,1741],{},"sjoin()",[25,1743,1744],{},[106,1745,1746],{},"clip()",[25,1748,1484],{},[25,1750,1751],{},"area or distance calculations",[15,1753,1754],{},"check that both layers use the same CRS.",[15,1756,1757],{},"Basic check:",[266,1759,1761],{"className":268,"code":1760,"language":270,"meta":271,"style":271},"if gdf1.crs != gdf2.crs:\n    gdf2 = gdf2.to_crs(gdf1.crs)\n",[106,1762,1763,1788],{"__ignoreMap":271},[275,1764,1765,1768,1771,1773,1775,1778,1781,1783,1785],{"class":277,"line":278},[275,1766,1767],{"class":281},"if",[275,1769,1770],{"class":285}," gdf1",[275,1772,316],{"class":315},[275,1774,376],{"class":375},[275,1776,1777],{"class":308}," !=",[275,1779,1780],{"class":285}," gdf2",[275,1782,316],{"class":315},[275,1784,376],{"class":375},[275,1786,1787],{"class":315},":\n",[275,1789,1790,1793,1795,1797,1799,1801,1803,1806,1808,1810],{"class":277,"line":295},[275,1791,1792],{"class":285},"    gdf2 ",[275,1794,309],{"class":308},[275,1796,1780],{"class":285},[275,1798,316],{"class":315},[275,1800,457],{"class":319},[275,1802,323],{"class":315},[275,1804,1805],{"class":319},"gdf1",[275,1807,316],{"class":315},[275,1809,376],{"class":375},[275,1811,336],{"class":315},[15,1813,1814],{},"This avoids many CRS mismatch problems in GeoPandas workflows.",[10,1816,260],{"id":259},[84,1818,1820],{"id":1819},"example-1-read-a-file-and-inspect-its-crs","Example 1: Read a file and inspect its CRS",[266,1822,1824],{"className":268,"code":1823,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nroads = gpd.read_file(\"data\u002Froads.shp\")\nprint(\"CRS:\", roads.crs)\n\nif roads.crs is None:\n    print(\"This layer has no CRS metadata.\")\n",[106,1825,1826,1836,1840,1863,1887,1891,1909],{"__ignoreMap":271},[275,1827,1828,1830,1832,1834],{"class":277,"line":278},[275,1829,282],{"class":281},[275,1831,286],{"class":285},[275,1833,289],{"class":281},[275,1835,292],{"class":285},[275,1837,1838],{"class":277,"line":295},[275,1839,299],{"emptyLinePlaceholder":298},[275,1841,1842,1845,1847,1849,1851,1853,1855,1857,1859,1861],{"class":277,"line":302},[275,1843,1844],{"class":285},"roads ",[275,1846,309],{"class":308},[275,1848,312],{"class":285},[275,1850,316],{"class":315},[275,1852,320],{"class":319},[275,1854,323],{"class":315},[275,1856,327],{"class":326},[275,1858,538],{"class":330},[275,1860,327],{"class":326},[275,1862,336],{"class":315},[275,1864,1865,1867,1869,1871,1874,1876,1878,1881,1883,1885],{"class":277,"line":339},[275,1866,348],{"class":347},[275,1868,323],{"class":315},[275,1870,327],{"class":326},[275,1872,1873],{"class":330},"CRS:",[275,1875,327],{"class":326},[275,1877,611],{"class":315},[275,1879,1880],{"class":319}," roads",[275,1882,316],{"class":315},[275,1884,376],{"class":375},[275,1886,336],{"class":315},[275,1888,1889],{"class":277,"line":344},[275,1890,299],{"emptyLinePlaceholder":298},[275,1892,1893,1895,1897,1899,1901,1904,1907],{"class":277,"line":364},[275,1894,1767],{"class":281},[275,1896,1880],{"class":285},[275,1898,316],{"class":315},[275,1900,376],{"class":375},[275,1902,1903],{"class":308}," is",[275,1905,1906],{"class":726}," None",[275,1908,1787],{"class":315},[275,1910,1911,1914,1916,1918,1921,1923],{"class":277,"line":381},[275,1912,1913],{"class":347},"    print",[275,1915,323],{"class":315},[275,1917,327],{"class":326},[275,1919,1920],{"class":330},"This layer has no CRS metadata.",[275,1922,327],{"class":326},[275,1924,336],{"class":315},[15,1926,1927],{},"Use this before any analysis. Never assume the CRS.",[84,1929,1931],{"id":1930},"example-2-assign-a-crs-to-data-that-has-none","Example 2: Assign a CRS to data that has none",[266,1933,1935],{"className":268,"code":1934,"language":270,"meta":271,"style":271},"import geopandas as gpd\nfrom shapely.geometry import Point\n\ngdf = gpd.GeoDataFrame(\n    {\"name\": [\"A\", \"B\"]},\n    geometry=[Point(-73.98, 40.75), Point(-74.01, 40.72)]\n)\n\nprint(gdf.crs)  # None\n\n# Coordinates are known to be longitude\u002Flatitude in WGS84\ngdf = gdf.set_crs(\"EPSG:4326\")\n\nprint(gdf.crs)\n",[106,1936,1937,1947,1964,1968,1984,2020,2066,2070,2074,2093,2097,2102,2125,2129],{"__ignoreMap":271},[275,1938,1939,1941,1943,1945],{"class":277,"line":278},[275,1940,282],{"class":281},[275,1942,286],{"class":285},[275,1944,289],{"class":281},[275,1946,292],{"class":285},[275,1948,1949,1951,1954,1956,1959,1961],{"class":277,"line":295},[275,1950,643],{"class":281},[275,1952,1953],{"class":285}," shapely",[275,1955,316],{"class":315},[275,1957,1958],{"class":285},"geometry ",[275,1960,282],{"class":281},[275,1962,1963],{"class":285}," Point\n",[275,1965,1966],{"class":277,"line":302},[275,1967,299],{"emptyLinePlaceholder":298},[275,1969,1970,1972,1974,1976,1978,1981],{"class":277,"line":339},[275,1971,305],{"class":285},[275,1973,309],{"class":308},[275,1975,312],{"class":285},[275,1977,316],{"class":315},[275,1979,1980],{"class":319},"GeoDataFrame",[275,1982,1983],{"class":315},"(\n",[275,1985,1986,1989,1991,1994,1996,1998,2001,2003,2006,2008,2010,2012,2015,2017],{"class":277,"line":344},[275,1987,1988],{"class":315},"    {",[275,1990,327],{"class":326},[275,1992,1993],{"class":330},"name",[275,1995,327],{"class":326},[275,1997,1605],{"class":315},[275,1999,2000],{"class":315}," [",[275,2002,327],{"class":326},[275,2004,2005],{"class":330},"A",[275,2007,327],{"class":326},[275,2009,611],{"class":315},[275,2011,578],{"class":326},[275,2013,2014],{"class":330},"B",[275,2016,327],{"class":326},[275,2018,2019],{"class":315},"]},\n",[275,2021,2022,2025,2027,2029,2032,2034,2037,2040,2042,2045,2048,2051,2053,2055,2058,2060,2063],{"class":277,"line":364},[275,2023,2024],{"class":614},"    geometry",[275,2026,309],{"class":308},[275,2028,558],{"class":315},[275,2030,2031],{"class":319},"Point",[275,2033,323],{"class":315},[275,2035,2036],{"class":308},"-",[275,2038,2039],{"class":846},"73.98",[275,2041,611],{"class":315},[275,2043,2044],{"class":846}," 40.75",[275,2046,2047],{"class":315},"),",[275,2049,2050],{"class":319}," Point",[275,2052,323],{"class":315},[275,2054,2036],{"class":308},[275,2056,2057],{"class":846},"74.01",[275,2059,611],{"class":315},[275,2061,2062],{"class":846}," 40.72",[275,2064,2065],{"class":315},")]\n",[275,2067,2068],{"class":277,"line":381},[275,2069,336],{"class":315},[275,2071,2072],{"class":277,"line":745},[275,2073,299],{"emptyLinePlaceholder":298},[275,2075,2076,2078,2080,2082,2084,2086,2089],{"class":277,"line":777},[275,2077,348],{"class":347},[275,2079,323],{"class":315},[275,2081,353],{"class":319},[275,2083,316],{"class":315},[275,2085,376],{"class":375},[275,2087,2088],{"class":315},")",[275,2090,2092],{"class":2091},"sutJx","  # None\n",[275,2094,2095],{"class":277,"line":798},[275,2096,299],{"emptyLinePlaceholder":298},[275,2098,2099],{"class":277,"line":821},[275,2100,2101],{"class":2091},"# Coordinates are known to be longitude\u002Flatitude in WGS84\n",[275,2103,2104,2106,2108,2110,2112,2115,2117,2119,2121,2123],{"class":277,"line":826},[275,2105,305],{"class":285},[275,2107,309],{"class":308},[275,2109,452],{"class":285},[275,2111,316],{"class":315},[275,2113,2114],{"class":319},"set_crs",[275,2116,323],{"class":315},[275,2118,327],{"class":326},[275,2120,464],{"class":330},[275,2122,327],{"class":326},[275,2124,336],{"class":315},[275,2126,2127],{"class":277,"line":863},[275,2128,299],{"emptyLinePlaceholder":298},[275,2130,2132,2134,2136,2138,2140,2142],{"class":277,"line":2131},14,[275,2133,348],{"class":347},[275,2135,323],{"class":315},[275,2137,353],{"class":319},[275,2139,316],{"class":315},[275,2141,376],{"class":375},[275,2143,336],{"class":315},[15,2145,2146],{},"This is correct only if you already know the coordinates are in WGS 84. If you guess, you may attach the wrong CRS to valid geometry.",[84,2148,2150],{"id":2149},"example-3-reproject-a-layer-to-a-projected-crs","Example 3: Reproject a layer to a projected CRS",[266,2152,2154],{"className":268,"code":2153,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nparcels = gpd.read_file(\"data\u002Fparcels.geojson\")\nprint(\"Original CRS:\", parcels.crs)\n\nparcels_utm = parcels.to_crs(\"EPSG:32618\")\nprint(\"Projected CRS:\", parcels_utm.crs)\n\nprint(parcels.geometry.iloc[0])\nprint(parcels_utm.geometry.iloc[0])\n",[106,2155,2156,2166,2170,2194,2218,2222,2246,2270,2274,2301],{"__ignoreMap":271},[275,2157,2158,2160,2162,2164],{"class":277,"line":278},[275,2159,282],{"class":281},[275,2161,286],{"class":285},[275,2163,289],{"class":281},[275,2165,292],{"class":285},[275,2167,2168],{"class":277,"line":295},[275,2169,299],{"emptyLinePlaceholder":298},[275,2171,2172,2175,2177,2179,2181,2183,2185,2187,2190,2192],{"class":277,"line":302},[275,2173,2174],{"class":285},"parcels ",[275,2176,309],{"class":308},[275,2178,312],{"class":285},[275,2180,316],{"class":315},[275,2182,320],{"class":319},[275,2184,323],{"class":315},[275,2186,327],{"class":326},[275,2188,2189],{"class":330},"data\u002Fparcels.geojson",[275,2191,327],{"class":326},[275,2193,336],{"class":315},[275,2195,2196,2198,2200,2202,2205,2207,2209,2212,2214,2216],{"class":277,"line":339},[275,2197,348],{"class":347},[275,2199,323],{"class":315},[275,2201,327],{"class":326},[275,2203,2204],{"class":330},"Original CRS:",[275,2206,327],{"class":326},[275,2208,611],{"class":315},[275,2210,2211],{"class":319}," parcels",[275,2213,316],{"class":315},[275,2215,376],{"class":375},[275,2217,336],{"class":315},[275,2219,2220],{"class":277,"line":344},[275,2221,299],{"emptyLinePlaceholder":298},[275,2223,2224,2227,2229,2231,2233,2235,2237,2239,2242,2244],{"class":277,"line":364},[275,2225,2226],{"class":285},"parcels_utm ",[275,2228,309],{"class":308},[275,2230,2211],{"class":285},[275,2232,316],{"class":315},[275,2234,457],{"class":319},[275,2236,323],{"class":315},[275,2238,327],{"class":326},[275,2240,2241],{"class":330},"EPSG:32618",[275,2243,327],{"class":326},[275,2245,336],{"class":315},[275,2247,2248,2250,2252,2254,2257,2259,2261,2264,2266,2268],{"class":277,"line":381},[275,2249,348],{"class":347},[275,2251,323],{"class":315},[275,2253,327],{"class":326},[275,2255,2256],{"class":330},"Projected CRS:",[275,2258,327],{"class":326},[275,2260,611],{"class":315},[275,2262,2263],{"class":319}," parcels_utm",[275,2265,316],{"class":315},[275,2267,376],{"class":375},[275,2269,336],{"class":315},[275,2271,2272],{"class":277,"line":745},[275,2273,299],{"emptyLinePlaceholder":298},[275,2275,2276,2278,2280,2283,2285,2288,2290,2293,2295,2298],{"class":277,"line":777},[275,2277,348],{"class":347},[275,2279,323],{"class":315},[275,2281,2282],{"class":319},"parcels",[275,2284,316],{"class":315},[275,2286,2287],{"class":375},"geometry",[275,2289,316],{"class":315},[275,2291,2292],{"class":375},"iloc",[275,2294,558],{"class":315},[275,2296,2297],{"class":846},"0",[275,2299,2300],{"class":315},"])\n",[275,2302,2303,2305,2307,2310,2312,2314,2316,2318,2320,2322],{"class":277,"line":798},[275,2304,348],{"class":347},[275,2306,323],{"class":315},[275,2308,2309],{"class":319},"parcels_utm",[275,2311,316],{"class":315},[275,2313,2287],{"class":375},[275,2315,316],{"class":315},[275,2317,2292],{"class":375},[275,2319,558],{"class":315},[275,2321,2297],{"class":846},[275,2323,2300],{"class":315},[15,2325,2326],{},"After reprojection, the coordinate values change. That is expected. The geometries now use projected units, which makes area and distance work more reliably.",[84,2328,2330],{"id":2329},"example-4-align-two-layers-to-the-same-crs-before-overlay","Example 4: Align two layers to the same CRS before overlay",[266,2332,2334],{"className":268,"code":2333,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nbuildings = gpd.read_file(\"data\u002Fbuildings.shp\")\nflood_zones = gpd.read_file(\"data\u002Fflood_zones.geojson\")\n\nprint(\"Buildings CRS:\", buildings.crs)\nprint(\"Flood zones CRS:\", flood_zones.crs)\n\nif buildings.crs != flood_zones.crs:\n    flood_zones = flood_zones.to_crs(buildings.crs)\n\nprint(\"Aligned:\", buildings.crs == flood_zones.crs)\n",[106,2335,2336,2346,2350,2374,2398,2402,2426,2450,2454,2474,2498,2502],{"__ignoreMap":271},[275,2337,2338,2340,2342,2344],{"class":277,"line":278},[275,2339,282],{"class":281},[275,2341,286],{"class":285},[275,2343,289],{"class":281},[275,2345,292],{"class":285},[275,2347,2348],{"class":277,"line":295},[275,2349,299],{"emptyLinePlaceholder":298},[275,2351,2352,2355,2357,2359,2361,2363,2365,2367,2370,2372],{"class":277,"line":302},[275,2353,2354],{"class":285},"buildings ",[275,2356,309],{"class":308},[275,2358,312],{"class":285},[275,2360,316],{"class":315},[275,2362,320],{"class":319},[275,2364,323],{"class":315},[275,2366,327],{"class":326},[275,2368,2369],{"class":330},"data\u002Fbuildings.shp",[275,2371,327],{"class":326},[275,2373,336],{"class":315},[275,2375,2376,2379,2381,2383,2385,2387,2389,2391,2394,2396],{"class":277,"line":339},[275,2377,2378],{"class":285},"flood_zones ",[275,2380,309],{"class":308},[275,2382,312],{"class":285},[275,2384,316],{"class":315},[275,2386,320],{"class":319},[275,2388,323],{"class":315},[275,2390,327],{"class":326},[275,2392,2393],{"class":330},"data\u002Fflood_zones.geojson",[275,2395,327],{"class":326},[275,2397,336],{"class":315},[275,2399,2400],{"class":277,"line":344},[275,2401,299],{"emptyLinePlaceholder":298},[275,2403,2404,2406,2408,2410,2413,2415,2417,2420,2422,2424],{"class":277,"line":364},[275,2405,348],{"class":347},[275,2407,323],{"class":315},[275,2409,327],{"class":326},[275,2411,2412],{"class":330},"Buildings CRS:",[275,2414,327],{"class":326},[275,2416,611],{"class":315},[275,2418,2419],{"class":319}," buildings",[275,2421,316],{"class":315},[275,2423,376],{"class":375},[275,2425,336],{"class":315},[275,2427,2428,2430,2432,2434,2437,2439,2441,2444,2446,2448],{"class":277,"line":381},[275,2429,348],{"class":347},[275,2431,323],{"class":315},[275,2433,327],{"class":326},[275,2435,2436],{"class":330},"Flood zones CRS:",[275,2438,327],{"class":326},[275,2440,611],{"class":315},[275,2442,2443],{"class":319}," flood_zones",[275,2445,316],{"class":315},[275,2447,376],{"class":375},[275,2449,336],{"class":315},[275,2451,2452],{"class":277,"line":745},[275,2453,299],{"emptyLinePlaceholder":298},[275,2455,2456,2458,2460,2462,2464,2466,2468,2470,2472],{"class":277,"line":777},[275,2457,1767],{"class":281},[275,2459,2419],{"class":285},[275,2461,316],{"class":315},[275,2463,376],{"class":375},[275,2465,1777],{"class":308},[275,2467,2443],{"class":285},[275,2469,316],{"class":315},[275,2471,376],{"class":375},[275,2473,1787],{"class":315},[275,2475,2476,2479,2481,2483,2485,2487,2489,2492,2494,2496],{"class":277,"line":798},[275,2477,2478],{"class":285},"    flood_zones ",[275,2480,309],{"class":308},[275,2482,2443],{"class":285},[275,2484,316],{"class":315},[275,2486,457],{"class":319},[275,2488,323],{"class":315},[275,2490,2491],{"class":319},"buildings",[275,2493,316],{"class":315},[275,2495,376],{"class":375},[275,2497,336],{"class":315},[275,2499,2500],{"class":277,"line":821},[275,2501,299],{"emptyLinePlaceholder":298},[275,2503,2504,2506,2508,2510,2513,2515,2517,2519,2521,2523,2525,2527,2529,2531],{"class":277,"line":826},[275,2505,348],{"class":347},[275,2507,323],{"class":315},[275,2509,327],{"class":326},[275,2511,2512],{"class":330},"Aligned:",[275,2514,327],{"class":326},[275,2516,611],{"class":315},[275,2518,2419],{"class":319},[275,2520,316],{"class":315},[275,2522,376],{"class":375},[275,2524,575],{"class":308},[275,2526,2443],{"class":319},[275,2528,316],{"class":315},[275,2530,376],{"class":375},[275,2532,336],{"class":315},[15,2534,2535],{},"This is a standard preparation step before clipping, spatial join, or overlay.",[84,2537,2539],{"id":2538},"example-5-compare-distance-results-in-geographic-vs-projected-crs","Example 5: Compare distance results in geographic vs projected CRS",[266,2541,2543],{"className":268,"code":2542,"language":270,"meta":271,"style":271},"import geopandas as gpd\nfrom shapely.geometry import Point\n\ngdf = gpd.GeoDataFrame(\n    geometry=[Point(-73.98, 40.75), Point(-73.99, 40.76)],\n    crs=\"EPSG:4326\"\n)\n\n# Distance in degrees, usually not useful for analysis\ndistance_degrees = gdf.geometry.iloc[0].distance(gdf.geometry.iloc[1])\nprint(\"Distance in geographic CRS:\", distance_degrees)\n\n# Reproject to a local projected CRS in meters\ngdf_proj = gdf.to_crs(\"EPSG:32618\")\ndistance_meters = gdf_proj.geometry.iloc[0].distance(gdf_proj.geometry.iloc[1])\nprint(\"Distance in projected CRS (meters):\", distance_meters)\n",[106,2544,2545,2555,2569,2573,2587,2626,2640,2644,2648,2653,2699,2719,2723,2728,2751,2797],{"__ignoreMap":271},[275,2546,2547,2549,2551,2553],{"class":277,"line":278},[275,2548,282],{"class":281},[275,2550,286],{"class":285},[275,2552,289],{"class":281},[275,2554,292],{"class":285},[275,2556,2557,2559,2561,2563,2565,2567],{"class":277,"line":295},[275,2558,643],{"class":281},[275,2560,1953],{"class":285},[275,2562,316],{"class":315},[275,2564,1958],{"class":285},[275,2566,282],{"class":281},[275,2568,1963],{"class":285},[275,2570,2571],{"class":277,"line":302},[275,2572,299],{"emptyLinePlaceholder":298},[275,2574,2575,2577,2579,2581,2583,2585],{"class":277,"line":339},[275,2576,305],{"class":285},[275,2578,309],{"class":308},[275,2580,312],{"class":285},[275,2582,316],{"class":315},[275,2584,1980],{"class":319},[275,2586,1983],{"class":315},[275,2588,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607,2609,2611,2613,2615,2618,2620,2623],{"class":277,"line":344},[275,2590,2024],{"class":614},[275,2592,309],{"class":308},[275,2594,558],{"class":315},[275,2596,2031],{"class":319},[275,2598,323],{"class":315},[275,2600,2036],{"class":308},[275,2602,2039],{"class":846},[275,2604,611],{"class":315},[275,2606,2044],{"class":846},[275,2608,2047],{"class":315},[275,2610,2050],{"class":319},[275,2612,323],{"class":315},[275,2614,2036],{"class":308},[275,2616,2617],{"class":846},"73.99",[275,2619,611],{"class":315},[275,2621,2622],{"class":846}," 40.76",[275,2624,2625],{"class":315},")],\n",[275,2627,2628,2631,2633,2635,2637],{"class":277,"line":364},[275,2629,2630],{"class":614},"    crs",[275,2632,309],{"class":308},[275,2634,327],{"class":326},[275,2636,464],{"class":330},[275,2638,2639],{"class":326},"\"\n",[275,2641,2642],{"class":277,"line":381},[275,2643,336],{"class":315},[275,2645,2646],{"class":277,"line":745},[275,2647,299],{"emptyLinePlaceholder":298},[275,2649,2650],{"class":277,"line":777},[275,2651,2652],{"class":2091},"# Distance in degrees, usually not useful for analysis\n",[275,2654,2655,2658,2660,2662,2664,2666,2668,2670,2672,2674,2677,2680,2682,2684,2686,2688,2690,2692,2694,2697],{"class":277,"line":798},[275,2656,2657],{"class":285},"distance_degrees ",[275,2659,309],{"class":308},[275,2661,452],{"class":285},[275,2663,316],{"class":315},[275,2665,2287],{"class":375},[275,2667,316],{"class":315},[275,2669,2292],{"class":375},[275,2671,558],{"class":315},[275,2673,2297],{"class":846},[275,2675,2676],{"class":315},"].",[275,2678,2679],{"class":319},"distance",[275,2681,323],{"class":315},[275,2683,353],{"class":319},[275,2685,316],{"class":315},[275,2687,2287],{"class":375},[275,2689,316],{"class":315},[275,2691,2292],{"class":375},[275,2693,558],{"class":315},[275,2695,2696],{"class":846},"1",[275,2698,2300],{"class":315},[275,2700,2701,2703,2705,2707,2710,2712,2714,2717],{"class":277,"line":821},[275,2702,348],{"class":347},[275,2704,323],{"class":315},[275,2706,327],{"class":326},[275,2708,2709],{"class":330},"Distance in geographic CRS:",[275,2711,327],{"class":326},[275,2713,611],{"class":315},[275,2715,2716],{"class":319}," distance_degrees",[275,2718,336],{"class":315},[275,2720,2721],{"class":277,"line":826},[275,2722,299],{"emptyLinePlaceholder":298},[275,2724,2725],{"class":277,"line":863},[275,2726,2727],{"class":2091},"# Reproject to a local projected CRS in meters\n",[275,2729,2730,2733,2735,2737,2739,2741,2743,2745,2747,2749],{"class":277,"line":2131},[275,2731,2732],{"class":285},"gdf_proj ",[275,2734,309],{"class":308},[275,2736,452],{"class":285},[275,2738,316],{"class":315},[275,2740,457],{"class":319},[275,2742,323],{"class":315},[275,2744,327],{"class":326},[275,2746,2241],{"class":330},[275,2748,327],{"class":326},[275,2750,336],{"class":315},[275,2752,2754,2757,2759,2762,2764,2766,2768,2770,2772,2774,2776,2778,2780,2783,2785,2787,2789,2791,2793,2795],{"class":277,"line":2753},15,[275,2755,2756],{"class":285},"distance_meters ",[275,2758,309],{"class":308},[275,2760,2761],{"class":285}," gdf_proj",[275,2763,316],{"class":315},[275,2765,2287],{"class":375},[275,2767,316],{"class":315},[275,2769,2292],{"class":375},[275,2771,558],{"class":315},[275,2773,2297],{"class":846},[275,2775,2676],{"class":315},[275,2777,2679],{"class":319},[275,2779,323],{"class":315},[275,2781,2782],{"class":319},"gdf_proj",[275,2784,316],{"class":315},[275,2786,2287],{"class":375},[275,2788,316],{"class":315},[275,2790,2292],{"class":375},[275,2792,558],{"class":315},[275,2794,2696],{"class":846},[275,2796,2300],{"class":315},[275,2798,2800,2802,2804,2806,2809,2811,2813,2816],{"class":277,"line":2799},16,[275,2801,348],{"class":347},[275,2803,323],{"class":315},[275,2805,327],{"class":326},[275,2807,2808],{"class":330},"Distance in projected CRS (meters):",[275,2810,327],{"class":326},[275,2812,611],{"class":315},[275,2814,2815],{"class":319}," distance_meters",[275,2817,336],{"class":315},[15,2819,2820],{},"This shows why measurement tasks should usually be done in a projected CRS.",[10,2822,896],{"id":895},[15,2824,2825],{},"In operational terms:",[22,2827,2828,2831,2834,2837,2840,2845],{},[25,2829,2830],{},"A CRS gives meaning to coordinate values.",[25,2832,2833],{},"Geographic CRS stores angular coordinates, usually longitude and latitude in degrees.",[25,2835,2836],{},"Projected CRS stores planar coordinates, usually in meters or feet.",[25,2838,2839],{},"Measurements like distance, area, and buffers should usually be done in a projected CRS.",[25,2841,2842,2844],{},[106,2843,1361],{}," labels existing coordinates.",[25,2846,2847,2849],{},[106,2848,1367],{}," transforms coordinates to a new system.",[15,2851,2852],{},"If your analysis looks wrong, check CRS first. In many workflows, that is the real issue.",[10,2854,1120],{"id":1119},[84,2856,2858],{"id":2857},"missing-crs-metadata","Missing CRS metadata",[15,2860,2861],{},"A file can contain valid geometry and still have no CRS metadata. In that case, only assign a CRS if you know the source coordinate system from documentation, data provider notes, or another trusted source.",[84,2863,2865],{"id":2864},"wrong-crs-metadata","Wrong CRS metadata",[15,2867,2868],{},"Sometimes the file has a CRS value, but it is wrong. Common symptoms:",[22,2870,2871,2874,2877],{},[25,2872,2873],{},"layer appears far from expected location",[25,2875,2876],{},"overlay returns no matches",[25,2878,2879],{},"distances are extremely large or small",[84,2881,2883],{"id":2882},"axis-order-and-longitude-latitude-confusion","Axis order and longitude-latitude confusion",[15,2885,2886],{},"Some services and formats may use latitude\u002Flongitude order instead of longitude\u002Flatitude. If points appear in the wrong continent, inspect coordinate ranges and verify map output.",[84,2888,2890],{"id":2889},"mixed-crs-in-multi-layer-workflows","Mixed CRS in multi-layer workflows",[15,2892,2893,2894,2896],{},"Spatial joins, overlays, and clipping are unreliable when layers are in different CRS. Always compare ",[106,2895,1531],{}," values before combining layers.",[84,2898,2900],{"id":2899},"invalid-geometries","Invalid geometries",[15,2902,2903],{},"CRS is not the only source of failures. Overlay and buffer operations can also break if polygons are invalid. If CRS looks correct but analysis still fails, inspect geometry validity too.",[84,2905,2907],{"id":2906},"web-mapping-crs","Web mapping CRS",[15,2909,2910,2911,2913],{},"Web maps often use ",[106,2912,1512],{}," for display. That does not mean it is the best CRS for measurement. Display CRS and analysis CRS are often different.",[10,2915,1163],{"id":1162},[15,2917,2918,2919,316],{},"For the broader concept, see ",[1168,2920,2921],{"href":1189},"Projected vs Geographic Coordinate Systems in GIS",[15,2923,2924],{},"Related task pages:",[22,2926,2927,2932],{},[25,2928,2929],{},[1168,2930,2931],{"href":1189},"How to Check CRS in GeoPandas",[25,2933,2934],{},[1168,2935,2936],{"href":1182},"How to Reproject Spatial Data in GeoPandas",[15,2938,2939,2940,316],{},"If your layers do not align, see ",[1168,2941,2942],{"href":1196},"How to Fix CRS Mismatch Errors in GeoPandas",[10,2944,1201],{"id":1200},[84,2946,2948],{"id":2947},"what-is-a-crs-in-gis","What is a CRS in GIS?",[15,2950,2951],{},"A CRS is the definition that tells GIS software how coordinate values relate to real positions on the earth. Without it, coordinates have no reliable spatial meaning.",[84,2953,2955],{"id":2954},"what-is-the-difference-between-epsg4326-and-a-projected-crs","What is the difference between EPSG:4326 and a projected CRS?",[15,2957,2958,2960],{},[106,2959,464],{}," is a geographic CRS using longitude and latitude in degrees. A projected CRS uses planar units such as meters or feet, which makes it more suitable for distance, area, and buffering.",[84,2962,2964,2965,2967,2968,2970],{"id":2963},"when-should-i-use-set_crs-instead-of-to_crs-in-geopandas","When should I use ",[106,2966,1361],{}," instead of ",[106,2969,1367],{}," in GeoPandas?",[15,2972,1675,2973,2975,2976,2978],{},[106,2974,1361],{}," when the data already uses a known CRS but the metadata is missing. Use ",[106,2977,1367],{}," when you need to transform the coordinates into a different CRS.",[84,2980,2982],{"id":2981},"why-are-my-distance-or-area-results-wrong-in-python-gis","Why are my distance or area results wrong in Python GIS?",[15,2984,2985],{},"This usually happens because you measured data in a geographic CRS instead of a projected CRS, or because the layer had the wrong CRS assigned.",[84,2987,2989],{"id":2988},"do-all-layers-need-the-same-crs-before-a-spatial-join-or-overlay","Do all layers need the same CRS before a spatial join or overlay?",[15,2991,2992],{},"Yes. Before a spatial join, clip, or overlay, all participating layers should usually be reprojected to the same CRS.",[1231,2994,2995],{},"html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}",{"title":271,"searchDepth":295,"depth":295,"links":2997},[2998,2999,3000,3009,3016,3017,3025,3026],{"id":12,"depth":295,"text":13},{"id":45,"depth":295,"text":46},{"id":81,"depth":295,"text":82,"children":3001},[3002,3003,3004,3005,3006,3007,3008],{"id":1376,"depth":302,"text":1377},{"id":1420,"depth":302,"text":1421},{"id":1493,"depth":302,"text":1494},{"id":1524,"depth":302,"text":1525},{"id":1656,"depth":302,"text":1657},{"id":1689,"depth":302,"text":1690},{"id":1725,"depth":302,"text":1726},{"id":259,"depth":295,"text":260,"children":3010},[3011,3012,3013,3014,3015],{"id":1819,"depth":302,"text":1820},{"id":1930,"depth":302,"text":1931},{"id":2149,"depth":302,"text":2150},{"id":2329,"depth":302,"text":2330},{"id":2538,"depth":302,"text":2539},{"id":895,"depth":295,"text":896},{"id":1119,"depth":295,"text":1120,"children":3018},[3019,3020,3021,3022,3023,3024],{"id":2857,"depth":302,"text":2858},{"id":2864,"depth":302,"text":2865},{"id":2882,"depth":302,"text":2883},{"id":2889,"depth":302,"text":2890},{"id":2899,"depth":302,"text":2900},{"id":2906,"depth":302,"text":2907},{"id":1162,"depth":295,"text":1163},{"id":1200,"depth":295,"text":1201,"children":3027},[3028,3029,3030,3032,3033],{"id":2947,"depth":302,"text":2948},{"id":2954,"depth":302,"text":2955},{"id":2963,"depth":302,"text":3031},"When should I use set_crs() instead of to_crs() in GeoPandas?",{"id":2981,"depth":302,"text":2982},{"id":2988,"depth":302,"text":2989},"Understand coordinate reference systems in Python GIS and learn how to check, assign, and convert them with GeoPandas.",{},"\u002Ffoundation\u002Fcrs-coordinate-systems-explained",{"title":1190,"description":3034},"foundation\u002Fcrs-coordinate-systems-explained","lcIJEFAZQ9XUrkZUUQ2zia09EgfGw08sgz4EmwPo0c8",{"id":3041,"title":1171,"body":3042,"description":4859,"extension":1274,"meta":4860,"navigation":298,"path":4861,"seo":4862,"stem":4863,"__hash__":4864},"content\u002Ffoundation\u002Fgeopandas-basics.md",{"type":7,"value":3043,"toc":4823},[3044,3046,3049,3052,3055,3075,3077,3083,3086,3111,3249,3251,3255,3258,3277,3280,3294,3297,3301,3304,3319,3326,3330,3335,3339,3395,3399,3457,3463,3467,3470,3552,3555,3569,3572,3576,3579,3612,3615,3629,3632,3644,3647,3651,3654,3658,3725,3728,3758,3761,3765,3768,3819,3822,3838,3841,3845,3848,3865,3868,3941,3944,3948,3951,3955,3990,3994,4018,4021,4023,4027,4081,4085,4176,4180,4270,4274,4388,4392,4581,4583,4588,4591,4594,4607,4613,4616,4618,4622,4625,4652,4655,4683,4686,4690,4700,4704,4707,4732,4735,4739,4742,4744,4749,4758,4763,4765,4769,4772,4776,4779,4783,4789,4793,4798,4817,4820],[10,3045,13],{"id":12},[15,3047,3048],{},"If you need to work with shapefiles or GeoJSON in Python, the main problem is usually not the file format itself. The problem is getting spatial data into a form where you can inspect attributes, check geometry, confirm the coordinate reference system, filter features, and save the result without handling low-level GIS details manually.",[15,3050,3051],{},"This is where GeoPandas basics matter. GeoPandas gives you a practical way to work with vector spatial data in Python using a table-like structure that feels similar to pandas, but with geometry support built in.",[15,3053,3054],{},"This page shows how to:",[22,3056,3057,3060,3063,3066,3069,3072],{},[25,3058,3059],{},"read spatial files",[25,3061,3062],{},"inspect geometry and attributes",[25,3064,3065],{},"view the CRS",[25,3067,3068],{},"filter features",[25,3070,3071],{},"preview data with a quick plot",[25,3073,3074],{},"save results to a new file",[10,3076,46],{"id":45},[15,3078,3079,3080,3082],{},"GeoPandas is a Python library for working with vector spatial data in a ",[178,3081,1980],{},", which is similar to a pandas DataFrame but includes a geometry column.",[15,3084,3085],{},"A basic workflow looks like this:",[1322,3087,3088,3094,3097,3102,3105],{},[25,3089,3090,3091],{},"Load a file with ",[106,3092,3093],{},"gpd.read_file()",[25,3095,3096],{},"Inspect columns, rows, and geometry",[25,3098,3099,3100],{},"Check the CRS with ",[106,3101,1531],{},[25,3103,3104],{},"Filter records by attribute or geometry presence",[25,3106,3107,3108],{},"Save the output with ",[106,3109,3110],{},".to_file()",[266,3112,3114],{"className":268,"code":3113,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\ngdf = gpd.read_file(\"data\u002Fparcels.shp\")\nprint(gdf.head())\nprint(gdf.crs)\n\nfiltered = gdf[gdf[\"zone\"] == \"RESIDENTIAL\"]\nfiltered.to_file(\"output\u002Fresidential_parcels.geojson\", driver=\"GeoJSON\")\n",[106,3115,3116,3126,3130,3152,3166,3180,3184,3218],{"__ignoreMap":271},[275,3117,3118,3120,3122,3124],{"class":277,"line":278},[275,3119,282],{"class":281},[275,3121,286],{"class":285},[275,3123,289],{"class":281},[275,3125,292],{"class":285},[275,3127,3128],{"class":277,"line":295},[275,3129,299],{"emptyLinePlaceholder":298},[275,3131,3132,3134,3136,3138,3140,3142,3144,3146,3148,3150],{"class":277,"line":302},[275,3133,305],{"class":285},[275,3135,309],{"class":308},[275,3137,312],{"class":285},[275,3139,316],{"class":315},[275,3141,320],{"class":319},[275,3143,323],{"class":315},[275,3145,327],{"class":326},[275,3147,331],{"class":330},[275,3149,327],{"class":326},[275,3151,336],{"class":315},[275,3153,3154,3156,3158,3160,3162,3164],{"class":277,"line":339},[275,3155,348],{"class":347},[275,3157,323],{"class":315},[275,3159,353],{"class":319},[275,3161,316],{"class":315},[275,3163,358],{"class":319},[275,3165,361],{"class":315},[275,3167,3168,3170,3172,3174,3176,3178],{"class":277,"line":344},[275,3169,348],{"class":347},[275,3171,323],{"class":315},[275,3173,353],{"class":319},[275,3175,316],{"class":315},[275,3177,376],{"class":375},[275,3179,336],{"class":315},[275,3181,3182],{"class":277,"line":364},[275,3183,299],{"emptyLinePlaceholder":298},[275,3185,3186,3188,3190,3192,3194,3196,3198,3200,3203,3205,3207,3209,3211,3214,3216],{"class":277,"line":381},[275,3187,551],{"class":285},[275,3189,309],{"class":308},[275,3191,452],{"class":285},[275,3193,558],{"class":315},[275,3195,353],{"class":285},[275,3197,558],{"class":315},[275,3199,327],{"class":326},[275,3201,3202],{"class":330},"zone",[275,3204,327],{"class":326},[275,3206,572],{"class":315},[275,3208,575],{"class":308},[275,3210,578],{"class":326},[275,3212,3213],{"class":330},"RESIDENTIAL",[275,3215,327],{"class":326},[275,3217,586],{"class":315},[275,3219,3220,3222,3224,3226,3228,3230,3233,3235,3237,3239,3241,3243,3245,3247],{"class":277,"line":745},[275,3221,595],{"class":285},[275,3223,316],{"class":315},[275,3225,482],{"class":319},[275,3227,323],{"class":315},[275,3229,327],{"class":326},[275,3231,3232],{"class":330},"output\u002Fresidential_parcels.geojson",[275,3234,327],{"class":326},[275,3236,611],{"class":315},[275,3238,615],{"class":614},[275,3240,309],{"class":308},[275,3242,327],{"class":326},[275,3244,622],{"class":330},[275,3246,327],{"class":326},[275,3248,336],{"class":315},[10,3250,82],{"id":81},[84,3252,3254],{"id":3253},"install-geopandas","Install GeoPandas",[15,3256,3257],{},"A common installation method is:",[266,3259,3263],{"className":3260,"code":3261,"language":3262,"meta":271,"style":271},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","pip install geopandas\n","bash",[106,3264,3265],{"__ignoreMap":271},[275,3266,3267,3271,3274],{"class":277,"line":278},[275,3268,3270],{"class":3269},"sbgvK","pip",[275,3272,3273],{"class":330}," install",[275,3275,3276],{"class":330}," geopandas\n",[15,3278,3279],{},"If you use Conda, install GeoPandas in your environment before running the examples:",[266,3281,3283],{"className":3260,"code":3282,"language":3262,"meta":271,"style":271},"conda install geopandas\n",[106,3284,3285],{"__ignoreMap":271},[275,3286,3287,3290,3292],{"class":277,"line":278},[275,3288,3289],{"class":3269},"conda",[275,3291,3273],{"class":330},[275,3293,3276],{"class":330},[15,3295,3296],{},"If installation fails, fix the Python environment first before debugging your code.",[84,3298,3300],{"id":3299},"import-geopandas","Import GeoPandas",[15,3302,3303],{},"Most vector workflows start with one import:",[266,3305,3307],{"className":268,"code":3306,"language":270,"meta":271,"style":271},"import geopandas as gpd\n",[106,3308,3309],{"__ignoreMap":271},[275,3310,3311,3313,3315,3317],{"class":277,"line":278},[275,3312,282],{"class":281},[275,3314,286],{"class":285},[275,3316,289],{"class":281},[275,3318,292],{"class":285},[15,3320,3321,3322,3325],{},"Using the ",[106,3323,3324],{},"gpd"," alias is standard and keeps code readable.",[84,3327,3329],{"id":3328},"read-a-shapefile-or-geojson-into-a-geodataframe","Read a shapefile or GeoJSON into a GeoDataFrame",[15,3331,1675,3332,3334],{},[106,3333,3093],{}," to load common vector formats.",[905,3336,3338],{"id":3337},"read-a-parcel-shapefile","Read a parcel shapefile",[266,3340,3342],{"className":268,"code":3341,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nparcels = gpd.read_file(\"data\u002Fparcels\u002Fparcels.shp\")\nprint(parcels.head())\n",[106,3343,3344,3354,3358,3381],{"__ignoreMap":271},[275,3345,3346,3348,3350,3352],{"class":277,"line":278},[275,3347,282],{"class":281},[275,3349,286],{"class":285},[275,3351,289],{"class":281},[275,3353,292],{"class":285},[275,3355,3356],{"class":277,"line":295},[275,3357,299],{"emptyLinePlaceholder":298},[275,3359,3360,3362,3364,3366,3368,3370,3372,3374,3377,3379],{"class":277,"line":302},[275,3361,2174],{"class":285},[275,3363,309],{"class":308},[275,3365,312],{"class":285},[275,3367,316],{"class":315},[275,3369,320],{"class":319},[275,3371,323],{"class":315},[275,3373,327],{"class":326},[275,3375,3376],{"class":330},"data\u002Fparcels\u002Fparcels.shp",[275,3378,327],{"class":326},[275,3380,336],{"class":315},[275,3382,3383,3385,3387,3389,3391,3393],{"class":277,"line":339},[275,3384,348],{"class":347},[275,3386,323],{"class":315},[275,3388,2282],{"class":319},[275,3390,316],{"class":315},[275,3392,358],{"class":319},[275,3394,361],{"class":315},[905,3396,3398],{"id":3397},"read-a-neighborhoods-geojson","Read a neighborhoods GeoJSON",[266,3400,3402],{"className":268,"code":3401,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nneighborhoods = gpd.read_file(\"data\u002Fcity_neighborhoods.geojson\")\nprint(neighborhoods.head())\n",[106,3403,3404,3414,3418,3442],{"__ignoreMap":271},[275,3405,3406,3408,3410,3412],{"class":277,"line":278},[275,3407,282],{"class":281},[275,3409,286],{"class":285},[275,3411,289],{"class":281},[275,3413,292],{"class":285},[275,3415,3416],{"class":277,"line":295},[275,3417,299],{"emptyLinePlaceholder":298},[275,3419,3420,3423,3425,3427,3429,3431,3433,3435,3438,3440],{"class":277,"line":302},[275,3421,3422],{"class":285},"neighborhoods ",[275,3424,309],{"class":308},[275,3426,312],{"class":285},[275,3428,316],{"class":315},[275,3430,320],{"class":319},[275,3432,323],{"class":315},[275,3434,327],{"class":326},[275,3436,3437],{"class":330},"data\u002Fcity_neighborhoods.geojson",[275,3439,327],{"class":326},[275,3441,336],{"class":315},[275,3443,3444,3446,3448,3451,3453,3455],{"class":277,"line":339},[275,3445,348],{"class":347},[275,3447,323],{"class":315},[275,3449,3450],{"class":319},"neighborhoods",[275,3452,316],{"class":315},[275,3454,358],{"class":319},[275,3456,361],{"class":315},[15,3458,3459,3460,3462],{},"This returns a ",[178,3461,1980],{}," with attribute columns and one active geometry column.",[84,3464,3466],{"id":3465},"inspect-the-geodataframe-structure","Inspect the GeoDataFrame structure",[15,3468,3469],{},"Before doing any analysis, inspect the dataset structure.",[266,3471,3473],{"className":268,"code":3472,"language":270,"meta":271,"style":271},"print(parcels.head())\nprint(parcels.columns)\nprint(parcels.dtypes)\nprint(parcels.geometry.name)\nprint(len(parcels))\n",[106,3474,3475,3489,3503,3518,3536],{"__ignoreMap":271},[275,3476,3477,3479,3481,3483,3485,3487],{"class":277,"line":278},[275,3478,348],{"class":347},[275,3480,323],{"class":315},[275,3482,2282],{"class":319},[275,3484,316],{"class":315},[275,3486,358],{"class":319},[275,3488,361],{"class":315},[275,3490,3491,3493,3495,3497,3499,3501],{"class":277,"line":295},[275,3492,348],{"class":347},[275,3494,323],{"class":315},[275,3496,2282],{"class":319},[275,3498,316],{"class":315},[275,3500,392],{"class":375},[275,3502,336],{"class":315},[275,3504,3505,3507,3509,3511,3513,3516],{"class":277,"line":302},[275,3506,348],{"class":347},[275,3508,323],{"class":315},[275,3510,2282],{"class":319},[275,3512,316],{"class":315},[275,3514,3515],{"class":375},"dtypes",[275,3517,336],{"class":315},[275,3519,3520,3522,3524,3526,3528,3530,3532,3534],{"class":277,"line":339},[275,3521,348],{"class":347},[275,3523,323],{"class":315},[275,3525,2282],{"class":319},[275,3527,316],{"class":315},[275,3529,2287],{"class":375},[275,3531,316],{"class":315},[275,3533,1993],{"class":375},[275,3535,336],{"class":315},[275,3537,3538,3540,3542,3545,3547,3549],{"class":277,"line":344},[275,3539,348],{"class":347},[275,3541,323],{"class":315},[275,3543,3544],{"class":347},"len",[275,3546,323],{"class":315},[275,3548,2282],{"class":319},[275,3550,3551],{"class":315},"))\n",[15,3553,3554],{},"This helps you confirm:",[22,3556,3557,3560,3563,3566],{},[25,3558,3559],{},"available fields",[25,3561,3562],{},"geometry column name",[25,3564,3565],{},"data types",[25,3567,3568],{},"number of records",[15,3570,3571],{},"If you are reading unfamiliar data, this step prevents many later errors.",[84,3573,3575],{"id":3574},"check-the-coordinate-reference-system","Check the coordinate reference system",[15,3577,3578],{},"CRS matters in every GIS workflow. If the CRS is wrong or missing, maps, overlays, and distance-based analysis can be misleading.",[266,3580,3582],{"className":268,"code":3581,"language":270,"meta":271,"style":271},"print(parcels.crs)\nprint(neighborhoods.crs)\n",[106,3583,3584,3598],{"__ignoreMap":271},[275,3585,3586,3588,3590,3592,3594,3596],{"class":277,"line":278},[275,3587,348],{"class":347},[275,3589,323],{"class":315},[275,3591,2282],{"class":319},[275,3593,316],{"class":315},[275,3595,376],{"class":375},[275,3597,336],{"class":315},[275,3599,3600,3602,3604,3606,3608,3610],{"class":277,"line":295},[275,3601,348],{"class":347},[275,3603,323],{"class":315},[275,3605,3450],{"class":319},[275,3607,316],{"class":315},[275,3609,376],{"class":375},[275,3611,336],{"class":315},[15,3613,3614],{},"Typical output may look like:",[266,3616,3618],{"className":268,"code":3617,"language":270,"meta":271,"style":271},"EPSG:26917\n",[106,3619,3620],{"__ignoreMap":271},[275,3621,3622,3624,3626],{"class":277,"line":278},[275,3623,1602],{"class":1601},[275,3625,1605],{"class":315},[275,3627,3628],{"class":846},"26917\n",[15,3630,3631],{},"or:",[266,3633,3634],{"className":268,"code":1594,"language":270,"meta":271,"style":271},[106,3635,3636],{"__ignoreMap":271},[275,3637,3638,3640,3642],{"class":277,"line":278},[275,3639,1602],{"class":1601},[275,3641,1605],{"class":315},[275,3643,1608],{"class":846},[15,3645,3646],{},"Check CRS before plotting, combining layers, or measuring anything.",[84,3648,3650],{"id":3649},"filter-spatial-records","Filter spatial records",[15,3652,3653],{},"A common task is filtering features based on an attribute field.",[905,3655,3657],{"id":3656},"example-keep-only-residential-parcels","Example: keep only residential parcels",[266,3659,3661],{"className":268,"code":3660,"language":270,"meta":271,"style":271},"residential = parcels[parcels[\"zone\"] == \"RESIDENTIAL\"]\nprint(residential.head())\nprint(len(residential))\n",[106,3662,3663,3696,3711],{"__ignoreMap":271},[275,3664,3665,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694],{"class":277,"line":278},[275,3666,3667],{"class":285},"residential ",[275,3669,309],{"class":308},[275,3671,2211],{"class":285},[275,3673,558],{"class":315},[275,3675,2282],{"class":285},[275,3677,558],{"class":315},[275,3679,327],{"class":326},[275,3681,3202],{"class":330},[275,3683,327],{"class":326},[275,3685,572],{"class":315},[275,3687,575],{"class":308},[275,3689,578],{"class":326},[275,3691,3213],{"class":330},[275,3693,327],{"class":326},[275,3695,586],{"class":315},[275,3697,3698,3700,3702,3705,3707,3709],{"class":277,"line":295},[275,3699,348],{"class":347},[275,3701,323],{"class":315},[275,3703,3704],{"class":319},"residential",[275,3706,316],{"class":315},[275,3708,358],{"class":319},[275,3710,361],{"class":315},[275,3712,3713,3715,3717,3719,3721,3723],{"class":277,"line":302},[275,3714,348],{"class":347},[275,3716,323],{"class":315},[275,3718,3544],{"class":347},[275,3720,323],{"class":315},[275,3722,3704],{"class":319},[275,3724,3551],{"class":315},[15,3726,3727],{},"You can also remove rows with missing geometry:",[266,3729,3731],{"className":268,"code":3730,"language":270,"meta":271,"style":271},"parcels_with_geometry = parcels[parcels.geometry.notna()]\n",[106,3732,3733],{"__ignoreMap":271},[275,3734,3735,3738,3740,3742,3744,3746,3748,3750,3752,3755],{"class":277,"line":278},[275,3736,3737],{"class":285},"parcels_with_geometry ",[275,3739,309],{"class":308},[275,3741,2211],{"class":285},[275,3743,558],{"class":315},[275,3745,2282],{"class":285},[275,3747,316],{"class":315},[275,3749,2287],{"class":375},[275,3751,316],{"class":315},[275,3753,3754],{"class":319},"notna",[275,3756,3757],{"class":315},"()]\n",[15,3759,3760],{},"This is a simple but useful quality check before plotting or exporting.",[84,3762,3764],{"id":3763},"check-geometry-types","Check geometry types",[15,3766,3767],{},"GeoPandas makes it easy to inspect geometry types.",[266,3769,3771],{"className":268,"code":3770,"language":270,"meta":271,"style":271},"print(parcels.geometry.geom_type.head())\nprint(parcels.geometry.geom_type.value_counts())\n",[106,3772,3773,3796],{"__ignoreMap":271},[275,3774,3775,3777,3779,3781,3783,3785,3787,3790,3792,3794],{"class":277,"line":278},[275,3776,348],{"class":347},[275,3778,323],{"class":315},[275,3780,2282],{"class":319},[275,3782,316],{"class":315},[275,3784,2287],{"class":375},[275,3786,316],{"class":315},[275,3788,3789],{"class":375},"geom_type",[275,3791,316],{"class":315},[275,3793,358],{"class":319},[275,3795,361],{"class":315},[275,3797,3798,3800,3802,3804,3806,3808,3810,3812,3814,3817],{"class":277,"line":295},[275,3799,348],{"class":347},[275,3801,323],{"class":315},[275,3803,2282],{"class":319},[275,3805,316],{"class":315},[275,3807,2287],{"class":375},[275,3809,316],{"class":315},[275,3811,3789],{"class":375},[275,3813,316],{"class":315},[275,3815,3816],{"class":319},"value_counts",[275,3818,361],{"class":315},[15,3820,3821],{},"Common geometry types include:",[22,3823,3824,3828,3833],{},[25,3825,3826],{},[106,3827,2031],{},[25,3829,3830],{},[106,3831,3832],{},"LineString",[25,3834,3835],{},[106,3836,3837],{},"Polygon",[15,3839,3840],{},"If you expected polygons but see mixed geometry types, verify the source data before continuing.",[84,3842,3844],{"id":3843},"plot-the-data-for-a-quick-visual-check","Plot the data for a quick visual check",[15,3846,3847],{},"A quick plot helps confirm that the layer loaded correctly. This is not advanced cartography. It is a fast validation step.",[266,3849,3851],{"className":268,"code":3850,"language":270,"meta":271,"style":271},"residential.plot()\n",[106,3852,3853],{"__ignoreMap":271},[275,3854,3855,3857,3859,3862],{"class":277,"line":278},[275,3856,3704],{"class":285},[275,3858,316],{"class":315},[275,3860,3861],{"class":319},"plot",[275,3863,3864],{"class":315},"()\n",[15,3866,3867],{},"For a slightly clearer result:",[266,3869,3871],{"className":268,"code":3870,"language":270,"meta":271,"style":271},"ax = residential.plot(figsize=(8, 6), edgecolor=\"black\")\nax.set_title(\"Residential Parcels\")\n",[106,3872,3873,3920],{"__ignoreMap":271},[275,3874,3875,3878,3880,3883,3885,3887,3889,3892,3894,3896,3899,3901,3904,3906,3909,3911,3913,3916,3918],{"class":277,"line":278},[275,3876,3877],{"class":285},"ax ",[275,3879,309],{"class":308},[275,3881,3882],{"class":285}," residential",[275,3884,316],{"class":315},[275,3886,3861],{"class":319},[275,3888,323],{"class":315},[275,3890,3891],{"class":614},"figsize",[275,3893,309],{"class":308},[275,3895,323],{"class":315},[275,3897,3898],{"class":846},"8",[275,3900,611],{"class":315},[275,3902,3903],{"class":846}," 6",[275,3905,2047],{"class":315},[275,3907,3908],{"class":614}," edgecolor",[275,3910,309],{"class":308},[275,3912,327],{"class":326},[275,3914,3915],{"class":330},"black",[275,3917,327],{"class":326},[275,3919,336],{"class":315},[275,3921,3922,3925,3927,3930,3932,3934,3937,3939],{"class":277,"line":295},[275,3923,3924],{"class":285},"ax",[275,3926,316],{"class":315},[275,3928,3929],{"class":319},"set_title",[275,3931,323],{"class":315},[275,3933,327],{"class":326},[275,3935,3936],{"class":330},"Residential Parcels",[275,3938,327],{"class":326},[275,3940,336],{"class":315},[15,3942,3943],{},"This can help you spot empty layers, unexpected extents, or geometry problems.",[84,3945,3947],{"id":3946},"save-the-result-to-a-new-file","Save the result to a new file",[15,3949,3950],{},"After filtering or cleaning data, write it back to disk.",[905,3952,3954],{"id":3953},"save-to-geojson","Save to GeoJSON",[266,3956,3958],{"className":268,"code":3957,"language":270,"meta":271,"style":271},"residential.to_file(\"output\u002Fresidential_parcels.geojson\", driver=\"GeoJSON\")\n",[106,3959,3960],{"__ignoreMap":271},[275,3961,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982,3984,3986,3988],{"class":277,"line":278},[275,3963,3704],{"class":285},[275,3965,316],{"class":315},[275,3967,482],{"class":319},[275,3969,323],{"class":315},[275,3971,327],{"class":326},[275,3973,3232],{"class":330},[275,3975,327],{"class":326},[275,3977,611],{"class":315},[275,3979,615],{"class":614},[275,3981,309],{"class":308},[275,3983,327],{"class":326},[275,3985,622],{"class":330},[275,3987,327],{"class":326},[275,3989,336],{"class":315},[905,3991,3993],{"id":3992},"save-to-shapefile","Save to shapefile",[266,3995,3997],{"className":268,"code":3996,"language":270,"meta":271,"style":271},"residential.to_file(\"output\u002Fresidential_parcels.shp\")\n",[106,3998,3999],{"__ignoreMap":271},[275,4000,4001,4003,4005,4007,4009,4011,4014,4016],{"class":277,"line":278},[275,4002,3704],{"class":285},[275,4004,316],{"class":315},[275,4006,482],{"class":319},[275,4008,323],{"class":315},[275,4010,327],{"class":326},[275,4012,4013],{"class":330},"output\u002Fresidential_parcels.shp",[275,4015,327],{"class":326},[275,4017,336],{"class":315},[15,4019,4020],{},"GeoJSON is often easier for exchange and web workflows. Shapefile is still common in older GIS systems.",[10,4022,260],{"id":259},[84,4024,4026],{"id":4025},"example-1-load-a-shapefile-into-geopandas","Example 1: Load a shapefile into GeoPandas",[266,4028,4029],{"className":268,"code":3341,"language":270,"meta":271,"style":271},[106,4030,4031,4041,4045,4067],{"__ignoreMap":271},[275,4032,4033,4035,4037,4039],{"class":277,"line":278},[275,4034,282],{"class":281},[275,4036,286],{"class":285},[275,4038,289],{"class":281},[275,4040,292],{"class":285},[275,4042,4043],{"class":277,"line":295},[275,4044,299],{"emptyLinePlaceholder":298},[275,4046,4047,4049,4051,4053,4055,4057,4059,4061,4063,4065],{"class":277,"line":302},[275,4048,2174],{"class":285},[275,4050,309],{"class":308},[275,4052,312],{"class":285},[275,4054,316],{"class":315},[275,4056,320],{"class":319},[275,4058,323],{"class":315},[275,4060,327],{"class":326},[275,4062,3376],{"class":330},[275,4064,327],{"class":326},[275,4066,336],{"class":315},[275,4068,4069,4071,4073,4075,4077,4079],{"class":277,"line":339},[275,4070,348],{"class":347},[275,4072,323],{"class":315},[275,4074,2282],{"class":319},[275,4076,316],{"class":315},[275,4078,358],{"class":319},[275,4080,361],{"class":315},[84,4082,4084],{"id":4083},"example-2-load-a-geojson-file-and-inspect-columns","Example 2: Load a GeoJSON file and inspect columns",[266,4086,4088],{"className":268,"code":4087,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nneighborhoods = gpd.read_file(\"data\u002Fcity_neighborhoods.geojson\")\n\nprint(neighborhoods.columns)\nprint(neighborhoods.head())\nprint(neighborhoods.geometry.name)\n",[106,4089,4090,4100,4104,4126,4130,4144,4158],{"__ignoreMap":271},[275,4091,4092,4094,4096,4098],{"class":277,"line":278},[275,4093,282],{"class":281},[275,4095,286],{"class":285},[275,4097,289],{"class":281},[275,4099,292],{"class":285},[275,4101,4102],{"class":277,"line":295},[275,4103,299],{"emptyLinePlaceholder":298},[275,4105,4106,4108,4110,4112,4114,4116,4118,4120,4122,4124],{"class":277,"line":302},[275,4107,3422],{"class":285},[275,4109,309],{"class":308},[275,4111,312],{"class":285},[275,4113,316],{"class":315},[275,4115,320],{"class":319},[275,4117,323],{"class":315},[275,4119,327],{"class":326},[275,4121,3437],{"class":330},[275,4123,327],{"class":326},[275,4125,336],{"class":315},[275,4127,4128],{"class":277,"line":339},[275,4129,299],{"emptyLinePlaceholder":298},[275,4131,4132,4134,4136,4138,4140,4142],{"class":277,"line":344},[275,4133,348],{"class":347},[275,4135,323],{"class":315},[275,4137,3450],{"class":319},[275,4139,316],{"class":315},[275,4141,392],{"class":375},[275,4143,336],{"class":315},[275,4145,4146,4148,4150,4152,4154,4156],{"class":277,"line":364},[275,4147,348],{"class":347},[275,4149,323],{"class":315},[275,4151,3450],{"class":319},[275,4153,316],{"class":315},[275,4155,358],{"class":319},[275,4157,361],{"class":315},[275,4159,4160,4162,4164,4166,4168,4170,4172,4174],{"class":277,"line":381},[275,4161,348],{"class":347},[275,4163,323],{"class":315},[275,4165,3450],{"class":319},[275,4167,316],{"class":315},[275,4169,2287],{"class":375},[275,4171,316],{"class":315},[275,4173,1993],{"class":375},[275,4175,336],{"class":315},[84,4177,4179],{"id":4178},"example-3-check-crs-and-geometry-types","Example 3: Check CRS and geometry types",[266,4181,4183],{"className":268,"code":4182,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nneighborhoods = gpd.read_file(\"data\u002Fcity_neighborhoods.geojson\")\n\nprint(\"CRS:\", neighborhoods.crs)\nprint(neighborhoods.geometry.geom_type.value_counts())\n",[106,4184,4185,4195,4199,4221,4225,4248],{"__ignoreMap":271},[275,4186,4187,4189,4191,4193],{"class":277,"line":278},[275,4188,282],{"class":281},[275,4190,286],{"class":285},[275,4192,289],{"class":281},[275,4194,292],{"class":285},[275,4196,4197],{"class":277,"line":295},[275,4198,299],{"emptyLinePlaceholder":298},[275,4200,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219],{"class":277,"line":302},[275,4202,3422],{"class":285},[275,4204,309],{"class":308},[275,4206,312],{"class":285},[275,4208,316],{"class":315},[275,4210,320],{"class":319},[275,4212,323],{"class":315},[275,4214,327],{"class":326},[275,4216,3437],{"class":330},[275,4218,327],{"class":326},[275,4220,336],{"class":315},[275,4222,4223],{"class":277,"line":339},[275,4224,299],{"emptyLinePlaceholder":298},[275,4226,4227,4229,4231,4233,4235,4237,4239,4242,4244,4246],{"class":277,"line":344},[275,4228,348],{"class":347},[275,4230,323],{"class":315},[275,4232,327],{"class":326},[275,4234,1873],{"class":330},[275,4236,327],{"class":326},[275,4238,611],{"class":315},[275,4240,4241],{"class":319}," neighborhoods",[275,4243,316],{"class":315},[275,4245,376],{"class":375},[275,4247,336],{"class":315},[275,4249,4250,4252,4254,4256,4258,4260,4262,4264,4266,4268],{"class":277,"line":364},[275,4251,348],{"class":347},[275,4253,323],{"class":315},[275,4255,3450],{"class":319},[275,4257,316],{"class":315},[275,4259,2287],{"class":375},[275,4261,316],{"class":315},[275,4263,3789],{"class":375},[275,4265,316],{"class":315},[275,4267,3816],{"class":319},[275,4269,361],{"class":315},[84,4271,4273],{"id":4272},"example-4-filter-features-by-attribute","Example 4: Filter features by attribute",[266,4275,4277],{"className":268,"code":4276,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nparcels = gpd.read_file(\"data\u002Fparcels\u002Fparcels.shp\")\n\ncommercial = parcels[parcels[\"land_use\"] == \"COMMERCIAL\"]\nprint(commercial[[\"parcel_id\", \"land_use\"]].head())\n",[106,4278,4279,4289,4293,4315,4319,4354],{"__ignoreMap":271},[275,4280,4281,4283,4285,4287],{"class":277,"line":278},[275,4282,282],{"class":281},[275,4284,286],{"class":285},[275,4286,289],{"class":281},[275,4288,292],{"class":285},[275,4290,4291],{"class":277,"line":295},[275,4292,299],{"emptyLinePlaceholder":298},[275,4294,4295,4297,4299,4301,4303,4305,4307,4309,4311,4313],{"class":277,"line":302},[275,4296,2174],{"class":285},[275,4298,309],{"class":308},[275,4300,312],{"class":285},[275,4302,316],{"class":315},[275,4304,320],{"class":319},[275,4306,323],{"class":315},[275,4308,327],{"class":326},[275,4310,3376],{"class":330},[275,4312,327],{"class":326},[275,4314,336],{"class":315},[275,4316,4317],{"class":277,"line":339},[275,4318,299],{"emptyLinePlaceholder":298},[275,4320,4321,4324,4326,4328,4330,4332,4334,4336,4339,4341,4343,4345,4347,4350,4352],{"class":277,"line":344},[275,4322,4323],{"class":285},"commercial ",[275,4325,309],{"class":308},[275,4327,2211],{"class":285},[275,4329,558],{"class":315},[275,4331,2282],{"class":285},[275,4333,558],{"class":315},[275,4335,327],{"class":326},[275,4337,4338],{"class":330},"land_use",[275,4340,327],{"class":326},[275,4342,572],{"class":315},[275,4344,575],{"class":308},[275,4346,578],{"class":326},[275,4348,4349],{"class":330},"COMMERCIAL",[275,4351,327],{"class":326},[275,4353,586],{"class":315},[275,4355,4356,4358,4360,4363,4366,4368,4371,4373,4375,4377,4379,4381,4384,4386],{"class":277,"line":364},[275,4357,348],{"class":347},[275,4359,323],{"class":315},[275,4361,4362],{"class":319},"commercial",[275,4364,4365],{"class":315},"[[",[275,4367,327],{"class":326},[275,4369,4370],{"class":330},"parcel_id",[275,4372,327],{"class":326},[275,4374,611],{"class":315},[275,4376,578],{"class":326},[275,4378,4338],{"class":330},[275,4380,327],{"class":326},[275,4382,4383],{"class":315},"]].",[275,4385,358],{"class":319},[275,4387,361],{"class":315},[84,4389,4391],{"id":4390},"example-5-plot-and-export-filtered-data","Example 5: Plot and export filtered data",[266,4393,4395],{"className":268,"code":4394,"language":270,"meta":271,"style":271},"import geopandas as gpd\n\nparcels = gpd.read_file(\"data\u002Fparcels\u002Fparcels.shp\")\nresidential = parcels[(parcels[\"zone\"] == \"RESIDENTIAL\") & (parcels.geometry.notna())]\n\nax = residential.plot(figsize=(8, 6), edgecolor=\"black\")\nax.set_title(\"Residential Parcels\")\n\nresidential.to_file(\"output\u002Fresidential_parcels.geojson\", driver=\"GeoJSON\")\n",[106,4396,4397,4407,4411,4433,4485,4489,4529,4547,4551],{"__ignoreMap":271},[275,4398,4399,4401,4403,4405],{"class":277,"line":278},[275,4400,282],{"class":281},[275,4402,286],{"class":285},[275,4404,289],{"class":281},[275,4406,292],{"class":285},[275,4408,4409],{"class":277,"line":295},[275,4410,299],{"emptyLinePlaceholder":298},[275,4412,4413,4415,4417,4419,4421,4423,4425,4427,4429,4431],{"class":277,"line":302},[275,4414,2174],{"class":285},[275,4416,309],{"class":308},[275,4418,312],{"class":285},[275,4420,316],{"class":315},[275,4422,320],{"class":319},[275,4424,323],{"class":315},[275,4426,327],{"class":326},[275,4428,3376],{"class":330},[275,4430,327],{"class":326},[275,4432,336],{"class":315},[275,4434,4435,4437,4439,4441,4444,4446,4448,4450,4452,4454,4456,4458,4460,4462,4464,4466,4469,4472,4474,4476,4478,4480,4482],{"class":277,"line":339},[275,4436,3667],{"class":285},[275,4438,309],{"class":308},[275,4440,2211],{"class":285},[275,4442,4443],{"class":315},"[(",[275,4445,2282],{"class":285},[275,4447,558],{"class":315},[275,4449,327],{"class":326},[275,4451,3202],{"class":330},[275,4453,327],{"class":326},[275,4455,572],{"class":315},[275,4457,575],{"class":308},[275,4459,578],{"class":326},[275,4461,3213],{"class":330},[275,4463,327],{"class":326},[275,4465,2088],{"class":315},[275,4467,4468],{"class":308}," &",[275,4470,4471],{"class":315}," (",[275,4473,2282],{"class":285},[275,4475,316],{"class":315},[275,4477,2287],{"class":375},[275,4479,316],{"class":315},[275,4481,3754],{"class":319},[275,4483,4484],{"class":315},"())]\n",[275,4486,4487],{"class":277,"line":344},[275,4488,299],{"emptyLinePlaceholder":298},[275,4490,4491,4493,4495,4497,4499,4501,4503,4505,4507,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527],{"class":277,"line":364},[275,4492,3877],{"class":285},[275,4494,309],{"class":308},[275,4496,3882],{"class":285},[275,4498,316],{"class":315},[275,4500,3861],{"class":319},[275,4502,323],{"class":315},[275,4504,3891],{"class":614},[275,4506,309],{"class":308},[275,4508,323],{"class":315},[275,4510,3898],{"class":846},[275,4512,611],{"class":315},[275,4514,3903],{"class":846},[275,4516,2047],{"class":315},[275,4518,3908],{"class":614},[275,4520,309],{"class":308},[275,4522,327],{"class":326},[275,4524,3915],{"class":330},[275,4526,327],{"class":326},[275,4528,336],{"class":315},[275,4530,4531,4533,4535,4537,4539,4541,4543,4545],{"class":277,"line":381},[275,4532,3924],{"class":285},[275,4534,316],{"class":315},[275,4536,3929],{"class":319},[275,4538,323],{"class":315},[275,4540,327],{"class":326},[275,4542,3936],{"class":330},[275,4544,327],{"class":326},[275,4546,336],{"class":315},[275,4548,4549],{"class":277,"line":745},[275,4550,299],{"emptyLinePlaceholder":298},[275,4552,4553,4555,4557,4559,4561,4563,4565,4567,4569,4571,4573,4575,4577,4579],{"class":277,"line":777},[275,4554,3704],{"class":285},[275,4556,316],{"class":315},[275,4558,482],{"class":319},[275,4560,323],{"class":315},[275,4562,327],{"class":326},[275,4564,3232],{"class":330},[275,4566,327],{"class":326},[275,4568,611],{"class":315},[275,4570,615],{"class":614},[275,4572,309],{"class":308},[275,4574,327],{"class":326},[275,4576,622],{"class":330},[275,4578,327],{"class":326},[275,4580,336],{"class":315},[10,4582,896],{"id":895},[15,4584,1424,4585,4587],{},[178,4586,1980],{}," is the core object in GeoPandas. It extends a pandas DataFrame by adding support for spatial geometry. That means you still get rows and columns like a normal table, but one column stores shapes such as points, lines, or polygons.",[15,4589,4590],{},"The geometry column is what makes spatial operations possible. Without it, you just have attribute data. With it, GeoPandas can plot features, inspect geometry types, and support later GIS tasks such as clipping or spatial joins.",[15,4592,4593],{},"This is the main difference between pandas and GeoPandas:",[22,4595,4596,4602],{},[25,4597,4598,4601],{},[178,4599,4600],{},"pandas"," works with tabular data",[25,4603,4604,4606],{},[178,4605,180],{}," works with tabular data plus spatial geometry",[15,4608,4609,4610,4612],{},"CRS is also a required part of a reliable spatial data workflow. Two datasets can both look valid but still fail to align if their CRS values differ. Even in a basic workflow, checking ",[106,4611,1531],{}," should be standard.",[15,4614,4615],{},"This page is a foundation for common vector tasks in Python. It covers loading, inspecting, filtering, plotting, and exporting data without going into reprojection, spatial joins, or geoprocessing.",[10,4617,1120],{"id":1119},[84,4619,4621],{"id":4620},"missing-or-invalid-geometry","Missing or invalid geometry",[15,4623,4624],{},"Some rows may have null geometry values or invalid shapes. Check for missing geometry before plotting or analysis:",[266,4626,4628],{"className":268,"code":4627,"language":270,"meta":271,"style":271},"gdf = gdf[gdf.geometry.notna()]\n",[106,4629,4630],{"__ignoreMap":271},[275,4631,4632,4634,4636,4638,4640,4642,4644,4646,4648,4650],{"class":277,"line":278},[275,4633,305],{"class":285},[275,4635,309],{"class":308},[275,4637,452],{"class":285},[275,4639,558],{"class":315},[275,4641,353],{"class":285},[275,4643,316],{"class":315},[275,4645,2287],{"class":375},[275,4647,316],{"class":315},[275,4649,3754],{"class":319},[275,4651,3757],{"class":315},[15,4653,4654],{},"If you need to check geometry validity, use:",[266,4656,4658],{"className":268,"code":4657,"language":270,"meta":271,"style":271},"print(gdf.geometry.is_valid.value_counts())\n",[106,4659,4660],{"__ignoreMap":271},[275,4661,4662,4664,4666,4668,4670,4672,4674,4677,4679,4681],{"class":277,"line":278},[275,4663,348],{"class":347},[275,4665,323],{"class":315},[275,4667,353],{"class":319},[275,4669,316],{"class":315},[275,4671,2287],{"class":375},[275,4673,316],{"class":315},[275,4675,4676],{"class":375},"is_valid",[275,4678,316],{"class":315},[275,4680,3816],{"class":319},[275,4682,361],{"class":315},[15,4684,4685],{},"Invalid geometry can cause errors in later operations.",[84,4687,4689],{"id":4688},"crs-may-be-missing","CRS may be missing",[15,4691,4692,4693,4695,4696,4699],{},"Some files do not contain CRS metadata. If ",[106,4694,1531],{}," returns ",[106,4697,4698],{},"None",", do not assume the coordinates are correct. An unknown CRS makes mapping and spatial analysis unreliable.",[84,4701,4703],{"id":4702},"shapefile-field-limitations","Shapefile field limitations",[15,4705,4706],{},"Shapefiles have older format constraints, including:",[22,4708,4709,4712,4729],{},[25,4710,4711],{},"shortened field names",[25,4713,4714,4715,4718,4719,4718,4722,4725,4726],{},"multiple sidecar files such as ",[106,4716,4717],{},".shp",", ",[106,4720,4721],{},".shx",[106,4723,4724],{},".dbf",", and ",[106,4727,4728],{},".prj",[25,4730,4731],{},"weaker support for long text and metadata",[15,4733,4734],{},"If possible, consider GeoJSON or GeoPackage for newer workflows.",[84,4736,4738],{"id":4737},"large-files-can-be-slow","Large files can be slow",[15,4740,4741],{},"Large parcel or boundary datasets may load slowly and be expensive to plot. Start by inspecting structure, columns, and row count before doing heavier operations.",[10,4743,1163],{"id":1162},[15,4745,2918,4746,316],{},[1168,4747,5],{"href":4748},"\u002Ffoundation\u002Fpython-for-gis-introduction\u002F",[15,4750,4751,4752,1179,4755,316],{},"For related tasks, see ",[1168,4753,4754],{"href":1177},"How to Read a Shapefile with GeoPandas",[1168,4756,4757],{"href":1170},"How to Read GeoJSON in Python with GeoPandas",[15,4759,4760,4761,316],{},"If your data does not line up or the CRS is unclear, see ",[1168,4762,1190],{"href":1189},[10,4764,1201],{"id":1200},[84,4766,4768],{"id":4767},"what-is-geopandas-used-for","What is GeoPandas used for?",[15,4770,4771],{},"GeoPandas is used for working with vector spatial data in Python. Common tasks include reading shapefiles and GeoJSON, filtering features, checking CRS, plotting data, and exporting results.",[84,4773,4775],{"id":4774},"what-is-the-difference-between-pandas-and-geopandas","What is the difference between pandas and GeoPandas?",[15,4777,4778],{},"pandas handles standard tabular data. GeoPandas adds a geometry column so the table can store and work with spatial features such as points, lines, and polygons.",[84,4780,4782],{"id":4781},"can-geopandas-read-shapefiles-and-geojson","Can GeoPandas read shapefiles and GeoJSON?",[15,4784,4785,4786,4788],{},"Yes. ",[106,4787,3093],{}," can read both shapefiles and GeoJSON, along with other vector formats supported by the installed GIS libraries.",[84,4790,4792],{"id":4791},"how-do-i-check-the-crs-of-a-geodataframe","How do I check the CRS of a GeoDataFrame?",[15,4794,1528,4795,4797],{},[106,4796,1531],{}," attribute:",[266,4799,4801],{"className":268,"code":4800,"language":270,"meta":271,"style":271},"print(gdf.crs)\n",[106,4802,4803],{"__ignoreMap":271},[275,4804,4805,4807,4809,4811,4813,4815],{"class":277,"line":278},[275,4806,348],{"class":347},[275,4808,323],{"class":315},[275,4810,353],{"class":319},[275,4812,316],{"class":315},[275,4814,376],{"class":375},[275,4816,336],{"class":315},[15,4818,4819],{},"This shows the coordinate reference system if it is stored with the dataset.",[1231,4821,4822],{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .slqww, html code.shiki .slqww{--shiki-light:#6182B8;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":271,"searchDepth":295,"depth":295,"links":4824},[4825,4826,4827,4838,4845,4846,4852,4853],{"id":12,"depth":295,"text":13},{"id":45,"depth":295,"text":46},{"id":81,"depth":295,"text":82,"children":4828},[4829,4830,4831,4832,4833,4834,4835,4836,4837],{"id":3253,"depth":302,"text":3254},{"id":3299,"depth":302,"text":3300},{"id":3328,"depth":302,"text":3329},{"id":3465,"depth":302,"text":3466},{"id":3574,"depth":302,"text":3575},{"id":3649,"depth":302,"text":3650},{"id":3763,"depth":302,"text":3764},{"id":3843,"depth":302,"text":3844},{"id":3946,"depth":302,"text":3947},{"id":259,"depth":295,"text":260,"children":4839},[4840,4841,4842,4843,4844],{"id":4025,"depth":302,"text":4026},{"id":4083,"depth":302,"text":4084},{"id":4178,"depth":302,"text":4179},{"id":4272,"depth":302,"text":4273},{"id":4390,"depth":302,"text":4391},{"id":895,"depth":295,"text":896},{"id":1119,"depth":295,"text":1120,"children":4847},[4848,4849,4850,4851],{"id":4620,"depth":302,"text":4621},{"id":4688,"depth":302,"text":4689},{"id":4702,"depth":302,"text":4703},{"id":4737,"depth":302,"text":4738},{"id":1162,"depth":295,"text":1163},{"id":1200,"depth":295,"text":1201,"children":4854},[4855,4856,4857,4858],{"id":4767,"depth":302,"text":4768},{"id":4774,"depth":302,"text":4775},{"id":4781,"depth":302,"text":4782},{"id":4791,"depth":302,"text":4792},"A practical introduction to GeoPandas for reading, inspecting, filtering, and exporting vector spatial data in Python.",{},"\u002Ffoundation\u002Fgeopandas-basics",{"title":1171,"description":4859},"foundation\u002Fgeopandas-basics","D0xUx41XM4rcsVEM7y3eB3_1w05ku7TMOcp8gNq4TlU",{"id":4,"title":5,"body":4866,"description":1273,"extension":1274,"meta":5785,"navigation":298,"path":1276,"seo":5786,"stem":1278,"__hash__":1279},{"type":7,"value":4867,"toc":5746},[4868,4870,4872,4874,4884,4886,4888,4890,4892,4894,4910,4912,4914,4916,4918,4920,4932,4934,4936,4938,4948,4950,4952,4954,4966,4968,4970,4972,4990,4992,4994,4996,4998,5010,5012,5014,5016,5018,5028,5030,5032,5118,5120,5122,5206,5208,5210,5320,5322,5324,5538,5540,5542,5544,5546,5548,5550,5562,5564,5566,5568,5570,5584,5586,5588,5590,5600,5602,5604,5606,5608,5610,5612,5614,5616,5618,5620,5622,5624,5626,5628,5630,5632,5634,5646,5648,5650,5652,5662,5664,5666,5668,5670,5672,5674,5676,5678,5680,5682,5684,5686,5688,5690,5694,5696,5698,5700,5702,5704,5706,5708,5712,5718,5722,5726,5728,5730,5732,5734,5736,5738,5740,5742,5744],[10,4869,13],{"id":12},[15,4871,17],{},[15,4873,20],{},[22,4875,4876,4878,4880,4882],{},[25,4877,27],{},[25,4879,30],{},[25,4881,33],{},[25,4883,36],{},[15,4885,39],{},[15,4887,42],{},[10,4889,46],{"id":45},[15,4891,49],{},[15,4893,52],{},[22,4895,4896,4898,4900,4902,4904,4906,4908],{},[25,4897,57],{},[25,4899,60],{},[25,4901,63],{},[25,4903,66],{},[25,4905,69],{},[25,4907,72],{},[25,4909,75],{},[15,4911,78],{},[10,4913,82],{"id":81},[84,4915,87],{"id":86},[15,4917,90],{},[15,4919,93],{},[22,4921,4922,4924,4926,4930],{},[25,4923,98],{},[25,4925,101],{},[25,4927,104,4928],{},[106,4929,108],{},[25,4931,111],{},[15,4933,114],{},[84,4935,118],{"id":117},[15,4937,121],{},[22,4939,4940,4942,4944,4946],{},[25,4941,126],{},[25,4943,129],{},[25,4945,132],{},[25,4947,135],{},[15,4949,138],{},[84,4951,142],{"id":141},[15,4953,145],{},[22,4955,4956,4958,4960,4962,4964],{},[25,4957,150],{},[25,4959,153],{},[25,4961,156],{},[25,4963,159],{},[25,4965,162],{},[15,4967,165],{},[84,4969,169],{"id":168},[15,4971,172],{},[22,4973,4974,4978,4982,4986],{},[25,4975,4976,181],{},[178,4977,180],{},[25,4979,4980,187],{},[178,4981,186],{},[25,4983,4984,193],{},[178,4985,192],{},[25,4987,4988,199],{},[178,4989,198],{},[15,4991,202],{},[84,4993,206],{"id":205},[15,4995,209],{},[15,4997,212],{},[22,4999,5000,5002,5004,5006,5008],{},[25,5001,217],{},[25,5003,220],{},[25,5005,223],{},[25,5007,226],{},[25,5009,229],{},[15,5011,232],{},[84,5013,236],{"id":235},[15,5015,239],{},[15,5017,242],{},[22,5019,5020,5022,5024,5026],{},[25,5021,247],{},[25,5023,250],{},[25,5025,253],{},[25,5027,256],{},[10,5029,260],{"id":259},[84,5031,264],{"id":263},[266,5033,5034],{"className":268,"code":269,"language":270,"meta":271,"style":271},[106,5035,5036,5046,5050,5072,5076,5090,5104],{"__ignoreMap":271},[275,5037,5038,5040,5042,5044],{"class":277,"line":278},[275,5039,282],{"class":281},[275,5041,286],{"class":285},[275,5043,289],{"class":281},[275,5045,292],{"class":285},[275,5047,5048],{"class":277,"line":295},[275,5049,299],{"emptyLinePlaceholder":298},[275,5051,5052,5054,5056,5058,5060,5062,5064,5066,5068,5070],{"class":277,"line":302},[275,5053,305],{"class":285},[275,5055,309],{"class":308},[275,5057,312],{"class":285},[275,5059,316],{"class":315},[275,5061,320],{"class":319},[275,5063,323],{"class":315},[275,5065,327],{"class":326},[275,5067,331],{"class":330},[275,5069,327],{"class":326},[275,5071,336],{"class":315},[275,5073,5074],{"class":277,"line":339},[275,5075,299],{"emptyLinePlaceholder":298},[275,5077,5078,5080,5082,5084,5086,5088],{"class":277,"line":344},[275,5079,348],{"class":347},[275,5081,323],{"class":315},[275,5083,353],{"class":319},[275,5085,316],{"class":315},[275,5087,358],{"class":319},[275,5089,361],{"class":315},[275,5091,5092,5094,5096,5098,5100,5102],{"class":277,"line":364},[275,5093,348],{"class":347},[275,5095,323],{"class":315},[275,5097,353],{"class":319},[275,5099,316],{"class":315},[275,5101,376],{"class":375},[275,5103,336],{"class":315},[275,5105,5106,5108,5110,5112,5114,5116],{"class":277,"line":381},[275,5107,348],{"class":347},[275,5109,323],{"class":315},[275,5111,353],{"class":319},[275,5113,316],{"class":315},[275,5115,392],{"class":375},[275,5117,336],{"class":315},[15,5119,397],{},[84,5121,401],{"id":400},[266,5123,5124],{"className":268,"code":404,"language":270,"meta":271,"style":271},[106,5125,5126,5136,5140,5162,5184,5188],{"__ignoreMap":271},[275,5127,5128,5130,5132,5134],{"class":277,"line":278},[275,5129,282],{"class":281},[275,5131,286],{"class":285},[275,5133,289],{"class":281},[275,5135,292],{"class":285},[275,5137,5138],{"class":277,"line":295},[275,5139,299],{"emptyLinePlaceholder":298},[275,5141,5142,5144,5146,5148,5150,5152,5154,5156,5158,5160],{"class":277,"line":302},[275,5143,305],{"class":285},[275,5145,309],{"class":308},[275,5147,312],{"class":285},[275,5149,316],{"class":315},[275,5151,320],{"class":319},[275,5153,323],{"class":315},[275,5155,327],{"class":326},[275,5157,331],{"class":330},[275,5159,327],{"class":326},[275,5161,336],{"class":315},[275,5163,5164,5166,5168,5170,5172,5174,5176,5178,5180,5182],{"class":277,"line":339},[275,5165,447],{"class":285},[275,5167,309],{"class":308},[275,5169,452],{"class":285},[275,5171,316],{"class":315},[275,5173,457],{"class":319},[275,5175,323],{"class":315},[275,5177,327],{"class":326},[275,5179,464],{"class":330},[275,5181,327],{"class":326},[275,5183,336],{"class":315},[275,5185,5186],{"class":277,"line":344},[275,5187,299],{"emptyLinePlaceholder":298},[275,5189,5190,5192,5194,5196,5198,5200,5202,5204],{"class":277,"line":364},[275,5191,477],{"class":285},[275,5193,316],{"class":315},[275,5195,482],{"class":319},[275,5197,323],{"class":315},[275,5199,327],{"class":326},[275,5201,489],{"class":330},[275,5203,327],{"class":326},[275,5205,336],{"class":315},[15,5207,496],{},[84,5209,500],{"id":499},[266,5211,5212],{"className":268,"code":503,"language":270,"meta":271,"style":271},[106,5213,5214,5224,5228,5250,5254,5286,5290],{"__ignoreMap":271},[275,5215,5216,5218,5220,5222],{"class":277,"line":278},[275,5217,282],{"class":281},[275,5219,286],{"class":285},[275,5221,289],{"class":281},[275,5223,292],{"class":285},[275,5225,5226],{"class":277,"line":295},[275,5227,299],{"emptyLinePlaceholder":298},[275,5229,5230,5232,5234,5236,5238,5240,5242,5244,5246,5248],{"class":277,"line":302},[275,5231,305],{"class":285},[275,5233,309],{"class":308},[275,5235,312],{"class":285},[275,5237,316],{"class":315},[275,5239,320],{"class":319},[275,5241,323],{"class":315},[275,5243,327],{"class":326},[275,5245,538],{"class":330},[275,5247,327],{"class":326},[275,5249,336],{"class":315},[275,5251,5252],{"class":277,"line":339},[275,5253,299],{"emptyLinePlaceholder":298},[275,5255,5256,5258,5260,5262,5264,5266,5268,5270,5272,5274,5276,5278,5280,5282,5284],{"class":277,"line":344},[275,5257,551],{"class":285},[275,5259,309],{"class":308},[275,5261,452],{"class":285},[275,5263,558],{"class":315},[275,5265,353],{"class":285},[275,5267,558],{"class":315},[275,5269,327],{"class":326},[275,5271,567],{"class":330},[275,5273,327],{"class":326},[275,5275,572],{"class":315},[275,5277,575],{"class":308},[275,5279,578],{"class":326},[275,5281,581],{"class":330},[275,5283,327],{"class":326},[275,5285,586],{"class":315},[275,5287,5288],{"class":277,"line":364},[275,5289,299],{"emptyLinePlaceholder":298},[275,5291,5292,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318],{"class":277,"line":381},[275,5293,595],{"class":285},[275,5295,316],{"class":315},[275,5297,482],{"class":319},[275,5299,323],{"class":315},[275,5301,327],{"class":326},[275,5303,606],{"class":330},[275,5305,327],{"class":326},[275,5307,611],{"class":315},[275,5309,615],{"class":614},[275,5311,309],{"class":308},[275,5313,327],{"class":326},[275,5315,622],{"class":330},[275,5317,327],{"class":326},[275,5319,336],{"class":315},[15,5321,629],{},[84,5323,633],{"id":632},[266,5325,5326],{"className":268,"code":636,"language":270,"meta":271,"style":271},[106,5327,5328,5338,5348,5352,5370,5388,5414,5418,5442,5460,5482,5486,5512],{"__ignoreMap":271},[275,5329,5330,5332,5334,5336],{"class":277,"line":278},[275,5331,643],{"class":281},[275,5333,646],{"class":285},[275,5335,282],{"class":281},[275,5337,651],{"class":285},[275,5339,5340,5342,5344,5346],{"class":277,"line":295},[275,5341,282],{"class":281},[275,5343,286],{"class":285},[275,5345,289],{"class":281},[275,5347,292],{"class":285},[275,5349,5350],{"class":277,"line":302},[275,5351,299],{"emptyLinePlaceholder":298},[275,5353,5354,5356,5358,5360,5362,5364,5366,5368],{"class":277,"line":339},[275,5355,670],{"class":285},[275,5357,309],{"class":308},[275,5359,675],{"class":319},[275,5361,323],{"class":315},[275,5363,327],{"class":326},[275,5365,682],{"class":330},[275,5367,327],{"class":326},[275,5369,336],{"class":315},[275,5371,5372,5374,5376,5378,5380,5382,5384,5386],{"class":277,"line":344},[275,5373,691],{"class":285},[275,5375,309],{"class":308},[275,5377,675],{"class":319},[275,5379,323],{"class":315},[275,5381,327],{"class":326},[275,5383,702],{"class":330},[275,5385,327],{"class":326},[275,5387,336],{"class":315},[275,5389,5390,5392,5394,5396,5398,5400,5402,5404,5406,5408,5410,5412],{"class":277,"line":364},[275,5391,711],{"class":285},[275,5393,316],{"class":315},[275,5395,716],{"class":319},[275,5397,323],{"class":315},[275,5399,721],{"class":614},[275,5401,309],{"class":308},[275,5403,727],{"class":726},[275,5405,611],{"class":315},[275,5407,732],{"class":614},[275,5409,309],{"class":308},[275,5411,727],{"class":726},[275,5413,336],{"class":315},[275,5415,5416],{"class":277,"line":381},[275,5417,299],{"emptyLinePlaceholder":298},[275,5419,5420,5422,5424,5426,5428,5430,5432,5434,5436,5438,5440],{"class":277,"line":745},[275,5421,748],{"class":281},[275,5423,751],{"class":285},[275,5425,754],{"class":281},[275,5427,757],{"class":285},[275,5429,316],{"class":315},[275,5431,762],{"class":319},[275,5433,323],{"class":315},[275,5435,327],{"class":326},[275,5437,769],{"class":330},[275,5439,327],{"class":326},[275,5441,774],{"class":315},[275,5443,5444,5446,5448,5450,5452,5454,5456,5458],{"class":277,"line":777},[275,5445,780],{"class":285},[275,5447,309],{"class":308},[275,5449,312],{"class":285},[275,5451,316],{"class":315},[275,5453,320],{"class":319},[275,5455,323],{"class":315},[275,5457,793],{"class":319},[275,5459,336],{"class":315},[275,5461,5462,5464,5466,5468,5470,5472,5474,5476,5478,5480],{"class":277,"line":798},[275,5463,780],{"class":285},[275,5465,309],{"class":308},[275,5467,452],{"class":285},[275,5469,316],{"class":315},[275,5471,457],{"class":319},[275,5473,323],{"class":315},[275,5475,327],{"class":326},[275,5477,464],{"class":330},[275,5479,327],{"class":326},[275,5481,336],{"class":315},[275,5483,5484],{"class":277,"line":821},[275,5485,299],{"emptyLinePlaceholder":298},[275,5487,5488,5490,5492,5494,5496,5498,5500,5502,5504,5506,5508,5510],{"class":277,"line":826},[275,5489,829],{"class":285},[275,5491,309],{"class":308},[275,5493,834],{"class":285},[275,5495,837],{"class":308},[275,5497,841],{"class":840},[275,5499,327],{"class":330},[275,5501,847],{"class":846},[275,5503,793],{"class":285},[275,5505,316],{"class":315},[275,5507,854],{"class":375},[275,5509,857],{"class":846},[275,5511,860],{"class":330},[275,5513,5514,5516,5518,5520,5522,5524,5526,5528,5530,5532,5534,5536],{"class":277,"line":863},[275,5515,866],{"class":285},[275,5517,316],{"class":315},[275,5519,482],{"class":319},[275,5521,323],{"class":315},[275,5523,875],{"class":319},[275,5525,611],{"class":315},[275,5527,615],{"class":614},[275,5529,309],{"class":308},[275,5531,327],{"class":326},[275,5533,622],{"class":330},[275,5535,327],{"class":326},[275,5537,336],{"class":315},[15,5539,892],{},[10,5541,896],{"id":895},[84,5543,900],{"id":899},[15,5545,903],{},[905,5547,908],{"id":907},[15,5549,911],{},[22,5551,5552,5554,5556,5558,5560],{},[25,5553,916],{},[25,5555,919],{},[25,5557,922],{},[25,5559,925],{},[25,5561,928],{},[15,5563,931],{},[905,5565,935],{"id":934},[15,5567,938],{},[15,5569,941],{},[22,5571,5572,5574,5576,5578,5580,5582],{},[25,5573,946],{},[25,5575,949],{},[25,5577,952],{},[25,5579,955],{},[25,5581,958],{},[25,5583,961],{},[15,5585,964],{},[905,5587,968],{"id":967},[15,5589,971],{},[22,5591,5592,5594,5596,5598],{},[25,5593,976],{},[25,5595,979],{},[25,5597,982],{},[25,5599,985],{},[15,5601,988],{},[84,5603,992],{"id":991},[15,5605,995],{},[905,5607,999],{"id":998},[15,5609,1002],{},[905,5611,1006],{"id":1005},[15,5613,1009],{},[905,5615,1013],{"id":1012},[15,5617,1016],{},[905,5619,1020],{"id":1019},[15,5621,1023],{},[905,5623,1027],{"id":1026},[15,5625,1030],{},[905,5627,1034],{"id":1033},[15,5629,1037],{},[84,5631,1041],{"id":1040},[15,5633,1044],{},[22,5635,5636,5638,5640,5642,5644],{},[25,5637,1049],{},[25,5639,1052],{},[25,5641,1055],{},[25,5643,1058],{},[25,5645,1061],{},[84,5647,1065],{"id":1064},[15,5649,1068],{},[15,5651,1071],{},[22,5653,5654,5656,5658,5660],{},[25,5655,1076],{},[25,5657,1079],{},[25,5659,1082],{},[25,5661,1085],{},[15,5663,1088],{},[84,5665,1092],{"id":1091},[905,5667,180],{"id":1095},[15,5669,1098],{},[905,5671,186],{"id":1101},[15,5673,1104],{},[905,5675,192],{"id":1107},[15,5677,1110],{},[905,5679,198],{"id":1113},[15,5681,1116],{},[10,5683,1120],{"id":1119},[84,5685,1124],{"id":1123},[15,5687,1127],{},[84,5689,1131],{"id":1130},[15,5691,1134,5692,1138],{},[106,5693,1137],{},[84,5695,1142],{"id":1141},[15,5697,1145],{},[84,5699,1149],{"id":1148},[15,5701,1152],{},[84,5703,1156],{"id":1155},[15,5705,1159],{},[10,5707,1163],{"id":1162},[15,5709,1166,5710,316],{},[1168,5711,1171],{"href":1170},[15,5713,1174,5714,1179,5716,316],{},[1168,5715,1178],{"href":1177},[1168,5717,1183],{"href":1182},[15,5719,1186,5720,316],{},[1168,5721,1190],{"href":1189},[15,5723,1193,5724,316],{},[1168,5725,1197],{"href":1196},[10,5727,1201],{"id":1200},[84,5729,1205],{"id":1204},[15,5731,1208],{},[84,5733,1212],{"id":1211},[15,5735,1215],{},[84,5737,1219],{"id":1218},[15,5739,1222],{},[84,5741,1226],{"id":1225},[15,5743,1229],{},[1231,5745,1233],{},{"title":271,"searchDepth":295,"depth":295,"links":5747},[5748,5749,5750,5758,5764,5771,5778,5779],{"id":12,"depth":295,"text":13},{"id":45,"depth":295,"text":46},{"id":81,"depth":295,"text":82,"children":5751},[5752,5753,5754,5755,5756,5757],{"id":86,"depth":302,"text":87},{"id":117,"depth":302,"text":118},{"id":141,"depth":302,"text":142},{"id":168,"depth":302,"text":169},{"id":205,"depth":302,"text":206},{"id":235,"depth":302,"text":236},{"id":259,"depth":295,"text":260,"children":5759},[5760,5761,5762,5763],{"id":263,"depth":302,"text":264},{"id":400,"depth":302,"text":401},{"id":499,"depth":302,"text":500},{"id":632,"depth":302,"text":633},{"id":895,"depth":295,"text":896,"children":5765},[5766,5767,5768,5769,5770],{"id":899,"depth":302,"text":900},{"id":991,"depth":302,"text":992},{"id":1040,"depth":302,"text":1041},{"id":1064,"depth":302,"text":1065},{"id":1091,"depth":302,"text":1092},{"id":1119,"depth":295,"text":1120,"children":5772},[5773,5774,5775,5776,5777],{"id":1123,"depth":302,"text":1124},{"id":1130,"depth":302,"text":1131},{"id":1141,"depth":302,"text":1142},{"id":1148,"depth":302,"text":1149},{"id":1155,"depth":302,"text":1156},{"id":1162,"depth":295,"text":1163},{"id":1200,"depth":295,"text":1201,"children":5780},[5781,5782,5783,5784],{"id":1204,"depth":302,"text":1205},{"id":1211,"depth":302,"text":1212},{"id":1218,"depth":302,"text":1219},{"id":1225,"depth":302,"text":1226},{},{"title":5,"description":1273},1776966206018]