0

I'm new to ArcGIS, or at least anything beyond the basics, especially ArcToolBox. so the answer might be extremely simple.

Basically I have one layer of building footprints, and another layer of parcel data.

Many residential parcels contain multiple buildings, one of which is the house (coded in field BTYPE as 401) and one or more accessory buildings (BTYPE 999). each building footprint has a height attribute.

What I'd like to do is highlight parcels that contain a 401 footprint and a 999 footprint, but only the parcels where the height of the 999 footprint is higher than the height of the 401 footprint.

I have no idea how to do this.. I have tried a spatial join between the two layers but all that gets me is a count of the footprints on the parcel. I don't need the exact answer but a rough outline of steps that I need to take to accomplish this would be welcome.

1
  • What does your data look like? Do the buildings in your building layer have a parcel id number? Are you using shape files or SDE or something else? Is there more than one 999 footprint on a parcel? Is there more than one 401 footprint? It is looking like you will need a good filter clause and a temporary layer or two to find your results, but I can't tell without more info.
    – brenth
    Jun 19, 2013 at 21:00

3 Answers 3

0

You can solve this problem by using the union tool, and the statistics option of the dissolve tool.

Prepare foorprints

Firstly, create a field for each parcel type in your footprint table (401,999). Those fields should show the height of the footprint if it is of the type that the column represents; otherwise it is set to zero...

enter image description here

The steps to do this for 401 are...

  1. Add field with name btype_401
  2. Select by attributes. Were "btype" = 401
  3. Calculate field for btype_401. Enter "height" as the expression.

Union with parcels

Run the union tool with footprint and parcel layers as "in features". This should give you something like this:

enter image description here

Dissolve

Run the dissolve tool on the union output with parcel_ID as the "dissolve field".

Include the following "statistics fields": ...

  • MAX for btype_401 column
  • MAX for btype_999 column

This should result in a table (field names will be different):

enter image description here

Select rows

Now use the select by attributes tool to identify rows of interest. We ignore rows without any 401 footprints by removing rows with a height of zero.

 "btype_999" > "btype_401" and "btype_401" <> 0
0

Without more info it is tough to say specifically. However you may be able to put in your parcel layer a definition query something like below. Granted this could be an oversimplification of your data, but you did not describe your data very well. If you are using SDE or can dump your footprint table into a database it becomes MUCH easier to do this.

One last comment: You will not be able to do this spatially because your question is not spatial, it is attributal (based on height).

parcelid in
(
  select parcelid from
  (

    select t401.parcelid as parcelid, t401.height as height401, t999.height as height999
    from (
      select parcelid, height
      from footprints where (bytpe = 401)
    ) t401 full outer join
    (
      select parcelid, height
      from footprints where (bytpe = 999)
    ) t999 on t401.parcelid = t999.parcelid

  ) t
  where  height401 < height999
)
-1

Try using a "Definition Query" to filter your buildings to only show 401 and 99 footprints. Then use a "Select by Location" to select parcels that contain building footprints. This should only select parcels that have a 401 and 999 building sitting on it.

1
  • This doesn't account select only parcels where the accessory buildings (999) are taller than the house (401), though.
    – user3461
    Aug 19, 2013 at 19:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.