Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xplot_server
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
digit_plot
xplot_server
Commits
990ba963
Commit
990ba963
authored
Nov 19, 2024
by
dliangx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add get90_cross_area
parent
f8941d1b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
85 additions
and
6 deletions
+85
-6
geo/area.go
+39
-0
handler/http_handler.go
+32
-6
model/models.go
+13
-0
route/route.go
+1
-0
No files found.
geo/area.go
View file @
990ba963
...
...
@@ -554,3 +554,42 @@ func CheckAreasCross(obj1, obj2 model.GeoJson) (bool, error) {
return
intersects
,
nil
}
func
Get90CrossOptArea
(
obj
model
.
Geometrys
)
(
string
,
error
)
{
db
,
err
:=
connectDB
()
if
err
!=
nil
{
return
""
,
fmt
.
Errorf
(
"database connection failed: %v"
,
err
)
}
defer
db
.
Close
()
jsonstr
,
_
:=
json
.
Marshal
(
obj
.
Geometry
)
wkt
,
err
:=
util
.
TransGeoToWKT
(
string
(
jsonstr
))
if
err
!=
nil
{
return
""
,
err
}
var
results
string
query
:=
`
SELECT
p.id
FROM
opt_areas p
WHERE
ST_Overlaps(ST_GeomFromText($1, 4326), p.geometry)
AND (100 * ST_Area(ST_Intersection(ST_GeomFromText($1, 4326), p.geometry)) / ST_Area(ST_GeomFromText($1, 4326))) > 90
`
rows
,
err
:=
db
.
Query
(
query
,
wkt
)
if
err
!=
nil
{
return
""
,
err
}
defer
rows
.
Close
()
for
rows
.
Next
()
{
var
res
string
rows
.
Scan
(
&
res
)
results
+=
res
+
","
}
return
results
,
err
}
handler/http_handler.go
View file @
990ba963
...
...
@@ -181,28 +181,32 @@ func FindRelatedGeometry(ctx context.Context, c *app.RequestContext) {
func
CalcAreasCenter
(
ctx
context
.
Context
,
c
*
app
.
RequestContext
)
{
// 获取 ids 参数
idsStr
:=
c
.
Query
(
"ids"
)
if
idsStr
==
""
{
var
req
model
.
CalcIds
err
:=
c
.
BindAndValidate
(
&
req
)
if
err
!=
nil
{
c
.
JSON
(
consts
.
StatusBadRequest
,
utils
.
H
{
"message"
:
"calc ids required"
})
return
}
if
req
.
IDS
==
""
{
c
.
JSON
(
consts
.
StatusBadRequest
,
utils
.
H
{
"code"
:
10001
,
"message"
:
"ids parameter required"
})
return
}
// 获取 opt 参数
opt
,
err
:=
strconv
.
Atoi
(
c
.
Query
(
"opt"
))
if
err
!=
nil
{
if
req
.
Opt
==
0
{
c
.
JSON
(
consts
.
StatusBadRequest
,
utils
.
H
{
"code"
:
10003
,
"message"
:
"opt parameter required"
})
return
}
// 分割 ids 字符串为数组
ids
:=
strings
.
Split
(
idsStr
,
","
)
ids
:=
strings
.
Split
(
req
.
IDS
,
","
)
if
len
(
ids
)
==
0
{
c
.
JSON
(
consts
.
StatusBadRequest
,
utils
.
H
{
"code"
:
10001
,
"message"
:
"invalid ids format"
})
return
}
// 调用 geo.CalcAreasCenter 计算中心点,传入 opt 参数
lat
,
lon
,
err
:=
geo
.
CalcAreasCenter
(
ids
,
o
pt
)
lat
,
lon
,
err
:=
geo
.
CalcAreasCenter
(
ids
,
req
.
O
pt
)
if
err
!=
nil
{
c
.
JSON
(
consts
.
StatusOK
,
utils
.
H
{
"code"
:
10012
,
"message"
:
err
.
Error
()})
return
...
...
@@ -234,3 +238,25 @@ func CheckTwoOptAreaIsCross(ctx context.Context, c *app.RequestContext) {
c
.
JSON
(
consts
.
StatusOK
,
utils
.
H
{
"code"
:
200
,
"data"
:
res
})
}
func
Get90CrossArea
(
ctx
context
.
Context
,
c
*
app
.
RequestContext
)
{
var
req
[]
model
.
Geometrys
var
resp
[]
model
.
RelatedArea
err
:=
c
.
BindAndValidate
(
&
req
)
if
err
!=
nil
{
c
.
JSON
(
consts
.
StatusBadRequest
,
utils
.
H
{
"message"
:
"point required"
})
return
}
for
_
,
v
:=
range
req
{
res
,
err
:=
geo
.
Get90CrossOptArea
(
v
)
if
err
!=
nil
{
c
.
JSON
(
consts
.
StatusOK
,
utils
.
H
{
"code"
:
10010
,
"message"
:
err
.
Error
()})
return
}
var
oresp
model
.
RelatedArea
oresp
.
Areas
=
res
resp
=
append
(
resp
,
oresp
)
}
c
.
JSON
(
consts
.
StatusOK
,
utils
.
H
{
"code"
:
200
,
"data"
:
resp
})
}
model/models.go
View file @
990ba963
...
...
@@ -30,3 +30,16 @@ type GeoJson struct {
Properties
map
[
string
]
interface
{}
`json:"properties"`
Geometry
*
geojson
.
Geometry
`json:"geometry"`
}
type
CalcIds
struct
{
IDS
string
`json:"ids"`
Opt
int
`json:"opt"`
}
type
RelatedArea
struct
{
Areas
string
`json:"ids"`
}
type
Geometrys
struct
{
Geometry
*
geojson
.
Geometry
`json:"geometry"`
}
route/route.go
View file @
990ba963
...
...
@@ -13,4 +13,5 @@ func Register(r *server.Hertz) {
r
.
POST
(
"/geometry/related"
,
handler
.
FindRelatedGeometry
)
r
.
POST
(
"/geometry/check"
,
handler
.
CheckTwoOptAreaIsCross
)
r
.
POST
(
"/geometry/calc_center"
,
handler
.
CalcAreasCenter
)
r
.
POST
(
"/geometry/get90_cross_area"
,
handler
.
Get90CrossArea
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment