试图用SQL创建热图,但我的空间数据有问题
我正在尝试创建一个各州客户订单的热图。我将学习本教程: 但是,由于某些原因,这些点没有到达正确的位置 我的桌子上坐满了顾客以及他们所在的城市和州。为了得到每个城市的经纬度,我从这里下载了一个数据库 然后,我将该数据库与我的客户信息连接起来,以获得每个客户的经度和纬度。然后我将其映射到空间分配 我的问题是:试图用SQL创建热图,但我的空间数据有问题,sql,sql-server,geospatial,spatial-query,Sql,Sql Server,Geospatial,Spatial Query,我正在尝试创建一个各州客户订单的热图。我将学习本教程: 但是,由于某些原因,这些点没有到达正确的位置 我的桌子上坐满了顾客以及他们所在的城市和州。为了得到每个城市的经纬度,我从这里下载了一个数据库 然后,我将该数据库与我的客户信息连接起来,以获得每个客户的经度和纬度。然后我将其映射到空间分配 我的问题是: SELECT TOP 100 --* --,CAST('POINT( ' + right(left(LAT, len(LAT) -1),len(LAT) -2) + '
SELECT TOP 100
--*
--,CAST('POINT( ' + right(left(LAT, len(LAT) -1),len(LAT) -2) + ' ' + right(left(LNG, len(LNG) -1),len(LNG) -2) + ' )' as geometry) AS SpatialLocation
CSS.City
,CSS.State
,CSS.TotalCustomerValue
,CSS.TotalOrders
,CSS.OrderDensityPercent
,geography::STPointFromText('POINT(' + CAST(right(left(LAT, len(LAT) -1),len(LAT) -2) AS VARCHAR(20)) + ' ' + CAST(right(left(LAT, len(LAT) -1),len(LAT) -2) AS VARCHAR(20)) + ')', 4326) SpatialLocation2
,CSS.BrandNewCustomers
,CSS.RecurringCustomers
,CSS.ReactivatedCustomers
FROM
(SELECT DISTINCT
--*
LTRIM(RTRIM(cs.City)) City
,LTRIM(RTRIM(cs.State)) State
,RIGHT(LEFT(lat, len(lat) -1),len(lat) -2) lat -- the lat and long are wrapped in quotes
,RIGHT(LEFT(lng, len(lng) -1),len(lng) -2) lng -- so i have to do the left right to get rid of them.
,SUM(cs.TotalCustomerValueOverBase) over (partition by cs.City, cs.State) TotalCustomerValue
,SUM(cs.TotalOrdersBase) over (partition by cs.City, cs.State) TotalOrders
--,SUM(cs.TotalQuantityOverBase) over (partition by cs.City, cs.State) TotalQuantity
,right(left(population_proper, len(population_proper) -1),len(population_proper) -2) population_proper
,CAST(
SUM(cs.TotalOrdersBase) over (partition by cs.City, cs.State)
/
NULLIF(convert(float, right(left(population_proper, len(population_proper) -1),len(population_proper) -2)),0)*100
as decimal(10,2)) AS OrderDensityPercent
,SUM(cs.BrandNewCustomer) over (partition by cs.City, cs.State) BrandNewCustomers
,SUM(cs.RecurringCustomer) over (partition by cs.City, cs.State) RecurringCustomers
,SUM(cs.ReactivatedCustomer) over (partition by cs.City, cs.State) ReactivatedCustomers
FROM
Customers -- This table gives full customer information per customer.
LEFT JOIN
[A1Warehouse].[dbo].[uscities] Ci ON cs.City = right(left(ci.city_ascii, len(ci.city_ascii) -1),len(ci.city_ascii) -2) and cs.State = right(left(ci.state_id, len(ci.state_id) -1),len(ci.state_id) -2)
WHERE
LAT IS NOT NULL AND LNG IS NOT NULL) CSS
ORDER BY
TotalCustomerValue DESC
以下是一个示例结果:
City State Amount Orders PopDensity SpatialLocation
Brooklyn NY $663 8535 0.32 0xE6100000010CCDCCCCCCCCCCE43FCDCCCCCCCCCCE43F
MIAMI FL $529 7042 1.52 0xE6100000010C894160E5D0221740894160E5D0221740
Bronx NY $443 5901 0.41 0xE6100000010C333333333333EB3F333333333333EB3F
我怎么知道哪里出了问题?空间位置是否错误,或者SSR是否显示错误?我检查了一些客户的经纬度坐标,它们似乎是正确的,我不知道如何检查它们 开放地理空间联盟(OGC)的著名文本(WKT)表示,格式为(x,y)。地理坐标通常由Lat/Long指定,但在这两者之间,X是经度,Y是纬度。 因此,在指定纬度和正确的地理位置::STPointFromText参数顺序之前,应首先指定经度
...
,geography::STPointFromText('POINT(' + CAST(right(left(Lng, len(Lng) -1),len(Lng) -2) AS VARCHAR(20)) + ' ' + CAST(right(left(LAT, len(LAT) -1),len(LAT) -2) AS VARCHAR(20)) + ')', 4326) SpatialLocation2
...
问题是我在纬度和经度上做了左,右的事情,结果把事情搞得一团糟。这样做一次是正确的,因为我需要删除它周围的引号,但我在创建地理字段时做了第二次,这是删除格式正确的位置点的第一个和最后一个字符 我试过了,但还是不行。这是我尝试的第一件事,切换lat和ln。它只是以相反的方式使地图不正确。