• Announcements

    • EmperoR

      Dear Guests   12/24/2016

      Welcome to the GIS-AREA. like most online communities you must register to view or post in our community, but don't worry this is a simple free process that requires minimal information for you to signup. Be a part of GIS-AREA by signing in or creating an account here. Once you have created your account and have introduced yourself to our community, you can start new topics, reply to others, subscribe interesting threads, get your customize profiles, make news friends, and others nice stuff. To make your stay as pleasant and constructive as possible, please don't forget to read through our pinned forum rules and board guidelines in each section before you do anything else.

Forums

  1. General

    1. Feedback and Introduction

      Rules, news, feedback and introduction

      822
      posts
    2. Off Topic

      Chit-chat anything you like, not related to GIS

      664
      posts
  2. Geographic Information Science News and Discussions

    1. General GIS Topic

      Topic that don't match with other GIS discussion, goes here

      1,024
      posts
    2. GeoData

      GIS or Remote Sensing data, format, conversion, interoperability, etc

      649
      posts
    3. GeoHardware

      Sensor, satellite, GPS, Total Station, RTK and all GIS and Remote Sensing Hardware

      215
      posts
    4. WebGIS

      GIS goes online, discuss all webgis stuff here including WEB-GIS developing, programming and maintenance

      436
      posts
    5. Analysis and Geoprocessing

      Networking, 3 dimension, spatial analyst, spatial editing, geoprocessing, and all analysis step discussion

      963
      posts
    6. Cartography Design

      Designing good map, symbology, map printing, map visualization and etc

      60
      posts
    7. Spatial Programming

      Custom GIS Application and other spatial programming

      365
      posts
    8. Remote Sensing

      Discussion related to Remote Sensing

      1,472
      posts
    9. Mobile GIS

      GIS goes to handled (Phone or PDA)

      135
      posts
    10. Applied GIS

      GIS applied in every aspect

      160
      posts
    11. Jobs and Schedules

      Share latest Jobs, Conference, Meeting, And Etc.

      311
      posts
  3. GIS Around The World

    1. Language Specific Room

      Room with local language, you can use your native language, other than English, You can request your local language room too, just follow the rules

      683
      posts
  • Topics

  • Posts

    • Thanks!
      I'll have a look on it.
    • Hello! I am new to the GIS world and as such have very limited knowledge of image analysis. My interest lies in identifying geothemal springs and mapping them.  Large springs like Grand Prismatic Springs in Yellowstone can be observed on thermal imagery as seen in the attachment below (red arrow on the left). It creates a reproducible thermal "fingerprint" year after year. Does anyone have any suggestions regarding how to best scan/detect these thermal "fingerprints" over a large area. Is there software that will automatically compare images for these "fingerprints"? Perhaps something like this automatic landslide detection that compares images and indicates the probability of a Geothermal spring? Any guidance would be greatly appreciated! Ivan
    • Check the Script of multi ring buffer:   """----------------------------------------------------------------------------------
       Tool Name:   Multiple Ring Buffer
       Source Name: MultiRingBuffer.py
       Author:      Environmental Systems Research Institute Inc.
       Required Arguments:
                    An input feature class or feature layer
                    An output feature class
                    A set of distances (multiple set of double values)
       Optional Arguments:
                    The name of the field to contain the distance values (default="distance")
                    Option to have the output dissolved (default="ALL")
       Description: Creates a set of buffers for the set of input features. The buffers
                    are defined using a set of variable distances. The resulting feature
                    class has the merged buffer polygons with or without overlapping
                    polygons maintained as separate features.
      ----------------------------------------------------------------------------------""" import arcpy
      import os
      import locale
      # Define message constants so they may be translated easily
      msgBuffRings = arcpy.GetIDMessage(86149)  # "Buffering distance "
      msgMergeRings = arcpy.GetIDMessage(86150)  # "Merging rings..."
      msgDissolve = arcpy.GetIDMessage(86151)  # "Dissolving overlapping boundaries..."
      def initiate_multi_buffer():
          """Gather arguments and set up for createMultiBuffers"""     # Get the input argument values
          in_features = arcpy.GetParameterAsText(0)
          output = arcpy.GetParameterAsText(1)
          distances = arcpy.GetParameter(2)     unit = arcpy.GetParameterAsText(3)
          if unit.lower() == 'default':
              unit = ''     field_name = checkfieldname(arcpy.GetParameterAsText(4), os.path.dirname(output))
          dissolve_type = arcpy.GetParameterAsText(5)
          outside_polygons = arcpy.GetParameterAsText(6)
          if outside_polygons.lower() == 'true':
              side_type = 'OUTSIDE_ONLY'
          else:
              side_type = ''     create_multi_buffers(in_features, output, distances, unit, field_name, dissolve_type, side_type)
      def checkfieldname(field_name, workspace):
          """Validate field name on the workspace as needed"""
          if field_name in ['#', '']:
              return "distance"
          else:
              out_name = arcpy.ValidateFieldName(field_name, workspace)
              out_name = out_name.replace(' ', '_')
              if out_name != field_name:
                  arcpy.AddIDMessage('WARNING', 648, out_name)
              return out_name
      def lower_license_union(feature_classes):
          """If Union is not licensed for more than 2 inputs at a time, perform Unions in batches"""     union_fc = None     tmp_fc = arcpy.Union_analysis(
              feature_classes[0:2],
              arcpy.CreateUniqueName('union', arcpy.env.scratchGDB))[0]     for fc in feature_classes[2:]:
              if union_fc:
                  tmp_fc = union_fc
              union_fc = arcpy.Union_analysis(
                  [tmp_fc, fc],
                  arcpy.CreateUniqueName('union', arcpy.env.scratchGDB))[0]         # Delete intermediate data once used by next Union
              try:
                  arcpy.Delete_management(tmp_fc)
              except arcpy.ExecuteError:
                  # Don't fail for a delete issue
                  pass     return union_fc
      def create_multi_buffers(in_features, output, distances, unit, field_name, dissolve_type, side_type):
          """Main multiple ring buffer routine"""     # Establish place holders for data cleanup
          buffer_list = []
          union_fc = None     try:
              # Loop through each distance creating a new layer and then buffering the input.
              #  Set the step progressor if there are > 1 rings
              if len(distances) > 1:
                  arcpy.SetProgressor('step', '', 0, len(distances))
                  step_progressor = True
              else:
                  arcpy.SetProgressor('default')
                  step_progressor = False         # Buffer the input for each buffer distance.  If the field_name is different than
              #  the default, add a new field and calculate the proper value
              for dist in distances:
                  if step_progressor:
                      arcpy.SetProgressorPosition()
                  arcpy.SetProgressorLabel(msgBuffRings + '{}...'.format(dist))
                  buf_distance = '{} {}'.format(dist, unit)
                  buf_output = arcpy.Buffer_analysis(in_features,
                                                     arcpy.CreateUniqueName('buffer', arcpy.env.scratchGDB),
                                                     buf_distance, side_type, '', dissolve_type)[0]
                  buffer_list.append(buf_output)
                  if field_name.lower() != 'buff_dist':
                      arcpy.AddField_management(buf_output, field_name, 'double')
                      arcpy.CalculateField_management(buf_output, field_name, dist, 'PYTHON')
              arcpy.ResetProgressor()
              arcpy.SetProgressor('default')
              arcpy.SetProgressorLabel(msgMergeRings)         if dissolve_type == 'ALL':
                  # Set up the expression and codeblock variables for CalculateField to ensure
                  #  the distance field is populated properly
                  expression = 'pullDistance({}, '.format(distances)
                  for fc in buffer_list:
                      expression += '!FID_{}!, '.format(os.path.basename(fc))
                  expression = expression[:-2] + ')'             # If we have a full license then Union all feature classes at once, otherwise
                  #  Union the feature classes 2 at a time
                  if arcpy.ProductInfo().upper() in ['ARCINFO', 'ARCSERVER'] or len(buffer_list) < 3:
                      union_fc = arcpy.Union_analysis(buffer_list,
                                                      arcpy.CreateUniqueName('union', arcpy.env.scratchGDB))[0]
                      codeblock = '''def pullDistance(distL, *fids):
                      return min([i for i, j in zip(distL, fids) if j != -1])'''
                  else:
                      union_fc = lower_license_union(buffer_list)
                      codeblock = '''def pullDistance(distL, *fids):
                      return min([i for i, j in zip(distL, fids) if j == 1])'''             arcpy.CalculateField_management(union_fc, field_name, expression, 'PYTHON', codeblock)             # Complete the final Dissolve
                  arcpy.SetProgressorLabel(msgDissolve)
                  if dissolve_type.upper() == 'ALL':
                      arcpy.Dissolve_management(union_fc, output, field_name)
              else:
                  # Reverse the order of the inputs so the features are appended from
                  #  largest to smallest buffer features.
                  buffer_list.reverse()
                  template = buffer_list[0]
                  sr = (arcpy.env.outputCoordinateSystem or arcpy.Describe(template).spatialreference)             arcpy.CreateFeatureclass_management(os.path.dirname(output),
                                                      os.path.basename(output),
                                                      'POLYGON',
                                                      template,
                                                      'SAME_AS_TEMPLATE',
                                                      'SAME_AS_TEMPLATE',
                                                      sr)
                  for fc in buffer_list:
                      arcpy.Append_management(fc, output, 'NO_TEST')             if arcpy.ListFields(output, 'buff_dist'):
                      # Remove duplicate field
                      arcpy.DeleteField_management(output, 'buff_dist')         # Set the default symbology
              params = arcpy.GetParameterInfo()
              if len(params) > 0:
                  params[1].symbology = os.path.join(arcpy.GetInstallInfo()['InstallDir'],
                                                     "arctoolbox\\templates\\layers\\multipleringbuffer.lyr")     except arcpy.ExecuteError:
              arcpy.AddError(arcpy.GetMessages(2))     except Exception as err:
              arcpy.AddError(err)     finally:
              if buffer_list:
                  for fc in buffer_list:
                      try:
                          arcpy.Delete_management(fc)
                      except arcpy.ExecuteError:
                          # Don't fail for a delete issue
                          pass
              if union_fc:
                  try:
                      arcpy.Delete_management(union_fc)
                  except arcpy.ExecuteError:
                      # Don't fail for a delete issue
                      pass
      if __name__ == '__main__':
          initiate_multi_buffer()
    • Many thanks, Lurker, I'll give it a try!
    • If you are talking about the google maps layer then the answer is no as its a cached with the labels already added I believe. If its imagery layers, then yes. Just use the aerial layer and not the hybrid layer. Google terrain layers do not have labeling as well.