Пример #1
0
def get_site_geometry(request):
    import json
    from django.shortcuts import HttpResponse
    import voxel_globe.meta.models as models
    import brl_init
    import vpgl_adaptor_boxm2_batch as vpgl_adaptor

    image_id = int(request.GET['image_id'])
    site_id = int(request.GET['site_id'])

    image = models.Image.objects.get(id=image_id)
    site = models.SattelSite.objects.get(id=site_id)
    camera = image.camera_set.filter(
        cameraset=site.camera_set).select_subclasses('rpccamera')[0]
    vxl_camera = vpgl_adaptor.load_rational_camera_from_txt(camera.rpc_path)

    x1 = site.bbox_min[0]
    y1 = site.bbox_min[1]
    x2 = site.bbox_max[0]
    y2 = site.bbox_max[1]
    z = site.bbox_min[2]

    points = []
    coords = [[x1, y1, z], [x1, y2, z], [x2, y2, z], [x2, y1, z], [x1, y1, z]]

    for coord in coords:
        points.append(vpgl_adaptor.project_point(vxl_camera, *coord))

    return HttpResponse(json.dumps(points), content_type="application/json")
Пример #2
0
def get_event_geometry(request):
    import json
    from django.shortcuts import HttpResponse
    import voxel_globe.meta.models as models
    import brl_init
    import vpgl_adaptor_boxm2_batch as vpgl_adaptor

    image_id = int(request.GET['image_id'])
    site_id = int(request.GET['site_id'])
    sattelgeometryobject_id = int(request.GET['sattelgeometryobject_id'])

    image = models.Image.objects.get(id=image_id)
    site = models.SattelSite.objects.get(id=site_id)
    camera = image.camera_set.filter(
        cameraset=site.camera_set).select_subclasses('rpccamera')[0]
    vxl_camera = vpgl_adaptor.load_rational_camera_from_txt(camera.rpc_path)

    sattelgeometryobject = models.SattelGeometryObject.objects.get(
        id=sattelgeometryobject_id)
    polygon = sattelgeometryobject.geometry

    points = []

    for coord in polygon.coords[0]:
        points.append(vpgl_adaptor.project_point(vxl_camera, *coord))

    up_vector = vpgl_adaptor.rational_camera_get_up_vector(vxl_camera)

    response = {'points': points, 'up': up_vector}

    return HttpResponse(json.dumps(response), content_type="application/json")
Пример #3
0
def get_additional_image_info(request, image_id, camera_set_id):
  import json

  response = {}

  image = voxel_globe.meta.models.Image.objects.get(id=image_id)

  rpc = image.camera_set.filter(cameraset=camera_set_id).select_subclasses('rpccamera')[0]
  if type(rpc) != voxel_globe.meta.models.RpcCamera:
    rpc = None

  #Same for perspective here

  attributes = image.attributes
  if attributes.has_key("planet_rest_response"):
    response['gsd'] = attributes['planet_rest_response']['properties']['image_statistics']['gsd']
  else:
    pass #Check for RPC or perspective camera, and get gsd

  if rpc:
    import brl_init
    import vpgl_adaptor_boxm2_batch as vpgl
    print 0
    vxl_cam =vpgl.load_rational_camera_from_txt(rpc.rpc_path)
    print 1, vxl_cam
    print vpgl.rational_camera_rotate_to_north(vxl_cam)
    print 2
    response['north_rotation'] = vpgl.rational_camera_rotate_to_north(vxl_cam)
  # response['up_rotation'] = 1.1

  return HttpResponse(json.dumps(response), content_type="application/json")
Пример #4
0
def get_event_geometry(request):
  import json
  from django.shortcuts import HttpResponse
  import voxel_globe.meta.models as models
  import brl_init
  import vpgl_adaptor_boxm2_batch as vpgl_adaptor

  image_id = int(request.GET['image_id'])
  site_id = int(request.GET['site_id'])
  sattelgeometryobject_id = int(request.GET['sattelgeometryobject_id'])

  image = models.Image.objects.get(id=image_id)
  site = models.SattelSite.objects.get(id=site_id)
  camera = image.camera_set.filter(cameraset=site.camera_set).select_subclasses('rpccamera')[0]
  vxl_camera = vpgl_adaptor.load_rational_camera_from_txt(camera.rpc_path)

  sattelgeometryobject = models.SattelGeometryObject.objects.get(id=sattelgeometryobject_id)
  polygon = sattelgeometryobject.geometry

  points = []

  for coord in polygon.coords[0]:
    points.append(vpgl_adaptor.project_point(vxl_camera, *coord))

  up_vector = vpgl_adaptor.rational_camera_get_up_vector(vxl_camera)

  response = {'points':points, 'up':up_vector}

  return HttpResponse(json.dumps(response), content_type="application/json")
Пример #5
0
def get_site_geometry(request):
  import json
  from django.shortcuts import HttpResponse
  import voxel_globe.meta.models as models
  import brl_init
  import vpgl_adaptor_boxm2_batch as vpgl_adaptor

  image_id = int(request.GET['image_id'])
  site_id = int(request.GET['site_id'])

  image = models.Image.objects.get(id=image_id)
  site = models.SattelSite.objects.get(id=site_id)
  camera = image.camera_set.filter(cameraset=site.camera_set).select_subclasses('rpccamera')[0]
  vxl_camera = vpgl_adaptor.load_rational_camera_from_txt(camera.rpc_path)

  x1 = site.bbox_min[0]
  y1 = site.bbox_min[1]
  x2 = site.bbox_max[0]
  y2 = site.bbox_max[1]
  z = site.bbox_min[2]

  points = []
  coords = [[x1,y1,z], 
            [x1,y2,z],
            [x2,y2,z],
            [x2,y1,z],
            [x1,y1,z]]

  for coord in coords:
    points.append(vpgl_adaptor.project_point(vxl_camera, *coord))

  return HttpResponse(json.dumps(points), content_type="application/json")
Пример #6
0
def update_geometry_polygon(request):
    import voxel_globe.meta.models as models
    from django.contrib.gis.geos import Point, Polygon, GEOSGeometry
    import numpy as np
    import brl_init
    import vpgl_adaptor_boxm2_batch as vpgl_adaptor

    image_id = int(request.POST['image_id'])
    points = GEOSGeometry(request.POST['points'])
    sattelgeometryobject_id = int(request.POST['sattelgeometryobject_id'])
    site_id = int(request.POST['site_id'])
    projection_mode = request.POST['projection_mode']

    site = models.SattelSite.objects.get(id=site_id)
    image = models.Image.objects.get(id=image_id)
    camera = image.camera_set.filter(
        cameraset=site.camera_set).select_subclasses('rpccamera')[0]
    sattelgeometryobject = models.SattelGeometryObject.objects.get(
        id=sattelgeometryobject_id)

    vpgl_camera = vpgl_adaptor.load_rational_camera_from_txt(camera.rpc_path)
    initial_guess = np.mean(image.attributes['planet_rest_response']
                            ['geometry']['coordinates'][0][0:4],
                            axis=0)
    initial_guess = np.hstack((initial_guess, 0))  #elevation guess is 0

    lvcs_points = []

    gps_points = []

    if projection_mode == "z-plane":
        projection_height = float(request.POST['height'])

        for point in points.coords[0]:
            point = vpgl_adaptor.get_rpc_backprojected_ray(
                vpgl_camera, point[0], point[1], projection_height,
                initial_guess[0], initial_guess[1], initial_guess[2])
            gps_points.append(point)

    origin = np.array(gps_points).mean(axis=0)

    lvcs = vpgl_adaptor.create_lvcs(origin[1], origin[0], origin[2], "wgs84")
    origin = Point(*origin)

    for point in gps_points:
        point = vpgl_adaptor.convert_to_local_coordinates2(
            lvcs, point[1], point[0], point[2])

        lvcs_points.append(point)

    print sattelgeometryobject.geometry_path

    if sattelgeometryobject.geometry_path and os.path.exists(
            sattelgeometryobject.geometry_path):
        os.remove(sattelgeometryobject.geometry_path)

    geometry_filepath = write_ply_file(lvcs_points)
    sattelgeometryobject.geometry_path = geometry_filepath
    sattelgeometryobject.origin = origin
    sattelgeometryobject.geometry = Polygon(gps_points + gps_points[0:1])
    sattelgeometryobject.save()
    from django.shortcuts import HttpResponse
    return HttpResponse('{}', content_type="application/json")
Пример #7
0
def update_geometry_polygon(request):
  import voxel_globe.meta.models as models
  from django.contrib.gis.geos import Point, Polygon, GEOSGeometry
  import numpy as np
  import brl_init
  import vpgl_adaptor_boxm2_batch as vpgl_adaptor

  image_id = int(request.POST['image_id'])
  points = GEOSGeometry(request.POST['points'])
  sattelgeometryobject_id = int(request.POST['sattelgeometryobject_id'])
  site_id = int(request.POST['site_id'])
  projection_mode = request.POST['projection_mode']

  site = models.SattelSite.objects.get(id=site_id)
  image = models.Image.objects.get(id=image_id)
  camera = image.camera_set.filter(cameraset=site.camera_set).select_subclasses('rpccamera')[0]
  sattelgeometryobject = models.SattelGeometryObject.objects.get(id=sattelgeometryobject_id)

  vpgl_camera = vpgl_adaptor.load_rational_camera_from_txt(camera.rpc_path)
  initial_guess = np.mean(image.attributes['planet_rest_response']['geometry']['coordinates'][0][0:4], axis=0)
  initial_guess = np.hstack((initial_guess, 0)) #elevation guess is 0

  lvcs_points = []

  gps_points = []

  if projection_mode == "z-plane":
    projection_height = float(request.POST['height'])

    for point in points.coords[0]:
      point = vpgl_adaptor.get_rpc_backprojected_ray(vpgl_camera, 
                                                     point[0], point[1], 
                                                     projection_height,
                                                     initial_guess[0], 
                                                     initial_guess[1], 
                                                     initial_guess[2])
      gps_points.append(point)


  origin = np.array(gps_points).mean(axis=0)

  lvcs = vpgl_adaptor.create_lvcs(origin[1], origin[0], origin[2], "wgs84")
  origin = Point(*origin)

  for point in gps_points:
    point = vpgl_adaptor.convert_to_local_coordinates2(lvcs, point[1], point[0], point[2])

    lvcs_points.append(point)

  print sattelgeometryobject.geometry_path

  if sattelgeometryobject.geometry_path and os.path.exists(sattelgeometryobject.geometry_path):
    os.remove(sattelgeometryobject.geometry_path)

  geometry_filepath = write_ply_file(lvcs_points)
  sattelgeometryobject.geometry_path=geometry_filepath
  sattelgeometryobject.origin = origin
  sattelgeometryobject.geometry = Polygon(gps_points+gps_points[0:1])
  sattelgeometryobject.save()
  from django.shortcuts import HttpResponse
  return HttpResponse('{}', content_type="application/json")