笛卡尔坐标 - 选择落在区域内的坐标

时间:2015-05-27 06:22:31

标签: sql sql-server google-maps sql-server-2012

我正在处理一个问题,我必须将室内笛卡尔坐标映射到某个区域。

问题有多个区域,分别用坐标zone1, zone 2, zone 3 and zone 4(x1,y1), (x2,y2) (x3,y3) and (x4,y4)。我有一个庞大的访客数据集来访问该地区,并有个人坐标。任务是将访问者映射到区域。如果访问者位于特定区域半径的10 mtrs范围内,则访问者位于该区域内。

因此,如果访问者访问者A(a1,b1),则Zone A(x1,y1)位于10 mtrs。坐标距离x1,y1.

的半径为__block ACAccount * facebookAccount; ACAccountStore *accountStore = [[ACAccountStore alloc] init]; NSDictionary *emailReadPermisson = @{ ACFacebookAppIdKey : @"YOUR_API_KEY", ACFacebookPermissionsKey : @[@"email"], ACFacebookAudienceKey : ACFacebookAudienceEveryone, }; NSDictionary *publishWritePermisson = @{ ACFacebookAppIdKey : @"YOUR_API_KEY", ACFacebookPermissionsKey : @[@"publish_actions"], ACFacebookAudienceKey : ACFacebookAudienceEveryone }; ACAccountType *facebookAccountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook]; //Request for Read permission [accountStore requestAccessToAccountsWithType:facebookAccountType options:emailReadPermisson completion:^(BOOL granted, NSError *error) {if(granted){ // Enter your code}];

所以,有几个问题:

  1. 用于存储坐标的数据类型。将浮动工作。一世  看到了空间坐标的讨论,不确定它是什么意思。

  2. 另外,当我进行映射时,是否需要在ETL中编写代码?或者做  我需要使用任何其他编程语言

  3. 最后,如何编码上述问题

1 个答案:

答案 0 :(得分:1)

以下是我的表现。我们假设您有一个区域表,每个区域有一行。我会这样定义:

create table dbo.Zones (
   ZoneID int identity not null,
   constraint [PK_Zone] primary key clustered (ZoneID),
   ZoneGeometry geometry
);

您可以像这样填充它:

    insert into dbo.Zones 
      (ZoneGeometry)
    values 
      (geometry::STGeomFromText('POLYGON((1 1, 1 2, 2 2, 2 1, 1 1))', 0));

同样适用于访问者:

create table dbo.Visitors (
   VisitorID int identity not null,
      constraint [PK_Visitors] primary key clustered (VisitorID),
   Location geometry
);

insert into dbo.Visitors 
   (Location)
values
   (geometry::STPointFromText('POINT (1.5 1)', 0));

然后找出每位访客所在的区域:

select *
from dbo.Visitors as v
left join dbo.Zones as z
   on z.ZoneGeometry.STBuffer(10).STContains(v.Location) = 1;