예제 #1
0
 def test_multiple(self):
     districts = ArcGIS(
         "http://tigerweb.geo.census.gov/arcgis/rest/services/TIGERweb/Legislative/MapServer"
     )
     # Gets 114th and 113th congressional districts for hawaii.
     features = districts.getMultiple([0, 12], where="STATE = 15")
     self.assertEqual(len(features.get('features')), 4)
예제 #2
0
 def test_count(self):
     states = ArcGIS("http://tigerweb.geo.census.gov/arcgis/rest/services/Basemaps/CommunityTIGER/MapServer")
     count = states.get(28, count_only=True)
     self.assertEqual(count, 56)
     count = states.get(28, where="NAME = 'Florida'", count_only=True)
     # Only one Florida.
     self.assertEqual(count, 1)
예제 #3
0
 def test_field_filter(self):
     districts = ArcGIS("http://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/USA_Congressional_Districts/FeatureServer")
     # How many fields are there in the layer?
     num_fields = districts.enumerate_layer_fields(0)
     self.assertEqual(len(num_fields), 12)
     # We should only have one property, OBJECTID.
     features = districts.get(0, where="STATE_ABBR = 'IN'", fields=['OBJECTID'])
     self.assertEqual(len(features.get('features')[0].get('properties')), 1)
예제 #4
0
 def test_count(self):
     states = ArcGIS(
         "http://tigerweb.geo.census.gov/arcgis/rest/services/Basemaps/CommunityTIGER/MapServer"
     )
     count = states.get(28, count_only=True)
     self.assertEqual(count, 56)
     count = states.get(28, where="NAME = 'Florida'", count_only=True)
     # Only one Florida.
     self.assertEqual(count, 1)
예제 #5
0
 def test_field_filter(self):
     districts = ArcGIS(
         "http://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/USA_Congressional_Districts/FeatureServer"
     )
     # How many fields are there in the layer?
     num_fields = districts.enumerate_layer_fields(0)
     self.assertEqual(len(num_fields), 12)
     # We should only have one property, OBJECTID.
     features = districts.get(0,
                              where="STATE_ABBR = 'IN'",
                              fields=['OBJECTID'])
     self.assertEqual(len(features.get('features')[0].get('properties')), 1)
예제 #6
0
 def test_features(self):
     districts = ArcGIS("http://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/USA_Congressional_Districts/FeatureServer")
     features = districts.get(0, "STATE_ABBR = 'IN'")
     # Make sure we have all of the actual congressional
     # district shapes for Indiana.
     self.assertEqual(len(features.get('features')), 9)
     # Make sure they're polygons
     self.assertEqual(features.get('features')[0].get('geometry').get('type'), "Polygon")
     # Make sure it's valid json when we dump it 
     self.assertTrue(features == json.loads(json.dumps(features)))
     # Make sure a value that should be there is ther.
     self.assertEqual(features.get('features')[0].get('properties').get('STATE_ABBR'), 'IN')
예제 #7
0
 def test_features(self):
     districts = ArcGIS(
         "http://services.arcgis.com/P3ePLMYs2RVChkJx/ArcGIS/rest/services/USA_Congressional_Districts/FeatureServer"
     )
     features = districts.get(0, "STATE_ABBR = 'IN'")
     # Make sure we have all of the actual congressional
     # district shapes for Indiana.
     self.assertEqual(len(features.get('features')), 9)
     # Make sure they're polygons
     self.assertEqual(
         features.get('features')[0].get('geometry').get('type'), "Polygon")
     # Make sure it's valid json when we dump it
     self.assertTrue(features == json.loads(json.dumps(features)))
     # Make sure a value that should be there is ther.
     self.assertEqual(
         features.get('features')[0].get('properties').get('STATE_ABBR'),
         'IN')
예제 #8
0
def update_registered_organizations(request):
    URL = 'http://xmaps.indy.gov/arcgis/rest/services/RegisteredOrganizations/RegisteredOrganizations/MapServer'
    LAYER = 0

    # clear out the db of previous registered organizations
    number_deleted = registered_organization.objects.all().delete()

    service = ArcGIS(URL)
    geojson = service.get(LAYER, fields='*')
    records = geojson['features']
    number_created = 0
    number_errors = 0
    for record in records:
        try:
            geometry = GEOSGeometry(str(record['geometry']))
            if not geometry.valid:
                geometry = geometry.buffer(0)
        except (GDALException, ValueError):
            number_errors = number_errors + 1
            #print "Error on", record['properties']['ORG_NAME']
        try:
            x = registered_organization(
                name=record['properties']['ORG_NAME'],
                first_name=record['properties']['FIRSTNAME'],
                last_name=record['properties']['LASTNAME'],
                email=record['properties']['EMAIL'],
                geometry=geometry,
            )
            x.save()
            if registered_organization.objects.filter(
                    geometry__isvalid=True).filter(id=x.id).count() == 0:
                #print "Error, invalid geometry", record['properties']['ORG_NAME']
                pass
            else:
                number_created = number_created + 1
        except IntegrityError:
            number_errors = number_errors + 1
            #print "IntegrityError on ", record['properties']['ORG_NAME']
    return HttpResponse(
        '<html><body><ul><li>Number deleted: {0}</li><li>Number created: {1}</li><li>Number errors: {2}</li></ul></body></html>'
        .format(number_deleted[0], number_created, number_errors))
예제 #9
0
#! /usr/local/bin/env python

from arcgis import ArcGIS
from geojson import dumps, FeatureCollection, Feature
import requests
from bs4 import BeautifulSoup
import xmltodict

NWGCC_layers = ArcGIS(
    "https://services3.arcgis.com/T4QMspbfLg3qTGWY/ArcGIS/rest/services/NWCC_Operational_Layers/FeatureServer"
)

perimeters = NWGCC_layers.get(2)
outfile = open('current_perimeters.geojson', 'w')
outfile.write(dumps(perimeters))

#def esri_download(service, layer_num, layer_name, file_name)
"""def compose_fire_data():
    fire_info = {}
    r = requests.get('https://gacc.nifc.gov/nwcc/information/fire_info.aspx')
    t = r.text
    soup = BeautifulSoup(t)
    a = soup.find_all(class_="accordion")
    for incident in a:
        #print(incident)
        fire_hash = {}
        tables = incident.find_all("table")
        for tb in tables:
            f = tb.find_all("td")
            for c in f:
                k = c.find("label").string
예제 #10
0
 def test_multiple(self):
     districts = ArcGIS("http://tigerweb.geo.census.gov/arcgis/rest/services/TIGERweb/Legislative/MapServer")
     # Gets 114th and 113th congressional districts for hawaii.
     features = districts.getMultiple([0, 12], where="STATE = 15")
     self.assertEqual(len(features.get('features')), 4)
예제 #11
0
 def __init__(self, url):
     ArcGIS.__init__(self, url)
예제 #12
0
 def __init__(self, url):
     ArcGIS.__init__(self, url)
예제 #13
0
    def handle(self, *args, **options):
        source = "https://gis.yakimawa.gov/arcgis101/rest/services/CouncilDistricts/Analysis/MapServer"
        service = ArcGIS(source)
        if options['days']:
            target_day = datetime.date.today() - datetime.timedelta(options['days'])
        else:
            target_day = datetime.date.today() - datetime.timedelta(1)
        tday = target_day.strftime("%m/%d/%Y")
        json_raw = service.get(0, where="CallDate = '%(tday)s'" % {'tday': tday})
        calls_list = json_raw['features']
        feature_count = 0
        lookup = {
            "ACCIDENT HITRUN": "TR",
            "ACCIDENT INJURY": "TR",
            "ACCIDENT NO INJ": "TR",
            "ACCIDENT UNKNOW": "TR",
            "ASSAULT WEAPON": "VI",
            "CIVIL MATTER": "CV",
            "COURT ORDER SER": "CV",
            "COURT ORDER VIO": "CV",
            "DOMESTIC": "DM",
            "DRUGS": "DR",
            "OVERDOSE": "DR",
            "DUI": "DR",
            "CUSTODIAL INTER": "DM",
            "MENTAL SUBJECT": "OT",
            "SUICIDAL PERSON": "OT",
            "NOISE COMPLAINT": "OT",
            "TRESPASSING": "PR",
            "UNWANTED GUEST": "OT",
            "ILLEGAL DUMPING": "OT",
            "ABUSE NEGLECT": "DM",
            "AGENCY ASSIST": "OT",
            "ATMT TO LOCATE": "OT",
            "CITIZEN ASSIST": "CV",
            "CITIZEN DISPUTE": "CV",
            "CITIZEN COMPLAI": "CV",
            "FIREWORKS": "OT",
            "FOUND PROPERTY": "PR",
            "INFORMATION": "OT",
            "MISSING PERSON": "OT",
            "TRANSPORT": "OT",
            "WARRANT SERVICE": "OT",
            "BURGLARY": "PR",
            "RECOVRD STOLEN": "PR",
            "THEFT": "PR",
            "THEFT-VEHICLE": "PR",
            "VEHICLE PROWL": "PR",
            "MAL MISCHIEF": "PR",
            "FRAUD": "PR",
            "SUSPICIOUS CIRC": "SC",
            "PROWLER": "PR",
            "HARASSMENT": "VI",
            "THREATS": "VI",
            "PARKING PROBLEM": "TR",
            "TRAFFIC HAZARD": "TR",
            "TRAFFIC OFFENSE": "TR",
            "TRAFFIC STOP": "TR",
            "ASSAULT": "VI",
            "DEATH INVEST": "VI",
            "ROBBERY": "VI",
            "SHOTS FIRED": "VI",
            "WEAPON OFFENSE": "VI",
            "WANTED PERSON": "OT",
            "ABANDONED VEHIC": "OT",
            "LOST PROPERTY": "PR",
            "INDUSTRIAL ACC": "OT"
        }
        call_natures = []

        """propertycrime = ['BURGLARY', 'THEFT', 'THEFT-VEHICLE', 'VEHICLE PROWL', 'MAL MISCHIEF', 'RECOVERD STOLEN']
        violence = ['ASSAULT', 'DEATH INVEST', 'ROBBERY', 'SHOTS FIRED', 'WEAPON OFFENSE']
        accident = ['ACCIDENT HITRUN', 'ACCIDENT INJURY', 'ACCIDENT NO INJ', 'ACCIDENT UNKOW']
        traffic = ['PARKING PROBLEM', 'TRAFFIC HAZARD', 'TRAFFIC OFFENSE', 'TRAFFIC STOP']
        drugs = ['DRUGS', 'OVERDOSE', 'DUI']"""

        for call in calls_list:
            g = call['geometry']['coordinates']
            p = call['properties']
            new_callid = int(p['CallID'])
            try:
                Calls.objects.get(callid=new_callid)
            except Calls.DoesNotExist:
                c = Calls()
                c.callid = new_callid
                c.lat, c.lon = g[0], g[1]
                c.geom = GEOSGeometry('POINT({:.6f} {:.6f})'.format(c.lat, c.lon), srid=4326)
                c.nature = p['Nature'].strip().upper()

                if c.nature not in call_natures:
                    call_natures.append(c.nature)
                try:
                    c.callgroup = lookup[c.nature]
                except:
                    c.callgroup = "NT"

                """if c.nature in propertycrime:
                    c.callgroup = 'PR'
                elif c.nature in violence:
                    c.callgroup = "VI"
                elif c.nature in accident:
                    c.callgroup = "AX"
                elif c.nature in traffic:
                    c.callgroup = "TR"
                elif c.nature in drugs:
                    c.callgroup = "DR" """

                c.callcategory = p['CallCategory'].strip().upper()
                c.address = p['Address'].strip()
                c.calldatetime = datetime.datetime.fromtimestamp(p['CallDateTime'] / 1000)
                if c.callgroup != "NT":
                    c.save()
                    feature_count += 1
        self.stdout.write('processed {} features'.format(feature_count))
        categoryfilename = datetime.datetime.today().strftime('%m%d%y') + 'categories'
        categoryfile = open(os.path.join(os.path.expanduser('~/Documents/'), categoryfilename), 'w')
        for cn in call_natures:
            categoryfile.write(cn)
            categoryfile.write(str('\n'))
        categoryfile.close()