NYGeog

Geography, GIS, Geospatial, NYC, etc.

Thursday, February 16, 2012

Python Code Block - Population Density (numerator zero and string to numeric)

Okay, so this morning, I've been dealing with two things. Well the first is that my ACS Census 2006-2010 conversion scripts create string fields for the variables. They should be numeric. I'll deal with that on its own. But this challenge was sort of interesting b/c it required two things. First off, I needed to calculate Population Density (per sq. km) but I've been having trouble with Python dealing with zero's (0) in the numerator for division when my added Field is non-nullable (I think if you add a field after the initial feature class creation you can't allow a field to be nullable, need to check on that though) and then converting and using a string value in my Code Block. I did a bunch of things wrong at first. My colleague's friend helped me figure this out over gchat by showing him my first code that didn't work. So thanks to him, though I don't know his name, but know he works at the EPA or did when my colleague was there. First off, I was only using a space, no comma in my Expression between !field_names!. Secondly, I noticed I needed to set my string equal using == rather than = or is. So here's the code that worked for me. Use it for Population Density Calculations just be sure to get rid of the float and the quotes if your Population variable is in fact numeric.

!B01003001E! is a string of the total population
!ALAND10! is land area in sq. meters (double)

Expression:

Calc(!B01003001E!, !ALAND10!)

Code Block:

def Calc(pop, land):
if pop == '0':
return 0
else:
return float(pop)/(land*0.000001)

Thursday, January 26, 2012

2012 GIS Goals

Welcome to 2012. I'm about 26 days late.

Anyway, I thought I'd use my blog (that I barely post to anymore because of twitter) to mark some of my goals for 2012. 2011 started slow, but this fall I delved deeper into my Python work and web mapping work with Google Maps.

1. Become more proficient with Python, especially the other modules, iters, calendar, etc.

2. Learn GeoDjango, learn it.

3. Learn even more about the Google Maps API and Fusion tables.

4. Utilize Dropbox more for non-sensitive GIS data.

It was hard to not automatically #hashtag every other word, weird. Anyway, good luck to everyone in 2012 and I hope your GIS wishes come true.

Tuesday, November 29, 2011

Shapefile to KML from OGR GDAL

Over the last few years there have been quite a few tools developed, including from Esri, that generate .kml files from your Shapefiles. They can be tough to use at times or easy but none are as satisfying as running from OGR GDAL at the command line. Why? Who cares, its just cool to be able to run things from the command line. Go here to follow Google's how-to:http://code.google.com/apis/kml/articles/vector.html



Go here at Google Code http://code.google.com/apis/kml/articles/vector.html and follow the easy steps. And then open up your new .kml in Google Earth.

Even later on you can customize more with libkml. http://code.google.com/p/libkml/

Tuesday, October 25, 2011

My first Stata command, summing two fields into a new field, why its easier than ArcGIS

So I barely use any software that's not GIS-related. Anyway, without making a list of the silly things that take forever in ArcGIS - at modelbuilder and even at python - (aka, deleting multiple fields for large datasets, took 8 hours last night!!!!), I've known I need to learn Stata to better manage my output files, so I requested Stata 12 and figured I'd share a little of my learning experience for my own reference but also in case anyone else is just starting out.

I'd like to start generating some calculated variables outside of ArcGIS. Some of my variables such as percent (PCT) of a population or densities could more efficiently be calculated outside of ArcGIS.

Here's how I've been adding a new field and calculating in ArcGIS:

I created model that has input parameters and allows the user to input everything they need to add a new field and calculate. It saves me just a little time by not having to add both models or type out all of these lengthy commands.

Here's the Python code:
# Import arcpy module
import arcpy

# Script arguments
Input_Table = arcpy.GetParameterAsText(0)

New_Field_Name = arcpy.GetParameterAsText(1)

Field_Type = arcpy.GetParameterAsText(2)
if Field_Type == '#' or not Field_Type:
Field_Type = "LONG" # provide a default value if unspecified

Calculate_Field_Name = arcpy.GetParameterAsText(3)

Calc_Expression = arcpy.GetParameterAsText(4)

Field_Expression_Type = arcpy.GetParameterAsText(5)
if Field_Expression_Type == '#' or not Field_Expression_Type:
Field_Expression_Type = "PYTHON_9.3" # provide a default value if unspecified

# Local variables:
Output_Feature_Class = Input_Table
Output_Feature_Class__2_ = Output_Feature_Class

# Process: Add Field
arcpy.AddField_management(Input_Table, New_Field_Name, Field_Type, "", "", "", "", "NULLABLE", "NON_REQUIRED", "")

# Process: Calculate Field
arcpy.CalculateField_management(Output_Feature_Class, Calculate_Field_Name, Calc_Expression, Field_Expression_Type, "")

Granted, there's Parameters instead of real values, but you get the idea, each of those parameters need to be filled out and all this code needs to run.

Here's the Stata code:

gen SUM_M11M12 = TRT_POPM11 + TRT_POPM12

That was easy!

Granted, this was only a numeric calculation, I still feel super confident about my Python/VBScript string 'skillz'[:5] + 's', but just saying, Stata is super fast and at the end of the day, those last numeric calc's might be best served in Stata.

Monday, September 26, 2011

Calculating Geometry Measurements in Python


Calculating Geometry Measurements in Python

from Esri - http://resources.esri.com/help/9.3/arcgisdesktop/com/gp_toolref/data_management_tools/calculate_field_data_management_.htm


All below from Esri:

Python expressions can use the geometry Area and Length properties with an areal or linear unit to convert the value to a different unit of measure.

!shape.area@acres! 
Areal unit of measure keywords: Unit of measure keywords: ACRES | ARES | HECTARES | SQUARECENTIMETERS | SQUAREDECIMETERS | SQUAREINCHES | SQUAREFEET | SQUAREKILOMETERS | SQUAREMETERS | SQUAREMILES | SQUAREMILLIMETERS | SQUAREYARDS | SQUAREMAPUNITSLinear unit of measure keywords: CENTIMETERS | DECIMALDEGREES | DECIMETERS | FEET | INCHES | KILOMETERS | METERS | MILES | MILLIMETERS | NAUTICALMILES | POINTS | YARDS

Monday, September 12, 2011

Split Layer By Attributes for ArcGIS 10


This is an update to a tool I used a lot before migrating over to 10. I just needed something similar recently - for some zonal stats stuff and saw it was updated for 10. Thanks Dan Patterson.

http://resources.arcgis.com/gallery/file/geoprocessing/details?entryID=37AEB018-1422-2418-A036-CA6D9920F808

Thursday, September 8, 2011

VBA: Link From ArcMap to Google Maps

The link below has a tool to link ArcMap to Google Maps and Streetview;

http://gis.utah.gov/code-visual-basic/vba-link-from-arcmap-to-google-maps

I've used this tool for a while at 9.3.1 but just started to use it again at ArcGIS 10.