Pee Dee GIS Users Group

SC GIS Professionals in the Pee Dee Area


November 2010

GIS Coordinator – City of Columbia

Pay: $47,415 – $75,864/ANNUAL

Nature of Work
The purpose of this position is to perform all necessary Geospatial Information Services (GIS) needed to operate the GIS division’s activities and requirements and be able to plan and supervise the activities of direct reports as assigned. This class includes requirements to plan, supervise, participate in the development, implement, maintain and use all GIS services and systems required to support multiple City departments, and to perform related professional and technical work as required.

Bachelor’s degree with emphasis in GIS technologies, computer science or closely related field with eight (8) years work experience in coordinating, supervising and participating in the development, implementation, maintenance and use of the GIS services and systems required to support multiple City departments; to insure the enforcement of, and collaboration with, all DoIT policies, processes and procedures that provide the necessary coordination for GIS operations and services to be in compliance.

Special Requirements:
Must possess and maintain a valid SC Class “D” Driver’s License and have an acceptable driving record. Must have knowledge of personal computer equipment with skill in the use of Microsoft Office preferred, utilizing Outlook, word processing, spreadsheet, presentation and data base software programs, as well as ESRI ArcPad/ESRI ArcGIS preferred. Must be able to work overtime and provide after hours support as needed in order to accomplish assigned work.

Creating a Locator Frame in ArcGIS 10 if you use data driven pages

I, like many of you, have used the old DS Mapbooklet Plotting sample code for many years. It has been a wonderful tool and one I cannot do without. ArcGIS 10 introduced Data Driven Pages which basically incorporated much of the DS Mapbook code directly into the core ArcGIS Desktop products.  The one thing that has been driving me crazy is how to reproduce the local Map Locator that DS Mapbook had. I found the following steps on the ArcGIS Forums today posted by David B from Esri.

Create a Map Locator Frame

You can do this with the data frame extent options. In 10.0 there are new options that allow you to drive the extent of one data frame based on the extent of another data frame.

To make a locator map that automatically adjusts as you page through your map series try this:

  1. Go to the properties dialog for your locator data frame and select the Data Frame tab.
  2. In the Extent section at the top select “Other Data Frame” from the dropdown.
  3. Now you should see options to “Derive the extent from another data frame’s extent”. Make sure the DDP data frame is selected in this dropdown (it might show a different data frame selected by default if you have more data frames in your map).
  4. Set the margin options if you want a consistent margin, or select “Zoom to features that intersect the other data frame’s extent” if you want to make sure surrounding features show. The latter is useful if you index layer is a rectangular grid, for example.

Here is the link to the original source I found this on:

Hopefully many will find this as helpful as I have.  

Tripp Corbin, CFM, GISP

Happy Thanksgiving

Hope you have a safe and enjoyable Thanksgiving weekend. Watch out for that black Friday thing…it’s a killer. 🙂

Job Announcement – Dept of Public Safety

The Department of Public Safety (DPS) has a new job posting

OPENING DATE: 11/18/10 CLOSING DATE: 12/01/10 05:00 PM

$36,840.00 – $68,160.00 Annually

LOCATION: Richland County, South Carolina
JOB TYPE: FTE – Full-Time
NORMAL WORK SCHEDULE: Monday – Friday (8:30 – 5:00)

Plans, implements and maintains a geographic information system (GIS). Plans and executes the development and maintenance of GIS data, applications and projects. Plans and executes projects for delivery of the GIS projects within schedule and budget. Provides guidance to OIT and DPS management. Prepares recommendations for establishment/revision of policies, standards and procedures for management and operation. Attends training programs, conferences and seminars. Performs other duties as assigned.

A bachelor’s degree in geography or a related field and work experience in the development and maintenance of geographic information systems; or an associate’s degree in geography or a related field and expert-level work experience in the development and maintenance of geographic information systems.

Knowledge of contemporary GIS software, preferably ESRI GIS mapping software. Knowledge of cartography, geo-coding, database design and spatial statistics. Knowledge of mobile GIS/GPS data collection. Knowledge of graphics hardware and common operating systems. Overnight travel and overtime as required.

P.O. Box 1993
Blythewood, SC 29016 Job #10-035-OIT

Access your GPS Radio with VB.Net code

What follows is the code for a module that can be inserted into a project. Call the sub with the comm port that the GPS radio is on and you are set. Also add a Serial Port Control to your form and name it “serialPort”. Timeout is required in case an incorrect serial port has been specified.

Programming note: Even with the timeout set in the code, the application will lock up if an incorrect, but active comm port has been specified. If you know of a fix post it in the comments.

Imports System
Imports System.IO.Ports

Module gps

    Public strLatitude As String = ""
    Public strLongitude As String = ""

    Public Sub queryGPS(ByVal cPort As String)
        Dim loopCount As Integer = 0
        Dim GPSOutput As String = ""
        Dim GPSGPRMCStr As String = ""
        Dim newLineStr As String = "$"
        Dim aStrSplitItems() As String
        Dim NSHemi As String = ""
        Dim EWHemi As String = ""
        Dim EW As Integer = 0
        Dim NS As Integer = 0
        Dim commQuit As Boolean = False
        Dim portClosed As Boolean = False
        Dim dblLatitude As Double = 0
        Dim dblLongitude As Double = 0
        Dim wsLatitude As String = ""
        Dim wsLongitude As String = ""
        'Set sentence to parse from GPS Output. Use GPRMC GPGLL, or GPGGA
        Dim strSentence As String = "GPRMC"

        'Reset coordinate variables()
        strLatitude = ""
        strLongitude = ""

        On Error GoTo Errhandler

        'Calls Serial Port Control on main form. Add Serial Port Control to form and name it "serialPort"
        'Timeout is required in case an incorrect serial port has been specified. Application will freeze
        'if timeout is missing or too lengthy.
        frmMain.serialPort = New SerialPort("COM" & cPort, 4800, Parity.None, 8, StopBits.One)
        frmMain.serialPort.ReadTimeout = 5

        Dim cCount As Integer = 0

        If portClosed = True Then
            portClosed = False
        End If
        'Read GPS data from Device - Geographic Position, Latitude/Longitude
        GPSOutput = frmMain.serialPort.ReadLine.ToString
        GPSGPRMCStr = GPSOutput

        'Test string for debugging without a good GPS signal
        'GPSGPRMCStr = "GPRMC,174607.000,A,3411.3450,N,07946.0365,W,0.44,160.26,020910,,*12"

        If GPSGPRMCStr.Contains(strSentence) Then
            commQuit = True

            For i = 1 To Len(GPSGPRMCStr.ToString)
                If Mid$(GPSGPRMCStr.ToString, i, 1) = "," Then cCount = cCount + 1

                Select Case strSentence 'Set the line the program reads in the DIM statement above
                    Case "GPRMC"
                        Select Case cCount
                            Case 3 'Start collecting latitude
                                strLatitude = strLatitude & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 4 'Get Hemisphere
                                NSHemi = NSHemi & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 5 'Start Collecting longitude
                                strLongitude = strLongitude & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 6 'Get Hemisphere
                                EWHemi = EWHemi & Mid$(GPSGPRMCStr.ToString, i, 1)
                        End Select
                    Case "GPGGA"
                        Select Case cCount
                            Case 2 'Start collecting latitude
                                strLatitude = strLatitude & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 3 'Get Hemisphere
                                NSHemi = NSHemi & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 4 'Start Collecting longitude
                                strLongitude = strLongitude & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 5 'Get Hemisphere
                                EWHemi = EWHemi & Mid$(GPSGPRMCStr.ToString, i, 1)
                        End Select
                    Case "GPGLL"
                        Select Case cCount
                            Case 1 'Start collecting latitude
                                strLatitude = strLatitude & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 2 'Get Hemisphere
                                NSHemi = NSHemi & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 3 'Start Collecting longitude
                                strLongitude = strLongitude & Mid$(GPSGPRMCStr.ToString, i, 1)
                            Case 4 'Get Hemisphere
                                EWHemi = EWHemi & Mid$(GPSGPRMCStr.ToString, i, 1)
                        End Select
                End Select
            GoTo readLine
        End If
        strLatitude = Microsoft.VisualBasic.Right(strLatitude, Len(strLatitude) - 1)
        NSHemi = Microsoft.VisualBasic.Right(NSHemi, Len(NSHemi) - 1)
        strLongitude = Microsoft.VisualBasic.Right(strLongitude, Len(strLongitude) - 1)
        EWHemi = Microsoft.VisualBasic.Right(EWHemi, Len(EWHemi) - 1)

        If NSHemi <> "" Then
            If NSHemi = "N" Then NSHemi = "" Else NSHemi = "-"
            If EWHemi = "E" Then EWHemi = "" Else EWHemi = "-"
        End If

        'Convert Lat and Long to decimel
        'Strip leading Zeros
        dblLatitude = CDbl(strLatitude.ToString)
        dblLongitude = CDbl(strLongitude.ToString)
        'Add polarity
        If NSHemi = "-" Then
            dblLatitude = dblLatitude * -1
            NS = -1
            NS = 1
        End If
        If EWHemi = "-" Then
            dblLongitude = dblLongitude * -1
            EW = -1
            EW = 1
        End If

        'Move decimel place two places to the left
        dblLatitude = dblLatitude / 100
        dblLongitude = dblLongitude / 100

        'Get values left of decimel
        Dim leftLat As Integer = Math.Abs(dblLatitude)
        Dim leftLong As Integer = Math.Abs(dblLongitude)

        'Get values right of decimel
        Dim rightLat As Double = Math.Abs(dblLatitude) - Math.Abs(leftLat)
        Dim rightLong As Double = Math.Abs(dblLongitude) - Math.Abs(leftLong)

        'Convert to minutes
        rightLat = (rightLat * 100) / 60
        rightLong = (rightLong * 100) / 60

        'Lat/Long in decimel, in case you need decimel degrees instead of degrees/minutes/seconds.
        wsLatitude = Trim(Str(CDbl(strLatitude) * NS))
        wsLongitude = Trim(Str(CDbl(strLongitude) * EW))

        'Lat/long in Degrees/Minutes/Seconds in decimel form
        strLatitude = Trim(Str((leftLat + rightLat) * NS))
        strLongitude = Trim(Str((leftLong + rightLong) * EW))

        frmMain.serialPort.ReadBufferSize = 0
        portClosed = True

        'Comment out else section when deployed. Work with results in main sub
        'Sometimes reception is poor and it takes more than one pass of the data to get a fix
        'This section forces another read of the GPS device when the coordinates are null or
        'contain zeros. Note: The application as written will fail on the prime meridian when
        'at the equator.
        If strLatitude = "" Or strLongitude = "" Or strLatitude = "0" Or strLongitude = "0" And commQuit = True Then
            loopCount = loopCount + 1
            If loopCount > 10 Then
                MsgBox("The GPS device is currently not getting a fix, please try again later." _
                      & Chr(10) & GPSOutput, vbOKOnly, "Satellite Communication Unavailable")
                Exit Sub
                GoTo readLine
            End If
            'Access web service from arc to return a list of addresses within a certain range of the inspector's location.
            'Web Service is currently in SC stateplane.

            'A google test.
            'System.Diagnostics.Process.Start("" & strLatitude & "%2C" & strLongitude)
        End If
        Exit Sub

        Select Case Err.Number
            Case 5
                Resume Next
            Case 13
                'MsgBox(Err.Number & " " & Err.Description)
                Resume Next
            Case 57
                'MsgBox(Err.Number & " " & Err.Description)
                MsgBox("Comm Port not available", MsgBoxStyle.Exclamation, "Communication Error.")
                Exit Sub
            Case 91
                'MsgBox(Err.Number & " " & Err.Description)
                Resume Next
            Case 8002
                'GPSComm.PortOpen = False
                MsgBox("Comm Port not available", MsgBoxStyle.Exclamation, "Communication Error.")
                'GPSComm.PortOpen = True
                Resume Next
                Exit Sub
            Case Else
                MsgBox(Err.Number & " " & Err.Description)
                Resume Next
        End Select
    End Sub
End Module


SCARC 2011

Geographic Information Systems (GIS) Certificate at Tech!

Earn A GIS Certificate at Tech!

DTC’s Geographic Information Systems Certificate program is designed for administrators, managers, technical professionals, and others involved in building and implementing information systems or those seeking the skills to launch a career in the GIS field.

Participants will:

  • Learn the concepts and applicationsof GIS technology,
  • Obtain hands-on experience in usingthe latest GIS software,
  • Become familiar with the issuesfacing communities and industryand learn to develop solutions withgeospatial technology,
  • Explore the interdisciplinary elementsof GIS including cartography,topology, database design and spatialanalysis,
  • Understand how geospatialinformation and technology are usedwithin health care, public works,natural and historical resources,environmental management andother disciplines.

Fore more information, contactKamil Zakhour at 843-413-2765,e-mail Kamil.Zakhour@fdtc.eduorMike DeRienzo at 843-413-2766,e-mail Download the GIS Mapping Certificate brochure.

Florence-Darlington Technical College
P. O. Box 100548
Florence, South Carolina 29502

New Officers for 2011!

Crystine Rathburn has been re-elected for another year. Congratulations Crys! Assisting her will be our newly elected Communications Officer and Treasurer, Caroline Dunlap and Veronica “Rony” Moore. James McCall will continue to plod along as the defacto website admin!

Win an Apple iPad!

Plus Mobile Consulting provided by BCS

Blog at

Up ↑