标签: projection

如何使用NHibernate Projections检索集合

我懒得加载集合,并且因为人员表中有这么多字段,我正在编写一个投影函数来仅检索某些属性.它适用于属性,而不是其他实体的集合.如果它们作为代理加载我会很好,我可以稍后得到它们,但是现在它只是加载null.

public IList<Person> ListTop40()
        {
            var list = _session.CreateCriteria(typeof(Person))
                   .SetProjection(Projections.ProjectionList()
                   .Add(Projections.Property("FirstName"))
                   .Add(Projections.Property("LastName"))
                   .Add(Projections.Property("Jersey"))
                   .Add(Projections.Property("FortyYard"))
                   .Add(Projections.Property("BenchReps"))
                   .Add(Projections.Property("VertJump"))
                   .Add(Projections.Property("ProShuttle"))
                   .Add(Projections.Property("LongJump"))
                   .Add(Projections.Property("PersonSchoolCollection"))
                    )
                    .List<IList>()
                    .Select(l => new Person() { FirstName = (string)l[0], LastName = (string)l[1], Jersey = (Decimal)l[2], FortyYard = (Decimal)l[3], BenchReps = (Decimal)l[4], VertJump = (Decimal)l[5], ProShuttle = (Decimal)l[6], LongJump = (Decimal)l[7], PersonSchoolCollection = (IList<Person_School>)l[8]});

            IList<Person> s = list.ToList();
            return s;
        }
Run Code Online (Sandbox Code Playgroud)

c# linq nhibernate lazy-loading projection

6
推荐指数
1
解决办法
8025
查看次数

Android:MapView绘制圆圈,动态半径(米)

我的已知数据是我当前的位置(GeoPoint)和以米为单位的半径.我想根据地图投影和半径在当前位置周围绘制圆圈.我的地图视图叠加确实覆盖了绘制方法

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
    Projection projection = mapView.getProjection();

    GeoPoint myLocationGeoPoint = getLocationGeoPointFromSomeSource();

    Point myPoint = new Point();
    projection.toPixels(myLocationGeoPoint, myPoint);

    int radiusPixel = (int) projection.metersToEquatorPixels(getRadiusInMetersFromSomeSource());

    canvas.drawCircle(myPoint.x, myPoint.y, radiusPixel, mPaintStroke);
    canvas.drawCircle(myPoint.x, myPoint.y, radiusPixel, mPaintFill);

    super.draw(canvas, mapView, shadow);
}
Run Code Online (Sandbox Code Playgroud)

这段代码的问题radiusPixel太小了.我假设问题出在metersToEquatorPixels以米为参数并计算大约的方法中.像素是否在赤道上.我对吗?但我想计算一下,如果我站在赤道上,我的半径需要多少像素.这种工作是否有内置功能,还是我必须手工完成?

问候

android overlay projection android-mapview

6
推荐指数
1
解决办法
5174
查看次数

获取经度在Mollweide投影中的世界地图中的一个点

我现在搜索了一天,但没有在Javacode找到我的问题的任何例子.

我有一个大小为2000*1400像素的世界地图,带有"Mollweide"投影.如何找出地图中点(500,300)的经度和纬度?我想用Java编写代码.

我尝试使用'Java Map Projection Library'来做到这一点:

Point2D.Double pointonmap = null;
Point2D.Double latlon = null;
MolleweideProjection molproj=new MolleweideProjection();

pointonmap = new Point2D.Double (1400,1000);  

latlon=molproj.inverseTransform(pointonmap,new Point2D.Double ());

System.out.println("latlon: " + latlon.getX() + ", " + latlon.getY());
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?Codeexample或提示.

感谢致敬

java projection map

6
推荐指数
1
解决办法
225
查看次数

将世界空间法线转换为屏幕空间法线

将世界空间中定义的曲面法线转换为屏幕空间法线的正确方法是什么?我不认为它们可以简单地乘以投影矩阵,因为透视划分将事物转换为剪辑空间,据我所知,在这个与图像平面共面的空间平面保持共面.

但是我正在寻找的变换应该导致变换法线,使得图形A中描绘的蓝色世界法线应该导致不同的屏幕空间法线(因为,即使它们的平面与图像平面共面,它们也不会面向相机) - 另一方面,图形B中描绘的法线应该在变换之后(或多或少)相等,因为它们的表面面向相机.

在此输入图像描述

我在寻找什么样的转变?怎么计算呢?

我需要这个用于一些屏幕空间效果.

3d space transformation projection normals

6
推荐指数
1
解决办法
3714
查看次数

将lat/lon转换为像素坐标?

我正在尝试将lat/lon对转换为像素坐标.我找到了这个墨卡托投影,但我不明白代码.x_adj,y_adj变量的因素是什么?当我运行没有这些常量的代码时,我的lat/lon对不在我的地图上,x和y像素坐标不是我想要的.

function get_xy(lat, lng)
{
var mapWidth=2058;
var mapHeight=1746;
var factor=.404;
var x_adj=-391;
var y_adj=37;
var x = (mapWidth*(180+lng)/360)%mapWidth+(mapWidth/2);
var latRad = lat*Math.PI/180;
var mercN = Math.log(Math.tan((Math.PI/4)+(latRad/2)));
var y = (mapHeight/2)-(mapWidth*mercN/(2*Math.PI));
return { x: x*factor+x_adj,y: y*factor+y_adj}
}
Run Code Online (Sandbox Code Playgroud)

资料来源:http://webdesignerwall.com/tutorials/interactive-world-javascript-map/comment-page-1? replytocom = 103225

[2] 隐蔽纬度/经度指向墨卡托投影上的像素(x,y)

javascript geometry trigonometry projection

6
推荐指数
1
解决办法
2万
查看次数

通过.NET提高事件源预测到RDBMS(SQL)的性能

我目前正在研究C#中使用CQRS和事件源的原型,并且在我对SQL数据库的预测中遇到了性能瓶颈.

我的第一个原型是使用Entity Framework 6构建的,代码优先.这个选择主要是为了开始,因为读取方将受益于LINQ.

每个(适用的)事件都由多个投影使用,这些投影可以创建或更新相应的实体.

这样的投影目前看起来像这样:

public async Task HandleAsync(ItemPlacedIntoStock @event)
{
    var bookingList = new BookingList();
    bookingList.Date = @event.Date;
    bookingList.DeltaItemQuantity = @event.Quantity;
    bookingList.IncomingItemQuantity = @event.Quantity;
    bookingList.OutgoingItemQuantity = 0;
    bookingList.Item = @event.Item;
    bookingList.Location = @event.Location;
    bookingList.Warehouse = @event.Warehouse;

    using (var repository = new BookingListRepository())
    {
        repository.Add(bookingList);
        await repository.Save();
    }
}
Run Code Online (Sandbox Code Playgroud)

这不是很好的表现,很可能是因为我调用DbContext.SaveChanges()了这个IRepository.Save()方法.每个活动一个.

我接下来应该探索哪些选择?我不想花几天时间追逐那些可能只是稍微好一点的想法.

我目前看到以下选项:

  • 坚持使用EF,但只要投影在后面运行,就可以批处理事件(即每X次事件的新/保存上下文).
  • 尝试执行更多低级SQL,例如使用ADO.NET.
  • 不要使用SQL来存储投影(即使用NoSQL)

我希望看到数百万个事件,因为我们计划采用大型遗留应用程序并以事件的形式迁移数据.新的预测也会经常添加,因此处理速度是一个实际问题.

基准:

  • 当前的解决方案(EF,在每个事件之后保存)每秒处理~200个事件(每个投影).它不直接与活动投影的数量成比例(即N个投影处理小于N*200个事件/秒).
  • 当预测没有保存上下文时,事件/秒的数量略有增加(小于两倍)
  • 当投影没有做任何事情(单一返回语句)时,我的原型管道的处理速度是全局~30,000事件/秒

更新的基准

  • 通过ADO.NET进行单线程插入TableAdapter(每次迭代时都是新的DataSet和新的TableAdapter):~2.500次插入/秒.没有使用投影管道进行测试,而是单独测试
  • 通过ADO.NET的单线程插入TableAdapter,SELECT插入后不插入:~3000插入/秒
    • TableAdapter10.84行的单线程ADO.NET …

.net c# rdbms projection event-sourcing

6
推荐指数
1
解决办法
941
查看次数

事件源:使投影中的关系不规范

我正在研究CQRS / ES体系结构。我们将多个异步投影并行运行到读取存储中,因为某些投影可能比其他投影慢得多,并且我们希望与写入端保持更多同步,以实现更快的投影。

我正在尝试了解有关如何生成读取模型以及可能需要进行多少数据重复的方法。

让我们以带有物料的订单作为简化示例。一个订单可以有多个项目,每个项目都有一个名称。项目和订单是单独的汇总。

我可以尝试以更规范的方式保存读取的模型,在该模型中,我为每个项目创建实体或文档并订购,然后对其进行引用-或者我可能想以更规范化的方式在有订单的情况下保存它其中包含项目。

归一化

{
  Id: Order1,
  Items: [Item1, Item2]
}

{
  Id: Item1,
  Name: "Foosaver 9000"
}

{
  Id: Item2,
  Name: "Foosaver 7500"
}
Run Code Online (Sandbox Code Playgroud)

使用更规范的格式将允许单个投影处理影响/影响物品和订单的事件并更新相应的对象。这也意味着项目名称的任何更改都会影响所有订单。例如,客户可能会收到与相应发票不同的其他物品的交货单(显然,该模型可能不够好,并导致我们面临与非规范化相同的问题...)

非正规化

{
  Id: Order1,
  Items: [
    {Id: Item1, Name: "Foosaver 9000"},
    {Id: Item2, Name: "Foosaver 7500"},
  ]
}
Run Code Online (Sandbox Code Playgroud)

但是,反规范化将需要一些可以在其中查找当前相关数据的源(例如项目)。这意味着我要么必须传输事件中可能需要的所有信息,要么必须跟踪为非规范化而获取的数据。这也意味着我可能需要为每个投影执行一次操作(即,我可能需要一个非规范化的ItemForOrder以及一个非规范化的ItemForSomethingElse),它们都只包含每个非规范化实体或文档所需的最基本的属性(无论它们是什么时候)创建或修改)。

如果我要在读取存储中共享相同的物料,则最终可能会从不同的时间点混合物料定义,因为物料和订单的预测可能不会以相同的速度运行。在最坏的情况下,项目的投影可能尚未创建我需要为其属性来源的项目。

通常,在处理事件流中的关系时我有什么方法?


更新2016-06-17

目前,我正在通过针对每个非规范化读取模型及其相关数据运行单个投影来解决此问题。如果我有多个必须共享相同相关数据的读取模型,那么我可能会将它们放在同一投影中,以避免重复查找所需的相同相关数据。

这些相关的模型甚至可能已被标准化,优化,但是我必须访问它们。我的投影是唯一读取和写入它们的东西,因此我确切地知道如何读取它们。

// related data 
public class Item 
{
  public Guid Id {get; set;}
  public string Name {get; set;}
  /* and whatever else …
Run Code Online (Sandbox Code Playgroud)

projection denormalization cqrs event-sourcing

6
推荐指数
1
解决办法
1210
查看次数

Unity C#在围绕移动轴旋转的目标上射击抛射物

我正在开发一个3D太空游戏,其中相机处于恒定的2D(自上而下)状态.我能够在以给定速度移动的目标上发射速度的射弹,并且每次击中它.大!那么如果那个目标在父母身边有一个角速度呢?我注意到如果目标有一个旋转的父对象,我的投影不正确,因为它没有考虑角速度.

我的初始代码是围绕以下假设构建的:

Position_target + Velocity_target * t = Position_shooter + Velocity_shooter * t + Bulletspeed * t
Run Code Online (Sandbox Code Playgroud)

我认为射手是静止的(或可能是移动的)并需要发射一个恒定大小的子弹.

我将上述内容简化为此

Delta_Position = Position_target - Position_shooter
Delta_Velocity = Velocity_target - Velocity_shooter

Delta_Position + Delta_Velocity * t = BulletSpeed * t
Run Code Online (Sandbox Code Playgroud)

平方双方我得到一个二次方程式,我可以求解给定的行列式结果或零.这很完美.我返回值,然后将目标的位置和当前速度投射到那个t,然后我有炮塔脚本,以给定的角速度朝着该点旋转.如果炮塔说它在所有轴上观察到的点在1%以内,它会以速度射击子弹,如果目标没有改变其航向或速度,它会100%命中.

我开始在我的船只/小行星上添加组件,这些组件是父对象的子项,就像连接到炮塔本身为目标的船只的炮塔.如果船围绕轴旋转(例如Y轴)并且炮塔不在x = 0且z = 0,则我的投影不再起作用.我认为使用r*sin(theta + omega*t)作为X位置的角速度分量和使用Z位置的r*cos(theta + omega*t)可以起作用.Theta是当前旋转(相对于世界坐标),omega是围绕y轴的eulerAngle旋转.

我很快就意识到这只适用于围绕y轴旋转,我不能将sin置于二次方程式中,因为我无法从中提取t因此我无法真正适当地投影.我尝试使用双曲线,但情况相同.我可以创建一个任意的t,假设t = 2,并计算对象在2秒内的位置.但我正在努力寻找一种方法来实现子弹速度投射.

Position_targetparent + Velocity_targetparent * t + [ANGULAR VELOCITY COMPONENT] = Position_shooter + Velocity_shooter * t + Bulletspeed * t

Delta_Position_X + Delta_Velocity_X * t + S * t = …
Run Code Online (Sandbox Code Playgroud)

c# physics projection kinematics unity-game-engine

6
推荐指数
1
解决办法
271
查看次数

聚合时如何自动添加除一个字段之外的所有字段?

我有一个 mongodb 集合,其中包含具有多个属性(可能很多)的对象。其中之一是另一种对象类型的数组,并且该类型具有布尔属性StateChanged

我想要进行一个查询,返回该集合中的所有记录,并过滤数组以仅获取带有StateChanged = true.

这是我已经做过的:

db.getCollection('Cycles').aggregate([
    {
        $project: {
            _id: 0,
            // Here I could add Field1: 1, Field2: 1,...
            'Subcycles' : {
                $filter : {
                    input: '$Subcycles',
                    as : 'sub',
                    cond: { $eq: ['$$sub.StateChanged',true]}
                }
            }
        }
    }
])
Run Code Online (Sandbox Code Playgroud)

然而,这只给我带来了“Subcycles”系列。我想要的是在根文档中包含其他字段。

我可以在投影中手动指定它们(例如 Field1: 1、Field2: 1,...),但由于可能有很多字段,我想知道是否存在一种方法可以自动将它们全部包含在内。

提前致谢 !

projection mongodb mongodb-query aggregation-framework

6
推荐指数
1
解决办法
2631
查看次数

如何以交互方式更改 cartopy 投影的中心?

有没有办法改进这个交互式 matplotlib/cartopy 脚本的渲染?

请先安装 ipympl https://github.com/matplotlib/ipympl

我还没有找到如何在不实例化新图形的情况下更改中心经度和纬度。

当单击鼠标左键并选择新的投影中心时,此脚本缺乏流动性。我正在寻找https://twojs.org/examples/misc_controls_trackball中的轨迹球行为。

欢迎任何帮助/建议。

%matplotlib widget

import numpy as np
import matplotlib.pyplot as plt
import cartopy
import cartopy.crs as ccrs

fig = plt.figure(figsize=(10,6), layout='constrained')

proj0 = ccrs.PlateCarree()
proj1 = ccrs.Orthographic(0, 80)

ax1 = fig.add_subplot(1, 1, 1, projection=proj1)
ax1.coastlines()
ax1.gridlines(xlocs=np.arange(-180,180,10), ylocs=np.arange(-80,90,10))
ax1.set_global()

def onpress(event):
    global proj1
    if event.button == 1:
        lon, lat = proj0.transform_point(event.xdata, event.ydata, src_crs=proj1)
        proj1 = ccrs.Orthographic(lon, lat)
        ax1 = fig.add_subplot(1, 1, 1, projection=proj1)
        ax1.coastlines()
        ax1.gridlines(xlocs=np.arange(-180,180,10), ylocs=np.arange(-80,90,10))
        ax1.set_global()
        plt.draw()

fig.canvas.mpl_connect('button_press_event', onpress)

plt.show()

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

interactive projection matplotlib cartopy

6
推荐指数
0
解决办法
406
查看次数