我的桌子是
create_table :infomaps do |t|
t.string :name_station
t.string :name_location
t.integer :waterlevel
t.integer :rain
t.integer :water_sealevel
t.integer :tropical_level
t.integer :bank_level
t.string :river_name
t.string :place
t.st_point :lonlat, geographic: true
t.integer :time
t.timestamps null: false
end
我想使用以下示例代码:
SELECT name FROM nyc_streets WHERE ST_DWithin(
geom,
ST_GeomFromText('POINT(583571 4506714)',26918),
10
);
预期结果:
name:Wall St, Broad St and Nassau St
但是当尝试在轨道上的ruby中这样做时,像这样:
@result = Infomap.find_by_sql("SELECT name_station FROM infomaps WHERE ST_DWithin(lonlat,
ST_GeomFromText('POINT(20 100)',26918),
100); ")
我收到此错误:
PG::InvalidParameterValue: ERROR: Only lon/lat coordinate systems are supported in geography. : SELECT name_station FROM infomaps WHERE ST_DWithin(lonlat, ST_GeomFromText('POINT(20 100)',26918), 100);
如何为ST_DWithin解决此InvalidParameterValue
错误?
答案 0 :(得分:0)
您正在混合使用if(values){
var first=values.first;
var second=values.second;
var third=values.third;
var four=values.four;
var five=values.five;
var six=values.six;
var seven=values.seven;
var eight=values.eight;
var nine=values.nine;
var ten=values.ten;
if(first){
userData.push(first);
}
if(second){
userData.push(second);
}
if(third){
userData.push(third);
}
if(four){
userData.push(four);
}
if(five){
userData.push(five);
}
if(six){
userData.push(six);
}
if(seven){
userData.push(seven);
}
if(eight){
userData.push(eight);
}
if(nine){
userData.push(nine);
}
if(ten){
userData.push(ten);
}
console.log(userData);
和geometry
类型。有关更多背景信息,请参阅此PostGIS FAQ,并链接到其他更详细的讨论。
使用ST_DWithin时,两个参数必须属于同一类型。在同一投影坐标系中geography
(想想lon / lat)或geography
。
请注意,您可以使用快捷geometry
语法将geometry
类型转换为geography
。 e.g。
::geography
如果这不起作用,请尝试将几何点明确转换为EPSG代码4326,例如
SELECT name_station FROM infomaps
WHERE ST_DWithin(
lonlat::geography,
ST_GeomFromText('POINT(20 100)',26918)::geography,
100);
或者,将您的lonlat点转换为与SELECT name_station FROM infomaps
WHERE ST_DWithin(
lonlat::geography,
ST_Transform(ST_GeomFromText('POINT(20 100)', 26918), 4326)::geography,
100);
点相同的投影坐标参考系统,计算速度应该更快一些(尽管根据您的使用情况可能会忽略不计):
geometry