You can always serialize them as WKB. I believe it is fast enough to
restore the Geometry from it.
Dimi.
On Tue, Sep 10, 2013 at 2:44 PM, André Salvati <[email protected]>wrote:
> Hi Martin,
>
> following the answers of your questions.
>
> Just one more question: is it possible to turn PreparedGeometry a
> Serializable object??
>
> I'm trying to cache these objects, because they are expensive to be
> created on every request.
>
> Thanks.
>
>
>
> 2013/9/3 Martin Davis <[email protected]>
>
>> Thanks, Andre. As Stefan says, pretty clear which is faster.
>>
>>
> Just to be precise, is the number of points the number in the input
>> linestring?
>>
>
> Yes.
>
> For the contains methods you buffered the linestring by the distance
>> tolerance?
>>
>
> Yes, I've tested with the same distance for these 3 methods. The distance
> was 100 (meters).
>
> How were the points distributed - randomly, or in a more regular pattern?
>>
>
> In a regular pattern. They were representing the buses garages.
>
>>
>>
>> On Mon, Sep 2, 2013 at 6:08 AM, André Salvati
>> <[email protected]>wrote:
>>
>>> Hi,
>>>
>>> see bellow a comparison between methods that we've discussed. I've had
>>> to put calls inside a loop with 10000 requests to get elapsed times with
>>> more than 1 ms. These data were obtained from F2 instances from Google App
>>> Engine (1200MHz processors and 256MB of memory) and were inside the context
>>> of our app.
>>>
>>> Number of points -> 552
>>> containsProperly(), from a PreparedGeometry (10000 requests) -> 8 ms
>>> isWithinDistance(), from a LineString (10000 requests) -> 282 ms
>>> contains(), from a Geometry (10000 requests) -> 4984 ms
>>>
>>> Number of points -> 552
>>> containsProperly(), from a PreparedGeometry (10000 requests) -> 12 ms
>>> isWithinDistance(), from a LineString (10000 requests) -> 459 ms
>>> contains(), from a Geometry (10000 requests) -> 4591 ms
>>>
>>> Number of points -> 367
>>> containsProperly(), from a PreparedGeometry (10000 requests) -> 3 ms
>>> isWithinDistance(), from a LineString (10000 requests) -> 472 ms
>>> contains(), from a Geometry (10000 requests) -> 2882 ms
>>>
>>> Number of points -> 219
>>> containsProperly(), from a PreparedGeometry (10000 requests) -> 8 ms
>>> isWithinDistance(), from a LineString (10000 requests) -> 89 ms
>>> contains(), from a Geometry (10000 requests) -> 1687 ms
>>>
>>> Number of points -> 254
>>> containsProperly(), from a PreparedGeometry (10000 requests) -> 13 ms
>>> isWithinDistance(), from a LineString (10000 requests) -> 132 ms
>>> contains(), from a Geometry (10000 requests) -> 1796 ms
>>>
>>>
>>>
>>>
>>> 2013/8/26 André Fernando Salvati <[email protected]>
>>>
>>>>
>>>> Ok Martin,
>>>>
>>>> I'm going to do some tests and share the results.
>>>>
>>>> Thank you all for your comments and ideas.
>>>>
>>>>
>>>> 2013/8/26 Martin Davis <[email protected]>
>>>>
>>>>> This is a very interesting question. Stefan and Michael have
>>>>> provided some useful comments. Here's a little more information about the
>>>>> issue, focussing on what's in JTS today, and what could be added to
>>>>> improve
>>>>> the story.
>>>>>
>>>>> As you point out, there are two general approaches to this
>>>>> computation:
>>>>>
>>>>> 1) buffer the LIneString by the query distance and compute "contains"
>>>>> (or actually "containsProperly", which is a simpler predicate)
>>>>> 2) Compute the isWithinDistance predicate on the LineString
>>>>>
>>>>> It's hard to say which is faster *now* in JTS, and even harder to say
>>>>> which is theoretically the fastest. You'll really have to try both and
>>>>> see. Here's what's in JTS now:
>>>>>
>>>>> For #1, you should use PreparedGeometry to preprocess the buffer
>>>>> polygon. My guess is that the cost of computing the initial buffer is
>>>>> totally dominated by the query time. Then use the "cointainsProperly"
>>>>> predicate. This will utilized indexing to optimize the Point-In-Polygon
>>>>> computation. It is thread-safe now in trunk, so you may want to build from
>>>>> trunk and use that code.
>>>>>
>>>>> For #2, the current JTS isWithinDistance is not fully optimized for
>>>>> large LineStrings, since it uses a brute-force approach. Still, if the
>>>>> input LineString has a fairly low number of vertices it may still be
>>>>> faster
>>>>> than #1. As Michael pointed out, this can be improve by indexing the
>>>>> LineString segments using an STRtree and using the nearestNeighbour method
>>>>> to do a fast NN query. The intention is to implement this in JTS as new
>>>>> methods on the PreparedGeometry class - most of the code is done, but it
>>>>> still needs to be packaged for production.
>>>>>
>>>>> It would be very interesting to hear which of these methods turns out
>>>>> to be the fasted in your case.
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Aug 26, 2013 at 10:21 AM, André Salvati <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I'm a beginner with JTS and this is my first post here.
>>>>>>
>>>>>> We've been working with geofences for a vehicle tracking app and I
>>>>>> would like to know what solution could give me a lower CPU consumption.
>>>>>>
>>>>>> 1) Calculate and store a Buffered Area (100 meters) from a LineString
>>>>>> object. Run 4 million times if my vehicle positions are inside or not
>>>>>> that
>>>>>> precalculated with contains() method.
>>>>>>
>>>>>> 2) Run 4 million times isWithinDistance() method from LineString for
>>>>>> each position.
>>>>>>
>>>>>> Are there another options?
>>>>>>
>>>>>> Thanks.
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------------------------
>>>>>> Introducing Performance Central, a new site from SourceForge and
>>>>>> AppDynamics. Performance Central is your source for news, insights,
>>>>>> analysis and resources for efficient Application Performance
>>>>>> Management.
>>>>>> Visit us today!
>>>>>>
>>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
>>>>>> _______________________________________________
>>>>>> Jts-topo-suite-user mailing list
>>>>>> [email protected]
>>>>>> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Introducing Performance Central, a new site from SourceForge and
>>>>> AppDynamics. Performance Central is your source for news, insights,
>>>>> analysis and resources for efficient Application Performance
>>>>> Management.
>>>>> Visit us today!
>>>>>
>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=48897511&iu=/4140/ostg.clktrk
>>>>> _______________________________________________
>>>>> Jts-topo-suite-user mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user
>>>>>
>>>>>
>>>>
>>>
>>>
>>> ------------------------------------------------------------------------------
>>> Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
>>> Discover the easy way to master current and previous Microsoft
>>> technologies
>>> and advance your career. Get an incredible 1,500+ hours of step-by-step
>>> tutorial videos with LearnDevNow. Subscribe today and save!
>>>
>>> http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk
>>> _______________________________________________
>>> Jts-topo-suite-user mailing list
>>> [email protected]
>>> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user
>>>
>>>
>>
>>
>> ------------------------------------------------------------------------------
>> Learn the latest--Visual Studio 2012, SharePoint 2013, SQL 2012, more!
>> Discover the easy way to master current and previous Microsoft
>> technologies
>> and advance your career. Get an incredible 1,500+ hours of step-by-step
>> tutorial videos with LearnDevNow. Subscribe today and save!
>>
>> http://pubads.g.doubleclick.net/gampad/clk?id=58040911&iu=/4140/ostg.clktrk
>> _______________________________________________
>> Jts-topo-suite-user mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user
>>
>>
>
>
> ------------------------------------------------------------------------------
> How ServiceNow helps IT people transform IT departments:
> 1. Consolidate legacy IT systems to a single system of record for IT
> 2. Standardize and globalize service processes across IT
> 3. Implement zero-touch automation to replace manual, redundant tasks
> http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk
> _______________________________________________
> Jts-topo-suite-user mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user
>
>
------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. Consolidate legacy IT systems to a single system of record for IT
2. Standardize and globalize service processes across IT
3. Implement zero-touch automation to replace manual, redundant tasks
http://pubads.g.doubleclick.net/gampad/clk?id=51271111&iu=/4140/ostg.clktrk
_______________________________________________
Jts-topo-suite-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jts-topo-suite-user