Foxtable(狐表)用户栏目专家坐堂 → [求助]如何实现筛选临近坐标?


  共有4045人关注过本帖树形打印复制链接

主题:[求助]如何实现筛选临近坐标?

帅哥哟,离线,有人找我吗?
jj5864810
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:15 积分:165 威望:0 精华:0 注册:2019/4/2 12:14:00
[求助]如何实现筛选临近坐标?  发帖心情 Post By:2019/4/2 15:01:00 [只看该作者]

纯新手,求问怎么筛选列里面的临近坐标,比如满足 (x±50 或者y±50) 则筛选出来

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/2 15:05:00 [只看该作者]


 回到顶部
客人(116.1.*.*)
  3楼


  发帖心情 Post By:2019/4/2 15:48:00 [只看该作者]

我有一列全是坐标的,不会上传图片,我复制过来吧
  坐标
(365,455)
(25,155)
(355,225)
(175,65)
(205,225)
(265,285)
(135,185)
(225,425)
(95,255)
(455,145)
(85,135)
(375,345)
(205,45)
(325,245)
(445,155)
(415,285)
(285,245)
(475,75)
(345,195)
(275,345)
(145,225)
(255,335)
(385,195)
(375,175)
(375,185)
(255,465)
(135,175)
(125,175)
(165,75)
  那列是这样的,求问能不能实现:比如我输入个基础坐标(200,200),然后根据列里面的坐标距离我输入这个的坐标的距离来筛选出临近的20个


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/2 16:26:00 [只看该作者]

参考代码

 

Dim t As Table = Tables("表A")
Dim x = 200
Dim y = 200
Dim c = 5
Dim drs = t.DataTable.Select("")
Dim ary1(drs.count-1) As Integer
Dim ary3(drs.count-1) As Double
For i As Integer = 0 To drs.count-1
    Dim dr As DataRow = drs(i)
    ary1(i) = dr("_Identify")
    Dim s = dr("第一列")
    s = s.replace("(", "").replace(")", "")
    Dim ary = s.split(",")
    If ary.length = 2 Then
        ary3(i) = Math.Sqrt((x-ary(0))^2+(y-ary(1))^2)
    Else
        ary3(i) = Math.Sqrt((x)^2+(y)^2)
    End If
Next
array.sort(ary3, ary1)
Dim str As String = ""
For i As Integer = 1 To c
    str &= ary1(i-1) & ","
Next
t.filter = "_Identify in (" & str.trim(",") & ")"


 回到顶部
帅哥哟,离线,有人找我吗?
jj5864810
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:15 积分:165 威望:0 精华:0 注册:2019/4/2 12:14:00
  发帖心情 Post By:2019/4/2 17:04:00 [只看该作者]

谢谢老师,感觉还是太深奥,您这代码是用在哪里的我都不知道,我还是去学习下吧

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/2 17:39:00 [只看该作者]


 回到顶部
帅哥哟,离线,有人找我吗?
jj5864810
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:15 积分:165 威望:0 精华:0 注册:2019/4/2 12:14:00
  发帖心情 Post By:2019/4/2 21:02:00 [只看该作者]

慢慢摸索已经有点起色了,但是还有两个问题想麻烦下.
1:按您给的参考代码,我代入执行筛选后,想改个基础坐标再次筛选,没反应,应该是筛选后那列只剩下20个了,换坐标筛选还是那20个,要怎样才能在原来的列里面重新筛选?

2:想把筛选出来的结果由近到远排序,需要怎样做?麻烦了老师

 回到顶部
帅哥哟,离线,有人找我吗?
jj5864810
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:15 积分:165 威望:0 精华:0 注册:2019/4/2 12:14:00
  发帖心情 Post By:2019/4/2 21:17:00 [只看该作者]

刚又试了下,第一个问题没事,重新筛选是可以筛选出来的,现在主要是第二个按距离排序的问题,不知道从哪里下手

 回到顶部
帅哥,在线噢!
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111376 积分:566944 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/4/2 21:18:00 [只看该作者]

取消之前的筛选:
 Tables("表A").filter = “”

如果要排序需要增加一个辅助序号列。

……
Next
Dim dict As new Dictionary(of Integer,Integer)
array.sort(ary3, ary1)
Dim str As String = ""
For i As Integer = 1 To c
    dict.Add(ary1(i-1),i)
    str &= ary1(i-1) & ","
Next
t.filter = "_Identify in (" & str.trim(",") & ")"
For Each r As Row In t.Rows
    r("序号") = dict(r("_Identify"))
Next
t.sort = "序号"

 回到顶部
帅哥哟,离线,有人找我吗?
jj5864810
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:15 积分:165 威望:0 精华:0 注册:2019/4/2 12:14:00
  发帖心情 Post By:2019/4/2 22:25:00 [只看该作者]

请问要增加的辅助序号列是不是直接增加个列,然后未筛选排序前每行1 2 3 4 5~这样排下去就行了?

另外您帮添加的代码,我这样接是对的吗?就是把原先代码end if后面的替换下

Dim t As Table = Tables("表A")
Dim x = 200
Dim y = 200
Dim c = 5
Dim drs = t.DataTable.Select("")
Dim ary1(drs.count-1) As Integer
Dim ary3(drs.count-1) As Double
For i As Integer = 0 To drs.count-1
    Dim dr As DataRow = drs(i)
    ary1(i) = dr("_Identify")
    Dim s = dr("第一列")
    s = s.replace("(", "").replace(")", "")
    Dim ary = s.split(",")
    If ary.length = 2 Then
        ary3(i) = Math.Sqrt((x-ary(0))^2+(y-ary(1))^2)
    Else
        ary3(i) = Math.Sqrt((x)^2+(y)^2)
    End If
Next
Dim dict As new Dictionary(of Integer,Integer)
array.sort(ary3, ary1)
Dim str As String = ""
For i As Integer = 1 To c
    dict.Add(ary1(i-1),i)
    str &= ary1(i-1) & ","
Next
t.filter = "_Identify in (" & str.trim(",") & ")"
For Each r As Row In t.Rows
    r("序号") = dict(r("_Identify"))
Next
t.sort = "序号"

 回到顶部
总数 11 1 2 下一页