1、geo是Polygon数据,list是String类型,其中存储的是Polygon数据,例如(116.0 22.5,116.0 26.0,123.0 24.0,116.0 22.5)。下面是for循环生成的SQL。
String dataSql = "select * from ["+ name +"] r where r.geo.MakeValid().STIntersects(geometry::STGeomFromText('" ;
for (int i = 0; i < list.size(); i++) {
if (i == 0) {
dataSql += " POLYGON((" + list.get(i) + "))',0)";
}else {
dataSql = dataSql + ".STUnion(geometry::STGeomFromText('POLYGON((" + list.get(i) + "))', 0))";
}
}
dataSql += ") = 1";
2、SQL查询,多个Polygon使用STUnion联合
SELECT
*
FROM
[1:5万区域地质调查] r
WHERE
r.geo.MakeValid ( ).STIntersects ( geometry :: STGeomFromText ( ' POLYGON((115.0 22.0,115.0 25.0,120.0 25.0,120.0 24.0,118.0 23.0,115.0 22.0))', 0 )
.STUnion(geometry::STGeomFromText('POLYGON((116.0 22.5,116.0 26.0,123.0 24.0,116.0 22.5))', 0))
) = 1